一、题目要求:
让程序能接受用户输入答案,并判定对错。最后给出总共对/错的数量。
二、设计思路;
在二的基础上添加答题并判断正误和计数的功能。
三、程序源代码
1 // yunsuan3.cpp : Defines the entry point for the console application. 2 // 3 4 5 6 #include "stdafx.h" 7 #include <iostream> 8 #include <math.h> 9 #include <time.h> 10 using namespace std; 11 int c1=0,c2=0; 12 int display1(int k,int x,int y,int m,int shuzhi) //含有加减乘除法 13 { 14 double jieguo; 15 if(m==0) 16 { 17 cout<<"("<<k<<")"<<x<<" + "<<y<<" = "; 18 cin>>jieguo; 19 if(jieguo==x+y) 20 { 21 cout<<" 回答正确!"<<endl; 22 return c1++; 23 } 24 else 25 { 26 cout<<" 回答错误!"<<endl; 27 return c2++; 28 } 29 } 30 31 if(m==1) 32 { 33 cout<<"("<<k<<")"<<x<<" - "<<y<<" = "; 34 cin>>jieguo; 35 if(jieguo==x-y) 36 { 37 cout<<" 回答正确!"<<endl; 38 return c1++; 39 } 40 else 41 { 42 cout<<" 回答错误!"<<endl; 43 return c2++; 44 } 45 } 46 if(m==2) 47 { 48 cout<<"("<<k<<")"<<x<<" x "<<y<<" = "; 49 cin>>jieguo; 50 if(jieguo==x*y) 51 { 52 cout<<" 回答正确!"<<endl; 53 return c1++; 54 } 55 else 56 { 57 cout<<" 回答错误!"<<endl; 58 return c2++; 59 } 60 } 61 if(m==3) 62 { 63 if(y==0) 64 { 65 do 66 { 67 while(y!=0) 68 { 69 y=rand()%(shuzhi+1); 70 } 71 }while( y==0 ); 72 } 73 else 74 { 75 cout<<"("<<k<<")"<<x<<" / "<<y<<" = "; 76 cin>>jieguo; 77 if(jieguo==x*y) 78 { 79 cout<<" 回答正确!"<<endl; 80 return c1++; 81 } 82 else 83 { 84 cout<<" 回答错误!"<<endl; 85 return c2++; 86 } 87 } 88 } 89 } 90 91 int display2(int k,int x,int y,int m,int shuzhi) //含有加减 92 { 93 double jieguo; 94 if(m==0) 95 { 96 cout<<"("<<k<<")"<<x<<" + "<<y<<" = "; 97 cin>>jieguo; 98 if(jieguo==x+y) 99 { 100 cout<<" 回答正确!"<<endl; 101 return c1++; 102 } 103 else 104 { 105 cout<<" 回答错误!"<<endl; 106 return c2++; 107 } 108 } 109 if(m==1) 110 { 111 cout<<"("<<k<<")"<<x<<" + "<<y<<" = "; 112 cin>>jieguo; 113 if(jieguo==x+y) 114 { 115 cout<<" 回答正确!"<<endl; 116 return c1++; 117 } 118 else 119 { 120 cout<<" 回答错误!"<<endl; 121 return c2++; 122 } 123 } 124 } 125 int main() 126 { 127 int number; //number表示订制的题的份数 128 int xuanze; //xuanze用来做判断是否有乘除法,0表示无,1表示有 129 int shuzhi; //shuzhi表示参与运算的数值范围,比如0-100等 130 int fushu; //fushu表示运算结果是否存在负数的情况,0表示无,1表示有 131 //在自然数中,只有减法结果可能有负数存在 132 int yushu; //fushu表示运算结果有无余数,0表示无,1表示有 133 int geshu; //geshu表示每行打印的运算式的个数 134 int a[30],b[30],m1[30],m2[30]; 135 136 srand( (unsigned)time( NULL ) ); 137 cout<<endl; 138 cout<<" $ 欢迎来到答题订制系统 $"<<endl; 139 cout<<endl; 140 cout<<" 在负数和余数的判断时,0表示无,1表示有,其他数值则默认为1"<<endl; 141 cout<<"Start:"<<endl; 142 cout<<" 请输入订制的份数:"; 143 cin>>number; 144 cout<<endl; 145 cout<<" 请输入数值范围:0-"; 146 cin>>shuzhi; 147 cout<<endl; 148 for(int k=1;k<=number;k++) 149 { 150 cout<<"-----------------------------------------------------------------------------"<<endl; 151 cout<<endl; 152 cout<<"第"<<k<<"份题如下:"<<endl; 153 cout<<"*****************************************************************************"<<endl; 154 cout<<endl; 155 cout<<" 是否含有乘除法(0表示无,1表示有),请选择: "<<endl; 156 cout<<endl; 157 cout<<"*****************************************************************************"<<endl; 158 cout<<endl; 159 cout<<"我的选择:"; 160 cin>>xuanze; 161 cout<<endl; 162 if(xuanze==1) 163 { 164 cout<<"*****************************************************************************"<<endl; 165 cout<<endl; 166 cout<<" 1 是否含可能有负数的结果(0表示无,1表示有),请输入你的选择:"<<endl; 167 cout<<endl; 168 cout<<endl; 169 cout<<" 2 是否含可能有余数的结果(0表示无,1表示有),请输入你的选择:"<<endl; 170 cout<<endl; 171 cout<<"*****************************************************************************"<<endl; 172 cout<<endl; 173 cout<<"对1的选择(0/1):"; 174 cin>>fushu; 175 cout<<endl; 176 cout<<"对2的选择(0/1):"; 177 cin>>yushu; 178 cout<<endl; 179 cout<<"-----------------------------------------------------------------------------"<<endl; 180 cout<<endl; 181 for(int i=1;i<=30;i++) 182 { 183 a[i]=rand()%(shuzhi+1); 184 b[i]=rand()%(shuzhi+1); 185 m1[i]=rand()%4; 186 187 for(int j=1;j<=i-1;j++) 188 { 189 if(a[i]==a[j]&&b[i]==b[j]&&m1[i]==m1[j]) 190 { 191 do 192 { 193 a[i]=rand()%(shuzhi+1); 194 b[i]=rand()%(shuzhi+1); 195 }while(a[i]==a[j]&&b[i]==b[j]&&m1[i]==m1[j]); 196 } 197 } 198 if((fushu==1&&m1[i]==1)||(yushu==1&&m1[i]==3)) 199 { 200 display1(i,a[i],b[i],m1[i],shuzhi); 201 } 202 else if(yushu==0&&m1[i]==3) 203 { 204 if(a[i]%b[i]==0) 205 { 206 display1(i,a[i],b[i],m1[i],shuzhi); 207 } 208 else 209 { 210 do 211 { 212 a[i]=rand()%(shuzhi+1); 213 b[i]=rand()%(shuzhi+1); 214 while(b[i] == 0) 215 { 216 b[i]=rand()%(shuzhi+1); 217 } 218 }while( a[i]%b[i]!=0 ); 219 display1(i,a[i],b[i],m1[i],shuzhi); 220 } 221 } 222 else if(fushu==0&&m1[i]==1) 223 { 224 if(a[i]>=b[i]) 225 { 226 display1(i,a[i],b[i],m1[i],shuzhi); 227 } 228 else 229 { 230 do 231 { 232 a[i]=rand()%(shuzhi+1); 233 b[i]=rand()%(shuzhi+1); 234 }while(a[i]<b[i]); 235 display1(i,a[i],b[i],m1[i],shuzhi); 236 } 237 } 238 else 239 { 240 display1(i,a[i],b[i],m1[i],shuzhi); 241 } 242 if(i%geshu==0) 243 { 244 cout<<endl; 245 } 246 if(i==30) 247 { 248 cout<<endl; 249 } 250 } 251 } 252 else if(xuanze==0) //没有乘除法存在,只需要判断有无负数结果产生 253 { 254 cout<<"*****************************************************************************"<<endl; 255 cout<<endl; 256 cout<<" 是否含可能有负数的结果(0表示无,1表示有),请输入你的选择:"<<endl; 257 cout<<endl; 258 cout<<"*****************************************************************************"<<endl; 259 cout<<endl; 260 cout<<"我的选择:"; 261 cin>>fushu; 262 cout<<"-----------------------------------------------------------------------------"<<endl; 263 cout<<endl; 264 for(int i=1;i<=30;i++) 265 { 266 a[i]=rand()%(shuzhi+1); 267 b[i]=rand()%(shuzhi+1); 268 m2[i]=rand()%2; 269 270 for(int j=1;j<=i-1;j++) 271 { 272 if(a[i]==a[j]&&b[i]==b[j]&&m2[i]==m2[j]) 273 { 274 do 275 { 276 a[i]=rand()%(shuzhi+1); 277 b[i]=rand()%(shuzhi+1); 278 }while(a[i]==a[j]&&b[i]==b[j]&&m2[i]==m2[j]); 279 } 280 } 281 if(fushu==0) 282 { 283 if(a[i]>=b[i]) 284 { 285 display2(i,a[i],b[i],m2[i],shuzhi); 286 } 287 else //当没有负数结果时,应是a>=b,条件不满足时,则系统再随机生成俩随机数,条件满足时进行输出 288 { 289 do 290 { 291 a[i]=rand()%(shuzhi+1); 292 b[i]=rand()%(shuzhi+1); 293 }while(a[i]<b[i]); 294 display2(i,a[i],b[i],m2[i],shuzhi); 295 } 296 } 297 else 298 { 299 display2(i,a[i],b[i],m2[i],shuzhi); 300 } 301 if(i%geshu==0) 302 { 303 cout<<endl; 304 } 305 if(i==30) 306 { 307 cout<<endl; 308 } 309 } 310 } 311 else 312 { 313 cout<<"*****************************************************************************"<<endl; 314 cout<<endl; 315 cout<<" 输入错误,请重新输入!"<<endl; 316 cout<<endl; 317 cout<<"*****************************************************************************"<<endl; 318 cout<<endl; 319 k=k-1; 320 } 321 cout<<endl; 322 cout<<"正确题数为:"<<c1<<" "<<"错误题数为:"<<c2<<endl; 323 cout<<"-----------------------------------------------------------------------------"<<endl; 324 cout<<endl; 325 cout<<"--------------$----------------$---------------$--------------$--------------"<<endl; 326 } 327 cout<<endl; 328 cout<<" $ 感谢您使用答题订制系统,欢迎下次再来 $"<<endl; 329 cout<<endl; 330 331 return 0; 332 }
四、结果截图
四、总结与心得体会
这次试验是在项目二的基础上进一步完善的答题系统,在按照用户的难度需求随机生成的30道题目中,用户答题时,会对结果的正误做出判断与提示,用户可以清楚地看到;在答题结束时,会对用户答题的结果做出统计,便于用户掌握信息。
在完成的实验的过程中,基本没什么问题,就是在代码的格式上有点不美观,完善后就是上面所展示的。
五、项目进展记录
周活动项目计划总结表+时间记录日志+缺陷记录
一、项目计划总结:
表1 周活动总结表
姓名:黄亚萍 日期:2015.03.17
日期/任务 |
听课 |
编写程序 |
阅读课本 |
准备考试 |
总结 |
日总计 |
|
周二 3.17 |
90 |
90 |
|||||
周三 3.18 |
|||||||
周四 3.19 |
105 |
30 |
135 |
||||
周五 3.20 |
90 |
|
90 |
||||
周六 3.21 |
|||||||
周日 3.22 |
|||||||
周总计 |
180 |
105 |
30 |
315 |
阶段时间和效率 周数(上一次周活动总结表的周数+1):2
不包括上一周在内的累计时间
总计 |
315 |
||||||
平均 |
45 |
||||||
最大 |
135 |
||||||
最小 |
0 |
以前每个周的累计时间
总计 |
|||||||
平均 |
|||||||
最大 |
|||||||
最小 |
二、时间记录日志:
表2 时间记录日志
学生 黄亚萍 日期 2015.03.17
教师 王建民 课程 软件工程
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
3/19 |
16:34 |
18:19 |
105 |
编程、调试 |
||
18:40 |
19:10 |
30 |
总结工作 |
三、缺陷记录日志:
表3 缺陷记录日志
学 生 黄亚萍
日 期 2015.03.17
教 员 王建民
程序号 3
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
3/19 |
1 |
漏写转行字符 |
编辑代码 |
代码调试 |
17:33 |
|
描述:漏写转行字符,使得四则运算生成式打印的格式杂乱无章,修改之后得出预期的结果。 |