标签:
#include <stdio.h> #include <stdlib.h> main() { printf("\n\t欢迎使用四则运算练习软件\n\n"); Chioce(); } Chioce() { int ch1=0; printf("\t1.整数运算\n\t2.真分数运算\n\t请选择:"); scanf("%d",&ch1); if(ch1==1) { ZhengShuYunSuan(); } FenShuYunSuan(); } ZhengShuYunSuan() { int ranswer=0; //正确答案 int uanswer=0; //用户输入的答案 int t=0,n=0,m=0; //临时变量 char op; //运算类别 int num1=0; //操作数1 int num2=0; //操作数2 int ch,count=0; while(1) { if(count==10) { printf("恭喜你在10道练习里做对了%d题! \n",n); printf("\t1.继续练习\n\t2.退出\n\t请选择:"); scanf("%d",&ch); if(ch==2) { break; } count=0; n=0; Chioce(); } srand(time(NULL)); //初始化随机数 num1=rand()%10; //取0-9之间的随机数 num2=rand()%10; m=rand()%4+1; switch(m) { case 1: op=‘+‘; break; case 2: op=‘-‘; break; case 3: op=‘*‘; break; case 4: op=‘/‘; break; } //加入一条防止"不够减"的语句,当选择减法且num1小于num2时不够减 //不够减的时候,用临时变量交换两个操作数 if((op==‘-‘) && (num1<num2)) { t=num1; num1=num2; num2=t; } //防止"除数为0"的程序漏洞 //当num2被随机取值到0时,就将num2强制置为1 //做除法时,将num1的值强制赋值给num1*num2,防止不能整除 if(op==‘/‘) { if(num2==0) { num2=1; } num1=num1*num2; } //防止num1不能被num2整除的语句 } //输出测试题本身、提示用户输入 printf(" %d%c%d= ",num1,op,num2); while(!(scanf("%d",&uanswer))) { printf("\n 非法输入,请重新输入答案:"); fflush(stdin); } //程序计算正确结果 switch(op) { case ‘+‘: ranswer=num1+num2; break; case ‘-‘: ranswer=num1-num2; break; case ‘*‘: ranswer=num1*num2; break; case ‘/‘: ranswer=num1/num2; break; } //评判,做对返回1,做错返回0 if(uanswer==ranswer) { printf(" 做对了!\n"); n++; } else { printf(" 做错了!\n"); } count++; } } FenShuYunSuan() { int a=0,b=0,c=0,d=0; int x=0,y=0,z=0,ux=0,uy=0,uz=0; int n=0,t=0,i=0,m=0; char op,uop; int ch=0,count=0; while(1) { if(count==10) { printf("恭喜你在10道练习里做对了%d题! \n",n); printf("\t1.继续练习\n\t2.退出\n\t请选择:"); scanf("%d",&ch); if(ch==2) { exit (0); } count=0; n=0; Chioce(); } srand(time(NULL)); a=rand()%10+1; b=rand()%10+1; c=rand()%10+1; d=rand()%10+1; if(a>b) { t=a; a=b; b=t; } if(c>d) { t=c; c=d; d=t; } m=rand()%4+1; switch(m) { case 1: op=‘+‘; x=a*d+b*c; y=b*d; break; case 2: op=‘-‘; if((a*d<b*c) && (a!=c)) { t=a; a=c; c=t; t=b; b=d; d=t; } x=a*d-b*c; y=b*d; break; case 3: op=‘*‘; x=a*c; y=b*d; break; case 4: op=‘/‘; x=a*d; y=b*c; break; } if(x>y) { i=y; } else { i=x; } while(i>1) { if((x%i==0)&&(y%i==0)) { x=x/i; y=y/i; continue; } i--; } printf("\n%d/%d %c %d/%d=",a,b,op,c,d); if(y==1) { z=x; while(!(scanf("%d",&uz))) { printf("\n 非法输入,请重新输入答案:"); fflush(stdin); } if(z==uz) { printf("\n答对了!!"); n++; } else { printf("\n答错了!!"); } } else if(x==y) { z=1; while(!(scanf("%d",&uz))) { printf("\n 非法输入,请重新输入答案:"); fflush(stdin); } if(z==uz) { printf("\n答对了!!"); n++; } else { printf("\n答错了!!"); } } else { while(!(scanf("%d%c%d",&ux,&uop,&uy))) { printf("\n 非法输入,请重新输入答案:"); fflush(stdin); } if((x==ux)&&(y==uy)) { printf("\n答对了!!"); n++; } else { printf("\n答错了!!"); } } count++; } }
本次按老师的要求,把真分数的功能添加进去了,老师要求的是和运算,但为了方便,我将加减乘除都添加进去了,即菜单2,菜单1和第一次的博客实现的功能一样。真分数的运算不能说是很难,就是分数在约分时会有点困难,还有最后答案是一个分数还是整数也要判断,再提示用户输入。
标签:
原文地址:http://www.cnblogs.com/ouqifeng/p/4376802.html