代码作业——四则运算(二)

一、题目及题目要求

      编程随机生成四则运算,算数包括整数和真分数

1.题目避免重复

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

3.可以控制下列参数:

          是否有乘除法;

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

          数值范围;

          加减有无负数;

          除法有无余数。

二、设计思路

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

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

    2.可定制出题数量:通过键盘输入数字,在for循环中控制循环次数。

   3. 是否有乘除法:把算符分为两大类,利用case语句选择前四种加和减,后四种乘除。

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

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

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

三、代码

 

  1 /*2016.3.12.WeiLiHua四则运算*/
  2 #include<iostream>
  3 #include<ctime>
  4 using namespace std;
  5 void main()
  6 {
  7     int sj1,sj2,sf=1,sj3,sj4,r;//定义随机数及算符
  8     int Num;//题的数量
  9     char sfchose;//算符选择
 10     char yschose;//余数选择
 11     char jf;//减法结果选择
 12     int qznum;//取值范围
 13     srand((unsigned)time(NULL)); //srand函数是以现在系统时间作为时间种子产生随机数
 14     cout<<"*****欢迎使用自动出题系统*****"<<endl;
 15     cout<<"请对以下内容进行初始化设置:"<<endl;
 16     cout<<"请输入打印题数:"<<endl;
 17     cin>>Num;
 18     cout<<"请选择是否有乘除法?(y/n)"<<endl;
 19     cin>>sfchose;
 20     cout<<"请输入一个值确定算式中数值取值范围:"<<endl;
 21     cin>>qznum;
 22     cout<<"减法结果中出现负数吗?(y/n)";
 23     cin>>jf;
 24 
 25     if(sfchose=='y')
 26     {
 27         cout<<"请选择除法有无余数?(y/n)"<<endl;
 28         cin>>yschose;
 29     }
 30         cout<<"********************************"<<endl;
 31 
 32     for(int i=0;i<Num;i++)
 33     {
 34             sj1=rand()%qznum;
 35             sj2=rand()%qznum;
 36             sj3=rand()%qznum;
 37             sj4=rand()%qznum;
 38             if(sfchose=='n')//无乘除法
 39             {
 40                  sf=rand()%4;         
 41             }
 42             if(sfchose=='y')//有乘除法
 43             {
 44                   sf=rand()%8; 
 45             }
 46             switch(sf)
 47                 {        
 48                      case 0:
 49                        cout<<sj1<<"+"<<sj2<<"=     "<<endl;
 50                      break;
 51                     case 1:
 52                        if(jf=='n')//无负数
 53                        {
 54                            if(sj1<sj2)
 55                            {
 56                               cout<<sj2<<"-"<<sj1<<"=    "<<endl;
 57                         
 58                            }
 59                            else
 60                            {
 61                                cout<<sj1<<"-"<<sj2<<"=    "<<endl;
 62                            }
 63                         }
 64                        else
 65                        {
 66                             cout<<sj1<<"-"<<sj2<<"=    "<<endl;
 67                         
 68                        } 
 69                        break;
 70                   case 2:
 71                        if(sj1>sj3)
 72                        {
 73                            r=sj1;
 74                            sj1=sj3;
 75                            sj3=r;
 76                        }
 77                        if(sj2>sj4)
 78                        {
 79                            r=sj2;
 80                            sj2=sj4;
 81                            sj4=r;
 82                        }
 83                      cout<<"("<<sj1<<"/"<<sj3<<")"<<"+"<<"("<<sj2<<"/"<<sj4<<")=     "<<endl;
 84                     break;
 85                   case 3:
 86                         if(sj1>sj3)
 87                         {
 88                             r=sj1;
 89                             sj1=sj3;
 90                             sj3=r;
 91                         }
 92                         if(sj2>sj4)
 93                         {
 94                             r=sj2;
 95                             sj2=sj4;
 96                             sj4=r;
 97                         }
 98                         if(jf=='n')//减法结果无负数
 99                         {
100                             if((sj1/sj3)<(sj2/sj4))
101                             {
102                                 cout<<"("<<sj2<<"/"<<sj4<<")"<<"-"<<"("<<sj1<<"/"<<sj3<<")=     "<<endl;
103                             }
104                             else
105                             {
106                                 cout<<"("<<sj1<<"/"<<sj3<<")"<<"-"<<"("<<sj2<<"/"<<sj4<<")=     "<<endl;
107                             }
108                         }
109                          else
110                          {
111                              cout<<"("<<sj1<<"/"<<sj3<<")"<<"-"<<"("<<sj2<<"/"<<sj4<<")=     "<<endl;
112                          }
113                        break;
114                    case 4:
115                       cout<<sj1<<"*"<<sj2<<"="<<endl;
116                     break;
117                    case 5:
118                        if(sj2==0)//分母为零则不计入总数
119                        {
120                            i=i-1;
121                         
122                        }
123                        else if(yschose=='n')//除法没有余数
124                        {
125                            if(sj1%sj2==0)
126                            {
127                                cout<<sj1<<"/"<<sj2<<"="<<endl;
128                         
129                            }
130                            else 
131                            {
132                                i=i-1;
133                              
134                            }
135                        }
136                        else if(yschose=='y')//除法有余数
137                        {
138                              if(sj1%sj2!=0)
139                            {
140                                cout<<sj1<<"/"<<sj2<<"="<<endl;
141                     
142                            }
143                            else 
144                            {
145                                i=i-1;
146                         
147                            }
148 
149                        }
150                        break;
151                    case 6:
152                     if(sj1>sj3)
153                     {
154                         r=sj1;
155                         sj1=sj3;
156                         sj3=r;
157                     }
158                     if(sj2>sj4)
159                     {
160                         r=sj2;
161                         sj2=sj4;
162                         sj4=r;
163                     }
164                      cout<<"("<<sj1<<"/"<<sj3<<")"<<"*"<<"("<<sj2<<"/"<<sj4<<")=     "<<endl;
165                        break;
166                    case 7:
167                        if(sj1>sj3)
168                        {
169                            r=sj1;
170                            sj1=sj3;
171                            sj3=r;
172                        }
173                      if(sj2>sj4)
174                      {
175                         r=sj2;
176                         sj2=sj4;
177                         sj4=r;
178                      }
179                        cout<<"("<<sj1<<"/"<<sj3<<")"<<"/"<<"("<<sj2<<"/"<<sj4<<")=     "<<endl;
180                        break;
181                    default:
182                    break;
183                 }
184     }
185 }

 

四、运行截图

 

五、项目计划日志

周活动总结表

姓名:魏**                  日期2016.3.12

日期   任务 听课  编写程序 阅读课本 准备考试     日总计

周一

100 30 30       160

周二

  30         30

周三

  60 30       90

周四

 100 30         130

周五

  30         30

周六

  120         120

周总结

200 300 60       560

阶段时间和效率                                            周数(上一次周活动表的周数+1):

不包括上一周在内的累计时间      

总计

 200

 300

 60

 

 

 

 560

平均

 200

 300

 60

 

 

 

 560

最大

 200

 300

 60

 

 

 

 560

最小

 200

 300

 60

 

 

 

 560

 以前各周的累计时间      

总计

 200

 300

  60

 

 

 

 560

平均

 200

300

  60

 

 

 

 560

最大

 200

300

 60

 

 

 

 560

最小

 200

300

 60

 

 

 

 560

 

六、时间记录表:

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

教师        王**                                          课程        软件工程      

日期

开始时间

结束时间

中断时间

净时间

活动

备注

 3.7

 16:30

 17:00

 无

30

编写程序 

作业 

 3.8

22:00

22:30

 无

30

编写程序

作业

 3.9

16:30

17:00

60

编写程序

作业

3.10

21:15

21:45

30

编写程序

作业

 3.11

22:10

22:40

 无

30

编写程序

 作业

 3.12

 8:00

 10:00

 无

 120

 编写程序

 作业

 

 

七、缺陷记录日志:

学生           魏**      

日期     2016312 

教员          王**       

程序号                         

日期

编号

类型

引入阶段

排除阶段

修复时间

修复缺陷

 3.8

 1

 A

编译

编译

10min

 

  转换到 COFF 期间失败: 文件无效或损坏

 3.9

 2

A

编译

 编译

3min

 

 sfchose=='n',忘记单引号

 3.10

 3

B

运行

运行后

1min

 

忘记cin>> yschose;

 3.11

4

A

编译

编译

5min

 

条件·不成立时, 忘记了i=i-1,让其再循环一次

3.12

5

B

运行

运行后

10min

 

减法条件判断少了,造成有时输出题目数量不对
posted @ 2016-03-12 11:21  <编程小白>  阅读(402)  评论(2编辑  收藏  举报