实现“小学生算术题出题器”(第一次作业)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现“小学生算术题出题器”(第一次作业)相关的知识,希望对你有一定的参考价值。

本次作业要求:(1)出题器可以随机出四则运算。(2)真分数的运算。以下为程序运行截图:技术分享

 

根据使用说明来输入整数题目的数量,以及分数题目的数量,这里分别以5道题为例。

技术分享

如果回答正确就会提示“回答正确”,回答错误则会提示“回答错误”。所有题目全部回答完毕将会给出得分情况。

为了便于打印,将所有的算术题存到了文本中。

技术分享

以上为该程序的内容和使用详情,以下为程序源代码:

#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;
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",&e);scanf("%d",&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;
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;
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",&e);scanf("%d",&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 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;
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",&e);scanf("%d",&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;
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",&e);scanf("%d",&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;
}
}

 

以上是关于实现“小学生算术题出题器”(第一次作业)的主要内容,如果未能解决你的问题,请参考以下文章

Android studio第一次作业:实现Wechat界面

第一次作业

AS第一次作业:实现APP门户界面框架设计

软件工程第一次作业

《JAVA》 第一次作业

第一次个人编程作业