#include<stdio.h> #include<stdlib.h> #include <time.h> #define N 30 main() { int a,b,k,j=0,i,n,num1,num2,num3,num4; int e,f,g,h,getanswer;//e为记录用户的题量,f为用户的答题答案 char op,op1; int num5,num6,num7,num8;//临时变量 srand(time(NULL)); do{ printf("\n请输入数字类型(1.整数 2.真分数) -1为退出程序: "); while(!(scanf("%d",&n))) { printf("\n 非法输入,请重新输入:"); fflush(stdin); } switch(n) { case 1: { printf("用户请输入题量:"); while(!(scanf("%d",&e))) { printf("\n 非法输入,请重新输入:"); fflush(stdin); } for(i=0;i<e;i++) { a=rand()%100+1; b=rand()%100+1; k=rand()%4+1; printf("%d",a); switch(k) { case 1:printf("+"); op='+'; break; case 2:printf("-"); op='-'; break; case 3:printf("*"); op='*'; break; case 4:printf("/"); op='/'; break; } printf("%d=",b); while(!(scanf("%d",&f))) { printf("\n 非法输入,请重新输入:"); fflush(stdin); } switch(op) { case '+': getanswer=a+b; break; case '-': getanswer=a-b; break; case '*': getanswer=a*b; break; case '/': getanswer=a/b; break; } if(f==getanswer) { printf("\n做对了\n"); j++; } else { printf("\n做错了\n"); } } printf("用户总共答对了%d道题目!",j); break; } break; case 2: { printf("用户请输入题量:"); while(!(scanf("%d",&e))) { printf("\n 非法输入,请重新输入:"); fflush(stdin); } for(i=0;i<e;i++) { num1=rand()%10+1; num2=rand()%10+1; num3=rand()%10+1; num4=rand()%10+1; if(num1>num2) { num5=num1; num1=num2; num2=num5; } if(num3>num4) { num5=num3; num3=num4; num4=num5; } op='+'; num6=num1*num4+num2*num3; num7=num2*num4; num8=num6; while(num8>1) { if(num6%num8==0 && num7%num8==0) { num6=num6/num8; num7=num7/num8; } num8--; } printf("\n(%d/%d)%c(%d/%d)=",num1,num2,op,num3,num4); while(!(scanf("%d%c%d",&g,&op1,&h))) { printf("\n 非法输入,请重新输入:"); fflush(stdin); } if((g==num6)&&(h==num7)) { printf("\n做对了\n"); j++; } else { printf("\n做错了\n"); } } printf("用户总共答对了%d道题目!",j); } break; } }while(n!=-1); }
总结:通过这个实验,我留意到许多小的细节,就是一些容错的问题,在这么多的程序锻炼中,我往往注重的是结果能否实现出来,而并没有考虑到当用户输入错误的时候系统无法继续执行下去的问题,这个bug在现实中是不可允许的。这是我的收获之一。其次就是一个真分数的化简过程,虽然这个只是个数学问题,但是也用了我一些时间去解决这个问题,这是一个数学问题在计算机中展示的一个过程。一开始我只能做到公分的模式,当答案是化简结果的时候会显示错误。通过和同学的交流和学习,我修改了这个bug,当用户输入最简的时候会显示正确而不是显示错误。我觉得通过这个实验,我能够与同学交流一些我没留意的问题,我知道我所思考的思维并不缜密,所以以后的程序中,我希望我能够做到的是我写的程序尽量少的出现bug,尽量好的把程序做得更加完美!