基于控制台的四则运算
基于控制台的四则运算
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()加以判断,在上面代码有详细说明。