基于控制台的四则运算

基于控制台的四则运算

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!='\n')  {        //若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!='\n')  {
        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()加以判断,在上面代码有详细说明。

 

posted on 2017-03-05 16:18  lizhiqiang0x01  阅读(455)  评论(2编辑  收藏  举报