中易网

用简单的c语言编写四则运算题

答案:4  悬赏:50  
解决时间 2021-03-10 02:27
由电脑生成简单的四则运算题,用户给出答案,计算机判断对错,知道用户回答说不再继续做了时结束程序
可以让用户选择指定出加减乘除哪一种运算,以及出一位数还是两位数的运算题
对用户所做算术题的对错次数进行记录,结束程序时给出成绩
最好把每句什么意思在后面解释一下
务必要用简单的C语言编写
我把我所有的财富值都给了,希望大神谅解,并用心完成,跪谢
最佳答案
#include
#include
#include
int add(int num1,int num2)//加法
{
return num1+num2;
}
int subtraction(int num1,int num2)//减法
{
return num1-num2;
}
int mul(int num1,int num2)//乘法
{
return num1*num2;
}
float divis(int num1,int num2)//除法
{
return ((int)(((float)num1/num2)*100+0.5))/100.0;
}
int main()
{
int type = -1;
int data = -1;
int choice,num1,num2,results;
float div_result;
int right = 0;
int wrong = 0;
char ch;
printf("欢迎进入四则运算题,现在开始爆发你的小宇宙吧!\n");
srand((unsigned int)time(NULL));
while(1)
{
printf("请选择运算类型:1.加法 2.减法 3.乘法 4.除法(保留两位小数)\n");
scanf("%d",&choice);
printf("请选择位数:1.一位数 2.两位数\n");
scanf("%d",&data);
switch (choice)
{
case 1:
if(data == 1)
{
num1 = rand()%10;
num2 = rand()%10;
printf("%d + %d=__?__\n",num1,num2);
scanf("%d",&results);
if(results == add(num1,num2))
{
printf("回答正确!\n");
right++;
}
else
{
printf("回答错误!\n");
wrong++;
}
printf("是否继续?y/n\n");
getchar();
scanf("%c",&ch);
if(ch == 'y')
break;
else if(ch == 'n')
goto end;
}
else if (data == 2)
{
num1 = rand()%100;
num2 = rand()%100;
printf("%d + %d=__?__\n",num1,num2);
scanf("%d",&results);
if(results == add(num1,num2))
{
printf("回答正确!\n");
right++;
}
else
{
printf("回答错误!\n");
wrong++;
}
printf("是否继续?y/n\n");
getchar();
scanf("%c",&ch);
if(ch == 'y')
break;
else if(ch == 'n')
goto end;
}
break;
case 2:
if(data == 1)
{
num1 = rand()%10;
num2 = rand()%10;
printf("%d - %d=__?__\n",num1,num2);
scanf("%d",&results);
if(results == subtraction(num1,num2))
{
printf("回答正确!\n");
right++;
}
else
{
printf("回答错误!\n");
wrong++;
}
printf("是否继续?y/n\n");
getchar();
scanf("%c",&ch);
if(ch == 'y')
break;
else if(ch == 'n')
goto end;
}
else if (data == 2)
{
num1 = rand()%100;
num2 = rand()%100;
printf("%d - %d=__?__\n",num1,num2);
scanf("%d",&results);
if(results == subtraction(num1,num2))
{
printf("回答正确!\n");
right++;
}
else
{
printf("回答错误!\n");
wrong++;
}
printf("是否继续?y/n\n");
getchar();
scanf("%c",&ch);
if(ch == 'y')
break;
else if(ch == 'n')
goto end;
}
break;
case 3:
if(data == 1)
{
num1 = rand()%10;
num2 = rand()%10;
printf("%d * %d=__?__\n",num1,num2);
scanf("%d",&results);
if(results == mul(num1,num2))
{
printf("回答正确!\n");
right++;
}
else
{
printf("回答错误!\n");
wrong++;
}
printf("是否继续?y/n\n");
getchar();
scanf("%c",&ch);
if(ch == 'y')
break;
else if(ch == 'n')
goto end;
}
else if (data == 2)
{
num1 = rand()%100;
num2 = rand()%100;
printf("%d * %d=__?__\n",num1,num2);
scanf("%d",&results);
if(results == mul(num1,num2))
{
printf("回答正确!\n");
right++;
}
else
{
printf("回答错误!\n");
wrong++;
}
printf("是否继续?y/n\n");
getchar();
scanf("%c",&ch);
if(ch == 'y')
break;
else if(ch == 'n')
goto end;
}
break;
case 4:
if(data == 1)
{
num1 = rand()%10;
num2 = rand()%10+1;
printf("%d / %d=__?__\n",num1,num2);
scanf("%f",&div_result);
if(div_result == divis(num1,num2))
{
printf("回答正确!\n");
right++;
}
else
{
printf("回答错误!\n");
wrong++;
}
printf("是否继续?y/n\n");
getchar();
scanf("%c",&ch);
if(ch == 'y')
break;
else if(ch == 'n')
goto end;
}
else if (data == 2)
{
num1 = rand()%100;
num2 = rand()%100+1;
printf("%d / %d=__?__\n",num1,num2);
scanf("%f",&div_result);
if(div_result == divis(num1,num2))
{
printf("回答正确!\n");
right++;
}
else
{
printf("回答错误!\n");
wrong++;
}
printf("是否继续?y/n\n");
getchar();
scanf("%c",&ch);
if(ch == 'y')
break;
else if(ch == 'n')
goto end;
}
break;
default :
printf("输入错误!\n");
break;
}
}
end:
printf("回答正确%d题,回答错误%d题\n",right,wrong);
printf("\n====================谢谢光临====================!\n");
system("pause");
return 0;
}
//注意除法是采用四舍五入的,有什么不明白的再问吧,望采纳!
全部回答
还有点小毛病,你自己修改吧 #include #include #include int a,b; float ans; int GetFigure(BYTE bit,int *a1,int *b1) { int i = 0,j,k,Num[2]; srand( (unsigned)time( NULL ) ); k = pow(10,bit-1); while(i<2) { j = rand(); j = j % (k * 10); if(j-k>=0) { Num[i] = j; i++; } } *a1 = Num[0]; *b1 = Num[1]; return j; } void Func(BYTE n,BYTE bit) { GetFigure(bit,&a,&b); switch(n) { case '+': ans = a + b; break; case '-': ans = a - b; break; case '*': ans = a * b; break; case '/': ans = (float)a / (float)b; break; default: return; } } void main() { BYTE n,bit; float an; printf("要做那则运算?"); scanf("%c",&n); system("cls"); printf("要做几位数的四则运算?\n"); scanf("%d",&bit); while(1) { Func(n,bit); printf("\n\n%d %C %d = ?\n\n",a,bit,b); scanf("%f",&an); if(ans==an) { printf("回答正确!\n\n"); } else { if(n=='/') { printf("回答错误! 答案是:%f\n\n",ans); } else { printf("回答错误! 答案是:%.1f\n\n",ans); } } } }
double cal(double a[],char e[],int j) //定义cal函数,用于判别各运算符号优先级和计算结果 { int i,n,flag=1; //flag用于标识是不是有被除数为0的情况(falg==0),如有则不输出运算结果 for(i=0;i<=j;n=++i) { if(e[i]==0&&flag) { printf("%lf\n",a[i]); //当有=时,输出最后的运算结果 i=j; } else { if(e[i]-e[i+1]>-5) //判别e[i]与e[i+1]的运算级别是否相同 { switch(e[i]) { case 10: a[i+1]=a[i]+a[i+1];break; case 11: a[i+1]=a[i]-a[i+1];break; case 20: a[i+1]=a[i]*a[i+1];break; case 21: { if(a[i+1]==0) { printf("错误,被除数不能为\n");flag=0;} //被除数为时,flag=0 else a[i+1]=a[i]/a[i+1];break; } } for(n=i;i<=j;i++) { a[i]=a[i+1];e[i]=e[i+1]; //两数运算后其结果取代这两个数,存在前一个数的位置 //a[i]后面的数存放位置都提前一位,继续循环 if(e[i]==0) i=j; } if(n==0) i=n-1; else i=n-2; } } } return(a[0]); } void main() //主函数 { double a[4]; char e[4]; int i,j=4; //e[4]用于存放及判别“+-*/=”等运算符号a[4]存放计算式中的数字 printf("☆欢迎使用简易四则运算程序☆\n...o(∩_∩)o...\n"); printf("☆请输入运算式子并以=结尾☆\n"); printf("\n"); for(i=0;i<=j;i++) { scanf("%lf%c",&a[i],&e[i]); //输入计算式 switch(e[i]) { case '+': e[i]=10;break; case '-': e[i]=11;break; case '*': e[i]=20;break; case '/': e[i]=21;break; case '=': e[i]=0,i=j;break; default: printf("☆输入错误!请输入“+ - * / =”等运算符号☆\n");break; //若输入式子非以上运算符号与数字,则报错 } } printf("\n"); cal(a,e,j); }
这个很简单啊。   假设你已经输入写好了,然后制定的运算种类存在int op里面,int x表示数的位数   那么   if (x==1) {a=rand()%9+1;b=rand()%9+1;} else {a=rand()%90+10;b=rand()%90+10;} 随机生成两个数   然后if (op==0) c=a+b;if (op==1) c=a-b;if (op==2) c=a*b;if (op==3) c=a/b;电脑计算出答案   然后你把a,b运算符号都输出,然后读入用户的答案,判断是否和c一致就可以了。   比如输入到d。假设规定用户输入-1表示结束。   那么就if (d==-1) break。整个过程写在一个循环里面就行了。   if (c==d) ct1++; else ct2++; 记录对错次数   最后输出一下ct1和ct2就可以了。   最后大致写下总的。     ct1=ct2=0;     while (1)     {         input(); // 你自己完成输入。         if (x==1) {a=rand()%9+1;b=rand()%9+1;} else {a=rand()%90+10;b=rand()%90+10;}         if (op==0) c=a+b;if (op==1) c=a-b;if (op==2) c=a*b;if (op==3) c=a/b;         output(a,b,op); //你自己完成以下输出a,b和计算符号。以及提示语之类的         readfromuser(d); //你自己看看怎么从用户这边读入,并且判断是否是退出之类的。         if (isexit(d)) break; //如果你自己判断出来用户要退出就退出。         if (c==d) ct1++;ct2++;      }      outputscore(ct1,ct2); //输出一下分数。      输入输出函数我就不具体写了,你可能想完成的更美工一点之类的,但是大致流程就这样子。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
御捷电动汽车兰州店地址在哪,我要去那里办事
哪位师傅能否告诉我这个步进电机的参数,驱动
温州5字开头的电话号码
中国电信大柳营业所地址在什么地方,想过去办
LOL哪个英雄需要攻速符文?
我的生日和母亲节同一天的词语
求C80女性向(腐)同人志下载地址
以...为主题的作文题目可以自拟吗
沙河街镇东方红社区居委会地址有知道的么?有
在QQ上找人借钱的都是QQ号码被盗了吗
岜过社我想知道这个在什么地方
作一个角等于已知角的理论依据是运用了全等三
杜尔伯特县法院胡吉吐莫法庭怎么去啊,有知道
歌颂成长的作文200字,好段
求语笑嫣然的长篇小说 要完结的
推荐资讯
城南街道嘉源车饰店在哪里啊,我有事要去这个
春花不红不如草,少年不美不如老,出自什么诗文
社会变革最根本的动力是
冬天去面试,应该怎么穿,还是穿西服还是就穿
金山大街/长征路(路口)在什么地方啊,我要过
岭山尾地址在什么地方,想过去办事
单反相机的定焦头和变焦头有什么区别?尼康18
時方的意思是什么?時方的释义是什么啊?
如何将多个软件打包成自动安装程序
保时捷卡宴柴油怠速车内震动
流字开头的电影有没有
在工商银行购买的太平人寿稳赢一生A款年金保
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?