软件工程课堂练习四则运算续篇

一、设计思想

根据题目的新要求我做了以下更改

1.为使用户可定制数量以及打印方式,可使用户输入打印方式、数量的参数来进行设置
2.参数设置:提示用户是否有乘除法运算,是/否用户可输入【1/0】表示。

                 提示用户是否有负数参与运算;

                 提示用户参与运算的数值范围;

                 提示用户输入出多少道题目;

                 提示用户输入题目输出列数;

二、源代码

  1 #include "stdafx.h"
  2 #include "stdio.h"
  3 #include "time.h"
  4 #include "stdlib.h"      //随机器函数头文件
  5 
  6 
  7 void print()
  8 {
  9     int num,numvalue,judear,judemd,linenum;  //变量含义分别为出题数目、数值范围、判断有无负数、判断有无乘除、输出列数
 10 
 11     printf("请输入出题数目:");
 12     scanf("%d",&num);
 13     printf("请输入要输出的题目列数:");
 14     scanf("%d",&linenum);
 15     printf("加减有无负数?请输入【0/1】表示【是/否】:");
 16     scanf("%d",&judear);
 17     while(judear!=0 && judear!=1)                          //判断用户是否按要求输入
 18     {
 19         printf("sorry!输入错误,请按要求输入:");
 20         scanf("%d",&judear);
 21     }
 22     printf("请输入出题的范围绝对值(不考虑小数请输入整数):00-");
 23     scanf("%d",&numvalue);
 24     printf("出题是否含有乘除法?请输入【0/1】表示【是/否】:");
 25     scanf("%d",&judemd);
 26     while(judear!=0 && judear!=1)                         //判断用户是否按要求输入
 27     {
 28         printf("sorry!输入错误,请按要求输入:");
 29         scanf("%d",&judemd);
 30     }
 31         switch(judemd)
 32         {
 33                 case 0:{
 34                     int x,y;
 35                     if(judear==0){
 36                     srand((int)time(0));
 37                     for(int i=1;i<=num/linenum;i++)          //出题数量
 38                     {
 39                         for(int j=1;j<=linenum;j++)       //控制出题列数
 40                         {
 41                             
 42                         int a=rand()%numvalue;    
 43                         int b=rand()%numvalue;
 44 
 45                         x=1+rand()%10;     //随机产生10种类型的题目    
 46                         switch (x)                                
 47                         {
 48                             case 1: 
 49                                 {
 50                                     printf("%d+%d=\t",a,b);
 51                                     if(j%linenum==0)
 52                                         printf("\n");
 53                                     break;
 54                                 }
 55                             case 2:
 56                                 {
 57                                     printf("%d-%d=\t",a,b);
 58                                     if(j%linenum==0)
 59                                         printf("\n");
 60                                     break;
 61                                 }
 62                             case 3:
 63                                 {
 64                                     printf("-%d+%d=\t",a,b);
 65                                     if(j%linenum==0)
 66                                         printf("\n");
 67                                     break;
 68                                 }
 69                             case 4: 
 70                                 {
 71                                     printf("%d+(-%d)=\t",a,b);
 72                                     if(j%linenum==0)
 73                                         printf("\n");
 74                                     break;
 75                                 }
 76                             case 5:
 77                                 {
 78                                     printf("-%d+(-%d)=\t",a,b);
 79                                     if(j%linenum==0)
 80                                         printf("\n");
 81                                     break;
 82                                 }
 83                             case 6: 
 84                                 {
 85                                     printf("-%d-%d=\t",a,b);
 86                                     if(j%linenum==0)
 87                                         printf("\n");
 88                                     break;
 89                                 }
 90                             case 7:
 91                                 {
 92                                     printf("%d-(-%d)=\t",a,b);
 93                                     if(j%linenum==0)
 94                                         printf("\n");
 95                                     break;
 96                                 }
 97                             case 8: 
 98                                 {
 99                                     printf("-%d-(-%d)=\t",a,b);
100                                     if(j%linenum==0)
101                                         printf("\n");
102                                     break;
103                                 }
104                             case 9:
105                                 {
106                                     printf("%d*%d=\t",a,b);
107                                     if(j%linenum==0)
108                                         printf("\n");
109                                     break;}
110                             case 10: {
111                                 if (b!=0)
112                                 {printf("%d/%d=\t",a,b);
113                                 if(j%linenum==0)
114                                     printf("\n");}
115                                 else
116                                 {    
117                                     b=b+1;
118                                     printf("%d/%d=\t",a,b);
119                                     if(j%linenum==0)
120                                         printf("\n");
121                                 }
122                                 break;
123                                     }
124                             default:{"输出有误!";}
125                         }        
126                     }
127                     }
128 
129                     }
130                     else if(judear==1)
131                     {
132                         srand((int)time(0));
133                         for(int i=1;i<=num/linenum;i++)
134                         {
135                             for(int j=1;j<=linenum;j++){           //控制出题列数
136                                 
137                             int a=rand()%100;    
138                             int b=rand()%100;
139 
140                             y=1+rand()%4;     //随机产生四种不同的题目    
141                             switch (y)                                
142                             {
143                                 case 1: 
144                                     {
145                                         printf("%d+%d=    \t",a,b);
146                                         if(j%linenum==0)
147                                         printf("\n");
148                                         break;
149                                     }
150                                 case 2: 
151                                     {
152                                         printf("%d-%d=    \t",a,b);
153                                         if(j%linenum==0)
154                                         printf("\n");
155                                         break;
156                                     }
157                                 case 3: 
158                                     {
159                                         printf("%d*%d=    \t",a,b);
160                                         if(j%linenum==0)
161                                         printf("\n");
162                                         break;
163                                     }
164                                 case 4: {
165                                     if (b!=0)
166                                     {printf("%d/%d=    \t",a,b);
167                                     if(j%linenum==0)
168                                         printf("\n");}
169                                     else
170                                     {    
171                                         b=b+1;
172                                         printf("%d/%d=    \t",a,b);
173                                         if(j%linenum==0)
174                                         printf("\n");
175                                     }
176                                     break;
177                                         }
178                                 default:{"输出有误!";}
179                             }        
180                         }
181                         }
182                     }
183                     else 
184                         printf("出错!");
185                        break;
186                        default:{printf("出错!");}
187                        }
188                 case 1:{
189                     int q,w;
190                     if(judear==0)
191                     {
192                         srand((int)time(0));
193                         for(int i=1;i<=num/linenum;i++)
194                         {
195                             for(int j=1;j<=linenum;j++){     //控制出题列数
196                             int a=rand()%100;    
197                             int b=rand()%100;
198 
199                             q=1+rand()%8;         //随机产生8种不同的题型    
200                             switch (q)                                
201                             {
202                             case 1: 
203                                 {
204                                     printf("%d+%d=    \t",a,b);
205                                     if(j%linenum==0)
206                                         printf("\n");
207                                     break;
208                                 }
209                             case 2:
210                                 {
211                                     printf("%d-%d=    \t",a,b);
212                                     if(j%linenum==0)
213                                         printf("\n");
214                                     break;
215                                 }
216                             case 3: 
217                                 {
218                                     printf("-%d+%d=   \t",a,b);
219                                     if(j%linenum==0)
220                                         printf("\n");
221                                     break;}
222                             case 4:
223                                 {
224                                     printf("%d+(-%d)= \t",a,b);
225                                     if(j%linenum==0)
226                                         printf("\n");
227                                     break;}
228                             case 5: 
229                                 {
230                                     printf("-%d+(-%d)=\t",a,b);
231                                     if(j%linenum==0)
232                                         printf("\n");
233                                     break;}
234                             case 6: 
235                                 {
236                                     printf("-%d-%d=   \t",a,b);
237                                     if(j%linenum==0)
238                                         printf("\n");
239                                     break;
240                                 }
241                             case 7: 
242                                 {
243                                     printf("%d-(-%d)= \t",a,b);
244                                     if(j%linenum==0)
245                                         printf("\n");
246                                     break;
247                                 }
248                             case 8: 
249                                 {
250                                     printf("-%d-(-%d)=\t",a,b);
251                                     if(j%linenum==0)
252                                         printf("\n");
253                                     break;
254                                 }
255                             default:{"输出有误!";}
256                             }        
257                         }
258                         }
259                     }
260                     else if(judear==1)
261                     {
262                         srand((int)time(0));
263                         for(int i=1;i<=num/linenum;i++)
264                         {
265                             for(int j=1;j<=linenum;j++){         //控制出题列数
266                                 
267                             int a=rand()%100;    
268                             int b=rand()%100;
269 
270                             w=1+rand()%2;     //随机产生2种不同的题型    
271                             switch (w)                                
272                             {
273                                 case 1: 
274                                     {
275                                         printf("%d+%d=    \t",a,b);
276                                         if(j%linenum==0)
277                                         printf("\n");
278                                         break;
279                                     }
280                                 case 2: 
281                                     {
282                                         printf("%d-%d=    \t",a,b);
283                                         if(j%linenum==0)
284                                         printf("\n");
285                                         break;
286                                     }
287                                 default:{"输出有误!";}
288                             }        
289                         }
290                         }
291 
292                     }
293                     else 
294                         printf("出错!");
295 }
296                        
297         }
298         }
299         
300     
301 
302 
303 int main(int argc, char* argv[])
304 {
305     printf("                         四则运算出题系统                      \n");
306     print();
307     return 0;
308 }

 

三、运行结果

四、心得体会

这次的四则运算出题系统是上一次的扩展,其实还有很多功能没能实现,是否支持小数(有效数值是多少位),是否支持有括号运算等等;

这次的程序写的很简单,把所有的功能都写在一个函数中了,没有分模块处理,因为我之前是利用的多个函数但涉及到传参问题,而我对他实在是没有办法,整理半天没整明白,所以最后只能用自己绝得简单的方法实现这个问题了

编程过程中也有出现过很多错误,如

1.在输出所有题目和列数时,把for语句的循环条件弄错,导致每一列输出了总题数

2.马虎大意漏写;号

3.if后面条件写错

五、psp0级相关日志

1.项目计划日志

                                                          周活动总结表

   姓名:曹美娜                           日期:2015.03.15

日期/任务

听课

编写程序

阅读课本

准备考试

 

 

日总计

周二 3.10

200

 

30

 

 

 

230

周三 3.11

100

65

45

 

 

 

210

周四

200

102

 

 

 

 

302

周五

200

73

50

 

 

 

323

周六

 

 

120

 

 

 

120

周日 3.15

 

 

120

 

 

 

120

周总计

 700

 240

 365

 

 

 

 1305

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

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

总计

 

 

 

 

 

 

 

平均

 

 

 

 

 

 

 

最大

 

 

 

 

 

 

 

最小

 

 

 

 

 

 

 

 

 

 

以前个周的累计时间

总计

 800

 300

 150

 60

 

 

 1310

平均

 800

 300

 150

60   

 

 

1310 

最大

 800

 300

 150

60 

 

 

 1310

最小

 800

 300

 150

60 

 

 

 1310

2.时间记录日志

时间记录日志

                          学生  曹美娜                      日期  2015.03.10           

                          教师  王建民                      课程  软件工程            

日期

开始时间

结束时间

中断时间

净时间

活动

备注

3/10

 

 

 

 

 

 

3/11

16:20

17:40

15分钟

65

编写四则运算程序

中间电话插入

3/12

16:45

18:27

 

102

编程

 

 

19:30

21:30

 

120

自习

 

3/13

15:23

16:36

 

73

编程

 

3/15

910

11:00

 

110

看书

 

3.缺陷记录表

缺陷记录日志         

                学  生      曹美娜                 

                日  期     2015.03.10                    

                教  员      王建民                 

                程序号                             

日期

编号

类型

引入阶段

排除阶段

修复时间

修复缺陷

3/10

 

 

 

 

 

 

 

3/11

0

 

编程

编译

3分钟

 

漏掉“;”

3/12

1

 

编程

 

5分钟

 

For循环条件出错

3/13

2

 

编程

 

2分钟

 

If语句条件错误

posted @ 2015-03-14 13:45  。泡沫。。  阅读(164)  评论(0编辑  收藏  举报