一.作业信息
| 博客班级 | 软件工程 |
|---|---|
| 作业要求 | 作业要求 |
| 作业目标 | 能够精准高效完成四则运算并输出结果;迅速理解需求制定功能 |
| 学号 | 3180701219 |
目录
* 一.作业信息
* 二.作业要求
* 三.代码提交与截图
* 四.个人小结
二.作业要求
写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:
- 除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24
- 程序要求能处理用户的输入,判断对错,累积分数
- 程序支持可以由用户自行选择加、减、乘、除运算
- 使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目
三.代码提交与运行截图
1.主函数
{
int n, a, right = 0;
double percent;
printf("Please enter the number of the test:");
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
a = takeTest();
right = right + a;
}
printf("Powerful!
");
printf("The number of right:%d
", right);
percent = ((double)right * 100.00) / (double)n;
printf("The percent of right:%0.2f %%
", percent);
}
2.获取随机运算符函数
char getSignal()
{
char signal[4]={'+','-','*','/'};
srand((unsigned)time(NULL));
return signal[rand()%4];
}
3.获取随机数函数
int random(double start, double end)
{
return (int)(start+(end-start)*rand()/(RAND_MAX+ 1.0));
}
4.计算结果函数
int getResult(int num1,int num2,char signal)//整数四则运算
{
int res;
switch(signal)
{
case '+':
res=num1+num2;break;
case '-':
res=num1-num2;break;
case '*':
res=num1*num2;break;
case '/':
res=num1/num2;break;
default:
printf("运算符错误!
");
}
return res;
}
5.真分数运算函数
void fs() //分数
{
int x1,y1,x2,y2,p,fz,fm,temp; //分子fz 分母fm
char answer[20],result[20],s[9];
int d;
d=rand()%4;
srand((int)time(0));
x1=rand()%20+1;
y1=rand()%20+1;
if(x1>y1||x1==y1)
{
x1=rand()%20+1;
y1=rand()%20+1;
}
temp=gcd(x1,y1);
if(temp>0) {
x1=x1/temp;
y1=y1/temp;
}
else if (temp<0)
{
x1=-x1/temp;
y1=-y1/temp;
}
x2=rand()%20+1;
y2=rand()%20+1;
if(x2>y2||x2==y2)
{
x2=rand()%20+1;
y2=rand()%20+1;
}
temp=gcd(x2,y2);
if(temp>0) {
x2=x2/temp;
y2=y2/temp;
}
else if (temp<0)
{
x2=-x2/temp;
y2=-y2/temp;
}
switch(d)
{
case 0: printf("%d/%d+%d/%d=",x1,y1,x2,y2);
fz=x1*y2+x2*y1;
fm=y1*y2; break;
case 1: printf("%d/%d-%d/%d=",x1,y1,x2,y2);
fz=x1*y2-x2*y1;
fm=y1*y2; break;
case 2: printf("%d/%d×%d/%d=",x1,y1,x2,y2);
fz=x1*x2;
fm=y1*y2; break;
case 3: printf("%d/%d÷%d/%d=",x1,y1,x2,y2);
fz=x1*y2;
fm=y1*x2; break;
}
p=gcd(fz,fm);
if(p>0) {
fz=fz/p;
fm=fm/p;
}
else if (p<0)
{
fz=-fz/p;
fm=-fm/p;
}
if(fz%fm==0)
{
temp=fz/fm;
itoa(fz,result,10);
}
else
{
itoa(fz,result,10);
itoa(fm,s,10);
strcat(result,"/");
strcat(result,s);
}
scanf("%s:",&answer);
if(strcmp(result,answer)==0)
{
printf("正确
");
ttrue++;
}
else
printf("错误 答案是%s
",result);
}
6.题目生成函数
int takeTest()
{
int get;
int num1,num2,a;
char signal;
srand((unsigned)time(NULL));
signal=getSignal();
num1=random(0,1000);
num2=random(1,1000);
if(signal=='-')
{
if(num1<num2)
{
int temp;
temp=num1;
num1=num2;
num2=temp;
}
}
if(signal=='/')
{
if(num2==0)
{
int temp;
temp=num1;
num1=num2;
num2=temp;
}
}
printf("%d%c%d=",num1,signal,num2);
scanf("%d",&get);
fflush(stdin); //清空输入缓冲区
if(getResult(num1,num2,signal)==get)
{
printf("You're right!
");
a=1;
}
else
{
printf("It's wrong!
");
printf("The right answer is: %d
",getResult(num1,num2,signal));
a=0;
}
return a;
}
运行结果

四.个人小结
| psp2.1 | 任务内容 | 计划完成需要的时间(min) | 实际完成需要的时间(min) |
|---|---|---|---|
| Planning | 计划 | 2000 | 250 |
| Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 20 | 40 |
| Development | 开发 | 10 | 30 |
| Analysis | 需求分析(包括学习新技术) | 10 | 10 |
| Design Spec | 生成设计文档 | 10 | 20 |
| Design Review | 设计复审 | 10 | 20 |
| Coding Standard | 代码规范 | 10 | 10 |
| Design | 具体设计 | 20 | 30 |
| Coding | 具体编码 | 30 | 20 |
| Code Review | 代码复审 | 20 | 30 |
| Test | 测试(自我测试,修改代码,提交修改) | 20 | 30 |
| Reporting | 报告 | 10 | 20 |
| Test Report | 测试报告 | 10 | 15 |
| Size Measurement | 计算工作量 | 20 | 20 |
| Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 10 | 20 |