---恢复内容开始---
一.设计思路
1.输入一个数控制题目个数
2.输入一个数控制取值范围(小于100)
3.输入一个数控制是否有正负数
4.输入一个数控制是否有余数
5.输入一个数控制是否有乘除法
6.输入一个数控制是否有括号
7.生成一个随机数,控制每道题的参数个数
8.在一个for循环里,生成随机数,如果生成的随机数大于输入的取值,则重新输入,否则进行下一步
9.用if语句分模块,分别判断是否有正负号,余数,乘除法,括号的情况
10.If是有负数的情况,要考虑生成的运算符是减号的情况,这种情况下,要变成加号,同时负号去掉
11.生成随机数(0-3),用于控制运算符,当运算符是除号时,要考虑除法有无余数,并记录除号的位置
12.If语句执行有乘除法的情况,并计算
13.If语句执行只有有加减法的情况,并计算
14.有括号的情况,如果只生成两个数,自动不加括号,若多个参数,则对符号位置设置随机数,进行括号位置的确定
15.计算时,有括号先计算括号里面的*/,在计算+-,然后计算括号外面的,还是先*/,在+-
16.计算式输出后,输入结果,精确到整数,不足1不进位
17.输入的结果与计算机储存的结果比较,如果相等,则正确,正确计数器+1,若错误,则错误计数器+1
18.For循环用户输入的次数
二.源代码:
1 #include<iostream> 2 #include<ctime> 3 #include<cstdlib> 4 using namespace std; 5 void main() 6 { 7 int num; //输入题目个数 8 int rnum; //输入取值范围 9 int zfnum; //输入是否有正负数 10 int ys; //输入是否有余数 11 int fhn; //输入是否有乘除法 12 int kh; //输入是否有括号 13 cout<<"请输入题目个数:"<<endl; //输入提示 14 cin>>num; //输入题目个数 15 cout<<"请输入取值范围:(小于100)"<<endl; //输入提示 16 cin>>rnum; //输入取值范围 17 cout<<"请输入是否有正负数:(1.有 2.没有)"<<endl; //输入提示 18 cin>>zfnum; //输入是否有正负数 19 cout<<"除法是否有余数:(3.有 4.没有)"<<endl; //输入提示 20 cin>>ys; //输入是否有余数 21 cout<<"请输入是否有乘除法:(5.有 6.没有)"<<endl; //输入提示 22 cin>>fhn; //输入是否有乘除法 23 cout<<"请输入是否有括号:(7.有 8.没有)"<<endl; //输入提示 24 cin>>kh; //输入是否有括号 25 int sz[10]; 26 int jg,zhjg; 27 int n1=0; 28 int n2=0; 29 int f=0; //正负数的数字表示 30 int fhnum=0; //运算符号的数字表示 31 char zf[10]={'+'}; //正负数的符号表示 32 char fh[10]; //运算符号的符号表示 33 int jl; //记录除法的位置 34 int kh1; //记录括号的位置 35 srand(time(0)); 36 for(int l=0;l<num;l++) 37 { 38 int sznum=rand()%9+2; //每道题的数字个数 2-10 39 for(int i=0;i<=sznum;i++) //生成数字 40 { 41 sz[i]=rand()%100+1; 42 for(;;) //控制数的范围 43 { 44 if(sz[i]>rnum) 45 sz[i]=rand()%100+1; 46 else 47 break; 48 } 49 if(zfnum==1) //计算有负数 50 f=rand()%2; 51 if(f==1) //负数 52 zf[i]='-'; 53 if(zf[i]=='-') 54 sz[i]=sz[i]*(-1); 55 } 56 for(int i=0;i<sznum;i++) //生成运算符号 57 { 58 if(fhn==5) //计算有乘除法 59 { 60 fhnum=rand()%4; 61 if(fhnum==0) 62 fh[i]='+'; 63 if(fhnum==1) 64 fh[i]='-'; 65 if(fhnum==2) 66 fh[i]='*'; 67 if(fhnum==3) 68 { 69 fh[i]='/'; 70 if(ys==3) //计算除法时有余数 71 { 72 jl=i; //确定除法符号的位置 73 for(;;) 74 { 75 if(sz[i]%sz[i+1]!=0) 76 break; 77 else 78 { 79 sz[i]=rand()%100+1; 80 sz[i+1]=rand()%100+1; 81 } 82 } 83 } 84 if(ys==4) //计算除法时没有余数 85 { 86 jl=i; //确定除法符号的位置 87 for(;;) 88 { 89 if(sz[i]%sz[i+1]!=0) 90 { 91 sz[i]=rand()%100+1; 92 sz[i+1]=rand()%100+1; 93 } 94 else 95 break; 96 } 97 } 98 } 99 } 100 if(fhn==6) //计算无乘除法 101 { 102 fhnum=rand()%2; 103 if(fhnum==0) 104 fh[i]='+'; 105 if(fhnum==1) 106 fh[i]='-'; 107 } 108 } 109 cout<<l+1<<": "<<sz[0]; 110 if(sznum==2) //如果一个题只有2个数字时不加括号 111 kh=8; 112 if(kh==7) //有括号时 113 { 114 kh1=rand()%(sznum-2)+1; //对符号位置设置随机数,进行括号位置的确定 115 for(int i=0;i<kh1-1;i++) 116 { 117 cout<<fh[i]<<sz[i+1]; 118 } 119 cout<<fh[kh1-1]<<"("<<sz[kh1]<<fh[kh1]<<sz[kh1+1]<<")"; 120 for(int i=kh1+1;i<sznum;i++) 121 { 122 cout<<fh[i]<<sz[i+1]; 123 } 124 jg=sz[0]; 125 //计算括号里的结果 126 if(fh[kh1]=='+') 127 { 128 sz[kh1]=sz[kh1]+sz[kh1+1]; 129 sz[kh1+1]=0; 130 } 131 if(fh[kh1]=='-') 132 { 133 sz[kh1]=sz[kh1]-sz[kh1+1]; 134 sz[kh1+1]=0; 135 } 136 if(fh[kh1]=='*') 137 { 138 sz[kh1]=sz[kh1]*sz[kh1+1]; 139 sz[kh1+1]=1; 140 } 141 if(fh[kh1]=='/') 142 { 143 sz[kh1]=sz[kh1]/sz[kh1+1]; 144 sz[kh1+1]=1; 145 } 146 //先算*/ 147 for(int i=0;i<sznum;i++) 148 { 149 if(fh[i]=='*') 150 { 151 sz[i]=sz[i]*sz[i+1]; 152 sz[i+1]=1; 153 } 154 if(fh[i]=='/') 155 { 156 sz[i]=sz[i]/sz[i+1]; 157 sz[i+1]=1; 158 } 159 } 160 //最后+ - 161 for(int i=0;i<sznum;i++) 162 { 163 if(fh[i]=='+') 164 jg=jg+sz[i+1]; 165 if(fh[i]=='-') 166 jg=jg-sz[i+1]; 167 if(fh[i]=='*') 168 jg=jg*sz[i+1]; 169 if(fh[i]=='/') 170 jg=jg/sz[i+1]; 171 } 172 } 173 if(kh==8) //没有括号时 174 { 175 for(int i=1;i<sznum;i++) 176 { 177 cout<<fh[i]<<sz[i+1]; 178 } 179 jg=sz[0]; 180 for(int i=0;i<sznum;i++) 181 { 182 if(fh[i]=='*') 183 { 184 sz[i]=sz[i]*sz[i+1]; 185 sz[i+1]=1; 186 } 187 if(fh[i]=='/') 188 { 189 sz[i]=sz[i]/sz[i+1]; 190 sz[i+1]=1; 191 } 192 } 193 for(int i=0;i<sznum;i++) 194 { 195 if(fh[i]=='+') 196 jg=jg+sz[i+1]; 197 if(fh[i]=='-') 198 jg=jg-sz[i+1]; 199 if(fh[i]=='*') 200 jg=jg*sz[i+1]; 201 if(fh[i]=='/') 202 jg=jg/sz[i+1]; 203 } 204 } 205 cout<<"="<<endl; 206 cout<<"请输入结果,精确到整数,不足1不进位:"<<endl; 207 cin>>zhjg; 208 if(zhjg-jg<0.001) 209 { 210 n1++; 211 cout<<"正确!"<<endl; 212 } 213 else 214 { 215 n2++; 216 cout<<"错误!"<<endl; 217 } 218 } 219 cout<<"正确的个数:"<<n1<<",错误的个数:"<<n2<<endl; 220 }
三.运行结果截图
四.按照PSP0级的要求记录开发过程中的项目计划日志、时间记录日志、缺陷记录日志
周活动总结表
姓名:谷伟华 日期 2016/3/25
|
听课 |
编写代码 |
阅读课本 |
准备考试 |
其他 |
|
日总计 |
周日 |
|
|
|
|
|
|
|
周一 |
100 |
90 |
30 |
|
|
|
220 |
周二 |
|
|
|
|
35 |
|
35 |
周三 |
|
60 |
20 |
|
|
|
80 |
周四 |
|
80 |
40 |
|
|
|
120 |
周五 |
|
130 |
|
|
120 |
|
250 |
周六 |
|
|
|
|
90 |
|
90 |
周总计 |
100 |
360 |
90 |
|
245 |
|
795 |
时间记录日志
学生:谷伟华 日期:2016/3/25
教师:王建民 课程:软件工程
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
C |
U |
3/21 |
8:00 |
9:50 |
10 |
100 |
听课 |
|
|
|
|
15:00 |
17:20 |
20 |
120 |
写课堂作业和《构建之法》阅读笔记 |
上厕所、休息 |
|
|
3/22 |
15:25 |
16:00 |
0 |
35 |
讨论作业思路 |
|
|
|
3/23 |
17:20 |
18:10 |
0 |
50 |
编写程序、看《构建之法》 |
|
|
|
3/17 |
9:00 |
11:30 |
30 |
120 |
编写程序、看《构建之法》 |
上厕所、休息 |
|
|
3/18 |
16:30 |
18:30 |
20 |
100 |
编写程序 |
上厕所、准备上课 |
|
|
|
21:00 |
23:30 |
|
150 |
编写程序、写博客园要发表的东西 |
|
|
|
3/19 |
18:00 |
19:30 |
|
90 |
写博客园要发表的东西 |
|
|
|
缺陷记录日志示例
学生:牛俊燕
日期:3/26/2016
教员:王建民老师
程序号:4,5
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
3/21
|
1 |
7 |
编码 |
编译 |
2min |
|
描述:MAX没有初始化 |
||||||
|
2 |
23 |
编码 |
编译 |
5min |
|
描述:创建数组有错误,通过new创建数组 |
||||||
|
3 |
40 |
编码 |
编译 |
20min |
|
描述:try......catch......finally语句的处理 |
||||||
3/22 |
4 |
54 |
编码 |
编译 |
30min |
|
描述:当随机生成数是负数时,且运算符是减号,要将运算符变成加号,且随机生成数不带负号,运行时出不来想要的结果 |
||||||
3/23 |
5 |
72 |
设计 |
编译 |
50min |
|
描述:有乘除时,在除法有余数时,没有考虑记录除法符号的位置 |
||||||
|
6 |
114 |
编码 |
编译 |
20min |
|
描述:对符号位置设置随机数,进行括号位置的确定有错误 |
||||||
3/25 |
7 |
208 |
编码 |
编译 |
15min |
|
描述:cin输入的名称有问题 |
五.一起合作的照片
---恢复内容结束---