您的位置:首页 > 其它

四则运算(修改版)

2016-03-23 12:54 253 查看
原文链接:https://www.geek-share.com/detail/2669708840.html

四则运算(修改版)

       之前的一篇随笔“四则运算:我的设计和设想(未完成版)”中的程序在和同伴共同讨论审核后发现诸多格式书写问题程序问题,格式问题已在代码中修改,代码放置于此博文的附录内,的可审阅在此只对程序问题做出提出和修改。

程序问题:

  1. 执行整数加法,q 键退出后随及出现真分数加法运算。
  2. 真分数的任意运算的结果都显示为0.00,无法正常计算。
  3. 真分数进行任一运算得出的结果都为未约分数,如何化为最简式?(未解决)
  4. 修改版的代码仍存在冗长现象,如何利用函数将其简化?(未解决)

解决办法:

  1. 程序内,整数和真分数的运算是以switch语句区分开的,但每个case语句后并未加上break语句,所以造成无退出继续运行的状况。(PS: 找到解决办法才发现,问这个问题充分的显示了我的智商到达了一定的程度(di)。)
  2. 写出一个函数progress(int f1,int f2),求取最大公约数,在之后的运算中可调用使用。(程序参考网络:http://www.zybang.com/question/e431cf54c7fabec2ffae8691e3dcfaba.html

注明:随运行结果可正常显示无error,但无法保证其正确性。对于此问题,后续再补充。

程序截图:

1.整数减法运算

2.真分数除法运算

附录:源代码(未完成版)

别瞎找着!点我!

源代码(修改版)

#include<stdio.h>
#include <stdlib.h>
#include <time.h>

// 求最大公约数
//(参考:http://www.zybang.com/question/e431cf54c7fabec2ffae8691e3dcfaba.html)
int process(int f1,int f2)
{
int fx;
while(f2!=0){
fx=f1%f2;
f1=f2;
f2=fx;
}
return f1;
}

int main()
{
int a,b,x,y,s=0,r=0,e=0,result;  //s总题数  r正确数 e错误数
float fen1,fen2; //真分数
char c;  //答题者输入的值 (比如其中的a+b=c)
int m,n; //输入的数值,确定性
printf("\n\t\t【小朋友~又到了检验自己实力的时候啦!让我们开始吧!】\n\n");

printf("输入要练习的题型吧(1整数 / 2真分数):");
scanf("%d",&n);

printf("\n根据下面序列号,可以选择试题哦\n");
printf("1.+ 加法\n");
printf("2.- 减法\n");
printf("3.* 乘法\n");
printf("4./ 除法");
printf("\n 提示:1.整数间运算 要保留到小数点到整数部分!\n") ;
printf("       2.按q键退出哦!\n") ;

printf("\n输入要练习的对应序号吧:");
scanf("%d",&m);
printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");

printf("\n小测试开始啦!认真答题吧!\n");
srand( (unsigned)time( NULL ) );    //取随机数

switch(n){

/*整数开始*/
case 1:{
while ((c=getchar())!='q')   //按q退出
{
s++;
a=rand()%100;
b=rand()%100;
x=rand()%100;
y=rand()%x; //保证减法、除法 可应用

//加法 +
if(m==1)
{
printf("%d+%d=",a,b);
scanf("%d",&c);
if (a+b==c) r++;
else{
printf("要细心呀!正确答案为:%d\n",a+b);
e++;
}
}

//减法 -
else if(m==2)
{
printf("%d-%d=",x,y);
scanf("%d",&c);
if (x-y==c) r++;
else{
printf("要细心呀!正确答案为:%d\n",x-y);
e++;
}
}

//乘法 *
else if(m==3)
{
printf("%d*%d=",a,b);
scanf("%d",&c);
if (a*b==c) r++;
else{
printf("要细心呀!正确答案为:%d\n",a*b);
e++;
}
}

//除法 /
else if(m==4)
{
if(y!=0){                 //排除 除数=0的情况
printf("%d/%d=",x,y);
scanf("%d",&c);
float shang=x/y;
if (x/y==c) r++;
else{
printf("要细心呀!正确答案为:%.2f\n",shang);
e++;
}//else结束
}//if(y!=0)结束
}
else
printf("请输入正确序号!\n"); //输入其他数字,提示输出错误
result=100*r/s; //整体得分
}
}//整数结束
break;

/*真分数 开始*/
case 2:{
while ((c=getchar())!='q')
{
s++;
float t;      //t做转换的中间因子。fen1,fen2转换
x=rand()%100;
y=rand()%x;
a=rand()%100;
b=rand()%a;
fen1=y/x;  //设定两个不同的真分数
fen2=b/a;
int f1,f2,min,result2;  //求最大公约数所设定的值

//加法 +
if(m==1)
{
printf("%d/%d+%d/%d=",y,x,b,a);
scanf("%d",&result2);
f1=y*a+x*b;
f2=a*x;
min=process(f1,f2);
if (fen1+fen2==result2) r++;
else{
printf("要细心呀!正确答案为:%d/%d\n",f1/min,f2/min);
e++;
}
}

//减法 -
else if(m==2)
{
if(fen1>fen2)
{
printf("%d/%d-%d/%d=",y,x,b,a);
scanf("%d",&result2);
f1=y*a+x*b;
f2=a*x;
min=process(f1,f2);
if (fen1-fen2==result2) r++;
else{
printf("要细心呀!正确答案为:%d/%d\n",f1/min,f2/min);
e++;
}
}
else{
t=fen1;
fen1=fen2;
fen2=t;    //减数>被减数,则转换
printf("%d/%d-%d/%d=",y,x,b,a);
scanf("%d",&result2);
f1=y*a+x*b;
f2=a*x;
min=process(f1,f2);
if (fen1-fen2==result2) r++;
else{
printf("要细心呀!正确答案为:%d/%d\n",f1/min,f2/min);
e++;
}
}
}

//乘法 *
else if(m==3)
{
int j=y*b,k=x*a; //分子or分母间的相乘
printf("%d/%d*%d/%d=",y,x,b,a);
scanf("%d",&result2);
f1=y*a+x*b;
f2=a*x;
min=process(f1,f2);
if (j*k==result2) r++;
else{
printf("要细心呀!正确答案为:%d/%d\n",f1/min,f2/min);
e++;
}
}

//除法 /
else if(m==4)
{
int o=y*a,p=x*b; //相除等于乘于一个倒数
if(p!=0){       //防止分母=0,即p!=0
printf("(%d/%d)/(%d/%d)=",y,x,b,a);
scanf("%d",&result2);
f1=y*a+x*b;
f2=a*x;
min=process(f1,f2);
if (o*p==result2) r++;
else{
printf("要细心呀!正确答案为:%d/%d\n",f1/min,f2/min);
e++;
}
}
}
else
printf("请输入正确序号!\n"); //输入其他数字,提示输出错误
result=100*r/s;      //得分
}
}//真分数结束
break;
}

//成绩显示
printf("\n本次答题成绩:%d\n\n",result);
printf("本次共有%d道题。\n回答正确有 %d 道\n回答错误有 %d 道\n",s,r,e);

//评语
if(result>60&&result<80)
{
printf("\n\n评语:还差一点就要满分咯!继续前进吧!");
}
else if(result>80&&result<100)
{
printf("\n\n评语:就差一丢丢了!再接再厉!");
}
else if(result==100)
{
printf("非常棒哦!为你点赞!");
}
else
{
printf("\n\n评语:要多加练习哟!你的潜力很大呢!");
}
}

转载于:https://www.cnblogs.com/JINGY/p/5310634.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: