一、作业信息
作业班级 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18 |
---|---|
作业要求 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11377 |
作业目标 | 能对需求进行分析并实现;编码格式规范;学习博客撰写 |
学号 | 3180701340 |
二、作业要求
写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:
1)除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24
2)程序要求能处理用户的输入,判断对错,累积分数
3)程序支持可以由用户自行选择加、减、乘、除运算
4)使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目
三、代码提交
#include <ctype.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
#define IDNO_LENGTH 6
#define CALC_KIND 4
char getSignal();
int getResult(int,int,char);
void takeTest();
void falsePrint(int);
void correctPrint(int);
3.1 main函数
int main()
{
while(1)
{
takeTest();
}
}
3.2获取随机运算符
char getSignal()
{
char signal[CALC_KIND]={'+','-','*','/'};
srand((unsigned)time(NULL));
return signal[rand()%4];
}
3.3获取随机数
int random(double start, double end)
{
return (int)(start+(end-start)*rand()/(RAND_MAX+ 1.0));
}
3.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:
res=0;
printf("运算符不符合规则
");
}
return res;
}
3.5列出题目
void takeTest()
{
int giveRes;
int num1;
int num2;
char signal;
int printFlag;
srand((unsigned)time(NULL));
signal=getSignal();
num1=random(0,100);
num2=random(1,100);
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",&giveRes);
fflush(stdin);
if(getResult(num1,num2,signal)==giveRes)
{
printFlag=random(1,5);
correctPrint(printFlag);
}
else
{
printFlag=random(1,4);
falsePrint(printFlag);
printf("正确答案:%d
",getResult(num1,num2,signal));
}
}
3.6回答正确打印信息
void correctPrint(int num)
{
switch(num)
{
case 1:
printf("You're right!
");break;
case 2:
printf("It's OK!
");break;
case 3:
printf("Correct!
");break;
case 4:
printf("Perfect!
");break;
case 5:
printf("Good!
");break;
default:
printf("Powerful!
");break;
}
}
3.7回答错误打印信息
void falsePrint(int num)
{
switch(num)
{
case 1:
printf("You're lost!");break;
case 2:
printf("Failure!");break;
case 3:
printf("Come on!");break;
case 4:
printf("It's wrong!");break;
default:
printf("Incorrect!");break;
}
}
四、运行截图
五、个人小结
此次的博客园注册与作业的完成,都打开了我学习的新大门,了解了另一个学习的窗口,通过博客园可以更好地表达自己所学习到的知识,哪怕知识一点点,都可以更好地分享出去,
四则运算的编写也是最为基础的算法,但是在写的时候,仍然会出现大量的问题,这些问题有大有小,都是值得自己关注的,还是要不断地来编写代码来提升自己的编程能力。
附:PSP表格
psp2.1 | 任务内容 | 计划完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 15 | 20 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 20 | 24 |
Development | 开发 | 200 | 243 |
Analysis | 需求分析(包括学习新技术) | 15 | 11 |
Design Spec | 生成设计文档 | 7 | 7 |
Design Review | 设计复审 | 6 | 4 |
Coding Standard | 代码规范 | 5 | 7 |
Design | 具体设计 | 30 | 38 |
Coding | 具体编码 | 45 | 40 |
Code Review | 代码复审 | 8 | 7 |
Test | 测试(自我测试,修改代码,提交修改) | 5 | 6 |
Reporting | 报告 | 6 | 12 |
Test Report | 测试报告 | 5 | 8 |
Size Measurement | 计算工作量 | 3 | 4 |
Size Measurement | 事后总结,并提出过程改进计划 | 4 | 9 |