导航:首页 > 源码编译 > 排序算法测试用例

排序算法测试用例

发布时间:2022-05-01 23:41:28

1. 请教高手!!!

1。考试难度与以前差不多。

2。没有上机考试,依然采取笔试方式。

3。与三级网络相比,就我个人认为,程序员考试相对要容易。三级网络既考笔试又考上机,且考试涉及的知识面和程序员差不多广。
但主要还是由每个人的兴趣爱好来决定。
程序员比较适合今后搞编程这行,而三级网络主要适合今后从事网络工程方面的工作。

附:

2007年程序员考试大纲

一考试说明
1.考试要求:
(1)掌握数据及其转换、数据的机内表示、算术和逻辑运算,以及相关的应用数学基础知识;
(2)理解计算机的组成以及各主要部件的性能指标;
(3)掌握操作系统、程序设计语言的基础知识;
(4)熟练掌握计算机常用办公软件的基本操作方法;
(5)熟练掌握基本数据结构和常用算法
(6)熟练掌握C程序设计语言,以及C++、Java、Visual Basic中的一种程序设计语言;
(7)熟悉数据库、网络和多媒体的基础知识;
(8)掌握软件工程的基础知识,了解软件过程基本知识、软件开发项目管理的常识;
(9)了解常用信息技术标准、安全性,以及有关法律、法规的基本知识;
(10)了解信息化、计算机应用的基础知识;
(11)正确阅读和理解计算机领域的简单英文资料。
2.通过本考试的合格人员能根据软件开发项目管理和软件工程的要求,按照程序设计规格说明书编制并调试程序,写出程序的相应文档,产生符合标准规范的、实现设计要求的、能正确可靠运行的程序;具有助理工程师(或技术员)的实际工作能力和业务水平。
3.本考试设置的科目包括:
(1)计算机硬软件基础知识,考试时间为150分钟,笔试;
(2)程序设计,考试时间为150分钟,笔试。

二、考试范围

考试科目1:计算机硬软件基础知识
1. 计算机科学基础
1.1 数制及其转换
二进制、十进制和十六进制等常用数制及其相互转换
1.2 数据的表示
数的表示(原码、反码、补码表示,整数和实数的机内表示方法,精度和溢出)
非数值表示(字符和汉字的机内表示、声音和图像的机内表示)
校验方法和校验码(奇偶校验码、海明校验码)
1.3 算术运算和逻辑运算
计算机中二进制数的运算方法
逻辑代数的基本运算和逻辑表达式的化简
1.4 数学应用
常用数值计算(矩阵、方程的近似求解、插值)
排列组合、应用统计(数据的统计分析)
1.5 常用数据结构
数组(表态数组、动态数组)、线性表、链表(单向链表、双向链表、循环链表)、队列、栈、树(二叉树、查找树)、图的定义、存储和操作
1.6 常用算法
常用的排序算法、查找算法、数值计算、字符串处理、数据压缩算法、递归算法、图的相关算法
算法与数据结构的关系,算法效率,算法设计,算法描述(流程图、伪代码、决策表)
2. 计算机系统基础知识
2.1 硬件基础知识
2.1.1 计算机系统的组成,硬件系统、软件系统及层次结构
2.1.2 计算机类型和特点
微机、工作站、服务器、大型计算机、巨型计算机
2.1.3 中央处理器CPU
算器和控制器的组成,常用的寄存器、指令系统、寻址方式、指令执行控制、处理机性能
2.1.4 主存和辅存
存储器系统
存储介质(半导体、硬盘、光盘、闪存、软盘、磁带等)
主存储器的组成、性能及基本原理
Cache的概念、虚拟存储的概念
辅存设备的类型、特性、性能和容量计算
2.1.5 I/O接口、I/O设备和通信设备
I/O接口(总线、DMA、通道、SCSI、并行口、RS232C、USB、IEEE1394)
I/O设备的类型和特性(键盘、鼠标、显示器、打印机、扫描仪、摄像头,以及各种辅存设备)
I/O设备控制方式(中断控制、DMA)
通信设备的类型和特性(Modem、集线器、交换机、中继器、路由器、网桥、网关)及其连接方法和连接介质(串行连接、并行连接,传输介质的类型和特性)
2.2 软件基础知识
2.2.1 操作系统基础知识
操作系统的类型和功能
操作系统的内核(中断控制)和进程概念
处理机管理、存储管理、设备管理、文件管理、作业管理
汉字处理
图形用户界面及其操作方法
2.2.2 程序设计语言和语言处理程序基础知识
汇编、编译、解释系统的基础知识
程序设计语言的基本成分(数据、运算、控制和传输)
过程(函数)调用
2.3 网络基础知识
网络的功能、分类、组成和拓扑结构
网络体系结构与协议(OSI/RM,TCP/IP)
常用网络设备与网络通信设备,网络操作系统基础知识和使用
Client/Server结构、Browser/Server结构
LAN基础知识
Internet基础知识
2.4 数据库基础知识
数据库管理系统的主要功能和特征
数据库模型(概念模式、外模式、内模式)
数据模型,ER图
数据操作(关系运算)
数据库语言(SQL)
数据库的主要控制功能
2.5 多媒体基础知识
多媒体基础概念,常用多媒体设备性能特征,常用多媒体文件格式类型
简单图形的绘制,图像文件的基本处理方法
音频和视频信息的应用
简单多媒体应用制作方法
2.6 系统性能指标
响应时间、吞吐量、周转时间等概念
可靠性、可维护性、可扩充性、可移植性、可用性、可重用性、安全性等概念
2.7 计算机应用基础知识和常用办公软件的操作方法
信息管理、数据处理、辅助设计、自动控制、科学计算、人工智能等概念
文字处理基础知识和常用操作方法
电子表格处理基础知识和常用操作方法
演示文稿制作方法
电子邮件处理操作方法
网页制作方法
3. 软件开发和运行维护基础知识
3.1 软件工程和项目管理基础知识
软件工程基本概念
软件开发各阶段的目标和任务
软件过程基本知识
软件工程项目管理基本知识
面向对象开发方法基础知识
软件开发工具与环境基础知识(CASE)
软件质量管理基础知识
3.2 软件需求分析、需求定义及软件基础知识
结构化分析概念(数据流图(DFD)、实体关系图(ER))
面向对象设计、结构化设计基础知识
模拟设计、代码设计、人机界面设计要点
3.3 程序设计基础知识
结构设计程序设计,程序流程图,NS图,PAD图
程序设计风格
面向对象设计基础知识、可视化程序设计基础知识
3.4 程序测试基础知识
黑盒测试、白盒测试、灰盒测试基础知识
测试工作流程
3.5 软件开发文档基础知识
3.6 软件运行和维护基础知识
软件运行基础知识
软件维护基础知识
4. 安全性基础知识
安全性基本概念
计算机病毒的防治,计算机犯罪的防范
访问控制
加密与解密基础知识
5. 标准化基础知识
标准化基本概念
国际标准、国家标准、行业标准、企业标准基础知识
代码标准、文件格式标准、安全标准、软件开发规范和文档标准基础知识
标准化机构
6. 信息化基本知识
信息化基本概念
全球信息化趋势,国家信息化战略,企业信息化战略和策略常识
有关的法律、法规要点
过程教育、电子商务、电子政务等常识
企业信息资源管理常识
7. 计算机专业英语
掌握计算机技术的基本词汇
能正确阅读和理解本领域的简单英文资料

考试科目2:程序设计
1. 内部设计
1.1 理解外部设计
1.2 功能划分和确定结构
数据流图、结构图
1.3 物理数据设计
确定数据组织方式、存储介质,设计记录格式和处理方式
1.4 详细输入输出设计
界面设计、报表设计
1.5 内部设计文档
对程序接口、程序功能、人机界面、输入输出、测试计划的描述
1.6 内部设计文档
2. 程序设计
2.1 模拟划分(原则、方法、标准)
2.2 编写程序设计文档
模块规格说明书(程序处理逻辑的描述、输入输出数据格式的描述)
测试要求说明书(测试类型和目标、测试用例、测试方法)
2.3 程序设计评审
3. 程序实现
3.1 编程
编程方法和标准
程序设计语言的使用
人工走查
程序文档化
3.2 程序测试
准备测试环境和测试工具
准备测试数据
写出测试报告
4. 程序设计语言(C语言为必选,其他语言可以任选一种)
4.1 C程序设计语言(ANSI C标准)
程序结构,语法,数据类型说明,可执行语句,函数调用,标准库函数,指针
4.2 C++程序设计语言(ANSI C++标准)
C++和面向对象程序设计,语法和程序结构,类、成员、构造函数、析构函数、模板、继承、多态
4.3 Java程序设计(Java 2)
Java和面向对象程序设计
语言机制(程序结构和语法,类、成员、构造函数、析构函数、继承、接口)
4.4 Visual Basic程序设计(Visual Basic 6.0)
用户界面设计
程序结构和语法
文件系统对象
访问数据库

2. 求一个用C+编写的题目为学生学籍信息管理系统设计,整个系统要设计为数据录入、查询,删除,排序模块,

没法传图,自己想一下怎么改吧……

一.开发目的:

总结软件开发过程中的方法和技巧,更好的应用和数据库技术

1.开发内容:开发一套学生成绩管理系统软件

采取的研究方法:采用面向对象的编程,结合网络和数据库技术,实现控制和管理。通过系统分析、需求分析、概要设计、详细设计、编写代码、软件测试、软件维护、经验方法总结等一系列实验方案,实验软件的开发。

2.具体开发方案:

分七个阶段进行:

系统分析、需求收集和分析

概念设计

第一阶段:系统分析、需求收集和分析

这一阶段首先进行系统分析,分析确定系统的规模和范围,确定软件的总体要求以及所需要的硬件和支撑软件,确定待开发软件与外界的接口,根据用户的情况确定软件对操作的要求,以及待开发软件总体上的约束和限制,完善项目计划。

在这之后,这一阶段的大部分时间将被用来进行需求收集和分析。向学校管理人员及学生了解情况,确定软件系统的综合要求,分析软件系统的数据要求,导出系统的逻辑模型,修正项目开发计划。

采用结构化分析方法,生成数据流图、数据词典及加工逻辑说明。

估计阶段跨度:2006年某月初至某月中旬

第二阶段:概要设计

在这一阶段将确定软件系统的结构,对全局数据结构进行设计,进行模块划分,确定每个模块的功能 接口以及模块间的调用关系。

采用与结构化方法衔接的结构化设计方法,生成结构图及概念设计说明书。

估计阶段跨度:2006年某月中旬至某月底

第三阶段:详细设计

为每个模块设计实现的细节将成为这个阶段的主要任务,还要对局部数据结构进行设计。

采用结构化设计方法。采用自顶向下逐步求精的设计方法和单入口单出口的控制结构。使得程序具有良好的结构,增强程序的可读性。生成程序流程图及详细设计说明书。

详细设计时,如果不满意,须回到概要设计中重新完善设计。

估计阶段跨度:2006年某月初至某月中旬

第四阶段:编写代码

这一阶段用来根据详细设计说明书编写代码。

采用计算机语言编写。追求高质量的代码,生成源程序代码、内部文档。

估计阶段跨度:2006年某月中旬至某月底

第五阶段:软件测试

这将是一个很重要也将是一个很耗时间和精力的阶段。

在这一阶段中将尽可能多地发现软件中的错误和缺陷。如果有错,还将退回到编码阶段进行调试。测试过程分为单元测试、集成测试和确认测试。

估计阶段跨度:2006年某月初至某月中旬

第六阶段:完善各项文档及和报告,从整个开发过程和这些文档中总结经验和教训,罗列各种方法和技巧。

估计阶段跨度:2007年某月中旬至某月底。

需求分析说明书

一,引言

21世纪以高科技为核心的知识经济将占主导地位,国家的综合国力和国际竞争力将越来越取决于科学技术创新水平。教育作为知识创新、传播和应用的基础,培养和输送人才的摇篮,已经成为经济发展和社会进步的基础。尽管人类进步的程度随着不同时代,不同地区而有所变化,教育的口径却在不断扩宽,以便使过去仅供少数人使用的教育资源能够为更多各种年龄、不同社会阶层和背景的人们所用。在信息爆炸的时代,传统教学管理面临着诸多挑战。

1.编写目的:

开发基于互联网的学生选课系统,提高管理工作的效率、提高信息的开放性、改善学生和教师对其最新信息查询的准确性。

2.背景说明

随着学校规模的不断扩大,专业、班级、学生的数量急剧增加,有关学生选课的各种信息量也成倍增长,而目前许多高校的学生选课管理仍停留在复杂的人工操作上,重复工作较多,工作量大,效率低,因此,迫切需要开发基于互联网的体育课信息管理系统来提高管理工作的效率。基于互联网的学生选课管理系统,在学生选课的规范管理、科学统计和快速查询方面具有较大的实用意义。它提高了信息的开放性,大大地改善了学生、教师对其最新信息查询的准确性。

3.术语定义及参考资料

1. (美) Grady Booch,James Rumbaugh,Ivar Jacobson,《UML用户指南》,机械工业出版社,2001年8月

2.Microsoft,MSDN

3.Microsoft, SQL Server2000联机手册

4.Roger S. Pressman。软件工程——实践者的研究方法。机械工业出版社,1997

5.IPL。Software Testing and Software Development Lifecycles。IPL,1996

6.Karl E. Wiegers《软件需求》机械工业出版社,1999

7.张海藩《软件工程导论》清华大学出版社。

4任务概述
4.1. 目标

系统开发的总体任务是实现学生选课信息关系的系统化、规范化和自动化。
4.2. 系统技术
学生选课系统要求具有信息处理的开发性,方便教师上传学生成绩、学生上网选课和查询选课信息及成绩等,因此本系统设计为基于WWW的网络数据库应用系统,使用ASP脚本以Access为数据库的开发技术,运行在支持ASP的服务器上。
4.3基本设计概念和处理流程

采用基于SQL Server 的分布式数据库管理系统。三层结构是目前用得最多的,这种结构比传统的C/S结构增加了一个应用程序服务器,应用程序服务器包括了统一的界面、业务规则和数据处理逻辑等等,这样客户端程序就可以做得比较小,也就是常说的瘦客户,更由于业务规则和数据处理逻辑的集中在服务器上统一管理,客户端无须进行复杂的计算,也不会因为错误的操作而影响到其他的用户,所以他的可靠性、稳定性和效率都比较好。
4.4. 用户的特点

为保证系统安全高效的运行,本系统把用户划分为3类:教务处、教师和学生。不同的用户在系统中的作用和权限也有所不同,所以它所需要完成的功能也就不同。

教务处可以完成本系统所有的功能:

1) 学生信息管理,除学生基本信息外,还可管理学生所选课程、成绩等;

2) 教师信息管理,包括教师个人的基本情况和任课情况;

3) 项目及班数的设定:根据学校教务处所排课进行班级数及人数的统计,然后根据统计结果进行项目及班数的设定;

4) 排课:根据上一步分班情况安排任课教师;

5) 报表生成及输出:生成教师担任课程分班表、按项目生成学生成绩表、按学生行政班生成成绩表及所有报表的输出。

教师在本系统的功能:查询学生选课情况、自己任课情况、获取自己所担任课程分班表、录入及修改成绩等。

学生在本系统的功能:查询本人信息、教师任课信息、选课、选课信息查询、成绩查询。

5.需求规定
5.1. 对功能的规定

1.可实现学生选课注册

2.方便实现学生选课信息查询

3.可对学生成绩档案进行管理,成绩表单生成简便。

4.安全有效的用户区分,管理

5.档案数据的高安全性,保密性

6.有帮助文档
5.2. 对性能的规定

使用稳定,操作性能好,操作方法易于掌握,系统的安全性强

6. 设计思想
用户的需求具体表现在对各种信息的提供、编辑、处理及查询统计上。这就要求数据库结构能充分满足各种信息的输入、处理和输出。通过分析学生选课管理系统的现实需求,学生选课管理系统各环节的基本数据及数据处理流程,在与管理人员沟通、交流与探讨的基础上,得到以下学生选课系统的数据流程图
6.1. 数据库的设计
通过对学生选课管理系统工作内容和相关数据流程分析,根据学生选课管理系统的需要,就可以设计出能满足用户需求的各种实体,以及它们之间的关系,由此得到数据库所支持的数据模型,即数据库的逻辑结构,具体情况如下:
1.学生信息表:开学时将教务处提供的学生信息库按系统的要求修改库结构并导入Access数据库中,应包括如下信息:姓名、学号、院系、班级、性别、所选课程、任课教师、备注等。
2.教师信息表:包括教师姓名、教师代码、性别、年龄、职称、主要教授课程、兼任课程等。
3.课程信息:包括课程目录、课程、课程代码、教学内容、任务与目的、考试方法、要求等。
4.课程表:包括课程名称、课程编号、任课教师、课程学分、上课时间。
5.成绩单列表:包括学生姓名、学号、院系、班级、课程、任课教师、成绩。

6.2. 系统功能特点
1.内容全面 系统全面覆盖了体育课信息,可为学校、教师和学生提供全面准确的信息。
2.层次分明 系统采用模块化程序设计结构。各模块之间既相互独立,又具有一定的联系,各模块可独立编制、调试、查错、修改和执行,结构严谨,便于扩展和维护。

7.系统需求分析

说明:

学校每年新生入学,毕业生离校和各种其它变动,如学籍变动,个人信息修改。每学期学校者要开设一定的课程提供给学生根据自己的情况来选择,最后的选择结果要给出学生的课程表。如何有效的管理这些学生信息,帮助学校和老师管理和掌握这些情况,这就是学生信息管理系统需要完成的任务。下面用软件工程的思想和方法完成该系统的设计过程。

功能:

个人信息查询和修改,包括流动,注册,更新管理

可行性研究报告

1. 编写目的

编写这份可行性研究报告的目的是让读者能够了解本系统的开发可行性。预期的读者包括上级领导,相关开发人员以及管理人员。

一.可行性研究的前提

随着科学技术的进步和社会经济的发展,计算机在现实生活中扮演越来越重要的角色,PC机价格不断的下降和生活水平的提高使得更多的中国家庭能够拥有自己的改变世界的机器,与此同时,我们也已经注意到,在大学校园里,越来越多的计算机已经进入同学们的宿舍,成为他们学习,生活中的一部分。

学生成绩管理方面,进入了信息化时代,我们有能力让我们的生活变的更好,对于学生成绩管理人员每日繁重的工作可以通过计算机来进行缓解,以实现管理自动化,工作人员对资料的管理,信息的发布,用电安全的控制均是人工作业,运作效率较低。因此,建立一个自动化的管理服务的计算机应用软件是十分必要的

1.1 要求

C++.net,传感器,SQL.

1.2 目标

能够快速的查询出学生的各科成绩以及所在班级等各种用途。

1.3 进行可行性研究的方法

对学生和校领导采用问卷调查的方法,询问他们,以确定最佳的可行性研究方案。软件采用现代流行WINDOWS操作界面。是标准的WIN32应用程序,可运行在WIN95\WIN98\WinMe\WIN2000\WINXP\WINNT等系统平台上的多任务应用程序。在运行时可以直观的浏览、查询和掌握学生的成绩,同时能够了解学生的基本信息所在系部、班级、宿舍的具体地址。结束了人工统计的耗时长、工作量大、错误率高的缺点。

1.4 评价尺度

1. 是否功能齐全,运行稳定。2.在网络功能方面是否方便管理。3.设置是否灵活开4.是否具有多任务,高效率的特点。5.是否具有界面友好,操作简单的特点。

2 处理流程和数据流程

2. 所建议的系统

2.1 对所建议系统的说明

我们所建议的系统为学生成绩管理系统。它是为了提高学生成绩管理的自动化程度而开发的。它可以解决一下问题:改变学生成绩输入的麻烦以及查询工作量大的问题还有输出的不便。

3.影响

3.1 对设备的影响

由于以前无自动化管理的方案,所以所有设备都需要购买。

3.2.对软件的影响

由于以前无自动化管理的方案,所以不需要考虑对现存应用软件合支持软件的影像。

3.3.对用户单位机构的影响

为了建立和运行所建议系统,需要提高管理人员的技术水平。

3.4.对系统运行过程的影响

所建议系统没有影响运行过程。

3.5.对开发的影响

所建议系统对软件开发人员要求不高,但是对硬件要求比较高。

3.6.对地点和设施的影响

所建议系统对建筑物无改造,可以利用原有的通信线路。

3.7 技术条件方面的可能性

本软件有计算机系的学生开发,调试,由计算机系老师知道。可完成性很高。

4. 可选择的其他系统方案

由于此系统方案是学生开发,而且资金有限所以暂时无其他系统方案。

5. 投资及效益分析

5.1 支出分析:

5.2 收益分析:

5.3 收益/投资比

5.4 投资回收周期

5.5 敏感性分析

6. 社会因素方面的可能性

所有软件都选用正版。

所有技术资料都由提出方保管。

合同制定确定违约责任。

7.用户使用可行性

由于学校的老师都有一定的计算机基础,不用培训就可以使用,所以用户使用可行性通过。

8. 结论

通过上述分析可以知道这个软件操作简单、功能齐全、功能开放、运行稳定、多任务、高效率等特点。所以说是计算机与学生成绩管理上的好软件!

设计说明书

一.概要设计说明书

1.系统功能设计

2.数据库概念设计

根据以上数据流图导出数据库所需数据项和数据结构

学生:学号,姓名,性别,生日,所在院系,所在班级:

课程:课程号,课程名,讲师,上课时间,地点,课程简介

选课结果:记录号,选课学生,所选课程

学籍变更记录:记录号,变更情况,记录时间,详细描述

2.1数据库概念结构设计的E-R 图

说明:E-R图中矩形代表实体,菱形代表实体间的联系,圆角矩形代表实体的属性

2.2数据库逻辑结构设计

根据以上E-R图,需要五个基本表:学生信息表、课程信息表、选课结果表、奖惩信息表、其中教师信息是处部表,不列出,由于使用打开系统的不光是教务人员,每个学生都要登录到选课系统进行课程的选择,因此,需要对不同的登录人员进行密码的认证和权限的限制,防止越权行为,用户名,密码,权限,保存在一个表中。

1. USER-PASS用户密码信息表字典

字段名

数据类型

是否可空

说明

ID

CHAR

NOT NULL

用户名(主键)

PASSWORD

CHAR

NOT NULL

密码

AUTHORITY

CHAR

NOT NULL

权限

2. COURSE课程信息表数据字典

字段名

数据类型

是否可空

说明

ID

CHAR

NOT NULL

课程号(主键)

NAME

VARCHAR

NULL

课程名

TEACHER

VARCHAR

NILL

讲师

CLASTIME

VARCHAR

NULL

上课时间

CLASSROM

CHAR

NULL

上课地点

INTRO

VARCHAR

NULL

简介

3. COURSE-SELECT选课结果表数据字典

字段名

数据类型

是否可空

说明

ID

SMALL INT

NOT NILL

记录号(主键)

COURSE

CHAR

NULL

课程名

STUDENT

CHAR

NULL

选课学生(外部关键

4. STUDENT学生个人信息表数据字典

字段名

数据类型

是否可空

说明

ID

SMALL INT

NOT NULL

学号(主键)

NAME

VARCHAR

NOT NULL

姓名

SEX

CHAR

NOTNULL

性别

CLASS

CHAR

NULL

班级

DEPARTMENT

CHAR

NULL

院系

BIRTHDAY

VARCHAR

NULL

生日

5. 奖惩记录信息表

字段名

数据类型

是否可空

说明

ID

SMLL INT

NOT NULL

记录号(主键)

STUDENT

CHAR

NOT NULL

学号(外部键)

LEVEL

CHAR

NULL

奖惩代码

TIME

DATA

NULL

时间

DESCRIPTION

VARCHAR

NULL

描述

二主要模块详细设计说明书

1用户身份认证模块

功能:按用户输入的用户名和密码是否合法

合法则进入应用程序

非法则显示出错信息

界面:由总控模块调用

模块说明细化为详细逻辑IPO图

用户身份认证模块

输入 处理 输出

连接数据库表 连接数据库错误中断程序

捕捉错误

用户名 获取用户名

用户密码 获取用户密码

读USER-PAS

判断用户名是否存在

判断密码是否存在 提示信息

捕捉异常

判断用户权限是合法

隐藏登录窗口

显示主窗体

文件

USER-PASS表

2.选课模块

功能:接受学生选课信息

刷新学生课程表

界面:调用添加、删除模块,打印课表模块

将模块说明细化为详细逻辑

选课处理IPO图

输入 处理 输出

课程编号 为课程号过滤 输入课程编号异常提示

接受课程号

打开课程信息表

判断是添加或是删除

添加

检索课程表读该记录

若该记录存在

显示所选课程详细信息 执行添加语句

调用添加模块

将选课结果刷新

删除 执行删除语句

调用删除模块

将稳定课结果刷新

提交 课表:课程编号,课程名

调用打印课表模块文件

课程信息表

选课结果表

3. 课程申请模块

功能:接受输入的新添课程信息

将新课程信息存入课程信息表

删除旧课程

界面:调用已开课程信息表

调用申请修改程序

将模块细化为详细逻辑IPO图

课程管理模块

输入 处理 输出

课程编号 添加新课程

获取当前教师所选课程

打开已开课程表

查询是否存在该记录

若无该记录则是新课程

调用添加模块

提取课程编号

提取课程名称

提取课程简介

提交

若有该记录则不是新课程

出错处理 提示信息

删除旧课程

文件

课程信息表

软件测试

输入数据

有效等价类

无效等价类

证件号码

1、6位数字字符

2、有效数字字符

3、少于6个字符

4、大于6个字符

使用功能

5、选课

6、查询

7、输入其他文字

有效测试用例

测试数据 期望结果 测试范围

123456 输入有效 1

选课 输入有效 5

5

无效测试用例

测试数据

期望结果

测试范围

12jda1

输入无效

2

1234561

输入无效

4

12341

输入无效

3

12t21

输入无效

2、 3

排课

输入无效

7

(折半查找算法测试)2

测试名称:模块输入课程编号过滤的测试方案

a) 规定课程编号为输入4个字符,头两个字符为字母,后2个字符为数字例如TP38

b) 测试方法采用黑盒测试法中的等价类划分法

划分等价类

输入数据

有效等价类

无效等价类

课程号

1 两字母+两数字

2有非数字或字母

字母

3 A--Z

4字母少于两个或多于两个

数字

5 00--99

6数字少于两个或多于两个

为有效等价类和每个无效等价类设计测试用例

测试数据

期望结果

测试范围

HY76

输入有效

1、3、5

@D78

输入无效

2

S86

输入无效

4

MA2

输入无效

6

HY345

输入无效

6

DEH94

输入无效

4

测试名称:课程查找模块设计测试方案

a) 本模块采用的是折半查找算法主要是测试各程序在各种典型情况下是不能有效的进行查找

b) 测试方案采用选择白盒测试法中的路径覆盖法

说明:由于输入的课程编号已经被过滤,所以编号接受的范围为00--99
另外,团IDC网上有许多产品团购,便宜有口碑

3. 排序算法比较研究

杯具~~

4. C语言排序题

楼主 看到你的问题后我写到现在。。满意的话请采纳 QAQ
输入数据的时候每个数字之间用回车隔开。
也可以修改一下用随机数放到数组中
#include <stdio.h>#include <stdlib.h>#include <time.h>#define RADIX_10 10 //整形排序#define KEYNUM_31 10 //关键字个数,这里为整形位数void swap(int * a, int * b);//交换两个数void inputnum(int * a, int n); //输入数组里的数字void showarray(int * a, int n); //显示数组数据int paixu(int * a, int n); //不要吐槽名字 因为不让用sort QAQvoid straight_insert_sort(int * a, int n); //直接插入排序void bin_insert_sort(int * a, int n); //折半查找排序void ShellSort(int* pDataArray, int iDataNum); //希尔排序void ShellInsert(int* pDataArray, int d, int iDataNum); //一趟希尔排序void quickSort(int a[],int left,int right);//快速排序void selectSort(int a[], int n); //简单选择排序void MinheapsortTodescendarray(int a[], int n);//堆排序void MinHeapFixdown(int a[], int i, int n);void MakeMinHeap(int a[], int n);void RadixSort(int* pDataArray, int iDataNum);//基数排序int GetNumInPos(int num,int pos);int main (void){ int n; int *a; printf("请输入数据个数n = "); scanf("%d", &n); while (n != 0) { a = (int *)malloc((n+1) * sizeof(int)); inputnum(a, n); //输入数据 showarray(a, n); paixu(a, n); //数组排序 showarray(a, n); //输出数组 free(a); printf("\n请输入数据个数n = "); scanf("%d", &n); } return 0;}//输入数字到数组void inputnum(int * a, int n){ int i; srand(time(NULL)); for (i = 1; i <= n; i++) { scanf("%d", &a[i]); //a[i] = rand()%200; }}//输出数组void showarray(int * a, int n){ int i; for (i = 1; i <= n; i++) { printf("%d ", a[i]); }}void straight_insert_sort(int *a, int n){ int i; int j; for (i = 2; i <= n; i++) { if (a[i] < a[i-1]) { a[0] = a[i]; a[i] = a[i-1]; for (j = i - 2; a[0] < a[j]; j--) { a[j+1] = a[j]; } a[j+1] = a[0]; } }}void bin_insert_sort(int * a, int n) //折半查找排序{ int low, high, mid, i, j; for (i = 2; i <= n; i++) { a[0] = a[i]; low = 1; high = i-1; while (low <= high) { mid = (low + high) / 2; if (a[0] < a[mid]) { high = mid - 1; } else { low = mid + 1; } } for (j = i - 1; j >= high + 1; j--) { a[j+1] = a[j]; } a[high + 1] = a[0]; }}/*********************************************************函数名称:ShellInsert*参数说明:pDataArray 无序数组;* d 增量大小* iDataNum为无序数据个数*说明: 希尔按增量d的插入排序*********************************************************/void ShellInsert(int* pDataArray, int d, int iDataNum){ int i, j, temp; for (i = d; i < iDataNum; i += 1) //从第2个数据开始插入 { j = i - d; temp = pDataArray[i]; //记录要插入的数据 while (j >= 0 && pDataArray[j] > temp) //从后向前,找到比其小的数的位置 { pDataArray[j+d] = pDataArray[j]; //向后挪动 j -= d; } if (j != i - d) //存在比其小的数 pDataArray[j+d] = temp; }}/*********************************************************函数名称:ShellSort*参数说明:pDataArray 无序数组;* iDataNum为无序数据个数*说明: 希尔排序*********************************************************/void ShellSort(int* pDataArray, int iDataNum){ int d; d = iDataNum / 2; //初始增量设为数组长度的一半 while(d >= 1) { ShellInsert(pDataArray, d, iDataNum); d = d / 2; //每次增量变为上次的二分之一 }}//冒泡排序void BubbleSort(int a[], int n){ int i, j; for (i = 1; i <= n; i++) for (j = 2; j <= n - i; j++) if (a[j - 1] > a[j]) { a[0] = a[j]; a[j] = a[j-1]; a[j-1] = a[0]; }}//快速排序void quickSort(int a[],int left,int right){ int i=left; int j=right; int temp=a[left]; if(left>=right) return; while(i!=j) { while(i<j&&a[j]>=temp) j--; if(j>i) a[i]=a[j];//a[i]已经赋值给temp,所以直接将a[j]赋值给a[i],赋值完之后a[j],有空位 while(i<j&&a[i]<=temp) i++; if(i<j) a[j]=a[i]; } a[i]=temp;//把基准插入,此时i与j已经相等R[low..pivotpos-1].keys≤R[pivotpos].key≤R[pivotpos+1..high].keys quickSort(a,left,i-1);/*递归左边*/ quickSort(a,i+1,right);/*递归右边*/}void selectSort(int a[], int n) //简单选择排序{ int i, j, k, t; for(i=1;i<=n;i++) { k=i; for(j=i+1;j<=n;j++) { if(a[k]>a[j])k=j; } if(k!=i) {t=a[i];a[i]=a[k];a[k]=t;}}}void MinheapsortTodescendarray(int a[], int n){ int i; for (i = n - 1; i >= 1; i--) { swap(&a[i], &a[0]); MinHeapFixdown(a, 0, i); }}void swap(int *a, int * b)//交换两个数{ int x; x = *a; *a = *b; *b = x;}//建立最小堆void MakeMinHeap(int a[], int n){ int i; for (i = n / 2 - 1; i >= 0; i--) MinHeapFixdown(a, i, n);}// 从i节点开始调整,n为节点总数 从0开始计算 i节点的子节点为 2*i+1, 2*i+2void MinHeapFixdown(int a[], int i, int n){ int j, temp; temp = a[i]; j = 2 * i + 1; while (j < n) { if (j + 1 < n && a[j + 1] < a[j]) //在左右孩子中找最小的 j++; if (a[j] >= temp) break; a[i] = a[j]; //把较小的子结点往上移动,替换它的父结点 i = j; j = 2 * i + 1; } a[i] = temp;}void over_array(int * a, int n){ int x; int i = 1; while (i <= n) { x = a[i]; a[i] = a[n]; a[n] = x; n--; i++; }}//将有二个有序数列a[first...mid]和a[mid...last]合并。void mergearray(int a[], int first, int mid, int last, int temp[]){ int i = first, j = mid + 1; int m = mid, n = last; int k = 0; while (i <= m && j <= n) { if (a[i] <= a[j]) temp[k++] = a[i++]; else temp[k++] = a[j++]; } while (i <= m) temp[k++] = a[i++]; while (j <= n) temp[k++] = a[j++]; for (i = 0; i < k; i++) a[first + i] = temp[i];}void mergesort(int a[], int first, int last, int temp[]){ if (first < last) { int mid = (first + last) / 2; mergesort(a, first, mid, temp); //左边有序 mergesort(a, mid + 1, last, temp); //右边有序 mergearray(a, first, mid, last, temp); //再将二个有序数列合并 }}int MergeSort(int a[], int n){ int *p = malloc(sizeof(int)*n); if (p == NULL) return 0; mergesort(a, 0, n - 1, p); free(p); return 1;}/*********************************************************函数名称:GetNumInPos*参数说明:num 一个整形数据* pos 表示要获得的整形的第pos位数据*说明: 找到num的从低到高的第pos位的数据*********************************************************/int GetNumInPos(int num,int pos){ int i; int temp = 1; for (i = 0; i < pos - 1; i++) temp *= 10; return (num / temp) % 10;}/*********************************************************函数名称:RadixSort*参数说明:pDataArray 无序数组;* iDataNum为无序数据个数*说明: 基数排序*********************************************************/void RadixSort(int* pDataArray, int iDataNum){ int i, pos, j , k; int *radixArrays[RADIX_10]; //分别为0~9的序列空间 for (i = 0; i < 10; i++) { radixArrays[i] = (int *)malloc(sizeof(int) * (iDataNum + 1)); radixArrays[i][0] = 0; //index为0处记录这组数据的个数 } for (pos = 1; pos <= KEYNUM_31; pos++) //从个位开始到31位 { for (i = 0; i < iDataNum; i++) //分配过程 { int num = GetNumInPos(pDataArray[i], pos); int index = ++radixArrays[num][0]; radixArrays[num][index] = pDataArray[i]; } for (i = 0, j =0; i < RADIX_10; i++) //收集 { for (k = 1; k <= radixArrays[i][0]; k++) pDataArray[j++] = radixArrays[i][k]; radixArrays[i][0] = 0; //复位 } }}int paixu(int * a, int n){ int i; printf("\n请输入排序方法:\n"); printf("1. 直接插入排序 \n"); printf("2. 折半插入排序 \n"); printf("3. 希尔排序 \n"); printf("4. 冒泡排序 \n"); printf("5. 快速排序 \n"); printf("6. 简单选择排序 \n"); printf("7. 堆排序 \n"); printf("8. 归并排序 \n"); printf("9. 基数排序 \n"); scanf("%d", &i); switch (i) { case 1: straight_insert_sort(a, n);break; case 2: bin_insert_sort(a, n); break; case 3: ShellSort(a+1, n); break; case 4: BubbleSort(a, n); break; case 5: quickSort(a, 1, n); break; case 6: selectSort(a, n); break; case 7: MakeMinHeap(a+1, n);MinheapsortTodescendarray(a+1, n); over_array(a, n); break; case 8: MergeSort(a+1, n);break; case 9: RadixSort(a+1, n);break; default: return 0; } return 1;}
满意请采纳。

5. 东软集团的中文技术支持如何

对东软不大了解,如果有用就看:
曾经北京中软笔试题
1.不许用中间变量,把String ABCDE 倒转
2.10000个数求第2大的数,不许用排序算法.
3.排序算法的测试用例
面试:
1、Java中的属性和字段有什么区别?
2、C/C++你更熟悉那个?C++中的虚函数用在什么地方?JAVA中的虚函数呢
3、你对数据库中存储过程了解多少?说说。
4、假如微软给你500万美元项目经费,你怎么利用它?
5、你对考研是什么态度?
6、你对加班是什么态度?
7、Why do you …… ICS&S? (大意就是问你为何要来中软国际?人用全英语问的)

6. 几种常用的算法简介

1、穷举法穷举法是最基本的算法设计策略,其思想是列举出问题所有的可能解,逐一进行判别,找出满足条件的解。
穷举法的运用关键在于解决两个问题:
在运用穷举法时,容易出现的问题是可能解过多,导致算法效率很低,这就需要对列举可能解的方法进行优化。
以题1041--纯素数问题为例,从1000到9999都可以看作是可能解,可以通过对所有这些可能解逐一进行判别,找出其中的纯素数,但只要稍作分析,就会发现其实可以大幅度地降低可能解的范围。根据题意易知,个位只可能是3、5、7,再根据题意可知,可以在3、5、7的基础上,先找出所有的二位纯素数,再在二位纯素数基础上找出三位纯素数,最后在三位纯素数的基础上找出所有的四位纯素数。
2、分治法分治法也是应用非常广泛的一种算法设计策略,其思想是将问题分解为若干子问题,从而可以递归地求解各子问题,再综合出问题的解。
分治法的运用关键在于解决三个问题:
我们熟知的如汉诺塔问题、折半查找算法、快速排序算法等都是分治法运用的典型案例。
以题1045--Square
Coins为例,先对题意进行分析,可设一个函数f(m,
n)等于用面值不超过n2的货币构成总值为m的方案数,则容易推导出:
f(m,
n)
=
f(m-0*n*n,
n-1)+f(m-1*n*n,
n-1)+f(m-2*n*n,
n-1)+...+f(m-k*n*n,
n-1)
这里的k是币值为n2的货币最多可以用多少枚,即k=m/(n*n)。
也很容易分析出,f(m,
1)
=
f(1,
n)
=
1
对于这样的题目,一旦分析出了递推公式,程序就非常好写了。所以在动手开始写程序之前,分析工作做得越彻底,逻辑描述越准确、简洁,写起程序来就会越容易。
3、动态规划法
动态规划法多用来计算最优问题,动态规划法与分治法的基本思想是一致的,但处理的手法不同。动态规划法在运用时,要先对问题的分治规律进行分析,找出终结子问题,以及子问题向父问题归纳的规则,而算法则直接从终结子问题开始求解,逐层向上归纳,直到归纳出原问题的解。
动态规划法多用于在分治过程中,子问题可能重复出现的情况,在这种情况下,如果按照常规的分治法,自上向下分治求解,则重复出现的子问题就会被重复地求解,从而增大了冗余计算量,降低了求解效率。而采用动态规划法,自底向上求解,每个子问题只计算一次,就可以避免这种重复的求解了。
动态规划法还有另外一种实现形式,即备忘录法。备忘录的基本思想是设立一个称为备忘录的容器,记录已经求得解的子问题及其解。仍然采用与分治法相同的自上向下分治求解的策略,只是对每一个分解出的子问题,先在备忘录中查找该子问题,如果备忘录中已经存在该子问题,则不须再求解,可以从备忘录中直接得到解,否则,对子问题递归求解,且每求得一个子问题的解,都将子问题及解存入备忘录中。
例如,在题1045--Square
Coins中,可以采用分治法求解,也可以采用动态规划法求解,即从f(m,
1)和f(1,
n)出发,逐层向上计算,直到求得f(m,
n)。
在竞赛中,动态规划和备忘录的思想还可以有另一种用法。有些题目中的可能问题数是有限的,而在一次运行中可能需要计算多个测试用例,可以采用备忘录的方法,预先将所有的问题的解记录下来,然后输入一个测试用例,就查备忘录,直接找到答案输出。这在各问题之间存在父子关系的情况下,会更有效。例如,在题1045--Square
Coins中,题目中已经指出了最大的目标币值不超过300,也就是说问题数只有300个,而且各问题的计算中存在重叠的子问题,可以采用动态规划法,将所有问题的解先全部计算出来,再依次输入测试用例数据,并直接输出答案。
4、回溯法回溯法是基于问题状态树搜索的求解法,其可适用范围很广。从某种角度上说,可以把回溯法看作是优化了的穷举法。回溯法的基本思想是逐步构造问题的可能解,一边构造,一边用约束条件进行判别,一旦发现已经不可能构造出满足条件的解了,则退回上一步构造过程,重新进行构造。这个退回的过程,就称之为回溯。
回溯法在运用时,要解决的关键问题在于:
回溯法的经典案例也很多,例如全排列问题、N后问题等。
5、贪心法贪心法也是求解最优问题的常用算法策略,利用贪心法策略所设计的算法,通常效率较高,算法简单。贪心法的基本思想是对问题做出目前看来最好的选择,即贪心选择,并使问题转化为规模更小的子问题。如此迭代,直到子问题可以直接求解。
基于贪心法的经典算法例如:哈夫曼算法、最小生成树算法、最短路径算法等。

7. 请用C++编写此程序, 并编写测试程序进行测试

你好!测试程序负责给编写好的程序提供样本数据,自动收集运行结果,并根据结果作出反馈。

测试程序可以单独写,也可以做为模块整合在源程序中。

像我们熟知的debug语句,就是测试的最简单例子。在没有“断电查看”这一功能之前,为了监测程序每步执行后变量的结果,往往加入一些输出关键变量的语句。

例如以下程序:

#incle<iostream>

using namespace std;

#define DEBUG

int main(){

int n;

#ifdef DEBUG

cout<<n<<endl;

#endif

n = 3;

cout<<n<<endl;

return 0;

}

此处DEBUG的作用是查看未初始化的变量n的值。通常会显示-89******00(0xcccccccc).

一般这样的语句还会出现在对指针进行操作之后,用debug语句输出指针所指向内存的内容等。

这只是测试程序的一个功能。正如前面提到的,测试程序应该提供数据以检测程序的健壮性和安全性,以及用海量数据对执行效率进行检验等。

测试数据的选择有以下几个要点,分别检测程序的不同特性:

@ 尽可能包括输入集合内所有可能出现的元素,观察程序能否给出正确结果。(Authenticity)

比如:有一个程序输入给定迷宫平面图,要测试出最短路径长度。那么输入的迷宫应该包括各种可能:有通路的和没有通路的,有死胡同的和没有的,有回路的(避免搜索时出现死循环),出口在左上角,右上角的等,都要考虑进去。程序应该对每种情况都做出正确的反应。

@ 注意测试极端情况以及临界情况。(Security)

这是为了检测程序的健壮性,用户不可避免地会做出不合法的举动,程序需要有足够的防护强度来应对这些意外。

比如:如果编写了一个简易的计算器,那么一定要检查除数为0的情况;一个程序的功能是将一片文档的内容链接到另一个文档内,那么一定要检查自己链接自己的情况;等等。

@ 注意输入数据的规模以及随机性。(Efficiency)

衡量程序效率的标准应该考虑大规模数据下的表现。数据需要有足够的随机性以避免意外情况。

比如:比较几种不同排序算法的效率时,选用的数据应该是随机顺序的。在顺序数据的情况下:冒泡算法显然比快排还快,但这是偶然情况。

@ 如果有可能,还可以检测程序的通用性及扩展性(Versatility & Compatibility)

好的程序应该易于扩展,可利用价值高。大多数软件都在不停的打补丁,而不是推倒重写。

测试程序一般无法直接检测这两种特性。然而,测试中出现的错误有时可以帮助我们提升程序的质量。

我曾经写过一个类似于美图秀秀的图像处理程序,C++写的,相当粗糙。输入还要用命令行控制。当时我用各种图片进行了测试,包括纯色的,有明显背景色调的,以及完全混乱的噪声点。前面的图片表现都很好,但处理最后一张图片时程序抛出了异常——经过检验发现,我的处理程序是基于24位图片写的,而最后一张图片是32位的。类似的情况还有32位系统和64位系统下程序运行的问题等,在此就不赘述了。

要编写测试程序,一般分为两个模块:数据生成和结果检测。

测试程序的第一部分将生成的数据写入一个文件,让程序读取文件并运行后,再将结果写入另一个文件,之后由测试程序的第二部分比对输出文件和标准答案。

对于检测健壮性的测试程序,只需有第一部分即可,待检测程序在处理数据时如果发生异常,就根据结果作相应的修改。

测试效率的程序,可以在待检程序内加入计时模块。具体写法如下:

#include<ctime>

#define CHECK_TIME

int main(){

//....intput

#ifdef CHECK_TIME

clock t start = clock();

#endif

#ifdef CHECK_TIME

cout << "Execution Time: " << clock() - start << " ms." << endl;

#endif

嗯,就是这么多啦,希望对你有帮助!

8. 如何验证 排序算法

输入数据,
输出排好序的序列。
软件测试可以设计测试用例,用自动化的方法验证。

9. 算法题,请给出下面二维数组的排序算法

#include <stdio.h> #include <stdlib.h>#include <time.h> #define LINE 10 //预定义二维数组行数#define COLUMN 10 //列数void bubble_sort(int a[], int n){ int i, j, temp; for (j = 0; j < n; j++) for (i = j+1; i< n ; i++) { if(a[i] < a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; } }} int main(){ int arr[LINE][COLUMN]={0}; int i,j,k; srand((unsigned)time(NULL));//初始化随种子 for (i = 0; i != LINE; i++) { for(j=0;j!=COLUMN;++j){ //逐行输入数据 arr[i][j]=rand()%1000+1;//利用随机数生成1000以内整数,方便调试 //scanf("%d",&arr[i][j]);//手工输入测试数据 } bubble_sort(arr[i], COLUMN);//输入完一行,就对该行进行排序 } for (i = 0; i != LINE; i++)//输出排序后结果 { for(j=0;j!=COLUMN;++j){ printf("%4d ",arr[i][j]); } printf("\n"); } return 0;}

10. 二级C语言排序技术2

(1)交换类排序法交换类排序法是指借助数据元素之间的互相交换进行排序的一种方法。冒泡排序法与快速排序法都属于交换类排序方法。冒泡排序法是一种最简单的交换类排序方法,它是通过相邻数据元素的交换逐步将线性表变成有序。假设线性表的长度为n,则在最坏情况下,冒泡排序需要经过n/2遍的从前往后的扫描和n/2遍的从后往前的扫描,需要的比较次数为n(n–1)/2。但这个工作量不是必需的,一般情况下要小于这个工作量。快速排序法也是一种交换类的排序方法,但由于它比冒泡排序法的速度快,因此称之为快速排序法。其关键是对线性表进行分割,以及对各分割出的子表再进行分割。(2)插入类排序法插入类排序法主要有简单插入排序法和希尔排序法。简单插入排序法,是指将无序序列中的各元素依次插入到已经有序的线性表中。在这种排序方法中,每一次比较后最多移掉一个逆序,因此,这种排序方法的效率与冒泡排序法相同。在最坏情况下,简单插入排序需要n(n–1)/2次比较。希尔排序法对简单插入排序做了较大的改进。它是将整个无序序列分割成若干小的子序列分别进行插入排序。希尔排序的效率与所选取的增量序列有关。在最坏情况下,希尔排序所需要的比较次数为O(n1.5)。(3)选择类排序选择类排序主要有简单选择类排序法和堆排序法。简单选择排序法的基本思想是:扫描整个线性表,从中选出最小的元素,将它交换到表的最前面(这是它应有的位置);然后对剩下的子表采用同样的方法,直到子表空为止。对于长度为n的线性表,在最坏情况下需要比较n(n–1)/2次。堆排序法也属于选择类排序法。具有n个元素的序列(h1, h2, …, hn),当且仅当满足条件: 或 (i=1, 2, …, n/2)时称之为堆。可见,堆顶元素(即第一个元素)必为最大项。堆排序的方法对于规模较小的线性表并不适合,但对于较大规模的线性表来说是很有效的。在最坏情况下,堆排序需要比较的次数为O(nlog2n)。

阅读全文

与排序算法测试用例相关的资料

热点内容
武汉理工大学服务器ip地址 浏览:139
亚马逊云服务器登录 浏览:515
安卓手机如何进行文件处理 浏览:62
mysql执行系统命令 浏览:920
php支持curlhttps 浏览:134
新预算法责任 浏览:435
服务器如何处理5万人同时在线 浏览:242
哈夫曼编码数据压缩 浏览:415
锁定服务器是什么意思 浏览:376
场景检测算法 浏览:608
解压手机软件触屏 浏览:339
方舟pv怎么转服务器 浏览:100
数据挖掘中误差值算法函数 浏览:119
php开发套件 浏览:191
服务器的spi板是什么 浏览:897
解压缩全能王中文密码是什么 浏览:80
javaftp服务器上传文件 浏览:104
算法设计中文版pdf 浏览:82
视频压缩形式怎么改 浏览:369
perl程序员 浏览:791