四则运算

|**博客班级**|***ahpu软件工程***|
|:--:|:--:|
|作业要求| 实现四则运算 |
| 作业目标 | |
| 学号 | 3160303242 |

一。题目要求:

写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:

1)除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24

2)程序要求能处理用户的输入,判断对错,累积分数

3)程序支持可以由用户自行选择加、减、乘、除运算

4)使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目

二、代码如下:
include <stdio.h>
include <stdlib.h>
include <time.h>
include <math.h>

int gcd(int a,int b)
{
int t;
if (a>b){
t=a;
a=b;
b=t;
}
while (a!=0){
t=a;
a=b%a;
b=t;
}
return b;
}

int lcm(int a,int b, int g)
{
return a*b/g;
}

int main()
{
while (1){
int i=0;
int n=0;
int x=0;
int type;
int t;
int count=0;
char flag;
int left, right;
float result;
srand((unsigned)time(NULL));//srand(seed)的随机数种子不同,rand()的随机数值就不同
printf("请输入要出的题目数量\n");
scanf("%d",&n);
while(x<n)
{
int f;
printf("请选择:1、整数 2、真分数\n");
x++;
scanf("%d",&f);
if (f==1){//整数四则运算
printf("请选择:1、加法 2、减法 3、乘法 4、除法\n");
scanf("%d",&type);
type--;
left = rand() % 100;
right = rand() % 100;
int s=0;
switch(type)
{
case 0:
printf("%d + %d = \n", left, right);
s = left + right;
break;
case 1:
printf("%d - %d = \n", left, right);
s =left - right;
break;
case 2:
printf("%d * %d = \n", left, right);
s = left * right;
break;
case 3:
printf("%d / %d = \n", left, right);
s = left / right;
break;
}
printf("请输入答案:");
int temp;
scanf("%d",&temp);
if (temp == s){
printf("答案正确!\n");
count++;
}
else{
printf("答案错误!!正确答案为:%d\n",s);
}
}
else{//真分数的四则运算
printf("请选择:1、加法 2、减法 3、乘法 4、除法\n");
scanf("%d",&type);
type--;
int g,l,temp_g;
int a1,a2,a3,a4;
a1=rand()%10+1;
a2=a1+rand()%10+1;//保证分母大于分子
a3=rand()%10+1;
a4=a3+rand()%10+1;//保证分母大于分子
int s1,s2;//保存结果的分子和分母
switch(type)
{
case 0:
printf("%d/%d + %d/%d = \n", a1, a2, a3, a4);
g = gcd(a2,a4);//保存分母的最小公倍数
l = lcm(a2,a4,g);//求分子分母的最大公约数
a1 = l / a2 * a1;
a3 = l / a4 * a3;
a2 = a4 = l;
s2 = l;
s1 = a1 + a3;
temp_g = gcd(s1,s2);
s1 /= temp_g;//求分子分母的最简整数比
s2 /= temp_g;//求分子分母的最简整数比
break;
case 1:
printf("%d/%d - %d/%d = \n", a1, a2, a3, a4);
g = gcd(a2,a4);
l = lcm(a2,a4,g);
a1 = l / a2 * a1;
a3 = l / a4 * a3;
a2 = a4 = l;
s2 = l;
s1 = a1 - a3;
int temp_g = abs(gcd(s1,s2));//保证结果的分子和分母的最大公因数为正
s1 /= temp_g;
s2 /= temp_g;
break;
case 2:
printf("%d/%d * %d/%d = \n", a1, a2, a3, a4);
s1 = a1 * a3;
s2 = a2 * a4;
temp_g = gcd(s1,s2);
s1 /= temp_g;
s2 /= temp_g;
break;
case 3:
printf("%d/%d / %d/%d = \n", a1, a2, a3, a4);
s1 = a1 * a4;
s2 = a2 * a3;
temp_g = gcd(s1,s2);
s1 /= temp_g;
s2 /= temp_g;
break;
}
printf("请输入答案:");
int temp_s1,temp_s2;
scanf("%d/%d",&temp_s1,&temp_s2);
if (temp_s1 == s1 && temp_s2 == s2){
printf("答案正确!\n");
count++;
}
else{
printf("答案错误!!答案为:%d/%d\n",s1,s2);
}
}

}
printf("一共对了%d题!\n",count);
printf("\n");
printf("是否继续?(Y/N):");
char flag1;
getchar();
flag1 = getchar();
if (flag1 == 'n' || flag1 == 'N')
break;
}

}


![](https://img2020.cnblogs.com/blog/1998991/202011/1998991-20201107214753205-684088573.png)
三.个人小结
| psp | 任务内容 | 计划完成的时间(min) | 实际完成时间(min) |
---|---|:--:|:---:|
| Planning | 计划 | 30 | 30 |
| Estimate | 估计这个任务需要多少时间 | 50 | 60 |
| Development | 开发 | 20 | 20|
| Design | 设计 | 15 | 15|
| Test | 测试 | 6 | 6 |
|Postmortem & Process Improvement Plan| 事后总结| 5 |5|

posted @ 2020-11-07 23:28  haodeyou  阅读(306)  评论(0编辑  收藏  举报