一、作业信息
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11377 |
这个作业的目标 | <学会编写四则运算,及使用博客> |
学号 | <3180701210> |
二、作业要求 | |
写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展: |
1)除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24
2)程序要求能处理用户的输入,判断对错,累积分数
3)程序支持可以由用户自行选择加、减、乘、除运算
4)使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目
三、代码提交与运行截图
1、源代码
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("请输入要出的题目数量
");
scanf("%d",&n);
while(x<n)
{
int f;
printf("请选择:1、整数 2、真分数
");
x++;
scanf("%d",&f);
if (f==1){//整数四则运算
printf("请选择:1、加法 2、减法 3、乘法 4、除法
");
scanf("%d",&type);
type--;
left = rand() % 100;
right = rand() % 100;
int s=0;
switch(type)
{
case 0:
printf("%d + %d =
", left, right);
s = left + right;
break;
case 1:
printf("%d - %d =
", left, right);
s =left - right;
break;
case 2:
printf("%d * %d =
", left, right);
s = left * right;
break;
case 3:
printf("%d / %d =
", left, right);
s = left / right;
break;
}
printf("请输入答案:");
int temp;
scanf("%d",&temp);
if (temp == s){
printf("答案正确!
");
count++;
}
else{
printf("答案错误!!正确答案为:%d
",s);
}
}
else{//真分数的四则运算
printf("请选择:1、加法 2、减法 3、乘法 4、除法
");
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 =
", 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 =
", 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 =
", 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 =
", 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("答案正确!
");
count++;
}
else{
printf("答案错误!!答案为:%d/%d
",s1,s2);
}
}
}
printf("一共对了%d题!
",count);
printf("
");
printf("是否继续?(Y/N):");
char flag1;
getchar();
flag1 = getchar();
if (flag1 == 'n' || flag1 == 'N')
break;
}
}
截图如下
四、个人总结
psp2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划 15 12
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 8 8
Development 开发 120 130
Analysis 需求分析(包括学习新技术) 12 15
Design Spec 生成设计文档 5 6
Design Review 设计复审 5 5
Coding Standard 代码规范 3 4
Design 具体设计 12 16
Coding 具体编码 35 40
Code Review 代码复审 5 6
Test 测试(自我测试,修改代码,提交修改) 10 15
Reporting 报告 10 12
Test Report 测试报告 6 12
Size Measurement 计算工作量 20 25
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 5 5