问题分析:
要求在线答题并且判断对错,就是要输出题目之后可以输入答案,然后可以与正确答案做比较,当输入的答案出现错误时,可以新建一个 一个txt文本将错题保存下来,然后继续循环。
遇到的困难:
1.约分,分数运算结果不是最简的。
解决方法:写一个寻找最大公约数的函数。
2.不会保存错题。
解决方法:看书了解如何将printf输出的数据保存到txt文本中。
3.分母为0。
设置随机生成的数字,使函数不会生成数字0;
#include<stdio.h> #include <stdlib.h> #include<conio.h> #include<time.h> #include<string.h> int fun(int x,int y)//求最大公约数 { int z,s,u,v; if(x<y) { z=x; x=y; y=z; } s=x; u=y; while(u!=0) { v=s%u; s=u; u=v; } return s; } int main() { int a=0; int b=0; int c=0; int d=0; int m=0; int i,t,h,n,k,x,y,p,l,q; int r; scanf("%d",&n); FILE *fp; fp=fopen("D://a.txt","w"); if(fp==NULL) printf("不能打开文件 ");//打开文件并指定文件的存储位置以及文件名 srand((unsigned)time(NULL)); for(i=0;i<n;i++) { a=rand()%99+1; b=rand()%99+1; c=rand()%99+1; d=rand()%99+1; m=rand()%8; if(a<b) { t=a; a=b; b=t; }//使a的值大于b的值 if(c<d) { h=c; c=d; d=h; }//使c的值大于d的值 switch(m) { case 0: printf(" %d+%d=",a,b); scanf("%d",&k); r=a+b; if(k==r) printf("right "); else { printf("wrong "); fprintf(fp," %d+%d=%d",a,b,k);//如果给出的答案错误将会把错题保存在文件中 } break; case 1: printf(" %d-%d=",a,b); scanf("%d",&k); r=a-b; if(k==r) printf("right "); else { printf("wrong "); fprintf(fp," %d-%d=%d",a,b,k); } break; case 2: printf(" %d*%d=",a,b); scanf("%d",&k); r=a*b; if(k==r) printf("right "); else { printf("wrong "); fprintf(fp," %d*%d=%d",a,b,k); } break; case 3: printf(" %d/%d=",a,b); scanf("%d",&k); printf("余"); scanf("%d",&p); r=a/b; q=a-b*r; if(k*b+p==r*b+q) printf("right "); else { printf("wrong "); fprintf(fp," %d/%d=%d余%d",a,b,k,p); } break; case 4: {y=b*c+a*d;x=a*c;} l=fun(x,y); x=x/l; y=y/l; printf(" %d/%d+%d/%d=",b,a,d,c); scanf("%d/%d",&k,&h); if(k==y&&h==x) printf("right "); else { printf("wrong "); fprintf(fp," %d/%d+%d/%d=%d/%d",b,a,d,c,k,h); } break; case 5: {y=b*c-a*d;x=a*c;} l=fun(x,y); x=x/l; y=y/l; printf(" %d/%d-%d/%d=",b,a,d,c); scanf("%d/%d",&k,&h); if(k==y&&h==x) printf("right "); else { printf("wrong "); fprintf(fp," %d/%d-%d/%d=%d/%d",b,a,d,c,k,h); } break; case 6: {y=b*d;x=a*c;} l=fun(x,y); x=x/l; y=y/l; printf(" %d/%d*%d/%d=",b,a,d,c); scanf("%d/%d",&k,&h); if(k==y&&h==x) printf(" right"); else { printf(" wrong"); fprintf(fp," %d/%d*%d/%d=%d/%d",b,a,d,c,k,h); } break; case 7: {y=b*c;x=a*d;} l=fun(x,y); x=x/l; y=y/l; printf(" (%d/%d)/(%d/%d)=",b,a,d,c); scanf("%d/%d",&k,&h); if(k==y&&h==x) printf("right "); else { printf("wrong "); fprintf(fp," %d/%d/%d/%d=%d/%d",b,a,d,c,k,h); } break; default: printf("something is wrong! "); break; printf(" "); } } return 0; }