项目地址https://github.com/DvilWar/task2
一、题目要求:
写一个能自动生成小学四则运算题目的命令行“软件”,满足下列需求。
a)一次可以出一千道题目,并且没有重复的,把题目写入一个文件中。
b)除了整数以外,还要支持真分数的四则运算。
c)运算符为 +, −, ×, ÷,(,).
d)除了整数以外,还要支持真分数的四则运算。
e)让程序能够接受用户输入答案,并判定对错。最后给出总共 对/错 的数量。
二、需求分析:
1、自动随机生成加减乘除四则运算;
2、四则运算包括整数和真分数的运算;
3、将生成的一千个题目放入一个文件中;
4、能生成正确答案;
5、能统计答题正确数与错误数。
三、结对项目过程耗时估计与统计表:
PSP2.1 |
Personal Software Process Stages |
Time (%) Senior Student |
Time (%) |
Planning |
计划 |
10 |
8 |
· Estimate |
估计这个任务需要多少时间 |
10 |
12 |
Development |
开发 |
10 |
12 |
· Analysis |
需求分析 (包括学习新技术) |
12 |
5 |
· Design Spec |
生成设计文档 |
5 |
4 |
· Design Review |
设计复审 |
4 |
4 |
· Coding Standard |
代码规范 |
2 |
4 |
· Design |
具体设计 |
10 |
8 |
· Coding |
具体编码 |
12 |
12 |
· Code Review |
代码复审 |
5 |
4 |
· Test |
测试(自我测试,修改代码,提交修改) |
8 |
10 |
Reporting |
报告 |
4 |
5 |
测试报告 |
5 |
4 |
|
计算工作量 |
3 |
2 |
|
并提出过程改进计划 |
3 |
2 |
四、主要代码:
①主要函数:
1 char getSignal(); //获取随机运算符函数 2 int random(double,double); //获取随机数函数 3 int getResult(int,int,char); //结果计算函数 4 int takeTest(); //题目生成函数
②主函数:
1 void main() 2 { 3 int n,a,right=0; 4 double percent; 5 printf("Please enter the number of the test:"); 6 scanf("%d",&n); 7 for(int i=0;i<n;i++) 8 { 9 a=takeTest(); 10 right=right+a; 11 } 12 printf("Powerful!\n"); 13 printf("The number of right:%d\n",right); 14 percent=((double)right*100.00)/(double)n; 15 printf("The percent of right:%0.2f %%\n",percent); 16 }
③获取随机运算符函数:
1 char getSignal() 2 { 3 char signal[4]={'+','-','*','/'}; 4 srand((unsigned)time(NULL)); 5 return signal[rand()%4]; 6 }
④获取随机数函数:
1 int random(double start, double end) 2 { 3 return (int)(start+(end-start)*rand()/(RAND_MAX+ 1.0)); 4 }
⑤结果计算函数:
1 int getResult(int num1,int num2,char signal) 2 { 3 int res; 4 switch(signal) 5 { 6 case '+': 7 res=num1+num2;break; 8 case '-': 9 res=num1-num2;break; 10 case '*': 11 res=num1*num2;break; 12 case '/': 13 res=num1/num2;break; 14 default: 15 printf("运算符错误!\n"); 16 } 17 return res; 18 }
⑥题目生成函数:
1 int takeTest() 2 { 3 int get; 4 int num1,num2,a; 5 char signal; 6 7 srand((unsigned)time(NULL)); 8 signal=getSignal(); 9 num1=random(0,1000); 10 num2=random(1,1000); 11 if(signal=='-') 12 { 13 if(num1<num2) 14 { 15 int temp; 16 temp=num1; 17 num1=num2; 18 num2=temp; 19 } 20 } 21 if(signal=='/') 22 { 23 if(num2==0) 24 { 25 int temp; 26 temp=num1; 27 num1=num2; 28 num2=temp; 29 } 30 } 31 printf("%d%c%d=",num1,signal,num2); 32 scanf("%d",&get); 33 fflush(stdin); //清空输入缓冲区 34 if(getResult(num1,num2,signal)==get) 35 { 36 printf("You're right!\n"); 37 a=1; 38 } 39 else 40 { 41 printf("It's wrong!\n"); 42 printf("The right answer is: %d\n",getResult(num1,num2,signal)); 43 a=0; 44 } 45 return a; 46 }