1.设计思路:
首先控制打印数量,前面一半设计整数的计算,后面一半设计分数的计算。
先考虑不加括号的情况, 从是否有乘除法开始考虑。在没有乘除法,也就是只有加减法的时候,控制加减法有无负号,可以用生成随机数1和2来控制负号出现的概率。而在有乘除法的情况下,也就是加减乘除都有的情况下,再考虑除法是否有余数,如果没有余数,先生成除数,除数的倍数为被除数。如果有余数,则在倍数的基础上加1。如果有括号,那么就生成四个数字的混合了加减乘除的算式再加上括号。
2.源代码
1 #include <iostream> 2 #include<stdlib.h> 3 #include<stdio.h> 4 #include<time.h> 5 using namespace std; 6 7 int number()//控制生成题目的数量 8 { 9 int n; 10 cout <<"请输入要生成题目的数量"<<endl; 11 cin>>n; 12 return n; 13 14 } 15 16 int multiplydivide()//控制是否有乘除法 17 { 18 int i; 19 cout <<"有乘除法请按1,没有请按2"<<endl; 20 cin>>i; 21 return i; 22 } 23 int minus()//控制加减是否有负号 24 { 25 int i; 26 //srand((unsigned)time(NULL)); 27 //i=rand()%1+1; 28 cout <<"加减有负号请按1,没有请按2"<<endl; 29 cin>>i; 30 return i; 31 } 32 int remainder()//控制除法是否有余数 33 { 34 int i; 35 cout <<"除法有余数请按1,没有请按2"<<endl; 36 cin>>i; 37 return i; 38 } 39 int gongyue(int a,int b)//找出分子分母的公约数 40 { 41 int min,max; 42 max=a>b?a:b; 43 min=a<b?a:b; 44 if(max%min==0) 45 return min; 46 else 47 return gongyue(min,max%min); 48 } 49 50 void main() 51 { 52 srand((unsigned)time(NULL)); 53 int n; 54 n=number();//控制输出题目的数量 55 int parenthese;//控制式子中是否有括号 56 cout<<"生成的算式中有无括号?有请按1,没有请按2"<<endl; 57 cin>>parenthese; 58 if(parenthese==1)//有括号 59 { 60 int i; 61 srand((unsigned)time(NULL)); 62 int j; 63 if(n%2==0) 64 j=n/2;//前面一半生成整数的题目 65 else 66 j=n/2+1;//后面一半生成分数的题目 67 for(i=0;i<j;i++)//加减法的带括号整数题目,无负号 68 { 69 int num1; 70 num1=rand()%100+1; 71 cout<<num1; 72 int sign; 73 sign=rand()%2+1; 74 if(sign==1) 75 cout<<"*("; 76 if(sign==2) 77 cout<<"÷("; 78 int num2; 79 num2=rand()%100+1; 80 cout<<num2; 81 sign=rand()%2+1; 82 if(sign==1) 83 cout<<"+"; 84 if(sign==2) 85 cout<<"-"; 86 int num3; 87 num3=rand()%100+1; 88 cout<<num3<<")"; 89 sign=rand()%4+1; 90 if(sign==1) 91 cout<<"*"; 92 if(sign==2) 93 cout<<"÷"; 94 if(sign==3) 95 cout<<"+"; 96 if(sign==4) 97 cout<<"-"; 98 99 int num4; 100 num4=rand()%100+1; 101 cout<<num4<<"="<<endl; 102 } 103 for(i=0;i<n-j;i++)//加减法的带括号分数题目,无负号 104 { 105 int fz; 106 int fm; 107 fz=rand()%100+1; 108 fm=rand()%100+1; 109 int a; 110 a=gongyue(fz,fm); 111 fz=fz/a; 112 fm=fm/a; 113 cout<<fz<<"/"<<fm; 114 int sign; 115 sign=rand()%2+1; 116 if(sign==1) 117 cout<<"*("; 118 if(sign==2) 119 cout<<"-("; 120 fz=rand()%100+1; 121 fm=rand()%100+1; 122 a=gongyue(fz,fm); 123 fz=fz/a; 124 fm=fm/a; 125 cout<<fz<<"/"<<fm; 126 sign=rand()%2+1; 127 if(sign==1) 128 cout<<"+"; 129 if(sign==2) 130 cout<<"-"; 131 fz=rand()%100+1; 132 fm=rand()%100+1; 133 a=gongyue(fz,fm); 134 fz=fz/a; 135 fm=fm/a; 136 cout<<fz<<"/"<<fm<<")"; 137 sign=rand()%4+1; 138 if(sign==1) 139 cout<<"*"; 140 if(sign==2) 141 cout<<"÷"; 142 if(sign==3) 143 cout<<"+"; 144 if(sign==4) 145 cout<<"-"; 146 fz=rand()%100+1; 147 fm=rand()%100+1; 148 a=gongyue(fz,fm); 149 fz=fz/a; 150 fm=fm/a; 151 cout<<fz<<"/"<<fm<<"="<<endl; 152 } 153 } 154 if(parenthese==2)//没有括号 155 { 156 int a; 157 a=multiplydivide(); 158 int re; 159 re=remainder(); 160 if(a==1)//有乘除法且除法有余数 161 { 162 int b; 163 b=minus(); 164 if(b==1)//有负号的加减法 165 { 166 int i; 167 srand((unsigned)time(NULL)); 168 for(i=0;i<n;i++)// 169 { 170 int num,num1,num2; 171 int minus; 172 num1=rand()%100+1; 173 minus=rand()%2+1; 174 if(minus==1) 175 { 176 num=(-1)*rand()%100+1; 177 if(num!=0) 178 cout<<"("<<num<<")="<<endl; 179 else 180 cout<<num<<"="<<endl; 181 } 182 if(minus==2) 183 { 184 num=rand()%100+1; 185 cout<<num<<"="<<endl; 186 } 187 int suiji; 188 suiji=rand()%5+1; 189 int re=remainder(); 190 if(re==1)//有加减乘除且除法有余数 191 num2=num*suiji+1; 192 if(re==1)//有加减乘除且除法无余数 193 num2=num*suiji; 194 int sign; 195 sign=rand()%4+1; 196 if(sign==1) 197 cout<<num1<<"+"<<num<<"="<<endl; 198 if(sign==2) 199 cout<<num1<<"-"<<num<<"="<<endl; 200 if(sign==3) 201 cout<<num<<"*"<<num1<<"="<<endl; 202 if(sign==4) 203 cout<<num2<<"÷"<<num<<"="<<endl; 204 205 206 } 207 208 209 } 210 211 } 212 213 if(a==2)//没有乘除法,只有加减法 214 { 215 int b; 216 b=minus(); 217 if(b==1)//有负号的加减法 218 { 219 int i; 220 srand((unsigned)time(NULL)); 221 int j; 222 if(n%2==0) 223 j=n/2;//前面一半生成整数的题目 224 else 225 j=n/2+1;//后面一半生成分数的题目 226 for(i=0;i<j;i++)//加减法的整数题目,有负号 227 { 228 int num; 229 int minus; 230 minus=num=rand()%2+1; 231 if(minus==1) 232 { 233 num=(-1)*rand()%100+1; 234 if(num!=0) 235 cout<<"("<<num<<")"; 236 else 237 cout<<num; 238 } 239 if(minus==2) 240 { 241 num=rand()%100+1; 242 cout<<num; 243 } 244 int sign; 245 sign=rand()%2+1; 246 if(sign==1) 247 cout<<"+"; 248 if(sign==2) 249 cout<<"-"; 250 minus=num=rand()%2+1; 251 if(minus==1) 252 { 253 num=(-1)*rand()%100+1; 254 if(num!=0) 255 cout<<"("<<num<<")="<<endl; 256 else 257 cout<<num<<"="<<endl; 258 } 259 if(minus==2) 260 { 261 num=rand()%100+1; 262 cout<<num<<"="<<endl; 263 } 264 } 265 for(i=0;i<n-j;i++)//加减法的分数题目,有负号 266 { 267 int fz; 268 int fm; 269 int minus; 270 minus=rand()%2+1; 271 fz=rand()%100+1; 272 fm=rand()%100+1; 273 int a; 274 a=gongyue(fz,fm); 275 fz=fz/a; 276 fm=fm/a; 277 if(minus==1) 278 { 279 fz=(-1)*fz; 280 if(fz!=0) 281 cout<<"("<<fz<<"/"<<fm<<")"; 282 else 283 cout<<fz<<"/"<<fm; 284 } 285 if(minus==2) 286 { 287 cout<<fz<<"/"<<fm; 288 } 289 int sign; 290 sign=rand()%2+1; 291 if(sign==1) 292 cout<<"+"; 293 if(sign==2) 294 cout<<"-"; 295 fz=rand()%100+1; 296 fm=rand()%100+1; 297 a=gongyue(fz,fm); 298 fz=fz/a; 299 fm=fm/a; 300 cout<<fz<<"/"<<fm<<"="<<endl; 301 } 302 303 304 305 } 306 if(b==2)//没有负号 307 { 308 int i; 309 srand((unsigned)time(NULL)); 310 int j; 311 if(n%2==0) 312 j=n/2;//前面一半生成整数的题目 313 else 314 j=n/2+1;//后面一半生成分数的题目 315 for(i=0;i<j;i++)//加减法的整数题目,无负号 316 { 317 int num; 318 num=rand()%100+1; 319 cout<<num; 320 int sign; 321 sign=rand()%2+1; 322 if(sign==1) 323 cout<<"+"; 324 if(sign==2) 325 cout<<"-"; 326 num=rand()%100+1; 327 cout<<num<<"="<<endl; 328 } 329 for(i=0;i<n-j;i++)//加减法的分数题目,无负号 330 { 331 int fz; 332 int fm; 333 fz=rand()%100+1; 334 fm=rand()%100+1; 335 int a; 336 a=gongyue(fz,fm); 337 fz=fz/a; 338 fm=fm/a; 339 cout<<fz<<"/"<<fm; 340 int sign; 341 sign=rand()%2+1; 342 if(sign==1) 343 cout<<"+"; 344 if(sign==2) 345 cout<<"-"; 346 fz=rand()%100+1; 347 fm=rand()%100+1; 348 a=gongyue(fz,fm); 349 fz=fz/a; 350 fm=fm/a; 351 cout<<fz<<"/"<<fm<<"="<<endl; 352 } 353 } 354 } 355 } 356 357 358 359 360 361 }
3.截图
4.项目计划总结
听课 |
编程 |
看资料 |
日总计 |
|
3.14周一 |
100min |
100min |
||
3.15 |
60min |
60min |
||
3.16 |
72min |
72min |
||
3.17 |
110min |
110min |
||
3.18 |
100min |
60min |
160min |
|
3.19 |
70min |
30min |
100min |
|
周总计 |
200min |
312min |
90min |
602min |
5.时间记录日志
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
3.14 |
8:00 |
9:50 |
10 |
100min |
上课 |
下课休息10min |
3.15 |
14:30 |
15:30 |
60min |
构思程序, 查阅资料 |
||
3.16 |
15:30 |
16:52 |
10min |
72min |
两人合作讨论思路 |
休息10min |
3.17 |
19:00 |
21:00 |
10min |
110min |
写程序 |
|
3.18 |
19:00 |
20:00 |
60min |
写程序 |
||
3.19 |
8:00 |
9:40 |
70min |
写程序 |
6.缺陷记录日志
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
3.17 |
1 |
20 |
编码 |
编译 |
1min |
|
漏掉了分号 |
||||||
3.17 |
2 |
20 |
编码 |
编译 |
1min |
|
If后面的语句漏掉了{} |
||||||
3.18 |
3 |
20 |
编码 |
编译 |
1min |
|
漏掉了分号 |
||||||
3.18 |
4 |
20 |
设计 |
编译 |
1min |
|
生成的随机数一样 |
||||||
5 |
20 |
编码 |
编译 |
1min |
||
生成的算式格式不对,没有换行 |
||||||
3.19 |
6 |
20 |
编码 |
编译 |
1min |
|
分子分母没有化简,不符合题目要求 |