软件工程基础—结对项目2

项目地址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 }

猜你喜欢

转载自www.cnblogs.com/chengshenghao/p/9096597.html