zoukankan      html  css  js  c++  java
  • 个人作业1——四则运算题目生成程序(基于控制台)

    码市地址:https://coding.net/u/xmwj/p/rg/git/commit/b4ac9aeead9ba9c66a936667b348ea931fe7c62e

    a.需求分析:

     自动生成小学四则运算题目的命令行 “软件”,满足以下需求:   

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

    b.功能设计:

      基本满足上述的功能

    c.设计实现:

      本程序是通过c++来实现的,一共有三个函数和一个主函数。function(int n)函数用于生成1到n的随机数,fraction(int temp1,int temp2)生成真分数,float sum(int ch1,float a,float b)四则运算 ,主函数中三种类型的随机算式。

    d.代码说明:

     function(int n)函数用于生成1到n的随机数,fraction(int temp1,int temp2)生成真分数,float sum(int ch1,float a,float b)四则运算 ,主函数中题目数的输入,三种类型的随机算式(整数与整数,整数与真分数,真分数与真分数),随机四种运算符(加减乘除),用户输入计算准确答案比对计算正确率。

    具体代码:

    function(int n)函数用于生成1到n的随机数

    ```

    int flag = 1;//全局变量,通过此来解决因为循环运行时间非常短,time(NULL)每次都返回相同的值
    int function(int n)//随机生成1至n的整数
    {
    int random;
    int low = 1, high = n;
    if (flag)
    {
    flag = 0;
    srand((unsigned)time(NULL));
    }
    random = rand()% (high - low+1) + low;//生成随机数
    return random;

    }

    ```

    fraction(int temp1,int temp2)生成真分数表达式

    ```

    string fraction(int temp1,int temp2)//生成真分数
    {

    string fra;
    string str1,str2;
    stringstream ss1,ss2;
    ss1<<temp1;
    ss1>>str1;
    ss2<<temp2;
    ss2>>str2;
    temp1 !=temp2 ? fra=str1+"/"+str2 : fra=1;
    return fra;
    }

    ```

    float sum(int ch1,float a,float b)四则运算

    ```

    float sum(int ch1,float a,float b){
    float sum;
    switch (ch1)
    {
    case 1:sum=(a)+(b);break;
    case 2:sum=(a)-(b);break;
    case 3:sum=(a)*(b);break;
    case 4:sum=(a)/(b);break;
    default:cout << "有错误!" << endl;break;
    }
    return sum;
    }

    ```

    main函数主要部分

    ```int main()
    {
    int integer1, integer2;
    float a[10],b[10],yes=0;
    float first1,second1;
    stringstream ss1,ss2;
    string first, second;//四则运算的第一个运算数和第二个运算数
    int ch1, ch2, ch3;//switch语句的选项
    string sign;//运算符号
    int times ;//题目数
    cout<<"【四则运算练习题】"<<endl;
    cout<<"请输入练习题数量:"<<endl;
    cin>>times;
    for (int i = 0;i < times;i++)
    {
    int temp1 = function(10);//调用function函数随机生成两个随机整数
    int temp2 = function(10);
    if(temp1>temp2)swap(temp1,temp2);
    int temp3 = function(10);
    int temp4 = function(10);
    if(temp3>temp4)swap(temp3,temp4);
    ch1 = function(4);//随机生成运算符号
    switch (ch1)
    {
    case 1:sign = "+";break;
    case 2:sign = "-";break;
    case 3:sign = "×";break;
    case 4:sign = "÷";break;
    default:cout << "有错误!" << endl;break;
    }
    ch2 = function(3);//四则运算题目的三种情况
    switch (ch2)
    {
    case 1://整数和整数
    {
    strstream ss, cc;
    integer1 = function(10);
    ss << integer1;
    ss >> first;
    integer2 = function(10);
    cc << integer2;
    cc >> second;
    a[i]=sum(ch1,(float)integer1,(float)integer2);

    }break;
    case 2://整数和真分数
    {
    strstream kk;
    integer1 = function(10);
    kk << integer1;
    kk >> first;
    second = fraction(temp1,temp2);
    a[i]=sum(ch1,(float)integer1,temp1/(float)temp2);

    }break;
    case 3://真分数和真分数
    {
    first = fraction(temp1,temp2);
    second = fraction(temp3,temp4);
    a[i]=sum(ch1,temp1/(float)temp2,temp3/(float)temp4);
    }break;
    default:cout << "有错误!" << endl;break;
    }
    cout <<"("<< first <<")"<< sign << "("<<second<<")" << "=" << endl;
    }
    float ch;
    for(int j=0;j<times;j++)
    {
    do{
    cin>>ch;
    }while(cin.get()!=' ');
    b[j]=ch;
    if(fabs(b[j]-a[j])<=1e-6)
    {
    cout<<"√"<<" 正确答案为:"<<a[j]<<endl;
    yes++;
    }
    else cout<<"×"<<" 正确答案为:"<<a[j]<<endl;
    }
    cout<<"正确率为"<<yes/times*100<<"%"<<endl;



    system("pause");
    return 0;
    }```

    e.测试运行:

    PSP表:

    PSP2.1 Personal Software Process Stages Time (%) Senior Student Time (%)
    Planning 计划 8 10
    · Estimate 估计这个任务需要多少时间 2 4
    Development 开发 3 4
    · Analysis 需求分析 (包括学习新技术) 3 4
    · Design Spec 生成设计文档 4 5
    · Design Review 设计复审 10 15
    · Coding Standard 代码规范 1 2
    · Design 具体设计 15 20
    · Coding 具体编码 20 30
    · Code Review 代码复审 15 20
    · Test 测试(自我测试,修改代码,提交修改) 13 21
    Reporting 报告 5 6
    · 测试报告 5 5
    · 计算工作量 10 8
    · 并提出过程改进计划 5 5

    小结:

    1.事先没有一个流程规划。初略的看了一下需求分析,觉得这个小程序应该可以写完,但是在写的过程中却发现了很多的问题,因为没有先做了一个大概的规划,导致边写边想,写一段又觉得之前用的结构不大方便之后的使用,又往回改了,这样反反复复浪费的许多时间。比如在写输入数据类型的时候,在考虑用string还是float型的,这将导致之前写的存放数组与比较方法的改变。在处理真分数时对代码的修改导致了计算错误,之后发现是一个表示函数,一个计算函数没有同步。。。

    2.发现随机数尽量不要用在循环里,因为电脑运行速度快,将导致出现的随机数一样这样的问题。time(NULL)每次都返回相同的值,可以使用全局变量来解决。

    3.代码过于长,其实可以用指针函数等来简化,不过这次的编写思路还是清晰的,这也源于c++比较简单易懂,不过命令行界面确实是不美观,打算下次编写使用java。

    4.不知道那个格式发生的什么,```不起作用,老师求指导。是因为C++ 的问题吗?

    5.还有很多不足,希望老师多多指点迷津,希望在今后的学习实践中可以逐步的提高编写的效率与成果。谢谢o(∩_∩)o 

  • 相关阅读:
    macOS下Go语言开发环境的搭建
    yii使用createCommand()增删改查
    php in_array问题,0与字符串比较问题
    PHP shortURL
    redis集群批量删除某些key
    git tag的用法
    JSON Web Token(JWT)
    C# Stopwatch详解 转
    转::CString 操作指南
    MFC VC 中 TreeView 解析
  • 原文地址:https://www.cnblogs.com/xmwj/p/6508905.html
Copyright © 2011-2022 走看看