本次作业要求:(1)出题器可以随机出四则运算。(2)真分数的运算。以下为程序运行截图:
根据使用说明来输入整数题目的数量,以及分数题目的数量,这里分别以5道题为例。
如果回答正确就会提示“回答正确”,回答错误则会提示“回答错误”。所有题目全部回答完毕将会给出得分情况。
为了便于打印,将所有的算术题存到了文本中。
以上为该程序的内容和使用详情,以下为程序源代码:
Coding链接(https://coding.net/u/Kingsman/p/xiaoxuesuanshu/git/blob/master/%E5%B0%8F%E5%AD%A6%E7%AE%97%E6%9C%AF)
#include <stdio.h> #include <stdlib.h> #include <time.h> int add(int); int sub(int); int mult(int); int divi(int); int max(int,int); int gys(int,int); int main() { FILE *fp;fp=fopen("count.txt","a+"); srand((unsigned)(time(NULL))); int i,m,n;int answer,t,right=0,score=0; printf("\t\t\t\t\t欢迎使用小学四则运算出题器\n使用说明:请根据提示输入题目的数量,需要多少道分数题。\n\t 整数除法题目如果存在余数请输入余数。\n\t 真分数计算题的答案先输入分子再输入分母。"); printf("\n请输出整数题目数量:\n"); scanf("%d",&n); printf("\n请输入分数题目数量:\n"); scanf("%d",&t); for(m=0;m<n;m++) //整数计算 { i=rand()%4+1; switch(i) { case 1:answer=add(1); if(answer==1){right++;score=score+10;printf("回答正确\n");}else printf("回答错误\n");break; case 2:answer=sub(1); if(answer==1){right++;score=score+10;printf("回答正确\n");}else printf("回答错误\n");break; case 3:answer=mult(1); if(answer==1){right++;score=score+10;printf("回答正确\n");}else printf("回答错误\n");break; case 4:answer=divi(1); if(answer==1){right++;score=score+10;printf("回答正确\n");}else printf("回答错误\n");break; } } for(m=0;m<t;m++) //分数计算 { i=rand()%4+1; switch(i) { case 1:answer=add(2); if(answer==1){right++;score=score+10;printf("回答正确\n");}else printf("回答错误\n");break; case 2:answer=sub(2); if(answer==1){right++;score=score+10;printf("回答正确\n");}else printf("回答错误\n");break; case 3:answer=mult(2); if(answer==1){right++;score=score+10;printf("回答正确\n");}else printf("回答错误\n");break; case 4:answer=divi(2); if(answer==1){right++;score=score+10;printf("回答正确\n");}else printf("回答错误\n");break; } } printf("共有%d道题,答对%d道,总得分:%d\n",n+t,right,score); //输出 fclose(fp); return 0; } int max(int a,int b) { if(a>=b)return a; else return b; } //求最大值 int gys(int a,int b) { if(a%b)return gys(b,a%b); return b; } //求最大公约数 int add(int q) { FILE *fp;fp=fopen("count.txt","a+"); //加法 if(q==1) { srand((unsigned)(time(NULL))); int a=rand()%100+1,b=rand()%100+1;int answer; printf("%d + %d =",a,b); fprintf(fp,"%d + %d =\n",a,b); scanf("%d",&answer); if(a+b==answer) return 1; else return 0; } if(q==2){ int e,f,x,y,z,x1,x2,x3,x4,a=rand()%15+1,b=rand()%13+1,c=rand()%13+1,d=rand()%15+1; char ch; srand((unsigned)(time(NULL))); x1=a+b-max(a,b); x2=max(a,b); x3=c+d-max(c,d); x4=max(c,d); x=gys(x1,x2); x1=x1/x; x2=x2/x; x=gys(x3,x4); x3=x3/x; x4=x4/x; printf("%d/%d + %d/%d =",x1,x2,x3,x4); fprintf(fp,"%d/%d + %d/%d =\n",x1,x2,x3,x4); scanf("%d%c%d",&e,&ch,&f); //e为分子,f为分母 y=(x2*x4)/gys(x2,x4); //同分分母 y x=(x1)*y/x2+(x3)*y/x4; //同分分子 x z=gys(x,y); if(z==1) { if(x==e&&y==f)return 1; else return 0; } else if(x/z==e&&y/z==f) return 1; else return 0; } } int sub(int q) { int p; FILE *fp; fp=fopen("count.txt","a+"); if(q==1) { srand((unsigned)(time(NULL))); int a=rand()%100+1,b=rand()%100+1; int answer; if(a>b) printf("%d - %d =",a,b); else { p=a; a=b; b=p; printf("%d - %d =",a,b); } fprintf(fp,"%d - %d =\n",a,b); scanf("%d",&answer); if(a-b==answer) return 1; else return 0; } if(q==2) { int e,f,x,y,z,x1,x2,x3,x4,a=rand()%15+1,b=rand()%15+1,c=rand()%15+1,d=rand()%15+1; char ch; srand((unsigned)(time(NULL))); x1=a+b-max(a,b); x2=max(a,b); x3=c+d-max(c,d); x4=max(c,d); x=gys(x1,x2); x1=x1/x; x2=x2/x; x=gys(x3,x4); x3=x3/x;x4=x4/x; x=gys(x2,x4); y=x1*x4/x; z=x3*x2/x; if(y-z<0) { x=x1; x1=x3; x3=x; x=x2; x2=x4; x4=x; } printf("%d/%d - %d/%d =",x1,x2,x3,x4); fprintf(fp,"%d/%d - %d/%d =\n",x1,x2,x3,x4); scanf("%d%c%d",&e,&ch,&f); y=(x2*x4)/gys(x2,x4); //同分分母 y x=(x1)*y/x2-(x3)*y/x4; //同分分子 x z=gys(x,y); if(z==1) { if(x==e&&y==f) return 1; else return 0; } else if(x/z==e&&y/z==f) return 1; else return 0; } } int mult(int q) { FILE *fp; fp=fopen("count.txt","a+"); if(q==1){ srand((unsigned)(time(NULL))); int a=rand()%60+1,b=rand()%60+1; int answer; printf("%d * %d =",a,b); fprintf(fp,"%d * %d =\n",a,b); scanf("%d",&answer); if(a*b==answer) return 1; else return 0; } if(q==2){ int e,f,x,y,z,x1,x2,x3,x4,a=rand()%15+1,b=rand()%15+1,c=rand()%15+1,d=rand()%15+1; char ch; srand((unsigned)(time(NULL))); x1=a+b-max(a,b); x2=max(a,b); x3=c+d-max(c,d); x4=max(c,d); //x1是被乘数分子,x2被乘数分母,x3乘数分子,x4乘数分母 x=gys(x1,x2); x1=x1/x; x2=x2/x; x=gys(x3,x4); x3=x3/x; x4=x4/x; printf("%d/%d * %d/%d =",x1,x2,x3,x4); fprintf(fp,"%d/%d * %d/%d =\n",x1,x2,x3,x4); scanf("%d%c%d",&e,&ch,&f); //e为分子,f为分母 y=x2*x4; //同分分母 y x=x1*x3; //同分分子 x z=gys(x,y); if(z==1) { if(x==e&&y==f) return 1; else return 0; } else if(x/z==e&&y/z==f) return 1; else return 0; } } int divi(int q){ FILE *fp; fp=fopen("count.txt","a+"); if(q==1) { srand((unsigned)(time(NULL))); int a=rand()%40+1,b=rand()%20+1; int answer,re; printf("%d / %d =",a,b); fprintf(fp,"%d / %d =\n",a,b); if(a%b==0) { scanf("%d",&answer); if(a/b==answer) return 1; else return 0; } else { scanf("%d",&answer); printf("余数为:"); scanf("%d",&re); if(a/b==answer&&a%b==re) return 1; else return 0; } } if(q==2) { int e,f,x,y,z,x1,x2,x3,x4,a=rand()%15+1,b=rand()%15+1,c=rand()%15+1,d=rand()%15+1; char ch; srand((unsigned)(time(NULL))); x1=a+b-max(a,b); x2=max(a,b); x3=c+d-max(c,d); x4=max(c,d); //x1是被乘数分子,x2被乘数分母,x3乘数分子,x4乘数分母 x=gys(x1,x2); x1=x1/x; x2=x2/x; x=gys(x3,x4); x3=x3/x; x4=x4/x; printf("(%d/%d) / (%d/%d) =",x1,x2,x3,x4); fprintf(fp,"(%d/%d) / (%d/%d) =\n",x1,x2,x3,x4); scanf("%d%c%d",&e,&ch,&f); //e为分子,f为分母 y=x2*x3; //同分分母 y x=x1*x4; //同分分子 x z=gys(x,y); if(z==1) { if(x==e&&y==f) return 1; else return 0; } else if(x/z==e&&y/z==f) return 1; else return 0; } }