码迷,mamicode.com
首页 > 其他好文 > 详细

四则运算2+psp0级表格

时间:2015-03-14 21:27:46      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

四则运算2

一、题目和要求

  题目:写一个能自动生成小学四则运算题目的程序,要求一次输出不少于30道,只能是整数100以内的四则运算(四则运算1升级版)

  要求:

  1.题目避免重复

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

  3.可以控制下列参数:是否有除法,是否有括号,数值范围,加减有无负数,除法有无余数,是否支持分数,是否支持小数,精确到多少位,打印中每行的间隔

二、题目设计思路

  

  根据第一次的程序实现,已经实现了打印数量上的控制,直接确定了打印列数,其他实现基本功能

  第一步:避免题目重复;将打印的结果保存,此后每次生成的结果与之前的结果比较。

  第二步:实现可定制;通过用户输入数量数和打印的列数,实现可定制,将间隔参数也由用户来输入。参数由用户输入,将参数传递到所需函数。

    1.   通过变量num控制数量
    2.   通过变量rol控制列数
    3.   通过变量line控制间隔

  第三步:参数可控;通过用户输入选择控制信息,选择要产生的四则运算的形式。判断参数可以放在一起进行判断

  1. 由程序提供选择方式,由用户进行选择,通过输入Y/N,来选择程序要提供哪些功能。
  2. 将所有功能公有的功能单独提出,由其他功能调用
  3. 将不同的功能分别用不同的函数实现,通过对用户输入的参数的判断,实现不同功能的调用
  4. 不同的变量对应不同的函数

三、程序源代码

 

  1 // 1_1.cpp : 定义控制台应用程序的入口点。
  2 //
  3 /*四则运算二*/
  4 
  5 #include "stdafx.h"
  6 #include "iostream"
  7 #include "stdlib.h"
  8 #include "time.h"
  9 #include "iomanip"
 10 #include "String"
 11 using namespace std;
 12 
 13 
 14 /*加减法定义*/
 15 void add(string judge,int min,int max)
 16 {
 17     /*定义a,b,c分别表示产生的随机数和运算符*/
 18     int a,b,c;
 19     a=(rand() % (max-min+1))+ min;                        //随机生成范围内的整数
 20     b=(rand() % (max-min+1))+ min;
 21     c=rand()%2;
 22     /*设置右对齐*/
 23     cout.flags(ios::right);
 24     if(judge=="Y"||judge=="y")                          //允许负数
 25     {
 26         switch(c)
 27         {
 28         case 0:
 29             cout<<setw(4)<<a<<+<<b<<=;
 30             break;
 31         case 1:
 32             cout<<setw(4)<<a<<-<<b<<=;
 33             break;
 34         }
 35     }
 36     else                                //不允许负数
 37     {
 38         switch(c)
 39         {
 40         case 0:
 41             cout<<setw(4)<<a<<+<<b<<=;
 42             break;
 43         case 1:
 44             if(a>=b)
 45                 cout<<setw(4)<<a<<-<<b<<=;
 46             else
 47                 cout<<setw(4)<<b<<-<<a<<=;
 48             break;
 49         }
 50     }
 51 }
 52 /*四则运算定义*/
 53 void addmult(string judge1,string judge2,int min,int max)
 54 {
 55     int a,b,c;
 56     a=(rand() % (max-min+1))+ min;                        //随机生成范围内的整数
 57     b=(rand() % (max-min+1))+ min;
 58     c=rand()%4;
 59     /*设置右对齐*/
 60     cout.flags(ios::right);
 61     if((judge1=="Y"||judge1=="y"))                            //允许假分数
 62     {
 63         switch(c)                                            //随机产生运算符
 64         {
 65         case 0:
 66             cout<<setw(4)<<a<<+<<b<<=;
 67             break;
 68         case 1:
 69             if(judge2=="Y"||judge2=="y")                    //允许负数结果出现
 70             {
 71                 cout<<setw(4)<<a<<-<<b<<=;
 72             }
 73             else
 74             {
 75                 if(a>=b)
 76                      cout<<setw(4)<<a<<-<<b<<=;
 77                 else
 78                     cout<<setw(4)<<b<<-<<a<<=;
 79             }
 80             break;
 81         case 2:
 82             cout<<setw(4)<<a<<*<<b<<=;
 83             break;
 84         case 3:                                                //判断生成除法的条件,除数不能为零
 85             if(a!=0&&b==0)
 86                 cout<<setw(4)<<b<</<<a<<=;
 87             else if(a==0&&b!=0)
 88                 cout<<setw(4)<<a<</<<b<<=;
 89             else if(a==0&&b==0)
 90                 cout<<setw(4)<<a<</<<b+1<<=;
 91             else
 92                 cout<<setw(4)<<a<</<<b<<=;
 93             break;
 94         }
 95     }
 96     else                                            //不允许假分数出现
 97     {
 98         switch(c)
 99         {
100         case 0:
101             cout<<setw(4)<<a<<+<<b<<=;
102             break;
103         case 1:
104             if(judge2=="Y"||judge2=="y")                    //允许负数结果出现
105             {
106                 cout<<setw(4)<<a<<-<<b<<=;
107             }
108             else
109             {
110                 if(a>=b)
111                      cout<<setw(4)<<a<<-<<b<<=;
112                 else
113                     cout<<setw(4)<<b<<-<<a<<=;
114             }
115             break;
116         case 2:
117             cout<<setw(4)<<a<<*<<b<<=;
118             break;
119         case 3:                             //真分数判断
120             if(a<=b&&b!=0)
121                 cout<<setw(4)<<a<</<<b<<=;
122             else 
123                 cout<<setw(4)<<b<</<<a<<=;
124             break;
125         }
126     }
127 }
128 /*四则运算生成函数*/
129 void math(int m,int n)
130 {
131     int min,max,row,line;
132     string judge1,judge2,judge3;                                //judge1判断是否有乘除法,judge2判断是加减是否有负数结果出现,judge3判断真/假分数
133     cout<<"请输入您要打印题目的数值范围:"<<endl;
134     cout<<endl;
135     cout<<"最小数min(>=0):";
136     /*判断用户输入的是否是需要的数据*/
137     while(!(cin>>min)||min<0)
138         {
139             cout<<endl;
140             cout<<"输入错误,请重新输入:";
141             cin.clear();
142             cin.sync();
143         }
144     cout<<endl;
145     cout<<"最大数max(<=1000):";
146     while(!(cin>>max||max>=1000))
147         {
148             cout<<endl;
149             cout<<"输入错误,请重新输入:";
150             cin.clear();
151             cin.sync();
152         }
153     cout<<endl;
154     
155     cout<<"是否有乘除(Y/N):";
156     cin>>judge1;
157     while(judge1!="Y"&&judge1!="y"&&judge1!="N"&&judge1!="n")             //输入数据异常判断
158     {
159         cout<<endl;
160         cout<<"输入错误,请重新输入(Y/N):";
161         cin>>judge1;
162         cout<<endl;
163     }
164     /*假分数判断*/
165     if(judge1=="Y"||judge1=="y")
166     {
167         cout<<endl;
168         cout<<"是否允许假分数(Y/N):";
169         cin>>judge3;
170         while(judge3!="Y"&&judge3!="y"&&judge3!="N"&&judge3!="n")
171         {
172             cout<<endl;
173             cout<<"输入错误,请重新输入(Y/N):";
174             cin>>judge3;
175             cout<<endl;
176         }
177     }
178     else
179     {
180         judge3="N";
181     }
182     cout<<endl;
183 
184     /*负数结果判断*/
185     cout<<"加减是否允许结果出现负数(Y/N):";
186     cin>>judge2;
187     while(judge2!="Y"&&judge2!="y"&&judge2!="N"&&judge2!="n")
188     {
189         cout<<endl;
190         cout<<"输入错误,请重新输入(Y/N):";
191         cin>>judge2;
192         cout<<endl;
193     }
194     cout<<endl;
195 
196     /*用户选择打印方式和间距*/
197     cout<<"请输入您要打印的方式:行间距(>=0):";
198     while((!(cin>>row))||row<0)
199         {
200             cout<<endl;
201             cout<<"输入错误,请重新输入:";
202             cin.clear();
203             cin.sync();
204         }
205     cout<<endl;
206     cout<<"要打印的列数:";
207     while((!(cin>>line))||line<=0)
208         {
209             cout<<endl;
210             cout<<"输入错误,请重新输入(>=1):";
211             cin.clear();
212             cin.sync();
213         }
214     cout<<endl;
215 
216     for(int i=0;i<m;i++)
217     {
218         cout<<""<<i+1<<""<<endl;
219         cout<<endl;
220         for(int j=0;j<n;j++)
221         {
222             if(judge1=="Y"||judge1=="y")
223             {
224                 addmult(judge3,judge2,min,max);                    //有乘除法的四则运算
225             }
226             else
227             {
228                 add(judge2,min,max);                            //无乘除法的四则运算
229             }
230             if((j+1)%line==0)
231             {
232                 for(int r=0;r<row+1;r++)
233                 {
234                     cout<<endl;
235                 }
236             }
237             else
238             {
239                 cout<<"    ";
240             }
241         }
242 
243         cout<<endl;
244         cout<<endl;
245     }
246 }
247 
248 /*主函数*/
249 int main()
250 {
251     int num1,num2;
252     string s="Y";                                //定义s,判断是否继续
253     /*使用srand函数生成预置随机数种子,
254     避免每次打开程序生成相同的随机数列*/
255     srand((unsigned)time(NULL));
256 
257     while(s=="Y"||s=="y")
258     {
259         cout<<"请输入您要打印题目套数(至少一套):";
260         while((!(cin>>num1))||num1<=0)
261         {
262             cout<<endl;
263             cout<<"输入错误,请重新输入:";
264             cin.clear();
265             cin.sync();
266         }
267         cout<<endl;
268         
269         cout<<"请输入您要打印题目数量:";
270         while((!(cin>>num2))||num2<0)
271         {
272             cout<<endl;
273             cout<<"输入错误,请重新输入:";
274             cin.clear();
275             cin.sync();
276         }
277         cout<<endl;
278         
279         math(num1,num2);
280         cout<<"是否继续打印(Y/N):";
281         cin>>s;
282         cout<<endl;
283         while(s!="Y"&&s!="y"&&s!="N"&&s!="n")
284         {
285             cout<<"输入错误,请重新输入(Y/N):";
286             cin>>s;
287             cout<<endl;
288         }
289     }
290 
291     return 0;
292 
293 }

四、运行结果截图

技术分享

技术分享

技术分享

五、结果分析与总结
  对于一些细节上的问题处理的不是很好,比如对判断参数的异常处理做的不好,另外做出来的程序不是很符合规范,程序编写过程中,出现了诸如类型不匹配的问题,还有就是参数传递的问题,主要还是因为自己的编程习惯不好,许多地方都被自己忽视了,这是非常需要注意的地方。另外对函数的调用不熟悉,参数和函数名都不能表达出需要的意思。总之毛病多多,需要一点点去改正

 

 

psp0级表格:

一、项目计划总结:            
姓名: 张世通         日期:2015314日星期六
        听课 编写程序 阅读课本 准备考试     日总计
周日      30min        30min
周一              
周二  100min  40min          140min
周三    40min  40min        80min
周四              
周五  100min            100min
周六    80min          80min
周总结  200min  160min  70min        430min

 

以前各周的累计时间          
总计  200  160  70  430    
平均  200  160  70  430    
最大  200  160  70  430    
最小  200  160  70  430    

 

二、时间记录表:          
学生          张世通                                           日期     2015314日星期六      
教师            王建民                                            课程                  PSP                
日期 开始时间 结束时间 中断时间 净时间 活动 备注
 3.10  0800  0950  10min  100min  听课  休息
   1430  1510    40  编程  
 3.11  1030  1130  10+10min  40min  编程  休息,聊天
   1630  1740  20+10min  40min  看书(第二章)  休息,聊天
 3.13  0800  0950 10min  100min  上课  休息
 3.14  0900  1050  30min  80min  编程  写作业

 

三、缺陷记录日志:          
学生             张世通                   
日期       2015314                
教员            王建民                    
程序号            01                         
日期 编号 类型 引入阶段 排除阶段 修复时间 修复缺陷
 3.10  1  1  编码  编译  1min  
 描述:类型错误,定义的判断字符为string字符串,输入的为char类型
 3.11  2  2  编码  调试  5min  
 描述:嵌套中使用while循环,判断参数错误,造成死循环
 3.14  3  3  编码  调试  20min  
 描述:输入数据时int类型参数与非int类型参数的区分出现问题,不友好,未设置异常判断
             
 

 例子:在输入打印数量和行数列数控制参数时,输入字符则会进入死循环,未加参数不匹配时的报错提醒

四则运算2+psp0级表格

标签:

原文地址:http://www.cnblogs.com/zhshto/p/4338226.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!