四则运算2完整版

一、题目要求:

1、题目避免重复;

2、可定制(数量/打印方式);

3、可以控制下列参数: 是否有乘除法、是否有括号、 数值范围、加减有无负数、除法有无余数、

否支持分数 (真分数, 假分数, …)、是否支持小数 (精确到多少位)、打印中每行的间隔可调整;

二、设计思想

1、题目避免重复

(1)调用随机函数发生器,将生成的运算式用数组存储,将新的运算式与已生成式子做比较,若相同则不输出,不同则输出

2、可定制(数量/打印方式)

(1)提示用户输入题目数量,打印方式,从键盘输入

3、(1)是否有乘除法

在输入之前提示用户是否有乘除法,若没有,则只输出加减法

(2)是否有括号

(3)数值范围

由用户设置数值范围,如果输入不合法,提示输入错误,请重新输入,在随机生成数中保证随机数在用户设置的数值范围

(4)加减有无负数

如果没有负数,比较生成的两个数,保证做减法时被减数不小于减数

(5)乘除有无余数

首先判断除数是否为零,若为零则终止,若不为零则继续。对做除法的两个操作数做取余运算,若为零则没有余数

三、原程序代码

  1 #include<iostream.h>
  2 #include<stdlib.h>
  3 #include<time.h>
  4 void display(int number,int l,int mul,int num,int neg,int remainder)//打印方式控制输出列数
  5 {
  6     int a[1000],b[1000],c[1000];
  7     int m;//控制题目避免重复
  8     int t;//中间变量
  9     for(int i=0;i<number;i++)//随机两个生成运算操作数
 10     {  
 11         m=1;//初始化
 12         a[i]=rand()%num;
 13         b[i]=rand()%num;
 14         if(mul==0)//没有乘除法
 15         {    
 16             c[i]=rand()%2;//随机生成0-1的数字,分别表示加减
 17         }
 18         if(mul==1)//有乘除法
 19         {
 20             c[i]=rand()%4;//随机生成0-3的数字,分别表示加减乘除
 21         }
 22         for(int j=0;j<i;j++)
 23         {
 24             if(a[j]==a[i]&&b[j]==b[i]&&c[j]==c[i])//比较新生成的操作数与原来的是否相同
 25             {
 26                 i=i-1;
 27                 m=0;
 28             }
 29         }
 30         while(m)//若不同则输出
 31         {
 32             switch(c[i])
 33             {
 34             case 0:
 35                 cout<<a[i]<<"+"<<b[i]<<"=";break;
 36             case 1:
 37                 if(neg==0)//减法没有负数
 38                 {
 39                     if(a[i]<b[i])
 40                     {
 41                         t=a[i];
 42                         a[i]=b[i];
 43                         b[i]=t;
 44                     }
 45                     cout<<a[i]<<"-"<<b[i]<<"=";break;
 46                 }
 47                 else
 48                 {
 49                     cout<<a[i]<<"-"<<b[i]<<"=";break;
 50                 }
 51             case 2:
 52                 cout<<a[i]<<"*"<<b[i]<<"=";break;
 53             case 3:
 54                 if(b[i]==0)//分母为零则不计入总数
 55                 {   
 56                     i=i-1;break;
 57                 }
 58                 else if(remainder==0)//除法没有余数
 59                 {
 60                     if(a[i]%b[i]==0)
 61                     {
 62                         cout<<a[i]<<"/"<<b[i]<<"=";break;
 63                     }
 64                     else
 65                     {
 66                         i=i-1;break;
 67                     }
 68                 }
 69                 else if(remainder==1)//除法有余数
 70                 {
 71                     if(a[i]%b[i]!=0)
 72                     {
 73                         cout<<a[i]<<"/"<<b[i]<<"=";break;
 74                     }
 75                     else
 76                     {
 77                         i=i-1;break;
 78                     }
 79                 }
 80             }
 81             if((i+1)%l==0)
 82             {
 83                 cout<<endl;
 84             }
 85             else
 86             {
 87                 cout<<"\t"<<"\t";
 88             }
 89             break;//跳出循环
 90         }
 91     }
 92 }
 93 void main()
 94 {
 95     int number;//题目数量
 96     int l;//输出的列数
 97     int mul;//乘除法
 98     int num;//数值范围
 99     int neg;//负数
100     int remainder;//余数
101     srand((unsigned) time(NULL));//调用随机函数发生器
102     cout<<"---------------------------------"<<endl;
103     cout<<"            四则运算             "<<endl;
104     cout<<"---------------------------------"<<endl;
105     cout<<"请输入要打印的题目数量:"<<endl;
106     cin>>number;
107     cout<<"请输入要输出的列数(1-10):"<<endl;
108     cin>>l;
109     cout<<"是否有乘除法(0表示没有;1表示有)"<<endl;
110     cin>>mul;
111     if(mul==1)
112     {
113         cout<<"除法有无余数(0表示没有;1表示有)"<<endl;
114         cin>>remainder;
115     }
116     cout<<"请输入正整数的数值范围(即最大数):"<<endl;
117     cin>>num;
118     cout<<"减法有无负数(0表示没有;1表示有)"<<endl;
119     cin>>neg;
120     display(number,l,mul,num,neg,remainder);
121 }

四、运行结果截图

五、日志记录

六、实验总结  

    在实验过程中遇到了一些困难,首先调用随即函数发生器不会写,通过上网查询自己解决了,在写控制题目避免重复时,while循环的位置总是不对,还是最后缺少了break终止。变量的定义范围掌握不准确。实验程序写的并不完整,是否有括号,是否支持分数、小数等功能没有实现。程序只编写了一个函数,把所有的参数都放在了里面,修改起来不方便,所以还有待改进。

posted @ 2015-03-14 20:02  Jameslige  阅读(422)  评论(0编辑  收藏  举报