软件工程课堂练习四则运算续篇
一、设计思想
根据题目的新要求我做了以下更改
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 |
9:10 |
11:00 |
|
110 |
看书 |
|
3.缺陷记录表
缺陷记录日志
学 生 曹美娜
日 期 2015.03.10
教 员 王建民
程序号
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
3/10 |
|
|
|
|
|
|
|
||||||
3/11 |
0 |
|
编程 |
编译 |
3分钟 |
|
漏掉“;” |
||||||
3/12 |
1 |
|
编程 |
|
5分钟 |
|
For循环条件出错 |
||||||
3/13 |
2 |
|
编程 |
|
2分钟 |
|
If语句条件错误 |