四则运算2

一、要求:

  1、题目避免重复;

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

  3、可以控制下列参数:

    (1)是否有乘除法;

    (2)是否有括号(最多可以支持十个数参与计算);

    (3)数值范围;

    (4)加减有无负数;

    (5)除法有无余

二、设计思路

     1为了避免题目重复,定义了三个数组用来分别存放第一,二个数和符号,用if条件语句判断是否重复

     2、定义变量number,在for循环中设定循环次数

     3、(1)switch语句来实现是否有乘除法。“+”“-”“*”“/”,分别用0,1,2,3来代替,if语句来判断进入“+”“-”和“+”“-”“*”“/”

          (2)带有多组括号的功能没有实现,

          (3)数值范围根据随机数求余数,实现它的数值范围t=rand()%range

          (4)加减法中有无结果有无负数,通过if语句中两个数比较大小,执行是否有负数生成

          (5)首先避免分母为0,再用if结构来判断进入有无余数环节

三、实验代码

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

四、测试结果

 

五、项目计划日志

     周活动总结表

日期/任务 听课 编写程序 阅读课本 准备考试 日总计
周一 100 30 30   160
周二   60     60
周三   30 60   90
周四 100   30   130
周五   30     30
周六   300 100   400
周天          
总结 200 450 220   870

六、时间记录表:

学生       景*                                           日期   2016年3月12日 

教师       王**                                          课程        软件工程      

日期

开始时间

结束时间

中断时间

净时间

活动

备注

 3.7

 16:30

 17:00

 无

30

看书 

构建之法 

 3.8

20:00

21:00

 无

60

编写程序

复习C++

 3.9

19:30

21:00

120

复习,程序

作业

3.10

21:15

21:45

30

看书

代码之殇

 3.11

22:10

22:40

 无

30

编写程序

 作业

 3.12

 9:00

 17:00

 120

 360

 编程

 作业

 

 

 

陷记录日志

日期 编号 引入阶段 排除阶段 修复时间 修复缺陷
3.8 1 编码 编译 10 随机循环,除法有无余数,适应的输出
3.11 2 编码 编译 20 打印方式,不能从文件打出,设定列数,有时会错位
3.12 3 编码 编译 60 括号功能未实现

七、实验总结

     这次编程,实在是难受。以前的程序想着简单些,编写困难,这次的程序想着都难,几乎无从下手,平时不编程,现在知道困难了。想起一句话:出来混迟早是要还的。真的,自己实在是差劲,很多情况下对for循环的三层嵌套都弄不清楚,今天用到的最多的就是if语句,很受挫败。即使如此,还有很多功能没有实现,比如括号的功能,负数的功能,还有这只是两个数字的,还未实现多个数字的四则运算。革命尚未成功还需继续努力。

 

posted @ 2016-03-12 17:55  apan008  阅读(216)  评论(1编辑  收藏  举报