四则运算三c++ -

2018-12-25 23:17

结对开发——四则运算(三)

发表日期时间: 2016-03-19 10:17

一、题目及题目要求

编程随机生成四则运算,算数包括整数和真分数 1.题目避免重复

2.可定制(数量/打印方式) 3.可以控制下列参数:

是否有乘除法;

是否有括号(最多可以支持十个数参与运算); 数值范围; 加减有无负数; 除法有无余数。 4.输入结果并判断正确 二、设计思路

在上次程序的基础上进行修改,

1.题目避免重复:为避免随机数每次相同用了srand函数。

2.可定制出题数量:通过键盘输入数字,在for循环中控制循环次数。 3. 是否有乘除法:把算符分为两大类,利用case语句选择前四种加和减,后四种乘除。

4. 数值范围:在产生随机数时通过输入控制rand函数的参数,从而使运算数不超过此范围。

5. 加减有无负号:结果无负数,判断两操作数,第一操作数若比第二操作数小,则第二个减第一个。

6.除法有无余数:除法无余数,判断第一操作数模第二操作数的结果,若为0即可输出,否则再循环一次。

7.是否有括号:先随机生成一个数字,代表着生成表达式中操作数的个数。再循环生成一个数字,将其输出,然后等概率生成‘+’‘-’‘*’‘/’中的一个跟在该数字后面,输出。以一定概率生成左括号,若生成了左括号则输出,并进行计数标志当前共有多少个未完成匹配的左括号。若当前有未完成匹配的左括号,则在生成一个数字后,生成一个操作符前,以一定的概率生成右括号。在生成完毕后,生成最后一个数并将为匹配的左括号予以匹配。把产生的式子存入文件。

8.输入结果并判断正确:(1)对于两个运算数的式子,把结果存入数组,调用函数与数组中的值比较。(2)对于多个运算数的式子,从文件中读取内容,利用中缀表达式转换为后缀表达式,然后就是后缀表达式的计算,最后与用户输入结果对比。 三、代码 #include #include #include #include

#define length 10000//存放答案数组长度 using namespace std; typedef long long ll; ofstream fout(\char Op[] = {'+', '-', '*', '/'}; int rights;//对题数目 int wrong;//错题数目

struct num{

ll numerator, denominator;

num(){numerator = 0; denominator = 1;} num(int n) {numerator = n; denominator = 1;} num(int n,int d) {numerator = n; denominator = d;}

void operator = (num x) {

numerator = x.numerator; denominator = x.denominator; } };

#define maxl 1005

char nifix[maxl], post[maxl]; char ans[maxl]; int cnt_right, cnt_wrong; bool error;

num res, rst;

//****分数类***// class fraction { private:

int above; //分子 int below; //分母 void reduction(); //约分

fraction makeCommond(fraction); //通分 public: fraction()

{ //构造函数 }

fraction add(fraction); //两分数相加 fraction sub(fraction); //两分数相减 fraction mul(fraction); //两分数相乘 fraction div(fraction); //两分数相除 int display(int,int); //显示分数 void setvalue(int ,int); //存储分数 };

//***********分数的约分*********//

void fraction::reduction() {

int i,comdiv,small,max; if(above

small=above; max=below; } else

{

small=below; max=above; }

for(i=small;i>1;i--) {

if((small%i==0 )&(max%i==0) ) break; }

comdiv=i; //最大公约数

if(i!=0) {

above/=i; below/=i; } }

//*************分数的通分*************//

fraction fraction::makeCommond(fraction frac) {

int b1=below,b2=frac.below, m,s; if(b1>b2) {

m=b12; s=b2; } else {

m=b2±; s=b1; } while(m>0)

{

int res=s%m; s=m,m=res; }

int small=(b1*b2)/s; above=above*(small/below);

frac.above=frac.above*(small/frac.below); below=small; frac.below=small; return frac; }

//***************分数的相加*************//

fraction fraction::add(fraction fr) {

fraction myFraction;

myFraction.above=above*fr.below+fr.above*below; myFraction.below=below*fr.below; myFraction.reduction(); return myFraction; }

//*********************分数的相减***************//

fraction fraction::sub(fraction fr) {

fraction myFraction;

myFraction.above=above*fr.below-fr.above*below; myFraction.below=below*fr.below; myFraction.reduction(); return myFraction; }

//*******************分数的相乘****************//


四则运算三c++ -.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2008-2015历年考研政治真题含答案解析 -

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: