c语言小学生测验.docx
《c语言小学生测验.docx》由会员分享,可在线阅读,更多相关《c语言小学生测验.docx(11页珍藏版)》请在冰豆网上搜索。
c语言小学生测验
1设计目的
(1)进一步巩固和复习C程序设计的基础知识;
(2)培养学生结构化程序、模块化程序设计的方法和能力;
(3)了解软件的编制过程及各环节的具体内容;
(4)提高学生程序调试技巧、软件设计能力和代码规范化等素质;
提高学生分析问题、解决问题以及实际运用能力。
2任务概述
面向小学1~2年级学生,随机选择两个整数和加减法形成算式要求学生解答。
功能要求:
(1)电脑随机出10道题,每题10分,程序结束时显示学生得分;
(2)确保算式没有超出1~2年级的水平,只允许进行50以内的加减法,不允许两数之和或之差超出0~50的范围,负数更是不允许的;
(3)每道题学生有三次机会输入答案,当学生输入错误答案时,提醒学生重新输入,如果三次机会结束则输出正确答案;
(4)对于每道题,学生第一次输入正确答案得10分,第二次输入正确答案得7分,第三次输入正确答案得5分,否则不得分;
(5)总成绩90以上显示“SMART”
80-90显示“GOOD”,70-80显示“OK”,60-70显示“PASS”,60以下“TRYAGAIN”
3模块划分
小学生测验系统包括系统出题,判断题目是否合规,学生答题,判断正误计算得分
,输出等级退出系统几个功能,功能模块图如图3.1所示。
图3.1小学生测验系统功能模块图
4主要函数说明及其N-S
(1)小学生测验系统main()函数的N-S图,如图4.1所示
定义变量
i=1
i<=10
a=rand()%51b=rand()%51c=rand()%2
Td==0F
c=a+bc=a-b
c<0||c>50
输出回答第几题和对应的算式
k=3
k>=1
输入答案result
result==c
TF
输出回答正确输出回答错误
grade+=score[k-1]
break
k--
Tk==0F
下一道
i++
Grade(grade)getch()
图4.1main()函数N-S图
定义主函数main()的功能是:
随机选择0~50之间的两个数进行随机加减法运算,共出10道题目,确保答案在0~50之间,同时保证所出题目不重复,让学生回答,每道题有三次机会,第一次回答正确得10分,第二次回答正确得7分,第三次回答正确得5分,否则不得分,最后算出总得分划分等级
5程序运行数据及其结果
图5.1答错一题一次得分图
图5.2答错一题两次得分图
图5.3答错一题三次得分图
图5.4全部答对得分图
6课程设计心得
通过这次课程设计我学到了许多。
同时也巩固了许多C语言的知识。
但我觉得最重要的是在这个课程设计中看到了自己许多的不足,在许多方面都有所欠缺,对一些函数理解的不透彻,不能熟练的编写有关代码。
除了知识储备的不足之外,还有一些不良的编码习惯,时常导致掉写漏写,编写出来的没有做到美观整洁。
本次实验所写的小学测验系统,与以往编写的小程序相比更加复杂,功能也更多,自动出题
自动判卷,划分等级等每一个模块的编写都不得马虎,一有错误就会导致程序运行出错,所以困难较大,所以在编写代码的时候遇到了许多困难,例如如何保证系统给出的随机数不同,为了解决这个问题映入了srand((unsigned)time(NULL))方法,这些新的东西开拓了我的眼界,同时丰富了知识,潜移默化中提高了自己独立解决问题的能力。
虽然编码的过程略显枯燥,特别是当有困难的时候,而且当久久不能解决的时候就会特别心烦意乱,但每当解决一个问题后就有一种特别的快感,就会激发一股探索的精神而继续编写。
所以编写代码的过程虽然有些坎坷,但编写成功以后会感到十分快乐,看着自己的杰做会感到欣慰。
当作一件事情花费了一万个小时,那么你就会成功。
我想编写代码也是这样,当让编码成为
一种生活习惯的时候,当自己专业技能不断提高的时候,就会发现生活离不开编码,编码也是一种
可以令人愉悦的事情。
与此同时还可以让自己的思维变得更加缜密,更具创造性。
附录:
#include
#include
#include
#include
#include
intmain()
{
printf("******************1-2年级小学生数学测验******************\n");
printf("开始答题:
\n");
intnum=0,grade=0;
intscore[3]={10,7,5};
charstr[100],str1[10][100];
while
(1)
{
inta=0,b=0,d,c,k=0,i,j=-1,result;
charop[2]={'+','-'};
//系统出题
while
(1)
{
a=rand()%51;
srand((unsigned)time(NULL));
b=rand()%51;
srand((unsigned)time(NULL));
d=rand()%2;
if(d==0){
c=a+b;}
else{
c=a-b;}
//判断题目
if(c>=0&&c<=50){
sprintf(str,"%d%c%d=\n",a,op[d],b);
strcpy(str1[num],str);
if(num==0)
break;
j=-1;
for(i=0;iif(strcmp(str,str1[i])==0){
j=1;
break;
}
}
if(j<0)
break;
}
}
printf("第%d题:
\n",num+1);
printf("%s\n",str);
//学生回答
printf("输入计算结果:
\n");
while
(1)
{
scanf("%d",&result);
k++;
if(result==c)
{
printf("回答正确!
棒棒哒~\n");
grade+=score[k-1];
break;
}
elseif(k<3)
{
printf("答案错啦,请认真思考后回答O(∩_∩)O:
\n");
}
else
{printf("好可惜答错了,正确答案:
%d\n",c);
break;
}
}
num++;
if(num==10)break;
}
if(grade>=90)printf("%d******************SMART******************",grade);
elseif(grade>=80)printf("%d******************GOOD******************",grade);
elseif(grade>=70)printf("%d******************OK******************",grade);
elseif(grade>=60)printf("%d******************PASS******************",grade);
elseprintf("%d******************TRYAGAIN******************",grade);
getch();
}