个人作业1——四则运算题目生成程序(基于控制台)

题目要求:

  1. 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
  2. 运算符为 +, −, ×, ÷
  3. 并且要求能处理用户的输入,并判断对错,打分统计正确率。
  4. 要求能处理用户输入的真分数, 如 1/2, 5/12 等
  5. 使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
    Myapp.exe -n 10

需求分析:

1.要求随机生成四则运算题目,要随机获取运算符及数字(包括整数和真分数)。

获取运算符:

1 char getOp()//获取随机运算符 
2 {
3    char op[]={'+','-','*','/'};
4    srand((unsigned)time(NULL));
5    return op[rand()%4];  
6 }

获取随机数字则用rand()函数。其中整数运算控制在100内,分数控制在10内。

2.要支持真分数的运算

首先,对于一个分数运算的结果要进行约分。这里使用辗转相除法

 1 int gcd(int a,int b)//辗转相除法 
 2 {
 3     int t;
 4     while(b) 
 5     {
 6         t=a%b;
 7         a=b;
 8         b=t;
 9     }
10     return a;
11 }

然后根据具体情况进行求解。

此处会设计到将两个char型连接。使用strcat(),其原型如下:

extern char *strcat(char *dest, const char *src);

3.要求能够处理用户的输入,并判断对错,统计正确率。

此处会涉及到字符与整数相互转换的两个函数:

当运算结果要转换为字符时:

char*itoa(int value,char*string,int radix);

当用户输入要生成的题目数时需要将输入的字符串转换为int型:

int atoi(const char *nptr);

判断对错使用的是字符串的比较函数strcmp()。这里将用户输入的答案定义为answer,将系统运算的正确结果定义为result,比较二者,相同则认为答案正确,否则答案错误显示正确答案。

 1     cin>>answer;
 2     if(strcmp(answer,result) == 0)//比较answer和result
 3     {
 4         cout<<"回答正确!"<<endl<<endl;
 5         r++; 
 6     } 
 7     else
 8     {
 9         cout<<"回答错误!"<<endl<<"正确答案是"<<result<<endl<<endl;
10     }

还有一开始就应全局定义一个变量r,用来记录答对的题目数。总的题目数是用户自己输入的变量n。正确率则是r/n。

1 float G;
2 int n;
3 G=(float)r/(float)n;
4 cout<<endl<<"你的正确率是"<<G*100<<"%!";

4.要求能处理用户输入的真分数。

将用户的输入answer设定为char型。

char answer[10]

5.使用 -n 参数控制生成题目的个数。

 1 int main(int argc,char *argv[])//argc是命令行总的参数个数;argv[]是argc个参数
 2 {
 3   ...
 4   int n;
 5   n=atoi(argv[2]);//把字符串型转换成int型 
 6   cout<<"-----------------------------------"<<endl;
 7   cout<<"以下生成"<<n<<"道四则运算题目"<<endl;
 8   cout<<"-----------------------------------"<<endl;
 9   ...
10 }

 测试运行:

源代码地址:https://coding.net/u/xxs24/p/homework1_xxs007/git

 PSP表格:

PSP2.1

Personal Software Process Stages

Estimated Time(min)

Actual Time (min)

Planning

计划

15

20

· Estimate

估计这个任务需要多少时间

180

210

Development

开发

120

150

· Analysis

需求分析 (包括学习新技术)

30

40

· Design Spec

生成设计文档

10

15

· Design Review

设计复审

5

6

· Coding Standard

代码规范

5

8

· Design

具体设计

30

40

· Coding

具体编码

60

80

· Code Review

代码复审

10

20

· Test

测试(自我测试,修改代码,提交修改)

15

20

Reporting

报告

20

30

·

测试报告

5

8

·

计算工作量

5

8

·

并提出过程改进计划

5

8

总结:

    本次实验是软件工程课程的第一次作业,由于编程能力较弱,本着想提高自己编程能力的想法,通过帮助粗略的完成本次实验。不过有个缺憾就是,本想将自动生成的题目一次性全部显示在屏幕上,但是由于无法处理用户的输入而放弃这个思路。在完成本次作业的过程中,遇到的问题有,处理分数,后来经过百度知道分数的处理可以用辗转相除法。还有使用 -n 参数控制生成题目的个数,也知道了可以使用atoi函数。还有一些函数的用法,都经过了一番研究之后才明白。

    希望下次实验能够将时间把握在预估时间内,也可以在设计过程中,做一些简单的笔记,这样以后运用起来会更加的得心应手。

posted @ 2017-03-07 10:04  xxs24  阅读(239)  评论(1编辑  收藏  举报