四则运算(二)

一:设计思路

     通过随机函数始末位置来确定题目范围,通过用户输入选择项,确定题目难度(有无乘除,结果有无负数,除法有无余数)。通过用户输入行间隔和列数确定打印格式。

二:源程序

  1 /*程序名:四则运算*/
  2 #include<iostream.h>
  3 #include<stdlib.h>
  4 #include<iomanip.h>
  5 int main()
  6 {
  7     int op1,op2;
  8     int min,max;
  9     int judgeopera;   //有无乘除判断
 10     int judgesign;    //有无正负判断
 11     int judgeremain;  //有无余数判断
 12     int count;        //题目数量
 13     int yunsuan;      //确定运算符
 14     int j;
 15     int row;          //行间隔
 16     int column;       //列数
 17     int flag=0;
 18     srand((unsigned)time(0));
 19     cout<<"请输入数值范围:";
 20     cin>>min>>max;
 21     cout<<"请输入输出行间隔:";
 22     cin>>row;
 23     cout<<"请输入输出列数:";
 24     cin>>column;
 25     char yun[5]={'+','-','*','/'};
 26     cout<<"输入题目数量:";
 27     cin>>count;
 28     cout<<"是否含有乘除(1表示Yes,2表示No)";
 29     cin>>judgeopera;
 30     while(judgeopera!=1&&judgeopera!=2)                 //如果输入不符合,重新输入
 31     {
 32         cout<<"重新输入:";
 33         cin>>judgeopera;
 34     }
 35     cout<<"是否允许负数存在(1表示Yes,2表示No)";
 36     cin>>judgesign;
 37     while(judgesign!=1&&judgesign!=2)
 38     {
 39         cout<<"重新输入:";
 40         cin>>judgesign;
 41     }
 42     if(judgeopera==1)
 43     {
 44         cout<<"有乘除法时是否允许余数存在(1表示Yes,2表示No)";
 45         cin>>judgeremain;
 46         while(judgeremain!=1&&judgeremain!=2)
 47         {
 48             cout<<"重新输入:";
 49             cin>>judgeremain;
 50         }
 51     }
 52     for(int i=0;i<count;i++)
 53     {
 54 
 55         op1=int(rand()%(max-min+1))+min;
 56         op2=int(rand()%(max-min+1))+min;
 57         if(judgeopera==1)
 58         {
 59             yunsuan=int(rand()%4);
 60             if(judgesign==1)
 61             {
 62                 if(judgeremain==1)                                 //有乘除,有负数,有余数部分
 63                 {
 64                     cout<<i+1<<""<<op1<<yun[yunsuan]<<op2<<"\t";
 65                     flag=flag+1;
 66                 } 
 67                 else                                               //由乘除,有负数,无余数部分
 68                 {
 69                     if(yunsuan==3)
 70                     {
 71                         while(op1%op2!=0)
 72                         {
 73 
 74                             op1=int(rand()%(max-min+1))+min;
 75                             op2=int(rand()%(max-min+1))+min;
 76                         }
 77                         cout<<i+1<<""<<op1<<yun[yunsuan]<<op2<<"\t";
 78                         flag=flag+1;
 79                     }
 80                     else
 81                     {
 82                         cout<<i+1<<""<<op1<<yun[yunsuan]<<op2<<"\t";
 83                         flag=flag+1;
 84                     }
 85                 }
 86             }
 87             else                        //有乘除,无负数,
 88             {
 89                 if(yunsuan==1)
 90                 {
 91                     while(op1<op2)
 92                     {
 93 
 94                         op1=int(rand()%(max-min+1))+min;
 95                         op2=int(rand()%(max-min+1))+min;
 96                     }
 97                     cout<<i+1<<""<<op1<<yun[yunsuan]<<op2<<"\t";
 98                     flag=flag+1;
 99                 }
100                 else
101                 {
102                     if(judgeremain==1)    //有乘除,无负数,有余数部分
103                     {
104                         cout<<i+1<<""<<op1<<yun[yunsuan]<<op2<<"\t";
105                         flag=flag+1;
106                     }
107                     else
108                     {
109                         if(yunsuan==3)
110                         {
111                             while(op1%op2!=0)
112                             {
113                                 op1=int(rand()%(max-min+1))+min;
114                                 op2=int(rand()%(max-min+1))+min;
115                             }
116                             cout<<i+1<<""<<op1<<yun[yunsuan]<<op2<<"\t";
117                             flag=flag+1;
118                         }
119                         else
120                         {
121                             cout<<i+1<<""<<op1<<yun[yunsuan]<<op2<<"\t";
122                             flag=flag+1;
123                         }
124                      }
125                 }
126             }
127         }
128         else  //无乘除部分
129         {
130 
131             yunsuan=int(rand()%2);
132             if(judgesign==1)
133             {
134                 cout<<i+1<<""<<op1<<yun[yunsuan]<<op2<<"\t";
135                 flag=flag+1;
136             }
137             else
138             {
139                 if(yunsuan==1)
140                 {
141                     while(op1<op2)
142                     {
143                         op1=int(rand()%(max-min+1))+min;
144                         op2=int(rand()%(max-min+1))+min;
145                     }
146                     cout<<i+1<<""<<op1<<yun[yunsuan]<<op2<<"\t";
147                     flag=flag+1;
148                 }
149                 else
150                 {
151                     cout<<i+1<<""<<op1<<yun[yunsuan]<<op2<<"\t";
152                     flag=flag+1;
153                 }
154             }
155         }
156         if(flag==column)     //列数设置
157         {
158             for(int p=0;p<=row;p++)   //行间隔设置
159             {
160                  cout<<endl;
161             }
162             flag=0;
163         }
164     }
165     return 0;
166 }

三:截图

 四:psp

 一、项目计划总结:

                                    周活动总结表

姓名: 王童博                             日期:2015/3/15

日期       任务

听课

编写程序

阅读课本

准备考试

 

 

日总计

周日

 

 

 

 

 

 

 

周一

 

 

 

 

 

 

 

周二

 120

 

 

 

 

 

 120

周三

 

 50

 

 

 

 

50

周四

 

 

 50

 

 

 

 50

周五

 120

60

 

 

 

 

 180

周六

 

 100

 

 

 

 

 100

周总结

 240

210

 50

 

 

 

 500

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

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

总计

 

 

 

 

 

 

 

平均

 

 

 

 

 

 

 

最大

 

 

 

 

 

 

 

最小

 

 

 

 

 

 

 

以前各周的累计时间                                                                                    

总计

 240

 210

 20

 

 

 

 500

平均

 240

 210

 20

 

 

 

 500

最大

 240

 210

 20

 

 

 

 500

最小

 240

 210

 20

 

 

 

 500

二、时间记录表:

 学生       王童博                                                      日期       2015/3/15                

 教师        王建民                                                     课程           PSP       

日期

开始时间

结束时间

中断时间

净时间

活动

备注

 3/11

 7:00

 7:50

 

 50

 编程

 

 3/12

 9:00

 9:50

 

 50

查阅资料

 

 3/13

 8:00

 9:00

 

 60

 编程

 

 3/14

 6:50

 8:30

 

 100

 编程

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

三、缺陷记录日志:

 学生       王童博              

 日期        3/15           

 教员       王建民   

 程序号    四则运算           

日期

编号

类型

引入阶段

排除阶段

修复时间

修复缺陷

 3/11

 1

 范围

 编码

 运行测试

 2min

 

 输入错误,导致程序崩溃。设置条件,输入错误,则重新输入

 3/13

 2

 函数

 编码

 运行测试

 2min

 

 Rand函数的随机性。使用srand来进行

 3/14

 3

 可能性没有考虑周全

 编码

 运行测试

 10min

 

当无余数时,会产生空题。重新生成运算解决问题,

 

 

 

 

 

 

 

 

 五:总结

      此次课堂练习,当然了课堂上 没有完成。在课下通过查找资料,完成了几点功能。但是对于括号和小数的精度则没有实现。完成的过程中遇到许多问题,本想以函数形式展现,可是以我的思路写下来,if else可以完成所需要求。不过丧失了程序的模块化。整个程序看起来有点杂。对于使用链表来存储运算题,最后输出。通过查询有无相同有无重复蛮好的想法,但由于对链表的不熟悉导致失败。在以后的试验中还得强化自己编程能力。来弥补一年的空缺。

 

posted on 2015-03-15 16:00  博客找田雨  阅读(141)  评论(0编辑  收藏  举报