一、升级要求:让程序能接受用户输入答案,并判定对错。最后给出总共对/错的数量。
二、设计思想:
1、首先输入答案并判断对错。我想到的是定义两个数组,一个存放用户算的结果,另一个存放正确答案。每输出一道题目,就算出该题目正确答案存入数组中,当所有题目出完,用户输入结果时,再将结果与答案对比,并为用户输出提示,提醒正确或错误。
2、最后给出总共对/错的数量。在比较用户输入的结果和答案时,若相等,输出提示时,将正确计数器加1;若不等,将错误提示器加1。最后输出两个计数器的值,并提示用户正确/错误的数值。
三、源代码:
1 //信1201-1 胡亚宝 2 3 #include "stdafx.h" 4 #include "stdlib.h" 5 #include <time.h> 6 7 int _tmain(int argc, _TCHAR* argv[]) 8 { 9 srand(time(NULL)); //避免题目重复 10 //存放正确答案和用户结果的数组 11 int daan[100000],jieguo[100000]; 12 int x1,x2,flag,i,j,k; 13 int x3,x4; 14 //正确计数器和错误计数器 15 int count1=0; 16 int count2=0; 17 int a[10]; 18 printf("---------------------------欢迎使用本系统打印题目!---------------------------- "); 19 //可定制打印的题目数 20 printf("请输入要打印的题目数:"); 21 scanf("%d",&a[0]); 22 while(a[0]<=0) //题目数必须为正数 23 { 24 printf("请重新输入有效的题目数:"); 25 scanf("%d",&a[0]); 26 }; 27 //可定制运算数的范围 28 printf("请输入运算数的范围:"); 29 scanf("%d",&a[2]); 30 while(a[2]<=0) //运算数必须为正数 31 { 32 printf("请重新输入有效的范围:"); 33 scanf("%d",&a[2]); 34 }; 35 //可定制题目中是否有乘除法 36 printf("请选择否有乘除法(是->1;否->0):"); 37 scanf("%d",&a[1]); 38 while((a[1]!=1)&(a[1]!=0)) //只能选择1或0 39 { 40 printf("请重新输入有效的数值:"); 41 scanf("%d",&a[1]); 42 }; 43 //可定制题目结果是否有负数 44 printf("请选择结果有无负数(是->1;否->0):"); 45 scanf("%d",&a[3]); 46 while((a[3]!=1)&(a[3]!=0)) //只能选择1或0 47 { 48 printf("请重新输入有效的数值:"); 49 scanf("%d",&a[3]); 50 }; 51 //可定制结果是否有余数 52 printf("请选择结果有无余数(是->1;否->0):"); 53 scanf("%d",&a[4]); 54 while((a[4]!=1)&(a[4]!=0)) //只能选择1或0 55 { 56 printf("请重新输入有效的数值:"); 57 scanf("%d",&a[4]); 58 }; 59 60 //可定制是否支持小数 61 printf("请选择是否支持小数(是->1;否->0):"); 62 scanf("%d",&a[5]); 63 while((a[5]!=1)&(a[5]!=0)) //只能选择1或0 64 { 65 printf("请重新输入有效的数值:"); 66 scanf("%d",&a[5]); 67 }; 68 69 //可定制是否加括号 70 printf("请选择是否加括号(是->1;否->0):"); 71 scanf("%d",&a[6]); 72 while((a[6]!=1)&(a[6]!=0)) //只能选择1或0 73 { 74 printf("请重新输入有效的数值:"); 75 scanf("%d",&a[6]); 76 }; 77 78 //循环打印符合要求的题目 79 for(i=0;i<a[0];i++) 80 { 81 switch(a[1]) 82 { 83 case 1:j=rand()%4;break; //有乘除法 84 case 0:j=rand()%2;break; //无乘除法 85 } 86 x1=rand()%a[2]+1; 87 x2=rand()%a[2]+1; 88 89 //循环打印 90 if(j==0) 91 { 92 93 switch(a[6]) 94 { 95 case 0: 96 switch(a[5]) 97 { 98 case 0:printf("%d+%d= ",x1,x2);break; 99 case 1: 100 x3=rand()%9+1; 101 x4=rand()%9+1; 102 printf("%d.%d+%d.%d= ",x1,x3,x2,x4);break; 103 } 104 break; 105 106 case 1: 107 switch(a[5]) 108 { 109 case 0:printf("(%d+%d)= ",x1,x2);break; 110 case 1: 111 x3=rand()%9+1; 112 x4=rand()%9+1; 113 printf("(%d.%d+%d.%d)= ",x1,x3,x2,x4);break; 114 } 115 break; 116 } 117 //计算当运算法则为加法时的正确结果,并存入数组 118 jieguo[i]=x1+x2; 119 } 120 if(j==1) 121 { 122 switch(a[3]) 123 { 124 case 1: 125 break; 126 case 0: //结果无负数 127 if(x1<x2) //被减数比减数小则交换 128 { 129 flag=x1; 130 x1=x2; 131 x2=flag; 132 } 133 break; 134 } 135 switch(a[6]) 136 { 137 case 0: 138 switch(a[5]) 139 { 140 case 0:printf("%d-%d= ",x1,x2);break; 141 case 1: 142 x3=rand()%9+1; 143 x4=rand()%9+1; 144 printf("%d.%d-%d.%d= ",x1,x3,x2,x4);break; 145 } 146 break; 147 148 case 1: 149 switch(a[5]) 150 { 151 case 0:printf("(%d-%d)= ",x1,x2);break; 152 case 1: 153 x3=rand()%9+1; 154 x4=rand()%9+1; 155 printf("(%d.%d-%d.%d)= ",x1,x3,x2,x4);break; 156 } 157 break; 158 } 159 //计算当运算法则为减法时的正确结果,并存入数组 160 jieguo[i]=x1-x2; 161 } 162 if(j==2) 163 { 164 165 switch(a[6]) 166 { 167 case 0: 168 switch(a[5]) 169 { 170 case 0:printf("%d*%d= ",x1,x2);break; 171 case 1: 172 x3=rand()%9+1; 173 x4=rand()%9+1; 174 printf("%d.%d*%d.%d= ",x1,x3,x2,x4);break; 175 } 176 break; 177 178 case 1: 179 switch(a[5]) 180 { 181 case 0:printf("(%d*%d)= ",x1,x2);break; 182 case 1: 183 x3=rand()%9+1; 184 x4=rand()%9+1; 185 printf("(%d.%d*%d.%d)= ",x1,x3,x2,x4);break; 186 } 187 break; 188 } 189 //计算当运算法则为乘法时的正确结果,并存入数组 190 jieguo[i]=x1*x2; 191 } 192 if(j==3) 193 { 194 switch(a[4]) 195 { 196 case 1: //结果可有余数 197 break; 198 case 0: //结果无余数 199 while(x1%x2!=0) //如果不能整除,则重新生成 200 { 201 x1=rand()%a[2]+1; 202 x2=rand()%a[2]+1; 203 }; 204 break; 205 } 206 switch(a[6]) 207 { 208 case 0: 209 switch(a[5]) 210 { 211 case 0:printf("%d/%d= ",x1,x2);break; 212 case 1: 213 x3=rand()%9+1; 214 x4=rand()%9+1; 215 printf("%d.%d/%d.%d= ",x1,x3,x2,x4);break; 216 } 217 break; 218 219 case 1: 220 switch(a[5]) 221 { 222 case 0:printf("(%d/%d)= ",x1,x2);break; 223 case 1: 224 x3=rand()%9+1; 225 x4=rand()%9+1; 226 printf("(%d.%d/%d.%d)= ",x1,x3,x2,x4);break; 227 } 228 break; 229 } 230 //计算当运算法则为除法时的正确结果,并存入数组 231 jieguo[i]=x1/x2; 232 } 233 } 234 235 for(k=0;k<a[0];k++) 236 { 237 238 printf("请输入第%d个答案:",k+1); 239 scanf("%d",&daan[k]); 240 //比较结果是否正确,并计数 241 if(daan[k]==jieguo[k]) 242 { 243 printf("正确! "); 244 count1++; 245 } 246 else 247 { 248 printf("错误! "); 249 count2++; 250 } 251 252 253 } 254 printf(" 正确答案有%d个,",count1); 255 printf("错误答案有%d个。 ",count2); 256 printf("------------------------------出题完毕,欢迎再次使用!-------------------------- "); 257 return 0; 258 }
四、运行结果:
五、心得体会:
1、首先看到这个要求时,我首先想到的是在现有的循环中加判断条件,每确定一种运算法则就计算出结果并比较,但是在实现的过程中,我发现这样非常繁琐,而且输出时每出一道题就会要求输出答案,这样页面很不美观。于是我新加了for循环,在所有题目出完后,一起写答案。
2、我发现在代码编写的过程中,出现的语法问题大大减少,并不像开始的时候那样有很多细小错误,之前出现的错误我也有意识注意。但是还是有两个小问题:使用数组没有提前定义、计算数值的算式位置放错,通过编译也都解决。
六、PSP0级相关日志:
1、项目计划日志
周活动总结表
姓名:胡亚宝 日期:3/20
日期任务 | 听课 | 编写程序 | 阅读书本 | 考研复习 | 安装软件 | 日总计 |
周日 | ||||||
周一 | ||||||
周二 | ||||||
周三 | ||||||
周四 | 300 | 50 | 30 | 90 | 80 | 550 |
周五 | 200 | 60 | 30 | 290 | ||
周六 | ||||||
周总结 | 500 | 110 | 60 | 90 | 80 | 840 |
阶段时间和效率 周数:1
不包括上一周在内的累计时间
总计 | |||||
平均 | |||||
最大 | |||||
最小 |
以前各周的累计时间
总计 | 500 | 110 | 60 | 90 | 80 | 840 |
平均 | 500 | 110 | 60 | 90 | 80 | 840 |
最大 | 500 | 110 | 60 | 90 | 80 | 840 |
最小 | 500 | 110 | 60 | 90 | 80 | 840 |
2、时间记录日志
学生:胡亚宝 日期:3/20
教师:王建民 课程:PSP
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
3/19 | 08:00 | 12:00 | 40 | 200 | 听课(嵌入式系统、接口技术) | 课间休息 |
14:00 | 15:50 | 10 | 100 | 听课(嵌入式软件开发技术) | 课间休息 | |
16:00 | 17:30 | 90 | 考研复习 | |||
18:30 | 20:00 | 10 | 80 | 安装软件 | 休息 | |
20:10 | 21:00 | 50 | 编写程序(终极版四则运算) | |||
21:00 | 21:30 | 30 | 阅读(梦断代码) | |||
3/20 | 08:00 | 12:00 | 40 | 200 | 听课(软件工程、操作系统) | 课间休息 |
14:30 | 15:40 | 10 | 60 | 编写程序(升级版四则运算) | 休息、问题 | |
21:00 | 21:30 | 30 | 阅读(梦断代码) |
3、缺陷记录日志
学生:胡亚宝 日期:3/20
教员:王建民 程序号:02
日期 | 编号 | 类型 | 引入阶段 | 排除阶段 | 修复阶段 | 修复缺陷 |
3/19 | 1 | 001 | 设计 | 编译 | 20min | |
描述:判断语句位置错误 | ||||||
2 | 002 | 编码 | 编译 | 1min | ||
描述:使用数组之前没有定义 | ||||||
3/20 | 3 | 003 | 设计 | 编译 | 5min | |
描述:计算数值的算式位置放错 |