个人作业-四则运算题目生成程序
一、作业信息
| 作业班级 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18 |
| ---- | ---- | ---- |
| 作业要求 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11377 |
| 作业目标 | 能对需求进行分析并实现;编码格式规范;学习博客撰写 |
| 学号 | 3180701338 |
二、作业要求
写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:
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>
#define Num 10 /*Num为参数,控制生成题目的个数*/
void menu(); /*声明菜单函数*/
int add(); /*声明加法函数*/
int sub(); /*声明减法函数*/
int multi(); /*声明乘法函数*/
int divi(); /*声明除法函数*/
int main()
{
int i,y=0;
int op;
srand((unsigned)time(NULL));
menu();
scanf("%d",&op);
switch(op)
{
case 1:
for(i=0;i<Num;i++)
{
if(add()==1) /*调用加法函数*/
y++;
}
break;
case 2:
for(i=0;i<Num;i++)
{
if(sub()==1) /*调用减法函数*/
y++;
}
break;
case 3:
for(i=0;i<Num;i++)
{
if(multi()==1) /*调用乘法函数*/
y++;
}
break;
case 4:
for(i=0;i<Num;i++)
{
if(divi()==1) /*调用除法函数*/
y++;
}
break;
}
printf("***正确率为%.0f%%***\n",100.0*y/Num); /*计算正确率,用百分比显示*/
return 0;
}
/*菜单函数*/
void menu()
{
printf("\n----欢迎进入小学四则运算练习系统----\n");
printf("*********1.加法运算*********\n");
printf("*********2.减法运算*********\n");
printf("*********3.乘法运算*********\n");
printf("*********4.除法运算*********\n");
printf("---您计算的结果统一用分数[如:1/4+3/15=27/60]来表示(输入),注意不用化简!谢谢!---\n");
printf("请输入数字1-4来选择您要进行的四则运算:");
}
/*加法函数*/
int add()
{
int a1,b1,a2,b2,ans1,res1,ans2,res2;
printf("---您选择的是加法运算!---");
printf("---请进行加法运算---\n");
/*随机生成两个要参与运算的数*/
a1=rand()%9+1;
b1=rand()%9+1;
a2=rand()%9+1;
b2=rand()%9+1;
/*如遇假分数,下面两个if选择条件负责把假分数转化为真分数*/
if(a1<b1)
{
int t;
t=a1;
a1=b1;
b1=t;
}
if(a2<b2)
{
int t;
t=a2;
a2=b2;
b2=t;
}
res1=a1*b2+a2*b1;
res2=a1*a2;
printf("%d/%d+%d/%d=",b1,a1,b2,a2);
scanf("%d/%d",&ans1,&ans2);
if(ans1==res1&&ans2==res2)
{
printf("Very Good!\n");
return 1;
}
else
{ printf("Wrong Answer!\n");
return 0;
}
}
/*减法函数*/
int sub()
{
int a1,b1,a2,b2,ans1,res1,ans2,res2;
printf("--您选择的是减法运算!--");
printf("--请进行减法运算--\n");
/*随机生成两个要参与运算的数*/
a1=rand()%9+1;
b1=rand()%9+1;
a2=rand()%9+1;
b2=rand()%9+1;
/*如遇假分数,下面两个if选择条件负责把假分数转化为真分数*/
if(a1<b1)
{
int t;
t=a1;
a1=b1;
b1=t;
}
if(a2<b2)
{
int t;
t=a2;
a2=b2;
b2=t;
}
res1=a2*b1-a1*b2;
res2=a1*a2;
printf("%d/%d-%d/%d=",b1,a1,b2,a2);
scanf("%d/%d",&ans1,&ans2);
if(ans1==res1&&ans2==res2)
{
printf("Very Good!\n");
return 1;
}
else
{ printf("Wrong Answer!\n");
return 0;
}
}
/*乘法函数*/
int multi()
{
int a1,b1,a2,b2,ans1,res1,ans2,res2;
printf("--您选择的是乘法运算!--");
printf("--请进行乘法运算--\n");
/*随机生成两个要参与运算的数*/
a1=rand()%9+1;
b1=rand()%9+1;
a2=rand()%9+1;
b2=rand()%9+1;
/*如遇假分数,下面两个if选择条件负责把假分数转化为真分数*/
if(a1<b1)
{
int t;
t=a1;
a1=b1;
b1=t;
}
if(a2<b2)
{
int t;
t=a2;
a2=b2;
b2=t;
}
res1=b1*b2;
res2=a1*a2;
printf("%d/%d*%d/%d=",b1,a1,b2,a2);
scanf("%d/%d",&ans1,&ans2);
if(ans1==res1&&ans2==res2)
{
printf("Very Good!\n");
return 1;
}
else
{ printf("Wrong Answer!\n");
return 0;
}
}
/*除法函数*/
int divi()
{
int a1,b1,a2,b2,ans1,res1,ans2,res2;
printf("--您选择的是除法运算!--");
printf("--请进行除法运算--\n");
/*随机生成两个要参与运算的数*/
a1=rand()%9+1;
b1=rand()%9+1;
a2=rand()%9+1;
b2=rand()%9+1;
/*如遇假分数,下面两个if选择条件负责把假分数转化为真分数*/
if(a1<b1)
{
int t;
t=a1;
a1=b1;
b1=t;
}
if(a2<b2)
{
int t;
t=a2;
a2=b2;
b2=t;
}
res1=b1*a2;
res2=a1*b2;
printf("(%d/%d)/(%d/%d)=",b1,a1,b2,a2);
scanf("%d/%d",&ans1,&ans2);
if(ans1==res1&&ans2==res2)
{
printf("Very Good!\n");
return 1;
}
else
{
printf("Wrong Answer!\n");
return 0;
}
}
2.运行截图
四、个人小结
首先,第一次接触博客园,许多使用方法很陌生,但是通过这一次的实际操作,慢慢地学会了一些基本的操作,感觉markdown编辑器挺有趣的,希望能在平时多多练习使用它。
其次,感觉自己的算法相关能力还不足,希望以后自己多加练习。
(PSP表格)
psp2.1 | 任务内容 | 计划完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 10 | 20 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 5 | 5 |
Development | 开发 | 100 | 150 |
Analysis | 需求分析(包括学习新技术) | 10 | 15 |
Design Spec | 生成设计文档 | 20 | 22 |
Design Review | 设计复审 | 10 | 10 |
Coding Standard | 代码规范 | 5 | 10 |
Design | 具体设计 | 15 | 20 |
Coding | 具体编码 | 40 | 42 |
Code Review | 代码复审 | 3 | 4 |
Test | 测试(自我测试,修改代码,提交修改) | 15 | 20 |
Reporting | 报告 | 10 | 17 |
Test Report | 测试报告 | 4 | 4 |
Size Measurement | 计算工作量 | 3 | 3 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 5 | 5 |