• 个人作业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函数。还有一些函数的用法,都经过了一番研究之后才明白。

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

  • 相关阅读:
    四则运算题目生成器
    个人博客作业Week1
    M1/M2项目阶段总结
    个人博客作业week7
    个人博客作业—2
    第一周个人博客作业
    关于生成四则运算式
    个人博客作业week7
    第二次博客作业
    关于webservice大数据量传输时的压缩和解压缩
  • 原文地址:https://www.cnblogs.com/xxs24/p/6506727.html
Copyright © 2020-2023  润新知