利用C语言开发一个“小学生算术四则运算测试系统”

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
提示重新输 入自己的答 案
输入答案 temp
flag!=1&&flag !=0
0
非0
继续测试请 按 1,退出测 试请按 0
flag==0 非0
退出
scanf("%d", &flag);
0
int a,b,c;
type==1 非0
a=rand()%999;
b=999-a;
printf("\n% d+%d=? ",a,b);
非0
提示输入代 号错误,重 新输入代号
提示输入 1. 加法……
提示要求学 生输入自己 的答案
学生输入自 己的答案, 并赋给 temp
输入你所选 的题的类型 type
temp!=answer
0 提示输入 答案正确
提示继续测 试请按 1,退 出测试请按 0
学生输入 0 或者 1 赋给 flag
非0
提示答案错 误,重做
a==0
b==0
0
b=1000/ a;
a=rand 0
()%50 c=1000/b;
b=rand() %b
1
非0
b=rand() %500;
printf("\n%d* %d=?",a,b);
return(a*b)
函数调用处
c=rand()%500
c!=0 0ห้องสมุดไป่ตู้
break;
函数调用处
非 0
printf("
1.2 最开始我没有调用函数 srand((unsigned)time(NULL))结果发现连续做两道 相同算法的题目时,两次的题目完全一样,也就说明了此程序并不能随机的出题, 后来使用了函数 srand((unsigned)time(NULL))。srand((unsigned)time(NULL)) 这个函数调用中使用 time(NULL)函数返回值(当前时间)作实参,初始化随机 数发生器。rand()函数调用返回一个随机数,理论上说,rand()返回一个随机数, 但是每次调用时,随机数发生器返回的随机数序列都是一样的,所以,用当前时 间(time(NULL)返回值)作种子对随机数发生器进行初始化,由于每次当前时间不
指导教师 杨沙、王绪梅
2010 年 6 月 28 日至 2010 年 7 月 2 日
课程设计任务书
设计题目:利用 C 语言开发一个“小学生算术四则运算测试系统”
设计目的
1. 加深对《C 语言程序设计》课程所学知识的理解; 2. 掌握结构化程序设计的基本方法; 3. 学会编制结构清晰、风格良好、数据结构选择恰当的 C 语言程序; 4. 掌握多模块的 C 语言程序的调试方法。
用当前时间(time(NULL)返回值)作种子对随机数发生器进行初始化,由 于每次当前时间不一样,所以随机数发生器产生的随机数序列不一样,
即 rand()函数调用的返回值不一样,就达到了得到真随机数而不是伪随 机数的目的。*/
printf("\t\t\t 小学生算术四则运算测试系统\n"); while(1) {
printf("\n 请你选择测试题目的种类,只需输入数字代号:\n"); printf("\n1.加法 2.减法 3.乘法 4.除法\n"); scanf("%d",&type);
int question_get();//函数声明
int answer; int temp; int flag;
开始
while(1)
提示输入题目 的种类
提示题目类型 和代号
学生输入所选 题的代号 type
main()函数和函数体
type!=1type!=2type !=3type!=4
0
调用 question_get() 函数,将返回值赋 给 answer
为了修改正确,我询问了指导老师,后来才知道执行语句 scanf("%d",&temp) 时候,小学生会输入一个数字,然后在按回车键,在执行语句 scanf("%c",&flag) 时这个是回车键被赋给了变量 flag,而不是输入的字符给了变量 flag,此时语 句 flag!=y&&flag!=n 不成立,就会造成循环语句 while(flag!=y&&flag!=n) 一定会执行一次,也就造成了上述结果。后来我将定义的字符型变量 flag 改成 了整形,并且当输入 1 时继续做题,当输入 0 时退出系统,当输入的其他的数字 时候,就会被提示输入错误,且要求重新输入。这样修改后就达到了上述目的。
1、问题描述
1.1 在最开始设计此程序过程中,我定义的变量 flag 为字符型,当把原程序段 中对应于下面的程序段的程序段改为:
…… scanf("%d",&temp); while(temp!=answer) {
printf("\n 答案错误,重做\n"); printf("\n 请输入正确的答案:\n"); scanf("%d",&temp); } printf("\n 继续请按 y,退出测试请按 n \n"); scanf("%c",&flag); while(flag!=y&&flag!=n) { printf("\n 继续请按 1,退出测试请按 0 \n"); scanf("%d",&flag); } ……
这个函数调用中使用timenull函数返回值当前时间作实参初始化随机数发生rand函数调用返回一个随机数理论上说rand返回一个随机数但是每次调用时随机数发生器返回的随机数序列都是一样的所以用当前时间timenull返回值作种子对随机数发生器进行初始化由于每次当前时间不一样所以随机数发生器产生的随机数序列不一样即rand函数调用的返回值不一样就达到了得到真随机数而不是伪随机数的目的
一样,所以随机数发生器产生的随机数序列不一样,即 rand()函数调用的返回 值不一样,就达到了得到真随机数而不是伪随机数的目的,也就成功解决了这个 问题。 1.3 其他的问题描述见附件 1 中的 question_get()函数中注释中的问题分析部 分。
2、详细设计
4.1 设计一个函数 int question_get();,此函数的主要功能是为小学生出题(分 别进行+,—,*,/等不同运算),并且保证给出的算式中的数字和结果均不超过 三位数。系统自动计算出正确的答案,然后此正确的答案赋给变量 answer。 4.2 通过调用函数 srand((unsigned)time(NULL)); 初始化随机数发生器,使 rand()函数调用的返回值不一样,这样就使连续做同一种算法时,系统两次给出 的算式不相同。 4.3 程序中有一个 while(1)和其循环体中的 if(flag==0) break;语句,学生可 以选择退出程序或者继续做题。 4.4 在 main()函数外定义一个外部变量 type,此变量表示小学生选择题目的类 型,当选择 1 时候需要做加法运算,选择 2 时候做减法运算,选择 3 做乘法运算, 选择 4 做除法运算,当选择的不是 1 2 3 4 中的一个数时,通过使用 while 语句 要求小学生输入正确的题目类型代号。 4.5 提示要求小学生输入自己的答案,并将小学生输入的答案赋给变量 temp, 然后用 while(temp!=answer)语句判断小学生输入的答案是否与正确答案相同, 如果不同则通过此 while 的循环体提示答案错误,要求重新输入正确答案,直到 输入的答案正确后提示答案正确;如果小学生一开始输入的答案是正确的则直接 提示答案正确。 4.6 定义了一个变量 flag,当给 flag 赋值 1 时可以继续做题,赋值为 0 时通过 break 语句退出整个循环 while(1),此时也就退出了测试系统。 4.7 设计函数 question_get(),首先在 main()函数作函数声明,然后开始设计 此函数,考虑到当小学生输入数字 1 需要做加法运算,输入 2 时候做减法运算, 输入时 3 做乘法运算,输入 4 时做除法运算,所以通过条件 if else 语句分情况 设计算法。
return(a+b ); 函数调用处
0
question_get()函数
type==2
b=rand()% 999; c=999-b;
c=rand()% c; printf("\n %d-%d=? ",b+c,b); return(c);
函数调用处
type==3
非0 a=rand()%500;
0
b=rand() %500;
时间安排
6 月 28 日 上午 1-103 教室动员全体学生,给学生下任务书; 下午查阅相关资料;
6 月 29 日~7 月 1 日 完成选题的设计及报告的书写; 7 月 2 日 上午提交课程设计报告并答辩。
指 导 教 师 签 名: 教研室主任(或责任教师)签名:
2010 年 6 月 27 日 2010 年 6 月 27 日
我将会发现当我做完一题且做对了的时候,无论我输入的是 y 还是 n 或者是其他 的字符,printf("\n 继续请按 1,退出测试请按 0 \n")这个提示在屏幕上出现两 次,说明了在第一个 scanf("%c",&flag)语句中无论什么,flag!=y&&flag!=n 都是成立的,这说明了在第一个 scanf("%c",&flag)中输入的字符并没有赋给 flag。
3.实验环境
Microsoft visual c++
4.程序调试
源程序: #include<stdio.h> #include<stdlib.h> #include<time.h>//用到了 time()函数,所以要包含 time.h 头文件
//srand(time(NULL))中的 time(NULL)就是 time 函数调用 int type; main() {
设计任务 (在规定的时间内完成下列任务)
任务描述:利用 C 语言开发一个“小学生算术四则运算测试系统” 该系统是让计算机充当一位给小学生布置作业的算术老师,为学生出题、阅卷 该系统应具备以下功能: 1. 为小学生出题(分别进行+、-、*、÷等不同运算) 2. 学生做题后,进行评阅; 学生每做一题后,评阅时给出“答题正确,很好”或“答题错误,重 做”等字样; 3. 加、减、乘、除运算功能可以自由选择实现; 4. 运算数值可以控制在两位(或三位)数的四则运算范围内。
具体要完成的任务是: 1 完成整个规定任务的设计及调试,得出正确结果,并经教师检查及答辩; 2. 写出规范的课程设计说明书; 3. 课程设计结束后交设计说明书等文档和设计内容。设计说明书的主要内容是详细 写出在设计过程中所用到的主要技术或方法; 4. 从 6 月 28 日起,学生每天至少要到设计教室半天以上; 5.课程设计报告按国际通用格式书写,具体格式要求请在网络上查阅
武汉理工大学华夏学院
课 程设计
课程名称 C 语言程序设计

目 利用 C 语言开发一个“小学生算术四则运算测试系统”
专 业 ____电子商务_____
班 级 ______1091_______

号 _____20510809105_____
姓 名 ______张宇_______
成 绩 _________________
\n%d/%
retur
d=?",b*
n(c);
c,b);
4.心得体会
5.1 在我们设计程序时候,将一个大的问题分成几个模块,运用不同的函数将这 些模块分别设计出来,然后运用函数调用,我们就可以将这些功能不同的模块联 系在一起。 5.2 在设计程序过程中,我原先定义的变量 flag 为字符型,当输入 y 时继续做 下题,输入 n 时退出系统,我发现无论按哪个字母,在看结果时候发现有两条继 续测试请按 1,退出测试请按 0 :语句输出,后来经过老师的讲解我明白了,在 连续的 2 个 scanf 函数中,以字符形式输入第一个 scanf 函数时候,回车键会以 字符形式存储在第二个 scanf 函数中。 5.3 要使计算机自动为学生出题,使用了函数 srand((unsigned)time(NULL)); 这个函数调用中使用 time(NULL)函数返回值(当前时间)作实参,初始化随机 数发生器。rand()函数调用返回一个随机数,理论上说,rand()返回一个随机数, 但是每次调用时,随机数发生器返回的随机数序列都是一样的,所以,用当前时 间(time(NULL)返回值)作种子对随机数发生器进行初始化,由于每次当前时间不 一样,所以随机数发生器产生的随机数序列不一样,即 rand()函数调用的返回 值不一样,就达到了得到真随机数而不是伪随机数的目的。 5.4 深知自己技术水平还不高,编这样的程序遇到了很多困难,但我相信经过今 后的不断学习,我的变成能力会有很大的提高。
srand((unsigned)time(NULL));/*srand((unsigned)time(NULL));这个函 数调用中使用 time(NULL)函数返回值(当前时间)作实参,初始化随机数发生 器。*/
/* rand()函数调用返回一个随机数,理论上说,rand()返回一个随机数, 但是每次调用时,随机数发生器返回的随机数序列都是一样的,所以,
相关文档
最新文档