zoukankan      html  css  js  c++  java
  • 基于控制台的四则运算

    基于控制台的四则运算

    coding地址:https://coding.net/u/lizhiqiang0x01/p/c-sizeyunsuan/git

    一、简述题目要求:


      1、除了整数之外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24

      2、运算符为 +, −, ×, ÷

      3、并且要求能处理用户的输入,并判断错误,打分统计正确率

      4、要求能处理用户输入的真分数,如 1/2, 5/12 等

      5、使用-n参数控制生成题目的个数,例如执行下面命令将生成10个题目

           sizeyuansuan.exe -n 10


     二、实现步骤:


      a、需求分析

               写一段程序可以在控制台输入参数,根据参数生成题目,题目要满足分式是真分数,并且要判断学生输入的答案是否正确,最终也要给出成绩。

      b、功能设计

           基本功能  

              从控制台获取参数功能,兼容获取分式和整数参数功能,生成真分式题目以及最简分式功能,运算功能,校验答案功能。

      c、设计实现

         为满足功能需求,下面主要写了六个函数:

    int add();      //加法运算
    int sub();      //减法运算
    int mul();      //乘法运算
    int div();      //除法运算
    int ran();      //生成题目
    int check();    //校验答案

      d、代码说明[source file]

    • 从控制台获取参数功能
    #include<cstdlib>
    
    int main(int argc,char* argv[]){
        n=atoi(*(argv+2));      //将控制台获取参数将其转化成整型变量
            }
    • 兼容获取分式和整数参数功能
        cin>>a;b=cin.get();           
        if(b!='
    ')  {        //若b获取的为enter则不进行第二个参数的获取,否则相反
            cin>>c;
        }
    • 生成真分式题目及最简分式功能
    int ran(){
        int m=1,n=1;
        srand(time(NULL));      //产生不同的随机数
        while(1){               //防止生成假分式
        q1=rand()%10;
        q2=rand()%9+1; 
        if(q1<=q2) break;
            }
        while(1){               //防止生成假分式
        q3=rand()%10;
        q4=rand()%9+1;
        if(q3<=q4) break;
         }
        for(int i=2;i<100;i++){
            if(q1%i==0&&q2%i==0){
                m=i;
            }
            if(q3%i==0&&q4%i==0){
                n=i;
            }
        }
        q1=q1/m;q2=q2/m;q3=q3/n;q4=q4/n;
        return 0;
    }
    • 校验答案功能
    int check(){
        cin>>a;b=cin.get();           
        if(b!='
    ')  {
            cin>>c;
        }
        int w=1;
        for(int i=2;i<100;i++){
            if(r1%i==0&&r2%i==0){
                w=i;
            }
        }
        r1=r1/w;r2=r2/w;
        if(r2==1){
            if(r1==a&&b!='/') {
                n1++;
            cout<<"回答正确!"<<endl;
        }
            else {
            n2++;
            cout<<"回答错误,再接再厉!"<<"正确答案:"<<r1<<endl;
        }
        cout<<"正确率:"<<setprecision(4)<<100*n1/n<<"%"<<endl;
        }
        else {
            if(r1==a&&b=='/'&&r2==c) {      //判断输入的是整数or分式
            n1++;
            cout<<"回答正确!"<<endl;
        }
            else {
                n2++;
                cout<<"回答错误,再接再厉!"<<"正确答案:"<<r1<<"/"<<r2<<endl;
            }
            cout<<"正确率:"<<setprecision(4)<<100*n1/n<<"%"<<endl;
        }
        return 0;
    }

    e、测试运行


     三、PSP


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

    四、总结


             在写程序的构成中主要遇到了两个问题,在此上面花费了较多时间。

             问题一:如何从控制台获取参数

                之前一直是通过cin获取参数,没有测试过基于控制平台获取参数,后来经过阅读百度上笔记掌握了该方法,具体方法在上面已经做了陈述。

             问题二:判断学生输入的参数是整数or分式

                在校验答案要加以判断是输入的整数还是分式,这个判断有较强的逻辑性,主要是通过b=cin.get()加以判断,在上面代码有详细说明。

  • 相关阅读:
    浅谈过拟合问题与梯度爆炸问题
    python 读取excel数据
    KNN与K-MEANS的区别
    jstree使用小结(二)
    jstree使用小结(一)
    webstrom 编码
    自定义分页
    js传递数组到后台
    创建等待图标
    js 日期格式化
  • 原文地址:https://www.cnblogs.com/lizhiqiang0/p/6505419.html
Copyright © 2011-2022 走看看