a[i]=i+1;/*填空数组,编号是下标加一,注意C语言中的数组下标从0开始*/
printf("退出的人的顺序为:
\n");
while(s>1)
{
for(p=a;p<(a+n);p++)
if(*p!
=0)
{
j++;
if(j==m)//每数到3,该人退出
{
printf("%d",*p);
*p=0;//删除该人
j=0;//计数器归零
s--;
}
}
}printf("\n");
for(p=a;p<(a+n);p++)
if(*p!
=0)printf("最后一个人是第%d个\n",*p);
return0;
}
【编译示图】
【运行结果示图】
第4章综合设计题
4.2设计过程
【题目一】运用C语言开发一个“小学生算术四则运算测试系统”。
该系统是让计算机充当一位给小学生布置作业的算术老师,为学生出题并阅卷。
该系统要求实现下列功能:
①为小学生出题(分别进行+、-、*、/等不同运算)。
②学生做题后,进行评阅。
学生每做一题后,评阅给出“答题正确,很好”或“答题错误,重做”等信息。
③加、减、乘、除运算功能可以自由选择实现。
④运算数值可控制在两位数的四则运算范围内。
【算法分析】
定义字符a,输入+,-,*,/来引用加减乘除函数,利用srand(time(0))函数获得随机数种子,time(0)用于获取当前时间,然后用for循环,先取100内的随机数m,n,定义计数器j=0;在加减乘除的子函数中定义数i,输入数i,若i=m+n,则输出“答案正确,很好!
”,j++,反之,输出“答案错误,重做”,循环结束后输出做对的题数j。
在除法函数中,由于有的算式除不尽,所以使b=(int)(1000*m/(float)n)/1000.0,即用去尾法取小数点后三位,若b>0则继续,否则重取,即用“重复除”函数,具体步骤同上。
【源程序代码】
#include
#include//包含rand,srand函数
#include//用于计时
floatagain_chu(intm,intn,intj)/*除法重做函数,当结果小于0.001时重新取数*/
{
floati,b;
m=rand()%100;n=rand()%99+1;//取小于100的随机数,n大于0
b=(int)(1000*m/(float)n)/1000.0;//取结果b小数点后三位
if(b>0)//结果大于零时继续,否则重新执行again函数
{
printf("%d/%d=",m,n);scanf("%f",&i);
if(i==b){printf("答案正确,很好!
\n");j++;}
elseprintf("答案错误,重做\n");
}elseagain_chu(m,n,j);
return0;
}
intjia(intm,intn)//加法函数
{
inti,j=0,k;//j用于记录正确题数
srand(time(0));//获得随机数种子,time(0)用于获取当前时间
for(k=0;k<5;k++)
{
m=rand()%100;n=rand()%100;
printf("%d+%d=",m,n);scanf("%d",&i);
if(i==(m+n)){printf("答案正确,很好!
\n");j++;}
elseprintf("答案错误,重做\n");
}printf("做对了%d个\n",j);
return0;
}
intjian(intm,intn)//减法函数
{
inti,j=0,k;
srand(time(0));
for(k=0;k<5;k++)
{
m=rand()%100;n=rand()%100;
printf("%d-%d=",m,n);scanf("%d",&i);
if(i==(m-n)){printf("答案正确,很好!
\n");j++;}
elseprintf("答案错误,重做\n");
}printf("做对了%d个\n",j);
return0;
}
intcheng(intm,intn)//乘法函数
{
inti,j=0,k;
srand(time(0));
for(k=0;k<5;k++)
{
m=rand()%100;n=rand()%100;
printf("%d*%d=",m,n);scanf("%d",&i);
if(i==(m*n)){printf("答案正确,很好!
\n");j++;}
elseprintf("答案错误,重做\n");
}printf("做对了%d个\n",j);
return0;
}
floatchu(intm,intn)//除法函数
{
intj=0,k;floati,b;
srand(time(0));
printf("用去尾法取小数点后三位:
如1/6=0.166\n");
for(k=0;k<5;k++)
{
m=rand()%100;n=rand()%99+1;
b=(int)(1000*m/(float)n)/1000.0;
if(b>0)
{
printf("%d/%d=",m,n);scanf("%f",&i);
if(i==b){printf("答案正确,很好!
\n");j++;}
elseprintf("答案错误,重做\n");
}
elseagain_chu(m,n,j);
}printf("做对了%d个\n",j);
return0;
}
intmain()
{
intm,n;
chara;
printf("请选择要做的题目类型(+,-,*,/):
");
scanf("%c",&a);
if(a=='+')jia(m,n);
elseif(a=='-')jian(m,n);
elseif(a=='*')cheng(m,n);
elsechu(m,n);
return0;
}
【编译示图】
【运行结果示图】
课程设计小结
课程设计是一门培养学生综合运用所学知识,分析和解决实际问题,锻炼实践能力的重要课程。
这次课程设计要交七个程序,这对我来说是一个很大的考验,很多时候我都会想怎么才能让自己的程序更专业,怎样才能既简单,又实用?
在做程序的过程中要很有耐心,有时候仅仅一个错误就需要花两三个小时来查找,而且还不一定能找出来。
回想起整个课程设计的过程,有许多感触。
从第一节课开始到完成所有题目,遇到很多困难,解决困难的过程中不仅巩固了以前学的知识,而且学到了很多书上没有的知识。
同时也明白了只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能提高自己的操作能力和独立思考的能力。
课程设计终于顺利完成了,在设计中遇到了很多编程问题,通过书本和网络上查找了很多资料,所有问题都迎刃而解。
在设计中,给我印象最为深刻的是“小学生算术四则运算测试系统”的编译过程,首先是我不知道怎样取随机数,经过查找资料后解决了。
然后我的大部分子程序都已编辑成功,只差最后的除法运算程序了,那么这最后的程序就将是我成功的关键。
而老天不会让我太过顺利,他在这最后的时刻设置了障碍。
就是在两数相除时用的去尾法,这都不难,转换成浮点型就行了。
但问题又来了,并不是所有的数相除都能除尽的,我想了很多办法都不行,为这个问题我花了一天时间都没能解决,那时恨不得把电脑都砸了。
后来我去请教了老师,老师也没说出具体的解决办法,但她却给我提供了一个思路,那就是间接的使结果取几位小数,然后再不行的就重新取数。
经过大概半小时的努力,我终于克服了这个问题,并且使程序的功能也得到了一定的完善。
不得不说这是一种胜利,谢谢给我指点迷津的老师。
通过课程设计,我认识到要想写好程序,就必须要多动脑子,尽量把所学的知识综合起来应用,力争写出完美的程序。
另外,写程序时必须要细心,千万不能输错一个字符标点,就连全角半角也得注意。
在修改时要有耐心,编译出错后必须逐个错误去改正,绝不能心急浮躁,否则修改之后还会有新的错误。
课程设计虽然结束了,但它却给我留下了深刻的印象。
它使我掌握了一种系统的研究方法,我们学习的目的就在于运用,我们运用这种研究方法的时候会很多。
最后要感谢课程设计,它的确教会我很多。