#include<stdio.h> #include<stdlib.h> #include<time.h> int cc,i,n,z;//操作数 int count;//题目数目 int max,min;//数据的最大值、最小值 int dt=0;//记录做对题目的数目 int shu[4]; char fh[4]={‘+‘,‘-‘,‘*‘,‘/‘}; void zhengshu(); void fenshu(); int main(void) { int xz;//操作数 srand((unsigned)time(NULL)); printf("输入题目题数!--");//输入题目总数 scanf("%d",&count); printf("是否有乘除法!(1/否,2/是.)--");//决定是否产生乘除法 scanf("%d",&cc); printf("数值范围!(1 100)--");//输入数值范围 scanf("%d %d",&min,&max); printf("\n请选择!"); printf("\n1)整数运算."); printf("\n2)分数运算.--"); scanf("%d",&xz); if(xz==1) { zhengshu(); } else { fenshu(); } printf("\n一共%d道题,答对%d道题!\n",count,dt); } void zhengshu() { int x=0,y=0;//用户输入答案、正确答案 int fz0,fm0;//已约分正确分子、分母 int fz,fm;//用户输入分子、分母 int jlfz,jlfm;//操作数 int ys; char ch; for(i=0;i<count;i++) { for(n=0;n<2;n++)//生成等式 { shu[n]=rand()%(max-min+1)+min; printf(" %d ",shu[n]); if(n<1) { z=rand()%(cc*2); printf("%c",fh[z]); } else { printf("="); } } switch(z)//算数正确答案 { case 0: y=shu[0]+shu[1]; break; case 1: y=shu[0]-shu[1]; break; case 2: y=shu[0]*shu[1]; break; case 3: y=shu[0]/shu[1]; break; default: break; } if(z==3) { jlfz=shu[0];//约分 jlfm=shu[1]; while(shu[1]!=0) { ys=shu[0]%shu[1]; shu[0]=shu[1]; shu[1]=ys; } fz0=jlfz/shu[0]; fm0=jlfm/shu[0]; if(fm0<0) { fz0=fz0*-1; fm0=fm0*-1; } scanf("%d%c%d",&fz,&ch,&fm); if(fz==fz0&&fm==fm0) { printf("答对了!\n"); dt++; } else { printf("答错了!\n"); } } else { scanf("%d",&x); if(x==y) { printf("答对了!\n"); dt++; } else { printf("答错了!\n"); } } } } void fenshu() { int fz,fm;//用户输入分子、分母 int fz0,fm0;//已约分正确分子、分母 int fz1,fm1;//未约分正确分子、分母 int jlfz,jlfm;//操作数 int temp,ys;//操作数 char ch; for(i=0;i<count;i++) { for(n=0;n<4;n++)//产生四个随机数 { shu[n]=rand()%(max-min+1)+min; } if(shu[0]>shu[1])//确保分母大于分子 { temp=shu[1]; shu[1]=shu[0]; shu[0]=temp; } if(shu[2]>shu[3])//确保分母大于分子 { temp=shu[3]; shu[3]=shu[2]; shu[2]=temp; } z=rand()%(cc*2); switch(z) { case 0: fz1=shu[0]*shu[3]+shu[1]*shu[2]; fm1=shu[1]*shu[3]; break; case 1: fz1=shu[0]*shu[3]-shu[1]*shu[2]; fm1=shu[1]*shu[3]; break; case 2: fz1=shu[0]*shu[2]; fm1=shu[1]*shu[3]; break; case 3: fz1=shu[0]*shu[3]; fm1=shu[1]*shu[2]; break; default: break; } jlfz=fz1;//约分 jlfm=fm1; while(fm1!=0) { ys=fz1%fm1; fz1=fm1; fm1=ys; } fz0=jlfz/fz1; fm0=jlfm/fz1; if(fm0<0) { fz0=fz0*-1; fm0=fm0*-1; } printf("%d/%d %c %d/%d = ",shu[0],shu[1],fh[z],shu[2],shu[3]);//打印分式 printf("----|%d/%d|----",fz0,fm0); scanf("%d%c%d",&fz,&ch,&fm); if(fz==fz0&&fm==fm0) { printf("答对了!\n"); dt++; } else { printf("答错了!\n"); } } }
这是实验一的升级版,在编程时遇到的主要问题是分数很难去判断,不过到后面,自己仔细琢磨和参考资料还是搞定了。
时间: 2024-11-05 16:04:43