問題分析:
要求在線答題並且判斷對錯,就是要輸出題目之后可以輸入答案,然后可以與正確答案做比較,當輸入的答案出現錯誤時,可以新建一個 一個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("不能打開文件\n");//打開文件並指定文件的存儲位置以及文件名 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("\n%d+%d=",a,b); scanf("%d",&k); r=a+b; if(k==r) printf("right\n\n"); else { printf("wrong\n\n"); fprintf(fp,"\n%d+%d=%d",a,b,k);//如果給出的答案錯誤將會把錯題保存在文件中 } break; case 1: printf("\n%d-%d=",a,b); scanf("%d",&k); r=a-b; if(k==r) printf("right\n\n"); else { printf("wrong\n\n"); fprintf(fp,"\n%d-%d=%d",a,b,k); } break; case 2: printf("\n%d*%d=",a,b); scanf("%d",&k); r=a*b; if(k==r) printf("right\n\n"); else { printf("wrong\n\n"); fprintf(fp,"\n%d*%d=%d",a,b,k); } break; case 3: printf("\n%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\n\n"); else { printf("wrong\n\n"); fprintf(fp,"\n%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("\n%d/%d+%d/%d=",b,a,d,c); scanf("%d/%d",&k,&h); if(k==y&&h==x) printf("right\n\n"); else { printf("wrong\n\n"); fprintf(fp,"\n%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("\n%d/%d-%d/%d=",b,a,d,c); scanf("%d/%d",&k,&h); if(k==y&&h==x) printf("right\n\n"); else { printf("wrong\n\n"); fprintf(fp,"\n%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("\n%d/%d*%d/%d=",b,a,d,c); scanf("%d/%d",&k,&h); if(k==y&&h==x) printf("\nright"); else { printf("\nwrong"); fprintf(fp,"\n%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("\n(%d/%d)/(%d/%d)=",b,a,d,c); scanf("%d/%d",&k,&h); if(k==y&&h==x) printf("right\n\n"); else { printf("wrong\n\n"); fprintf(fp,"\n%d/%d/%d/%d=%d/%d",b,a,d,c,k,h); } break; default: printf("something is wrong!\n"); break; printf("\n"); } } return 0; }
