当前位置:   article > 正文

《程序设计基础综合实践》各备选题目[2023-02-13]_c语言(c)1.12 清除数字游戏 //【难度系数】4级 //【任务描述】 //游戏方法为: //

c语言(c)1.12 清除数字游戏 //【难度系数】4级 //【任务描述】 //游戏方法为: //

《程序设计基础综合实践》各备选题目[2023-02-13]

《程序设计基础综合实践》各备选题目设计参考提示
一、总体要求
1、注释要求
注释是程序员与日后的程序读者之间通信的重要手段。注释决不是可有可无的。一些正规的
程序文本中,注释行的数量占到整个源程序的 1/3 到 1/2,甚至更多。
注释分为序言性注释和功能性注释。
序言性注释包括: 程序标题,模块函数功能和目的的说明,主要算法,接口说明(调用形
式,参数描述),有关数据描述(重要的变量及其用途、约束或限制条件),模块函数位置(在
哪一个源文件中,或隶属于哪一个软件包),开发简历(设计者、复审者、复审日期、修改
日期及有关说明等)。
功能性注释:嵌在源程序体中,用以描述其后的语句或程序段是在做什么工作,或是执行了
下面的语句会怎么样。而不要解释下面怎么做。
①程序首部必须有引导式注释,写明题目名称,要求,作者、修订时间、程序文件名称、测
试例子等
②主要功能性模块、算法语句段必须有内容性注释
③主要标识符(包括常量标识符、变量、数组、指针、函数)、数据类型(结构体)必须有
解释性注释
④核心语句必须有解释性注释(如判断、循环条件、算法处理语句等)
如果设计了一个复杂的数据结构,应当使用注释来说明在程序实现时这个数据结构的固有特
点。
2、程序结构编写要求
①使用模块化结构化程序设计思想进行程序结构设计。
结构化程序设计是一种设计程序的技术,它采用自顶向下逐步求精的设计方法和单入口-单
出口的控制结构。结构化的程序一般只需要用三种基本的逻辑结构就能实现——顺序结构、
选择结构和循环结构。不准使用 goto 语句。
模块是一个独立命名的,拥有明确定义的输入、输出和特性的程序实体。模块化即是指整个
软件被划分成若干单独命名和独立访问、部分,可编址的部分,称之为模块。
把一个大型软件系统的全部功能,按照一定的原则合理地划分为若干个模块,每个模块完成
一个特定子功能,所有的这些模块以某种结构形式组成一个整体,这就是软件的模块化设计
(Modular Design)。建议将主要功能模块设计成独立的功能函数,尽量减少主函数的内容。
②程序代码要体现编程者具备良好的编码风格
编码风格指一个人编制程序时所表现出来的特点、习惯、逻辑思路等。良好的编码风格可以
减少编码的错误,减少读程序的时间,从而提高软件的开发效率。良好的编码风格体现在源
程序文档化、数据说明清晰、语句构造易读性、输入输出风格满足工程学要求及算法效率上。
编码风格很多情况体现在程序书写规范上,包括程序头、程序编写格式、注释格式及必须注
释的内容要求等。
③程序语句构造力求简单,直接,不能为了片面追求效率而使语句复杂化。
除非对效率有特殊的要求, 程序编写要做到清晰第一,效率第二。不要为了追求效率而丧
失了清晰性。事实上,程序效率的提高主要应通过选择高效的算法来实现。
首先要保证程序正确,然后才要求提高速度。反过来说,在使程序高速运行时,首先要保证
它是正确的。
程序编写首先应当考虑清晰性,不要刻意追求技巧性,使程序编写得过于紧凑(一行尽量写
一条语句)。
尽量减少使用“否定”条件的条件语句(if ( !( char<‘0’ || char >‘9’ ) ))。
尽量不用复合复制语句(+=、-=、*=、/=)
尽可能使用库函数
④输入输出设计都应考虑的原则
对所有的输入数据都要进行检验,识别错误的输入,以保证每个数据的有效性;
检查输入项的各种重要组合的合理性,必要时报告输入状态信息;
使得输入的步骤和操作尽可能简单,并保持;
输入数据时,应允许使用自由格式输入;
应允许缺省值;
输入一批数据时,最好使用输入结束标志;
交互式输入要明确提示交互输入的请求,指明可使用选择项的种类和取值范围。同时,在数
据输入的过程中和输入结束时,也要在屏幕上给出状态信息;
给所有的输出加注解,并设计输出报表格式。
数据防卫性设计:设计插入自动检错,报错和纠错的功能
⑤标识符命名约定规范
符号名即标识符,包括函数名、变量名、常量名等。这些名字应能反映它所代表的实际东西,
应有一定实际意义。例如,表示次数的量用 Times,表示总量的用 Total,表示平均值的用
Average,表示和的量用 Sum 等。
名字不是越长越好,应当选择精炼的意义明确的名字。必要时可使用缩写名字,但这时要注
意缩写规则要一致,并且要给每一个名字加注释。同时,在一个程序中,一个标识符名称只
应用于一种用途。
如可以使用引导字符代表某类对象,中间使用下划线分隔、具体内容可以使用英文缩写或汉
字拼音声母等,进行分段命名时,采用分隔符下划线“_”,中文拼音首字母缩写要用大写,
英文采用小写,这种命名方法简短,便于记忆和区分。
⑥算法设计中要考虑对程序效率的影响
编程中尽可能化简有关的算术表达式和逻辑表达式;
仔细检查算法中的嵌套的循环,尽可能将某些语句或表达式移到循环外面;
尽量避免使用多维数组;
尽量避免使用指针和复杂的结构体;
采用“快速”的算术运算;
不要混淆数据类型,避免在表达式中出现类型混杂;
尽量采用整数算术表达式和逻辑表达式;
选用等效的高效率算法。
3、测试要求
① 使用等价类测试方法设计多组测试数据进行测试
等价类划分方法把所有可能的输入数据,即程序的输入域划分成若干部分,然后从每一部分
中选取少数有代表性的数据做为测试用例。等价类是指某个输入域的子集合。在该子集合中,
各个输入数据对于揭露程序中的错误都是等效的。测试某等价类的代表值就等价于对这一类
其它值的测试。
使用这一方法设计测试用例要经历划分等价类(有效等价类、无效等价类)和选取测试用例
有效等价类:是指对于程序的规格说明来说,是合理的,有意义的输入数据构成的集合。
无效等价类:是指对于程序的规格说明来说,是不合理的,无意义的输入数据构成的集合。
在设计测试用例时,要同时考虑有效等价类和无效等价类的设计。
划分等价类的原则
如果输入条件规定了取值范围,或值的个数,则可以确立一个有效等价类和两个无效等价类。
如“…… 项数可以从 1 到 999 ……”,则有效等价类是“1≤项数≤999”,两个无效等价类
是“项数<1”或“项数>999”。
如果输入条件规定了输入值的集合,或者是规定了“必须如何”的条件,这时可确立一个有
效等价类和一个无效等价类。
如果输入条件是一个逻辑值,则可以确定一个有效等价类和一个无效等价类。
如果规定了输入数据的一组值,而且程序要对每个输入值分别进行处理。这时可为 每一个
输入值确立一个有效等价类,此外针对这组值确立一个无效等价类,它是所有不允许的输入
值的集合。如,在教师上岗方案中规定对教授、副教授、讲师和助教分别计算分数,做相应
的处理。因此可以确定 4 个有效等价类为教授、副教授、讲师和助教,一个无效等价类,它
是所有不符合以上身分的人员的输入值的集合。
如果规定了输入数据必须遵守的规则,则可以确立一个有效等价类(符合规则)和若干个无
效等价类(从不同角度违反规则)。
如果规定了输入数据为整型,则可以划分出正整数,零和负整数等 3 个有效类;
如果程序的处理对象是表格,则应该使用空表,以及含一项或多项的表。
默认、空白、空值、零值和无
在划分无效的等价类时还必须考虑编译程序的检错功能,一般说来,不需要设计测试数据用
来暴露编译程序肯定能发现的错误。
②边值测试
人们从长期的测试工作经验得知,大量的错误是发生在输入或输出范围的边界上,而不是在
输入范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。确定边界情
况,这需要经验和创造性,这里所说的边界是指,相当于输入等价类和输出等价类而言,稍
高于其边界值及稍低于其边界值的一些特定情况。
使用边界值分析方法设计测试用例,首先应确定边界情况。应当选取正好等于,刚刚大于,
或刚刚小于边界的值做为测试数据,而不是选取等价类中的典型值或任意值做为测试数据。
常用的边值:
第一个/最后一个、最小值/最大值、开始 / 完成、超过/在内、空/满、最短/最长、
最慢/最快、最早/最迟、最大/最小、最高/最低、相邻/最远等。
4、常用的基本技巧
①随机数产生:
需要时间相关函数头文件:#include
先使用定义随机数种子函数(以当前时间为种子,不同时间随机数不同): srand(time(0));
函数返回 x-1~x+y-1 范围的随机整数:rand()%x+y;,如产生 201~1199 范围的随机数:

rand()%1000+200;
  • 1

②键盘缓冲区:
由于 getchar(),scanf()等函数输入的字符均在键盘缓冲区中,输入结束标志是回车,接受输
入字符后回车键还在键盘缓冲区中,会影响下次输入,可以使用 fflush(stdin); /清空缓冲区,
也可以使用 rewind(stdin); stdin 是标准输入设备的名称
/
③界面实现方面的函数:
清屏:使用#include <windows.h>头文件后,用函数 system(“cls”);
④定义显示颜色与某位置显示:使用#include <windows.h>头文件后

HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);
void gotoxy(HANDLE hout,int x,int y)
{ COORD pos;
 pos.X=x;
 pos.Y=y;
 SetConsoleCursorPosition(hout,pos);
}
void setcolor(unsigned short ForeColor,unsigned short BackGroundColor)
{ HANDLE hCon=GetStdHandle(STD_OUTPUT_HANDLE);
 SetConsoleTextAttribute(hCon,ForeColor|BackGroundColor*16);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

调用显示颜色:setcolor(颜色号,底色号),如:setcolor(4,0);
在某坐标位置输出:gotoxy(hout,列号,行号),如:gotoxy(hout,0,18);
⑤到计时
使用#include <windows.h>头文件后:
Sleep(n)函数,n 的单位是毫秒
Sleep(1000 * 60 * 5)等于休眠 5 分钟,Sleep(1000)是休眠 1 秒。
使用 time.h 头文件后
time()函数得到机器的日历时间,一般是 1970 年 1 月 1 日 0 时 0 分 0 秒到当前的秒数
t=time(NULL)得到当前时间 t(整数,单位秒)
clock_t clock();函数得到当前这个函数返回从“开启这个程序进程”到“程序中调用 clock
()函数”时之间的 CPU 时钟计时单元 (clock tick)数。用法如下:

clock_t start,finish;
start = clock();
循环…..各种处理代码
…..
 finish = clock();
printf("共用时%f 秒\n",(double)(finish - start) / CLOCKS_PER_SEC);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

二、基础算法类

©1 基础类/算法类

源码

https://pan.baidu.com/s/1pq1Nwwo0hlc_J84F93HM4A?pwd=1111

©1.1 A+B 和 A-B

【难度系数】3 级
【任务描述】
我们知道,计算机程序中,某种数据类型的变量能存储的数的取值范围是有限的,这是
因为分配给变量的存储空间是有限的。但在实际问题中运算的数,可能超过基本数据类型的
表示范围,例如,如果一个星球距离我们 100 万光年,那么将其化简为公里或米时,我们会
发现这是一个很大的数,计算机无法直接对其进行计算。
本问题的要求是:编写程序,实现任意长度正整数的加法、减法运算。
【功能要求】
(1) 被计算的正整数长度在 10 位以上,1000 位以下。
(2) 任意输入两个长整数,可进行它们的加、减运算,输出运算结果。
(3) 设计一个简单的交互界面,根据用户要求,完成指定的大数运算。
(4) 提供至少 5 组典型测试数据。
加减法的模块进行设计时,要考虑诸多情况,譬如:加法的进位,减法借位,负数的考虑。
定义三个字符数组(最大下标 1001)存储两个运算数的每位数和结果,计算时从倒位循环
逐位计算。

©1.2 魔方阵

【难度系数】3 级
【任务描述】
幻方(Magic Square),也称魔方阵,是指组成元素为自然数 1、2、…、n 的平方的 n×
n 的方阵,其中每个元素值都不相等,且每行、每列及主、副对角线上各 n 个元素之和都相
等。这个相等的和称为魔术数字。1977 年,中国考古学家在安徽阜阳县双古堆西汉古墓中
发现汉文帝七年(前 173 年)的太乙九宫占盘,是中国汉代幻方的实物。三阶幻方也被称为
九宫格。南宋数学家杨辉著《续古摘奇算法》把类似于九宫图的图形命名为纵横图,书中列
举 3、4、5、6、7、8、9、10 阶幻方。其中所述三阶幻方构造法:“九子斜排,上下对易,
左右相更,四维挺出,戴九履一,左三右七,二四为肩,六八为足”,比法国数学家 Claude
Gaspar Bachet 提出的方法早三百余年。

(a)太乙九宫占盘 (b)太乙九宫占盘图 ©3 阶魔方阵 (d)5 阶魔方阵
本问题的要求是:编写程序,输出奇数阶魔方阵。
【功能要求】
(1) 输入任意阶数(奇数),输出其对应的魔方阵。
(2) 设计一个简单的交互界面,根据用户的要求,输入阶数,输出魔方阵。
①将 1 放在第一行中间一列;
②从 2 开始 n^2 为止,每个数字的排放规律为:每一个数字排放的行比前一个数字的行数减
1,每个数字排放的列比前一个数字的列数加 1;
③行的特殊情况:如果前一个数字的行数为 1,那么该数字排在第 n 行;
④列的特殊情况:如果前一个数字的列数为 n,那么该数字排在第 1 列;
⑤其他情况:如果按照上面规律确定的位置上已经有数字,则把要排的数字放在上一个数字
的下面。
5 阶幻方即它的每一行,每一列和对角线之和均相等。
(1)将 1 放在第一行中间一列。
(2)从 2 开始直到 25 各数依次按:
(3)每一个数存放的行比前一个数的行数减 1,列数加 1.
(4)如果上一个数的行数为 1,则下一个数的行数为 5,列数加 1。
(5)当上一个数的列数为 5 时,下一个数的列数应为 1,行数减 1.
(6)如果按上面步骤确定的位置上已经有数(本题中不为 0),或者上一个数是第 1 行第 5
列时,则把下一个数放在上一个数的下面。

©1.3 进制转换

【难度系数】4 级
【任务描述】
进制也就是进位计数制,是人为定义的带进位的计数方法。利用进制,人们可以用有限
的数字符号表示所有的数值。在中国,根据现已发现的商代陶文和甲骨文,可以看到当时已
能用一、二、三、四、五、六、七、八、九、十、百、千、万等十三个数字,记十万以内的
任何自然数,表明我国商代已采用了十进位值制。
图 2 甲骨文中的十进制计数法
本问题的要求是:编写程序,将输入的任意进制正整数,转换成指定的进制数,并输出
结果。
【功能要求】
(1)设计并实现一个可进行交互操作的菜单,实现二进制、八进制、十六进制、十进制
之间的相互转换,并输出转换结果。
(2)对输入为负数的情况给与响应。
设计选择二个菜单,分别选择转换数的进制(二进制、八进制、十六进制、十进制)和转换
后的进制(二进制、八进制、十六进制、十进制);
输入转换数(用字符串,因为考虑 16 进制的 A-F)
转换方式:
简单方式:每一种转换设计一个函数,共 9 个函数
通用方式:可以考虑使用 10 进制中转,设计一个 x 进制转换成 10 进制的函数(采用 x 每位
乘法 10 的次方数算法)和 10 进制转换成 y 进制的函数(采用除 y 取余数算法,就是%运算),
解决 x 进制转换 y 进制。

©1.4 猜数字游戏

【难度系数】4 级
【任务描述】
编写程序,实现一个猜数字小游戏。
游戏规则:两个玩家,一方为电脑,一方为人。一方出数字,一方猜。出数字的一方首
先想好一个正整数,不告诉另一方,然后告知另一方开始猜测。
假设正确数字为 98:
如猜测为 56,则提示猜测方“猜小了”;
如猜测为 109,则提示猜测方“猜大了”;
持续猜测,直到猜中为止,最后显示游戏总时长。
【功能要求】
(1) 电脑和玩家可以互换(出数字/猜数字)的身份。
(2) 设计简单、友好的交互界面。可反复运行程序,直到用户选择退出为止。
用二分法实现猜数,如果使用二分法进行猜 100 以内的任何一个随机数,最多七次就可以正
确猜对该随机数。
二分法又可以被称为二分查找,它描述了在有序集合中搜索特定值的过程。广义的二分查找
是将问题的规模尽可能的缩小到原有的一半。
数字采用随机函数产生

©1.5 整数拆分

【难度系数】3 级
【任务描述】
对任意正整数 n,将其拆分成若干个正整数之和,输出所有的拆分方案。
正整数的拆分,就是把一个正整数表示成若干个正整数之和的形式。每一种表示方法,
就是正整数的一个拆分方案。例如:
2=1+1
3=1+2=1+1+1=2+1
【功能要求】
(1) 输入任意正整数,输出所有拆分方案(允许重复)。
(2) 设计简单的交互界面,可反复运行程序,直到用户选择退出为止。
例如:n==6 有

6
5+1
4+2 4+1+1
3+3 3+2+1 3+1+1+1
2+2+2 2+2+1+1 2+1+1+1+1
1+1+1+1+1+1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

共 11 种分解方法,所以输出应该为 11。
分析一
拆分按照因子从大到小排列,每一次拆分都可视为问题规模的减少,所以可以使用递归解决。
设 q(n,m)为整数 n 使用不大于 m 的整数进行拆分的所有情况总数,因此有
1)当 nm 时
可以分为两种情况,一个是使用 n 本身,只有一种情况。二个是使用不大于 n-1 的整数进行
拆分。
所以此时 q(n,m)=1+q(n,n-1);
2)当 n
使用比 n 大的数进行拆分没有意义,所以此时 q(n,m)=q(n,n)
3)当 n>m 时
这时候有两种情况,一个是使用 m 对 n 进行拆分,一个是使用小于 m 的数对 n 进行拆分
对于第一个,使用 m 对 n 进行拆分,所以拆分出来的情况最大的数是 m,剩下的所有数加起
来为 n-m,问题变成使用不大于 m 的整数对 n-m 进行拆分,所以此时为 q(n-m,m)
对于第二个,使用小于 m 的数对 n 进行拆分,表示为 q(n,m-1)
4)当 n
1 或者 m1 时 只有一种情况,返回 1。注意,这里可能会漏掉 m1 的情况,实际
上这种情况是存在的。
可以使用递归函数编程实现

©1.6 分数加法计算问题

【难度系数】3 级
【任务描述】
分别给出两个正分数的分子和分母,按分数运算的方法,求这两个正分数之和。
【功能要求】
(1) 加数和被加数都是真分数。
(2) 如果和的分子分母有公因子,应进行约分。
(3) 如果和大于 1,应化为带分数。
(4) 设计简单的交互界面,可反复运行程序,直到用户选择退出为止。
设计菜单输入二个分子的分母、分子
判断输入是否合理,要注意解决负数问题(就是减法了)
计算结果(约分和化为带分数)
输出结果
设计中要用不同的变量存放分子、分母、带分数

©1.7 整数乘除法练习器

【难度系数】3 级
【任务描述】
编写一个整数乘除法练习器,提供给小学生使用,练习器可进行 100 以内任意两个整数
的乘除法练习。
【功能要求】
⑴ 随机生成乘法或除法运算符。
⑵ 随机生成 100 以内的两个正整数。
⑶ 乘法的计算结果不得大于 100,否则重新生成题目。
⑷ 除法的计算结果必须为整数,否则重新生成题目。
⑸ 每次练习开始前,由用户指定要做的题目数(题目数≤100)。根据题目数,随机产
生满足上述要求的试题。要求所有试题不重复。
⑹ 对用户输入的答案判断正确与否,并计分,例如答对一题得 10 分。
⑺ 练习结束后,统计并输出回答正确和错误的题目数、最后得分,并给出相应的评语。
结构可以参考课程设计文档模板的加减法,注意菜单的完整性

©1.8 整数加减法练习器

【难度系数】3 级
【任务描述】
编写一个整数加减法练习器,提供给小学生使用,练习器可进行 100 以内任意三个整数
的加减法混合练习。
【功能要求】
⑴ 随机生成加减混合运算题目,题目中的三个正整数均在 100 以内,随机生成。
⑵ 要求无论是中间结果,还是最后结果都不得大于 100。
⑶ 要求无论是中间结果,还是最后结果都不得为负数。
⑷ 每次练习开始前,由用户指定要做的题目数(题目数≤100)。根据题目数,随机产
生满足上述要求的试题。要求所有试题不重复。
⑸ 对用户输入的答案判断正确与否,并计分,例如答对一题得 10 分。
⑹ 练习结束后,统计并输出回答正确和错误的题目数、最后得分,并给出相应的评语。
同上题

©1.9 回文数问题

【难度系数】4 级
【任务描述】
对任意输入的十进制正整数,判断该数在二进制、八进制、十进制和十六进制表示方法
中是否为回文数。只要该数在某一个进制中是回文数,就输出“进制、对应回文数”。
如果一个数从左往右读与从右往左读是一样的,就说该数是回文数。例如 32623 是一个
回文数。回文数的特征与数字表示的进制有关。例如十进制数 15 不是回文数,但如果改用
二进制表示,为 1111,则它就是回文数。
【功能要求】
设计并实现一个可进行交互操作的菜单,用户可选择继续输入整数并判断回文数,或选
择退出系统。
输入十进制正整数
转换成二进制、八进制、十进制、十六进制数
取出数据的各位,分别判断是否是回文
输出
注意十六进制数数的表达方式(A-F),存放的方式(可否用字符串)

©1.10 八皇后问题

【难度系数】4 级
【任务描述】
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题由国际西洋棋
棋手马克斯·贝瑟尔于 1848 年提出:在 8×8 格的国际象棋棋盘上摆放八个皇后,使其不能互
相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯
认为有 76 种方案,1854 年在柏林的象棋杂志上不同的作者发表了 40 种不同的解,后来有
人用图论的方法求出 92 种方案。计算机发明后,可以运用多种计算机语言解决八皇后问题。
【功能要求】
输出八皇后问题所有可能的方案(建议输出到文件),以及方案总数。
可以用回溯法递归和非递归(建立一个栈)的方式,网上有许多参考
回溯法递归思路:
1.想把 8 个皇后放进去,肯定最终每行只有一个皇后,每列只有一个皇后。
2.设个二维数组 chess [ i ] [ j ] 模拟棋盘,cas 存放摆法。i j 是表示 i 行 j 列:
3.从上往下一行行的放皇后,放下一行时从最左边(第 0 列)放起,如果不能放就往右挪一
格再试。注意判断右边有没有越界出棋盘。
4.写一个函数专门判断当前位置能不能放,只需要判断该位置的横、竖、两对角线,这四条
线上有没有其他皇后即可。命名为 check。
5.如果把最后一行放完了,那就统计上这个摆法,cas++。摆完最后一行不能继续判断下一
行了。
6.放完一种情况,还要探究其他情况,可以把现在放好的皇后“拿走”,然后再试探 之前
没试探过的棋盘格。
7.拿走皇后操作可以和不能放皇后的操作用同样的代码实现:
如果这个位置不能放,要把它置零,表示没有皇后。
如果这位置能放,那就放皇后(置 1)。等一种情况讨论完,还得把它拿开,“拿开”也是置
零的操作。
所以应该想办法排列上述代码,保证已经把摆出的情况记录下来,之后执行“拿开皇后”代
码。

©1.11 24 点游戏

【难度系数】5 级
【任务描述】
任意给出 4 张牌,计算能否用+、-、×、÷将其点数组合成 24。
【功能要求】
输出其所有可能的组合式。
网上有许多该题的算法
穷举法:
给出任意两个数字,可以进行 6 种四则运算,求出最多 6 个值。以数字 a 和 b 为例,有:
加(a+b)、减(a-b)、被减(b-a)、乘以(ab)、除以(a/b)和除(b/a)
abcd 共计四个数,如果顺序固定,则有 5 种计算顺序(★代表上面 6 种四则运算中的一种):
((a★b)★c)★d、(a★b)★(c★d)、(a★(b★c))★d、a★((b★c)★d)、a★(b★(c★d))
给出的四个数字,n1n2n3n4,有 4
32=24 种全排列的方法
具体思路:
上面 5 种括号表达式都可以单独写成函数,函数内部按照括号的优先级+从左往右的顺序进
行运算,最后返回计算结果。
每个表达式中有 3 个’★’号,它们是四则运算符(+、-、
、/),可以定义一个全局字符数
组,存放 4 这四个字符。
对表达式的每个★’符号进行遍历(4 种运算符),使用 3 层 for 循环实现(层数对应 3 个
★’符号,每层循环 4 次,对应 4 种运算符),最后将符合条件的表达式输出。
【注意】:由于式子中存在除法,所以不能用整型数据进行计算(比如(int)(2/4) = 0),应
该使用 float 或 double 类型。
浮点数的表示是不精确的,所以运算结果不能直接和 24 比较。它们可能只是在某个范围内
相等,如 float 变量的精度为小数点后六位,所以我们只要保证小数点后 6 位和 24 相等
(全为 0)即可。

©1.12 清除数字游戏

【难度系数】4 级
【任务描述】
游戏方法为:首先随机生成一个 n 阶整型矩阵,然后给出一个整数 a,玩家从 n 阶矩阵
中选择两个数字,如果两者之和为 a,则将这两个数字清除(相应矩阵元素置 0),接着计算
机再给出一个数字 b,玩家再从矩阵剩下的元素中选择两个数字,看是否能清除,以此类推,
游戏一直进行到矩阵中所有的数字被清除为止。
【功能要求】
⑴ 用户可指定生成的矩阵阶数 n。
⑵ 游戏中,玩家输入两个数字的坐标,计算机判断对应位置的元素之和是否为给定的
数字,如果是,则将这两个数字清 0。
⑶ 游戏结束后,显示游戏耗费的总时间。
1、使用二维数组,如 55 的,使用随机数函数产生二维数组中数据(可以设计范围为 1-99),
屏幕显示二维数组。
2、使用随机数产生 0-24 范围内的整数二个(表明在 5
5 矩阵中随机产生两个位置),根据
位置取出 55 矩阵对应的数据求和,将结果显示出来(就是计算机给一个数),让用户从键
盘输入两个数,判断这两个数是否是 5
5 矩阵刚刚得到的位置上的数。
如果是,将这两个位置数据换成 0,继续第二步(随机范围缩小 2,因为有两个数清除了,
对应位置计算要跳过数值为 0 的数),否则显示错误,继续第二步。

©1.13 万年历

【难度系数】5 级
【任务描述】
设计并生成一个万年历。
【功能要求】
⑴ 输入一个年份,在屏幕上输出该年的年历(包括每月的天数和所对应的星期几),并
且在每月的左上角或右上角输出相应的年份和月份,要求输出界面尽可能清晰、美观,符合
年历显示规范。假定输入的年份在 1-9999 年之间。
⑵ 输入年、月,输出该月的月历。
⑶ 输入年、月、日,输出距今天(程序执行的当前日期)有多少天,输出该天是星期
几,输出该天是否是公历节日。
网络上有很多 C 语言万年历的程序

  1. 求星期公式:星期=[5+A(实际天数)] mod 7
  2. 干支计算公式
    六十甲子干支序号,从 1->59->0。
    六十甲子干支序号=[23+A(实际天数)] mod 60
  3. 二十八宿计算公式:二十八宿序号=[23+A(实际天数)] mod 28
  4. 实际天数 A 的计算:A=B(基本天数)+C(闰日天数)
    B=(计算年-1)*365+(要计算到年的月日天数)
    例:1984 年 2 月 1 日的基本天数 B=(1984-1)*365+(31+1)=723827(天),
    其中,31 是 1 月为 31 天,1 为 2 月 1 日为 1 天。
    公元 308 年 8 月 28 日的基本天数
    B=(308-1)*365+(31+28+31+30+31+30+31+27)=112055+239=112294(天)
    这里的(要计算到年的月日天数),用的是公历
    C=(计算年-1) div 4 -误差修正值+ fixValue2
    fixValue2 为 0 或者 1。常值为 0,当年数为闰年(公历闰年法)之中的 3 月 1 日之后的为 1。
    误差修正值推算:
    公元元年 1 月 1 日至 1582 年 10 月 14 日为 0。
    1582 年 10 月 15 日至 1699 年 12 月 31 日为 10。
    从 1701 年 1 月 1 日起每增加一个世纪累加 1,但能被 400 除尽的世纪不累加 1。此方法推
    算即可。
    –有一个问题,1700 年这一年的修正值应为多少呢?算法中正好没有讲到,但看来应该是
    10。
    例 1701 年 1 月 1 日起误差值为 11,而 1801 年 1 月 1 日起误差修正值为 12,而 1901 年 1 月
    1 日起误差修正值为 13,但 2001 年误差修正值仍为 13,因为 2000 年能被 400 整除,故不
    累加。而 2101 年 1 月 1 日起误差修正值为 14。
  5. 实例:1998.3.15 的星期、干支与二十八宿
    B=(1998-1)*365+(31+28+15)=728979
    C=(1998-1) div 4 - 13 + 0 = 486
    A=B+C=728979+486=729465
    星期序号=(5+729465) mod 7=0,即为星期日
    干支序号=(13+729465) mod 60=58,即为辛酉
    二十八宿序号=(23+729465) mod 28=4,即为房
    二十四节交节日算法:用已知年的交接时辰加上 22 个小时 35 分,超过 24 要减去 24,分数
    足 60 进 1 个小时,即得到 8 年后的各节交节时辰。
    如 2000 年雨水交节时辰为 16 时 22 分,则 2008 年雨水交节时辰为 14 时 52 分。
    因为 16 时 22 分+22 时 35 分=38 时 57 分。38-24=14 时。
    谁知道公元元年到公元八年的交节日,这个算法就可以实现了。–好象逆算法可以解决这个
    问题。
    农历闰月算法:农历中,二十四节气(十二节气和十二中气)的中气落在月末的话,下个月就
    没有中气。农历将这种有节(节气)无气(中气)的月份规定为闰月。平均计算,19 年有七个
    闰月。

©1.14 迷宫问题

【难度系数】5 级
【任务描述】
给定一个 n×n 大小的迷宫,假设其入口为左上角,出口为右下角,找出从入口到出口
所有可能的路径。如下图所示为一个 7×7 的迷宫,其中左上角标有箭头“→”处为迷宫入
口,右下角标有箭头“→”处为迷宫出口,迷宫中黑色方块“■”表示墙,白色方块“□”
表示通路。


【功能要求】
⑴ 迷宫数据记录在磁盘文件中,初始时,从磁盘文件读入迷宫数据:整数 0 表示通路,
整数 1 表示墙。
⑵ 程序开始时,从键盘指定迷宫的入口坐标。
⑶ 移动操作可以从上、下、左、右、上左、上右、下左、下右八个方向进行。
网络上有很多参考算法
使用二维数组(如 10*10)表示迷宫,1 表示墙,0 表示路,外围均是 1
使用穷举法,走出迷宫有两种技术:栈和递归
走迷宫的规则:当前坐标是(i,j)下一步可以往四个方向行走,上下左右,可以用在迷宫数
组 0 标识可以走,1 标识不能走 2 标识已经走过 3 标识回退的路。
用栈的回溯控制实现迷宫,如果没有到出口,探索如下四个方位
(x-1,y)且 x,y>0,(x+1,y)且 x,y>0,(x,y-1)且 x,y>0,(x,y+1)且 x,y>0
问题描述
给定一个迷宫 Maze,并给定迷宫的路口和出口,用递归的方式搜索一条从入口到出口的可
行路径(其中红色为围墙,蓝色为可行路),若存在这条路径,则打印出路径,若不存在路
径,则输出信息,表示没有路径。
问题解决思路和关键点
1 迷宫在程序中如何表示
因为迷宫中每一个点的信息都只有两种可能(要么能走,要么不能走),我们可以以二维数
组 Maze[i][j]=value 来存储这样一个迷宫,其中用 Maze[i][j]表示迷宫坐标的(i,j),并
且有 0≤i<Row、0≤j<Col,而 Row 和 Col 分别是迷宫的行数与列数。value 只有两种值:
即 0 或 1,0 表示当前的格子为红色的墙壁,1 表示当前的格子为蓝色的可行路。
2 迷宫的递归如何实现
迷宫其实有很多的递归实现方法,我们小组主要采取了递归+回溯的算法求迷宫的一条可行
路径,同时对迷宫的功能进行了拓展,即递归+回溯+剪枝+记忆化搜索求一条迷宫的最短路
径并加以打印,此外我们还写了一种算法作为拓展延伸,虽然它并没有用到递归的实现,但
是用了广度优先搜索的算法,同样也能够求出最短路径并输出,在这里我们就不介绍这种广
度优先搜索的算法,程序中有相应的注释来介绍该算法。
首先,我们在这里阐述一下求迷宫一条可行路的算法。我们用函数:void BFS (int NowRow
int NowCol)来进行迷宫的搜索,两个参量 NowRow 和 NowCol 分别代表迷宫现在所在格子的
行坐标和列坐标,那么递归中止的条件就是 NowRow=迷宫终点的行坐标,NowCol=迷宫终点
的列坐标。达到了这个条件我们就将全局变量 Flag 置为 1,然后返回上一层递归。既然只
要求一条可行路径,那我们如果再加一条 if 语句来判断 Flag 的值,如果 Flag 为 1 那么就
直接返回上一层,这样可以在一定程度上减少程序的运行的时间。如果还没有到终点,我们
就对它周围的八个格子调用一次 CheckOK 函数,该函数用于检查其周围的八个格子是否能
够走。因此如果能够走,就再调用递归,如此下去直到走到终点或是没有通路为止,此时再
返回当前状态,对下一个格子调用递归。
3 迷宫怎么求最短路
用递归加回溯求迷宫的最短路的值并不难,我们只需要在原有的 BFS 函数中加入一个参量
dist:void MinBFS (int NowRow int NowCol,int dist),参量 dist 的作用就是代表当前
位置与起点的距离,我们起始调用函数时让 dist 的值为 0,即起点距离起点的路径为 0,此
后我们每调用一次递归,就让 dist 的值加一即:MinBFS (NextRow NextCol,dist+1),这样
就可以保证每一个点的距离都是它上一个点的距离+1。为了求最短距离,我们需要定义一个
全局变量 mindist,mindist 的初始值被设为 INFINITY(即用宏定义的无穷大),而当迷宫
走到终点时,将 dist 的值与 mindist 的值做一个比较,如果 dist<mindist,那么我们就
将 dist 的值赋值给 mindist 并更新最短路。
4 如何判断迷宫周围的可行路
我们用一个 CheckOK 函数:int CheckOK (int NowRow,int NowCol,int dRow,int dCol),
NowRow 表示当前行坐标,NowCol 表示当前列坐标,dRow 表示下一个格子行坐标的增量,dCol
表示下一个格子列坐标的增量,并且-1≤dRow,dCol≤1。
在 Check 函数中,我们要判断以下五种情况:①下一个格子不能走对角线,并且不能原地走
②下一个格子不能行越界③下一个格子不能列越界④如果下一个格子在曾经的搜索中被走
过那就不允许再走⑤如果下一个格子是障碍物,那么也不能走。
判断完五种情况后,我们就可以以 int 的形式返回是否可走,1 表示可行,0 表示不可行。

©1.15 初级五子棋游戏

【难度系数】4 级
【任务描述】
五子棋是一种两人对弈的策略型棋类游戏。双方分别使用黑白两色的棋子,下在棋盘直
线与横线的交叉点上,先形成五子连珠者获胜。关于五子棋的起源,史料并无明确记载。相
传,在“尧造围棋”之前,五子棋就已流行于民间。大约在南北朝时期,五子棋随围棋传入
高丽(今朝鲜),后又传至日本。20 世纪初,传统五子棋及连珠从日本传入欧洲,英文称之
为 FIR(Five In A Row)。

本问题的要求是:编写程序,实现一个人机对战的五子棋小游戏。
【功能要求】
(1) 采用人机对战模式。人和计算机轮流落子。
(2) 程序判断输赢,一方赢则游戏结束。
(3) 计算机无落子策略,为随机落子。
(4) 可提供进阶难度,即计算机有落子的策略。
(5) 设计友好的交互界面。
(6) 重复游戏,直到选择退出游戏为止。
五子棋属于零和游戏:一方胜利代表另一方失败,而零和游戏的代表算法就是极大值极小值
搜索算法。
极大值极小值搜索算法
A、B 二人对弈,A 先走,A 始终选择使局面对自己最有利的位置,然后 B 根据 A 的选择,在
剩下的位置中选择对 A 最不利的位置,以此类推下去直到到达我们定义的最大搜索深度。所
以每一层轮流从子节点选择最大值-最小值-最大值-最小值…
下面是最简单的算法,运行起来慢点,但是很简单易懂,而且效果很好。如果能够加以优化,
则其实是很好的算法:
1、首先遍历整个棋盘,找到一个可以落子的点,然后假设自己在该点落子,再然后判断如
果棋子落到这个点上后会对自己有什么利益,比如会不会形成冲 4 活三、双活三等等,(事
先将冲四活三、双活三等效果定义上利益值,当然,如果是五个子连起来了的话,利益值要
被定义成最高,最好是无穷大的),将各种效果的利益值相加,得到己方的利益值。
2、将角色互换一下,重复第一步,得到对方的利益值(其实是递桂算法)。
3、将己方的利益值减去对方的利益值,得到该点的总利益值。
4、整个棋盘所有能落子的点都计算出利益值之后,找出利益值最大的那个点,将棋子落到
该点。
当然,这个算法可以有很大程度的优化,比如,如果没有相邻的棋子,可以放弃该点。还有
一旦找出可以胜利的点,就不再继续往下计算。。。。

©2 字符串类
下面提示中采取了链表存储文件(可以不考虑文件的大小),实际上可以用字符数组来存放
文件的内容,只是用数组要事先设定文件中的最大字符数,好确定数组的最大下标

源码

https://pan.baidu.com/s/1pq1Nwwo0hlc_J84F93HM4A?pwd=1111

©2.1 单词统计和替换

【难度系数】4 级
【任务描述】
对任意一篇英文文章,统计其中每个单词分别出现了多少次,并可替换指定的单词。
【功能要求】
⑴ 英文文章以文件形式输入。
⑵ 统计的结果保存到文件。
⑶ 对单词进行替换时,允许用户选择全部替换或逐个替换。替换完成后,将文章保存
到文件。
程序可以分为两部分功能,统计与替换,设计菜单解决
基本思想:
1、文件设计:文件中的单词之间用一个空格隔开(可以考虑只是一个空格,文件中没有其
他空格)
2、设计结构体节点,数据域为字符数组,可以考虑最大单词的长度,如 30,指针域是指向
结构体本身的指针
3、设计读入文件到链表函数(采用前插法),链表中每个节点存放一个单词,要解决单词区
分问题(关键算法)
4、设计统计单词函数:使用双重循环方式
遍历链表各节点(第一次遍历),取出数据域单词字符串,保存到某字符指针或字符数组中,
将单词输出到文件,相同单词计数器变量=1
遍历链表各节点(第二次遍历),保存的第一次遍历的单词与当前数据域串比较(用串
比较函数),相同单词计数器变量++,遍历完将单词计数器变量数值保存到文件
5、设计替换函数
输入原始串与替换串
全部替换:遍历链表各节点,取出数据域单词字符串,如与原始串相同,将替换串保存到链
表该节点数据域
部分替换:遍历链表各节点,取出数据域单词字符串,如与原始串相同,提示替换否,根据
用户输入分别处理
重新遍历链表,取出数据域,保存到文件(保存时增加一个空格)

©2.2 单词匹配

【难度系数】3 级
【任务描述】
已知一个包含若干英文单词的词典(1≤n≤100),对任意输入的某一个单词 word(字
典中的单词和给定单词 word 的长度均不超过 255),进行如下查询操作:
⑴ word 在词典中的位置。
⑵ 词典中仅有一个字符与 word 不匹配的单词位置。
⑶ 词典中比 word 多(或少)一个字符(除此字符外其余字符均匹配)的单词位置。
⑷ 上述查找时,如有多个单词符合条件,仅输出其第一个单词的位置。
【功能要求】
⑵ 词典以文本文件格式存放,每行一个单词。
⑵ 查找完成后,输出找到的单词在词典中的位置以及该单词,如未找到指定单词,应
给出提示信息。
基本思想:
1、设计结构体节点,数据域为字符数组,可以考虑最大单词的长度 255,指针域是指向结构
体本身的指针
2、设计读入文件到链表函数(采用前插法),链表中每个节点存放一个单词,要解决单词区
分问题(关键算法)
3、设计统计单词函数
输入单词
查找单词位置函数:单词行数计算器=0,遍历链表各节点(每次循环单词行数计算器++),
取出数据域单词字符串与输入单词比较(用串比较函数),相同返回行号
查找仅有一个字符与单词不匹配函数:单词行数计算器=0,遍历链表各节点(每次循环单词
行数计算器++),取出数据域单词字符串与输入单词比较(不用串比较函数,单独编写逐个
字母比较函数),满足条件返回行号
多一个或少一个算法相同,不同处在串比较函数

©2.3 简单翻译程序

【难度系数】4 级
【任务描述】
建立一个包含若干英文单词的词汇表文件。输入一个英文单词或者句子,在屏幕上显示
相应的中文翻译。
【功能要求】
⑴ 建立一个包含若干英文单词的词汇表文件,系统初始化时读入内存,用于进行句子
翻译。
⑵ 用户可以输入单词或者句子,在屏幕上输出对应的翻译结果。
⑶ 用户可对词汇表进行添加和删除,并能将更新的词汇表存储到文件中。
关键点:如何设计英文单词的词汇表文件,可以考虑一行一个单词与译文,中间用空格隔开
基本思想:
1、设计结构体节点,数据域为二个字符数组,一个存放单词,一个存放译文,可以考虑最
大单词的长度 255,指针域是指向结构体本身的指针
2、设计读入单词表文件到链表函数(采用前插法),链表中每个节点存放一个单词和译文,
要解决单词与译文分问题(空格)、单词与单词区分(回车)
3、翻译函数
输入单词或句子字符串(串中有空格表示句子)
定义字符串数组保存输入句子中的某单词,逐个分析输入句子,形成循环(循环条件是出现
空格)将用户输入拆分成单词字符串
循环中遍历链表,输入单词串与当前节点数据域中的单词比较,相同输出译文串
4、词表增加函数
输入单词串
输入译文串
链表尾部插入新节点,数据域赋值
5、词表删除函数
输入单词串
循环中遍历链表,输入单词串与当前节点数据域中的单词比较,相同将前一个节点指针域赋
值给当前节点(删除节点)指针域,退出遍历
重新遍历链表,将数据域保存到词表文件

©2.4 高级语言源程序注释部分的处理

【难度系数】4 级
【任务描述】
将 C 语言源程序中的所有注释都去掉,并将去掉注释的文件和被去掉的注释分别存放
到新的文件中。
【功能要求】
⑴ 读取用户指定名字的源文件,例如,用户输入“exercise.cpp”,程序能从该源文件中
读取源代码进行处理。
⑵ 将读出的源代码中的注释(同一行中“//”之后的部分,以及“/”和“/”之间的
部分,包括符号“//”、“/”、和“/”)删除。
⑶ 将去掉注释部分的源程序和被删除的注释文本,分别保存到两个不同的文件中,允
许用户指定文件名。
使用链表保存程序文件,链表节点数据域是一个字符,具体算法可参考 10 题的源程序中做
法(统计源程序注释行数)
设计二个结构体,数据域均为一个字节的字符
打开文件读文件时候,可设计当读到“/”或“”字符时候,读出下一个字符是否是“/”、”
或”/”(判断是否是//、//),注释字符写入一个结构体,非注释字符写入一个结构体。
设计标志变量,其值为 1 或 0,表明当前字符是否是注释。

©2.5 模拟 C 语言语法分析器

【难度系数】3 级
【任务描述】
编写一个程序,检测 C 语言源程序中的简单语法错误。
【功能要求】
⑴ 读取用户指定名字的源程序,例如,用户输入“ exercise.cpp”,程序能从该源文件
中读取源代码进行处理。
⑵ 能检测源程序中的语法错误,包括:不配对的圆括号、方括号和花括号、双引号、
单引号、不合法的注释、不匹配的 if-else 等。
⑶ 程序能输出有语法错误的行号以及错误的原因。
使用链表保存程序文件,链表节点数据域是一个字符,具体算法可参考 10 题的源程序中做
法(查找最大最小函数行数,不一定采取尾插法,前插法也可以)
由于有多个检查([]、()、“”等),可以设计多个对应的函数进行

©2.6 英文打字训练程序

【难度系数】3 级
【任务描述】
随机产生包含 100 个英文字母的范文,要求用户按范文打字录入。录入开始时进行计
时,录入结束后,计算录入的时间和正确率。
【功能要求】
⑴ 随机产生包含 100 个英文字母的范文,范文既要显示在终端上,同时又要保存在文
件中。
⑵ 用户录入的结果也应保存到单独的文件中。
⑶ 打字录入开始前应有提示和倒计时。
⑷ 打字录入结束后,输出录入所用时间和正确率:正确率=正确的字符数/100。
循环 100 次,随机产生 1 个数字(1-26),将随机数转换成字母(用 ASC2 对应码关系),
保存到字符数组中,将数组保存到文件中
屏幕显示字母
提示与倒计时(就是在指定位置显示,见本文件首部,网络上查有倒计时函数)
计时(参见清除数字游戏代码)开始
录入结束(回车)
计时结束
将录入结果保存到字符串与文件
循环比较两个字符串(随机串、录入串),统计正确率

for(i=0;i<100;i++)
{
a=rand()&1;//a=rand()&1 就是把 rand()产生的随机数和 1 进行与运算,如果 rand()产生的是奇数,则 rand()&1 结果为 1,如果 rand()产生的是偶数,则 rand()&1 结果为0,最后将运算结果赋给 a。rand()&1 相当于 rand()%2,但是运算速度比 rand()%2 要来得快
if(a==0) c[i]='A'+rand()%26;
 else c[i]='a'+rand()%26;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

©2.7 简单的文件相似度统计

【难度系数】3 级
【任务描述】
任意给定两篇英文文章,统计其中相同的单词数在各自文章中所占的百分比。
【功能要求】
⑵ 两篇文章的文件名由用户输入。
⑵ 将文章 1 和文章 2 中相同的单词、相同单词在两篇文章中分别出现的次数、相同单
词分别占各自文章单词总数的百分比、两篇文章相同单词的总数输出到屏幕上,同时也保存
到一个单独的文件中。
1、设计结构体节点,数据域为字符数组,可以考虑最大单词的长度 255,指针域是指向结构
体本身的指针
2、建立两个链表,设计读入二个文件单词分别到两个链表的函数(采用前插法),链表中每
个节点存放一个单词,要解决单词区分问题(关键算法),设计两个单词数计算器全局变量,
读入文件单词的同时算出单词数
3、设计比较函数
设计相同单词计算器全局变量
遍历链表 1,取出单词
遍历链表 2,比较单词,相同,相同单词计算器全局变量++
4、计算结果,输出结果到文件

©2.8 背单词程序

【难度系数】4 级
【任务描述】
建立一个包含若干词条的词汇表文件,其中每个词条由英文单词和中文释义两部分组成,
例如:
利用该词汇表文件,实现背单词的功能。
【功能要求】
⑴ 读取已有的词汇表文件。
⑵ 能浏览词汇表的全部词条。
⑶ 背单词功能:由用户指定每次背单词的数目,程序随机挑选指定个数的单词(不重
复);程序给出中文释义,用户则输入相应的英文单词;判断用户输入单词的正误,输入正
确记 1 分;对每个单词统计总得分;总得分低的单词,为生疏单词,让这类单词多出现。
英文单词的词汇表文件,可以考虑一行一个单词与解释,中间用空格隔开
基本思想:
1、设计结构体节点,数据域为二个字符数组,一个存放单词,一个存放解释,可以考虑最
大单词的长度 255,指针域是指向结构体本身的指针
2、设计读入单词表文件到链表函数(采用前插法),链表中每个节点存放一个单词和解释,
要解决单词与解释分问题(空格)、单词与单词区分(回车)
可以设计一个存放单词总数量的全局变量,读文件同时计算单词总数量
3、浏览函数
循环中遍历链表,输出单词与输出中文解释串
4、背单词函数
输入背单词数量
循环 1-背单词数量
产生 1-单词总数量范围随机数,可以考虑存放到一个整数二维数组中(最大列数 4),
每行 4 列分别存一个随机数、对应单词、解释和得分
遍历链表,寻找随机数对应结点,取出数据域中的单词串、解释串
循环
依次显示单词解释
输入单词(可考虑输入特殊字符退出)
判断输入单词是否正确,计算得分
是否有答错单词,有继续循环

©2.9 数据构建器

【难度系数】3 级
【任务描述】
对任意输入的字符串,将其按指定次数插入到指定的文件中。
【功能要求】
⑴ 能读取指定的磁盘文件:文件可以是纯英文、纯中文或中英文混合等不同样式。对
于中文文件,字符串必须插入在两汉字之间。
apple 苹果
⑵ 用户输入要插入的字符串,以及插入的次数 n。程序将字符串插入到文件的 n 个随
机位置上,并将文件存盘。
⑶ 用户输入某字符串,统计该字符串在文件中出现的次数。
⑷ 至少需要测试三个文件:纯英文,纯中文,中英文混合。
⑸ 关键算法,文件读取时候,如何判断是英文、中文字符
⑹ 基本思想:
⑺ 1、设计结构体节点,数据域为一个字符数组(长度二个字符,可以存一个汉字或一
个英文),指针域是指向结构体本身的指针
⑻ 2、设计读入文件到链表函数(采用前插法),链表中每个节点存放一个英文或汉字,
要解决读取文件字符后判断是否是汉字(汉字的 ASC2 码大于 127),如果是汉字,
连续读二个字符保存在结点数据域,如果是非汉字,读一个字符保存在结点数据域,
数据域第二个结点可以保存一个 ASC2 码小于 128 的不可见字符,如 ASC2 码 0,便
于区分结点是否保存的是汉字
⑼ 用全局变量保存链表结点个数 m
⑽ 3、用户输入插入字符串(可以是汉字)和插入次数 n,计算输入字符串包括多少个
汉字和英文字符,保存变量 k 中
⑾ 循环产生 n 个 1-m 的随机数(代表要将输入串插到链表的这 n 个结点位置)
⑿ 遍历链表,寻找当前位置
⒀ 循环 1-k 次
⒁ 插入新结点,将输入串依次字符或汉字插入新结点数据域字符
⒂ 修改 m 值(m=m+k),链表增加了 k 个结点
⒃ 4、遍历链表,保存数据域到文件

©2.10 源程序简单分析器

【难度系数】3 级
【任务描述】
从文件读入 C 程序,统计其中的代码行、注释和空行数;并统计程序中的函数个数、函
数的平均行数,以及规模最大和最小的函数及其开始行号。
【功能要求】
⑴ 用户指定要读取的 C 源程序文件名,从文件中读入 C 语言源程序。
⑵ 分析内容包括:代码行数,注释行数,空行数,函数个数,函数平均行数,规模最
大/最小函数的函数名、代码行数、开始行号。
⑶ 将分析结果保存在单独的文件中。
1、因为函数中的所有“{”与“}”配对,即“{”总个数=“}”总个数,使用计数器
变量 n,初始 n=0
2、从程序文件后向前遍历,第一个“}”是一个函数的开始,遍历的时候,每找到
一个“\n”,函数行数计数器变量 k++
3、从文件未开始,每找到一个“}”,计数器变量 n++,每找到一个“{”计数器变量
n–
4、当 n==0 的时候,前面一个字符肯定是函数的名称后面的第一个“{”前面的“)”
4、此时,向前在遍历到“\n”时前面的字符就是该函数的函数名,将函数名称存放
到指针数组*q[i]中,i 表示第几个函数
将函数的行数放在 b[i]中,函数的开始行号放在 g[i]中

©2.11 文件简单加密与解密

【难度系数】4 级
【任务描述】
用户选定一篇英文文章,用其中由每个字母所在的行数和列数组成的序列,作为该字母
的密码。用这个密码对任意给定的一段英文文本进行加密(如密码不唯一,随机选定一个作
为密码),并可对任意给定的一段密码进行解密。
【功能要求】
⑴ 用户指定选取的英文文章名,读取该文件,作为编码文件。
⑵ 用户指定待加密文件名,读取该文件,对其进行加密。原文、加密文本均以文件形
式保存。
⑶ 用户指定待解密文件名,读取该文件,对其进行解密。密文、解密文本均以文件形
式保存。
⑷ 注意密码的随机性,即在密文中,一个字母的同一个密码尽量不要重复多次出现。
密钥文件:任意英文文章(内容必须包括所有英文大小写字母和可见英文字符),可设定英
文文章段落最大字符数为 999,最多 999 个段落(在英文文章中,一个段落有一个回车键,
代表一行)
原文:任意英文文章
密文:由很多行组成(一行就是原文的一个段落),每行是很多个三位整数(001-999)组成
的串,每二个三位整数对应一个密钥中的英文字符
密钥处理:每个英文字符对应的密码可能有多个,具体多少个要看密钥文件的情况,加密的
时候对某原文英文字符,对照该字符在密钥文件中有多少个,随机产生一个来加密。如某字
符在密钥文件中有 56 个,随机产生 1-56 随机数,就用随机数对应的那个在密钥文件中行列
数来加密。
算法优化:可否使用结构体来存储密钥,该结构体中有成员中保存了某 ASC 码字符在密钥
文件中的所有与该字符相同的字符的行号、列号
1、定义一个一维整型数组 x[128],数组元素 0-127,分别存储对应 ASC2 码字符的密码个
数,如字母 a 在密钥文件中有 269 个,a 的 asc2 码是 97,那么 x[96]=269
遍历密钥文件, 顺序读入字符,将字符转换成 asc2 码,数组对应下标元素的值+1
2、加密设计:循环读原文英文字符,对照该字符在密钥文件中有多少个,随机产生加密序
号。循环读取密钥字符,判断是否等于原文字符,如相等,加密序号++,判断加密序号是否
等于随机数,如果相等,取出密钥文件的当前行数、列数,将该行列数转换成 6 位数字字符
(前三位是行数,后三位是列数,注意 2 应该转换成 002)保存在密文文件中。
3、解密设计:循环读密文,每次读六个字符,前三个字符转换成一个整数,后三个转换成
一个整数,这两个整数表示密钥文件的行列序号,读密钥文件,根据行列号读出原文字符,
输出原文字符到原文

©3 管理系统类
【所有题目尽量使用链表完成,必须使用文件存储】
使用用户设计:
1、用户分类:管理员、普通用户
2、用户文件属性设计:用户编号、用户名称、用户类别、密码、用户邮箱、密码提示问题?、
密码找回答案等
3、用户密码存储加密设计,可使用任一加密方式(含固定密钥),使用户文件打开后不能直
接解密。
4、系统登录时,用户输入密码次数限制(如 3 次),是否考虑设计新用户注册、密码找回功
能。
数据文件设计:
1、基础数据文件(数据变动较小的,关键字唯一,往往是编号,如学号、职工号):职员信
息、学生信息(可增加课程信息、专业信息、班级信息)、住宿楼号信息、车辆信息(驾驶
证信息、交警信息)、商品信息(商品库存信息)、车位车库信息、菜单信息、客户(杂志)
信息、歌单(歌曲歌手信息)、课程学分信息。。。。。
2、业务数据信息(根据时间线不断增加,关键字一般是序号,外关键字是编号与基础数据
文件对应):考勤信息、成绩信息、入住退出信息、违章罚单信息、商品交易信息、车辆收
费信息、点餐收费信息、订阅信息、点歌信息、学生学分信息。。。。。
3、查询统计分析类数据:可以是查询统计结果,较少可以在屏幕显示,较多存放在文件中
功能设计
1、管理员功能:新增用户、删除用户,不能查看用户密码
2、基础数据编辑功能:新增、修改、删除、查询
3、业务数据管理功能:新增业务数据、查询业务数据
4、业务数据统计功能:按时间轴、各种类别统计
下面是某同学的功能设计

源码

https://pan.baidu.com/s/1pq1Nwwo0hlc_J84F93HM4A?pwd=1111

©3.1 考勤信息管理系统

【难度系数】3 级
【任务描述】
某公司对员工的出勤采用计算机管理,为该公司设计一个员工考勤信息管理程序。系统
包括三类用户:管理员,考勤员,普通职员。不同用户具有不同的访问权限。
⑴ 职员信息包括:职工编号,姓名,所属部门,性别,身份证号码,职务,权限等。
⑵ 考勤信息包括:考勤日期,职工编号,出勤状态(出勤,出差,病假,事假,旷工,
休假,迟到,早退,加班等),到岗时间,下岗时间等。
【功能要求】
⑴ 管理员功能:
 管理公司职员基本信息:可进行职员信息添加、删除、查询、修改、存储功能。
 查询某部门全体职工出勤信息。
 统计每个职工月在岗、出差、迟到、加班等时间。
 统计不同职工的年出差时间。
⑵ 考勤员功能:
 管理公司职员的考勤信息:可进行出勤信息添加、删除、查询、修改、存储功能。
 查询某个部门全体职工的出勤信息。
 统计每个职工月在岗、出差、迟到、加班等时间。
 统计不同职工的年出差时间。
 修改本人密码。
⑶ 普通职员:提供查询功能。可按日、按月查询职工本人出勤信息,可修改本人密码。
⑷ 设计提示:管理员对职员信息进行录入,不提供注册功能。不同用户根据密码登录
后,可进行相应操作。

©3.2 学生成绩管理系统

【难度系数】3 级
【任务描述】
为学校设计一个学生成绩信息管理系统。系统可对学生成绩进行管理、查询和统计。系
统用户包括管理员和学生两类。学生成绩信息主要包括:学号,姓名,性别,身份证号码,
登录密码。此外还包括至少 3 门课程的成绩。
【功能要求】
⑴ 管理员功能:
 实现学生成绩信息的管理:添加、查询、删除、修改、浏览、存盘功能。
 查询要求:可按专业查询,按班级查询,按学号查询,按指定课程查询学生成绩信
息。
 可按指定课程. 指定专业. 指定班级等浏览学生成绩,浏览时可指定成绩的排序规
则(升序. 降序),并按相应规则对成绩进行排序输出。
 根据指定课程、指定班级,统计各门课程的平均分、最高分、最低分、各个分数段
(10090,8980,7970,6960,60 以下)人数和占班级人数比例。
 能按课程、按班级统计输出全部上述信息。自行设计输出格式。
⑵ 学生功能:
 查询某门课程的成绩。
 查询全部课程的成绩。
 修改本人密码。
⑶ 设计提示:管理员对学生信息进行录入,不提供注册功能。学生用户需根据密码登
陆后,进行相应操作。

©3.3 学生宿舍住宿管理系统

【难度系数】3 级
【任务描述】
设计一个学生宿舍管理程序,系统的用户是宿舍管理员。
【功能要求】
⑴ 管理员功能:
 管理学生宿舍的住宿信息:包括宿舍楼号、宿舍性质(男/女)、已住人数、空床位
数等。
 入住和退出功能:入住和退出时均需登记。登记入住\退出信息,包括学生的相关信
息。
 可按楼号,查询当前空宿舍间数,并显示宿舍号。
 可按楼号和房号,查询当前空床位数,及床位相关信息。
 可按宿舍性质,分别统计男生和女生当前占用的床位数和空床位数。
 可按楼号和房号,查询宿舍相关学生信息。
 查询学生的入住、退出信息。
⑵设计提示:管理员需根据密码登录,然后进行相应的操作。

©3.4 交通处罚单管理系统

【难度系数】4 级
【任务描述】
设计一个交通处理罚单管理程序,对交通罚单的信息进行管理。系统用户包括交警和驾
驶员。
【功能要求】
⑴ 交警功能:
 对交通处罚单处理信息进行录入、修改和删除。
 按开单交警编号,按从小到大的顺序显示交通处罚单信息。
 按车牌号、驾驶证号、开单交警号、处罚单号等内容进行信息查询和显示。
 对指定驾驶员的全部未处理交通处罚单信息进行查询与显示。
 对不同类型的罚单按月、年开出数量进行统计。
⑵ 驾驶员功能:
 按车牌号、驾驶证号查询交通处罚信息。
⑶ 设计提示:
交警根据密码登录后,进行相应操作。驾驶员无需登录,只提供查询功能。
罚单信息至少包括:车牌号、驾驶证号、开单交警编号、处罚单号、罚单类型(酒驾、
醉驾、闯红灯、追尾、违章停车、擅行公交车道、限行日出行、遮挡污损车牌、无牌驾驶、
无照驾驶等)、处罚时间(yyyymmddhhmm,年月日时分)、处罚方式(现场/非现场)、罚款
金额、处理状态(未处理、已处理)。

©3.5 校园跳蚤市场信息管理

【难度系数】4 级
【任务描述】
设计一个校园跳蚤市场信息交流平台,为同学们交换二手物品提供便利。
【功能要求】
⑴ 管理员功能:
管理员对待销或求购的二手物品信息进行录入,并进行增加、删除、查询、修改、存盘
等基本操作。
⑵ 普通用户要求:
 提供多种浏览和查询功能:
 按类别显示所有待销物品的信息。
 按类别显示所有求购物品的信息。
 按商品名称的字典顺序,显示待销或求购物品信息
 按商品信息发布时间,显示所有待销物品信息,最近发布的信息显示在最前面
 按商品信息发布时间,显示所有求购物品的信息,最近发布的信息显示在最前
面。如急需求购商品,突出显示。
 按物品的库存数量,从大到小显示待销商品。
 按指定的物品类别、名称、价格等条件,或者条件组合,查询待销、求购物品。
⑶ 设计提示:
管理员通过密码登录,进行系统管理。普通用户无需登录,提供浏览和查询功能。

©3.6 停车场管理系统

【难度系数】3 级
【任务描述】
设计一个停车场管理程序,可以查询、管理停车场的车位信息,可以进行收费管理。
【功能要求】
⑴ 管理员功能:
 管理临时停车信息:包括添加、删除、修改、查询、存盘等操作。
 停车收费功能:临停车辆出库时,根据停车时间,计算应收取费用,并对费用信息
进行记录。
 临时停车收费统计功能:统计指定时间,如某日、某月、某年临时停车收费的总额。
 停车查询功能:按车位号、车牌号、停车性质、停车时间段等信息,查询停车情况。
 管理长期停车信息:包括添加、删除、修改、查询、存盘、长期停车充值、长期停
车车位管理、长期停车到期提示等操作。
⑵ 设计提示:
管理员通过密码登录系统,进行相关操作。临时停车信息可包括:车牌号,车位号,层
号,起始停车时间,结束停车时间,缴费额等。长期停车用户信息可包括:用户编号,车牌
号,车位号,车位使用起止时间,缴费额等。

©3.7 快餐店 POS 机计费系统

【难度系数】3 级
【任务描述】
校园快餐店一共出售三大类食品:饮料,主食,小食品。设计一个快餐店的 POS 机计
费系统,对快餐店的食品信息、销售信息进行管理。
【功能要求】
⑴ 管理员功能:
 食品信息管理:添加、查询、修改、删除、存盘。能够对食品进行多种查询。
 销售管理:录入顾客一次购买的食品信息,包括食品编号,单价,数量等;计算购
买食品的总金额,用户所付金额,找零金额,输出消费明细账单。
 统计功能:可对指定日期、指定名称食品、指定种类食品的销量、收入总额等数据
进行统计,并按一定的格式进行显示。
⑵ 设计提示:
系统只设置一个管理员,通过密码登录系统,进行食品信息管理、食品销售以及各类信
息查询。

©3.8 杂志订阅管理系统

【难度系数】4 级
【任务描述】
设计一个杂志订阅管理系统。
【功能需求】
⑴ 管理员功能:
 杂志信息管理:添加、查询、修改、删除、存盘、浏览等。
 客户信息管理:添加、查询、修改、删除、存盘、浏览等。
 杂志订阅功能:录入客户订购杂志信息,包括客户编号、客户编号,订阅总金额等。
 杂志信息组合查询:可按杂志的不同属性,包括杂志名、杂志价格、杂志类型等,
查询各类杂志信息。
 统计功能:统计每种杂志的订阅数量,分别显示订阅数前三名和最后三名的杂志信
息。
⑵用户功能:
普通用户无需登录,只有查询权限。可查询杂志信息,如按杂志名、杂志价格、杂志类
型等进行查询。
⑶设计提示:
管理员通过密码登录,可进行杂志信息管理、客户信息管理、杂志订阅、杂志信息查询、
统计等功能。

©3.9 点歌台歌曲信息管理系统

【难度系数】3 级
【任务描述】
设计并实现一个点歌台管理程序。
【功能要求】
⑴ 管理员功能:
歌曲信息管理:歌曲信息添加,查询,修改,删除,存盘,浏览等。歌曲信息至少包括:
编号,歌曲名,歌手名,歌曲类别等。
⑵ 用户功能:
 多种类型的歌曲查询、显示功能:
 按歌曲名、歌手名、歌曲类别等查询歌曲。
 点歌功能:用户录入歌曲编号,被点播歌曲按点播顺序放入播放表,每一分钟删除
最前面一首歌,表示已经播放完毕。当全部点播歌曲播放完毕,提示“点播歌曲已
经播完,请继续点播”。
⑶ 设计提示:
管理员通过密码登录,进行歌曲的管理。普通用户无需登录,能进行浏览、查询和点歌
操作。歌曲播放及删除,可设计定时器来完成。

©3.10 学分信息管理系统

【难度系数】4 级
【任务描述】
为便于学校实施学分制管理,设计并实现一个学分信息管理系统。根据规定,每位学生
毕业的基本条件是必须修满指定的学分数,具体为:
基础类课程 50 学分;专业基础类课程 50 学分;专业类课程 36 学分;专业选修类课程
24 学分;实践类课程 40 学分。
【功能要求】
⑴ 管理员功能:
 学生信息管理:添加、查询、修改、删除、存盘、浏览等。学生信息至少包括:学
号,姓名,性别,出生年月日,各类课程(基础类、专业基础类、专业类等)已完
成学分数。
 学生密码重置功能。
 查询功能:
 按学号查询某学生信息。
 按班级号,查询所有学生信息,并按学号从小到大排列。
 按某类课程,输出未达毕业要求的学生名单。
 按班级,输出未达毕业要求的学生名单。
 查询全部未达毕业要求学生名单,按总学分数从小到大排列。
 常用的信息统计:
 按学号,统计指定学生获得的总学分数。
 按年级,分别统计各班达到、未达到毕业要求的学生总人数。
 按课程类别,分别统计各类课程未达到毕业要求学生总人数。
⑵学生功能:
 学生可查询本人已修学分信息。
 查询本人其他信息。
 修改本人登录密码。
⑶ 设计提示:
管理员与学生分别通过密码登录。管理员的查询、统计功能尽量丰富,并使输出格式尽
量简洁、美观、清晰。学生可对本人信息进行查询,对本人密码进行维护。

©3.11 学生学籍信息管理系统

【难度系数】2 级
【任务描述】
为学生管理部门日常管理学生的基本信息,设计一个信息管理系统。学生管理部门在新
生入学时,会登记每个学生的基本信息,以便今后提供给教务处、学生所在系部、毕业工作
指导委员会等部门使用。
【功能要求】
⑴管理员功能:
 根据新生入学时填写的学生基本信息表,设计学生基本信息结构,并基于此结构,
对学生信息进行管理,包括:添加、查询、修改、删除、存盘、浏览等。
 提供多种信息查询:
 按学号查询学生信息。
 按班级号查询全体学生信息。
 按年级查询学生信息。
 按专业查询学生信息。
 提供一定的组合查询功能。
 信息统计功能:
 统计指定入校年份、指定专业的入校学生人数。
 指定班级号,统计该班学生所属各省市的人数。
 指定年级,统计不同年级少数民族学生的人数。
 指定专业,统计各年级男女生人数。
⑵ 设计提示:
管理员通过密码登录,进行学生信息管理、查询、统计等工作。查询、统计结果的输出
格式应尽量简洁、美观、清晰,可将统计结果输出到文件中。

©3.12 网吧信息管理系统

【难度系数】4 级
【任务描述】
设计一个网吧客户管理程序,实现临时客户和办卡客户的上网登记管理。
【功能要求】
⑴ 管理员功能:
 客户办卡服务:对办卡客户信息进行管理。客户信息主要包括:卡号、姓名、手机
号、卡有效时间、办卡日期等。信息登记之后,管理员可以添加、删除、修改、查
询用户信息,可初始、重置用户密码。
 客户上网登记:对上网用户,登记其手机号、使用电脑位置、上网日期、上网时间、
下网时间、押金、实际缴费等信息。办卡客户可享受 8 折优惠,未办卡客户如果连
续上网 5 小时,可享受 9 折优惠。
 根据指定的日期统计网吧营业额。
 指定月份,统计办卡客户、临时客户的消费额。
 指定客户,查询客户基本信息、客户上网明细信息。
⑵ 用户功能:
办卡用户可根据密码登录,查询本人上网卡余额,对本人密码进行维护。
⑶设计提示:
管理员和用户分别用密码登录,进行信息管理、查询、上网业务等功能。

©3.13 五金店库存管理系统

【难度系数】5 级
【任务描述】
五金店主要销售各种工具。设计一个五金店库存信息管理系统,对各类工具进行进货、
销售、存货管理。
【功能要求】
⑴ 管理员功能:
 产品管理:对五金产品信息进行登记和管理。包括:商品信息添加、删除、修改、
查询、浏览、保存等。
 人员管理:对五金店工作人员信息进行登记和管理,包括:人员信息添加、删除、
修改、查询、保存等。
 销售信息查询和统计:对销售信息进行各类查询,并可按日期统计商品销售情况。
 退货管理:对已销售商品,进行退货处理。记录退货信息,并可对退货信息进行查
询。
 查询库存数量小于 2 的五金件:如果库存数量小于 2,还可以查询这些五金件的销
售记录。如果该五金件月销售 10 件以上,则提示进货。
 可以查看指定时间,最热销的前 5 名的五金件。
⑵ 普通员工功能:
 销售功能:销售五金件,对销售信息进行记录。
 对本人的密码进行维护。
⑶ 设计提示:
管理员和普通员工分别用密码进行登录。管理员拥有商品登记、查询、统计和退货的权
限;管理员负责管理普通员工,维护职工信息,对职工密码进行重置等。普通员工有销售权
限,并可维护本人密码。

©3.14 职工信息管理系统

【难度系数】2 级
【任务描述】
设计一个职工信息管理系统,对某单位的职工信息进行管理,实现一定的查询、统计功
能。
【功能要求】
⑴ 管理员功能:
 职工信息管理:职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电
话等。对职工信息进行添加、删除、修改、查询、保存等。
 信息查询功能:可按职工号、姓名、学历、性别、年龄等进行单项查询,或进行组
合查询。
 信息统计功能:可通过统计,生成如下信息统计报表:
年龄 中学 高中 大专 大学本科 研究生
人数 比例 人数 比例 人数 比例 人数 比例 人数 比例
18-20
20-30
30-40
40-50
50-
合计
⑵设计提示:
管理员通过密码登录,对职工信息进行上述管理。

©3.15 图书借阅管理系统

【难度系数】5 级
【任务描述】
编写一个图书信息管理系统,对学校的图书信息进行管理,实现借书、还书功能。
【功能要求】
⑴ 管理员功能:
 图书信息管理:图书信息包括:编号、书名、作者名、分类号、出版单位、出版时
间、库存数量,价格等。可对图书进行添加、删除、修改、查询、保存、浏览等操
作。
 读者信息管理:读者信息包括:编号、借阅号、姓名、最大借阅额度、已借阅数量、
读者密码。可对读者信息进行添加、删除、修改、查询、保存、浏览等操作。
 提供多种形式的查询:如按书名、按作者名、按出版单位、按出版时间等查询。
 借阅信息查询:可按图书、按读者、按作者等,查询相关的借书信息。
 还书信息查询:可按图书、按读者、按作者等,查询相关的还书信息。
⑵ 读者功能:
 图书查询功能。
 借书功能:读者登录后,选择借书功能。系统检查是否允许该读者借阅(是否超过
已借阅最大数量)。如果允许借阅,进行图书借阅操作:在借阅表中添加新记录,
修改图书库存,修改读者相关信息。
 还书功能:读者登录后,选择还书功能。系统查看图书是否超期,超期图书需支付
相应费用。还书时,应在还书表中添加新记录,修改库存,修改读者相关信息。
 维护读者个人密码。
⑶ 设计提示:
管理员、读者分别用密码登录,完成不同的操作。

©3.16 手机通信录管理系统

【难度系数】3 级
【任务描述】
模拟手机通信录管理系统,实现对个人通信录的管理。
【功能描述】
 通讯录信息管理:包括添加、删除、修改、查询、保存、浏览等操作。通讯录信息
主要包括:编号、姓名、电话号码、分类(例如包括:A 办公类;B 个人类;C
商务类等)、电子邮件、生日等。具体信息可参照设计者的手机通讯录结构。
 查询功能:选择此功能时,列出用户类别,例如:
 A 办公类;B 个人类;C 商务类。根据选中的类别,显示出此类所有联系人
的姓名、电话号码及其他信息。
 拔号功能:能显示通信录中所有联系人的信息。当选中某联系人时,屏幕上模拟打
字机的效果,依次显示此联系人的电话号码中的各个数字,并伴随相应的拔号声音。
 联系人的生日提醒功能。

©3.17 单项选择题标准化考试系统

【难度系数】5 级
【任务描述】
设计一个单项选择题的考试系统,可实现试题维护、自动组卷等功能。
【功能描述】
⑴ 管理员功能:
 试题管理:每个试题包括题干、四个备选答案标准答案等信息。可进行试题添加、
删除、修改、查询、保存、浏览等操作。
 组卷功能:指定试卷编号、试卷标题(如“程序设计基础 A 卷”)、题目数、试卷总
分、考试时间段(如“2017042515:00-2017042516:00”)等信息,自动生成试卷,可
将试卷输出到文件,将答案输出到另一个文件。
 用户管理:对用户信息进行添加、删除、修改、查询、保存、浏览等操作。
 用户答题情况管理:指定用户,统计其做试卷的总次数,以及每次所得的总分。
⑵ 用户功能:
 练习功能:用户指定题目数,根据题目数进行随机选题及答题。对用户的答案与标
准答案进行对比,并最终给出成绩。对错误题目,要能给出正确答案。
 考试功能:用户选择试卷编号,如当前时间在该试卷设置的“考试时间段”内,用
户可开始答题。系统可根据用户提交的答案与标准答案的对比实现判卷,给出成绩,
并将用户所答试卷、用户的答案、用户所得总分,输出到磁盘文件保存。
⑶ 设计提示:
管理员和用户分别通过密码登录,进行题目维护、答题等操作。用户产生的答题文件,
可以“用户名+系统时间.txt”的形式存储,以便进行管理。

源码

https://pan.baidu.com/s/1pq1Nwwo0hlc_J84F93HM4A?pwd=1111

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/54462
推荐阅读
相关标签
  

闽ICP备14008679号