一、题目要求:
随机产生n道四则运算题,数字为整数或真分数。整数范围可选择,可以选择有无乘除法,
可以判断除法是否有余数,可以判断加减结果有无负数,可以选择有无括号,可以打印。
二、分析:
1.首先是确定四则运算题的数目,只要将循环次数设置成输入的数字。
2.确定数值范围时,将随机生成数的范围也用输入规定。
3.确定有无括号时,将两个括号用char数组表示,将运算符也用一个char数组表示存储,数值是随机产生的,也用数组保存,然后按规律输出,
比如先输出左括号,再输出数值,再输出运算符,再输出数值,再输出右括号。
4.判断有无余数时,加法、减法、乘法继续存在,讨论除法这一特殊情况,判断有余数的话,就让两个数取余,如果两个数没余数的话就一直循环,直到有余数的式子产生。
5.判断有无负数时,就让两个数交换大小,有负数时小的数减大的数,无负数时,大的数减小的数。
三、用时:14小时
四、代码:
1 /*姓名:黄山成 班级:信1301-1 2 功能:随机产生n道四则运算题,数字为整数或真分数。整数范围可选择,可以选择有无乘除法, 3 可以判断除法是否有余数,可以判断加减结果有无负数,可以选择有无括号,可以打印。 4 */ 5 #include<iostream> 6 using namespace std; 7 #include <time.h> 8 9 10 void opeators() 11 { 12 int c; 13 c=rand()%3; 14 switch(c) 15 { 16 case 0:cout<<" + ";break; 17 case 1:cout<<" - ";break; 18 case 2:cout<<" * ";break; 19 //case 3:cout<<" / ";break; 20 } 21 22 } 23 void proper(int &a,int &b,double c)//显示真分数的函数 24 { 25 if(a>b) 26 { 27 int d; 28 d=a; 29 a=b; 30 b=d; 31 } 32 c=((double)a)/((double)b); 33 } 34 35 void main() 36 { 37 int figure_1=0,figure_2=0,figure_3=0,figure_4=0; 38 double result_1=0;//分数的结果 39 double result_2=0; 40 int c,d,i,j,k; 41 42 srand((unsigned)time(NULL)); 43 cout<<" ***简单的四则运算产生器*** "<<endl; 44 cout<<"请输入题目的个数。"<<endl; 45 int Number; 46 cin>>Number; 47 48 cout<<"请选择整数数值范围"<<endl; 49 cout<<"a.1-30"<<endl; 50 cout<<"b.1-50"<<endl; 51 cout<<"c.1-80"<<endl; 52 cout<<"d.1-100"<<endl; 53 cout<<"请输入你的选择。"<<endl; 54 char sele; 55 cin>>sele; 56 57 int range;//数值范围 58 switch(sele) 59 { 60 case 'a':range=30;break; 61 case 'b':range=50;break; 62 case 'c':range=80;break; 63 case 'd':range=100;break; 64 } 65 cout<<"是否有括号,y/n"<<endl; 66 67 char judgement; 68 cin>>judgement; 69 if(judgement=='y') 70 { 71 for(i=0;i<Number;i++) 72 { 73 int formula[10]; 74 for(int m=0;m<10;m++) 75 { 76 formula[m]=rand()%range+1; 77 } 78 char sign[4]={'+','-','*','/'}; 79 char bracket[2]={'(',')'}; 80 for(int n=0;n<3;n++) 81 { 82 j=rand()%9; 83 k=rand()%9; 84 d=rand()%4; 85 c=rand()%4; 86 int y=rand()%2; 87 switch(c) 88 { 89 case 0: cout<<bracket[0]<<formula[j]<<sign[d]<<formula[k]<<bracket[1]<<sign[c]; 90 case 1: cout<<formula[j]<<sign[d]<<bracket[0]<<formula[k]<<sign[c]<<formula[j]<<bracket[1]<<sign[1]; 91 } 92 } 93 cout<<formula[j]<<"+"<<formula[k]<<" ="<<endl; 94 } 95 } 96 else if(judgement=='n') 97 { 98 cout<<"是否有乘除法,y/n"<<endl; 99 cin>>judgement; 100 if(judgement=='y') 101 { 102 cout<<"除法是否有余数,y/n"<<endl; 103 cin>>judgement; 104 if(judgement=='y')//除法有余数 105 { 106 for( i=0;i<Number;i++) 107 { 108 figure_1=rand()%range+1; 109 figure_2=rand()%range+1; 110 figure_3=rand()%range+1; 111 figure_4=rand()%range+1; 112 proper(figure_1,figure_2,result_1); 113 proper(figure_3,figure_4,result_2); 114 c=rand()%4; 115 switch(c) 116 { 117 case 0: 118 cout<<figure_1; 119 opeators(); 120 cout<<figure_2<<" ="<<endl; 121 break; 122 case 1: 123 cout<<figure_1; 124 opeators(); 125 cout<<figure_3<<"/"<<figure_4<<" ="<<endl; 126 break; 127 case 2: 128 cout<<figure_1<<"/"<<figure_2; 129 opeators(); 130 cout<<figure_3<<" ="<<endl; 131 break; 132 case 3://除数情况单独确定其余数 133 for(;;)//无限循环,当出现满足的条件时跳出循环 134 { 135 figure_1=rand()%range+1; 136 figure_2=rand()%range+1; 137 if((figure_2%figure_1)!=0) 138 { 139 break; 140 } 141 } 142 cout<<figure_2<<" / "<<figure_1<<" ="<<endl; 143 break; 144 } 145 } 146 } 147 else if(judgement=='n')//除法无余数 148 { 149 for( i=0;i<Number;i++) 150 { 151 figure_1=rand()%range+1; 152 figure_2=rand()%range+1; 153 figure_3=rand()%range+1; 154 figure_4=rand()%range+1; 155 proper(figure_1,figure_2,result_1); 156 proper(figure_3,figure_4,result_2); 157 c=rand()%4; 158 switch(c) 159 { 160 case 0: 161 cout<<figure_1; 162 opeators(); 163 cout<<figure_2<<" ="<<endl; 164 break; 165 166 case 1: 167 cout<<figure_1; 168 opeators(); 169 cout<<figure_3<<"/"<<figure_4<<" ="<<endl; 170 break; 171 case 2: 172 cout<<figure_1<<"/"<<figure_2; 173 opeators(); 174 cout<<figure_3<<" ="<<endl; 175 break; 176 case 3: 177 for(;;) 178 { 179 figure_1=rand()%range+1; 180 figure_2=rand()%range+1; 181 if((figure_2%figure_1)==0) 182 { 183 break; 184 } 185 } 186 cout<<figure_2<<" / "<<figure_1<<" ="<<endl; 187 break; 188 } 189 } 190 } 191 } 192 else if(judgement=='n')//只有加减 193 { 194 cout<<"减法是否有负数,y/n"<<endl; 195 cin>>judgement; 196 if(judgement=='y')//减法有负数 197 { 198 for( i=0;i<Number;i++) 199 { 200 figure_1=rand()%range+1; 201 figure_2=rand()%range+1; 202 figure_3=rand()%range+1; 203 figure_4=rand()%range+1; 204 proper(figure_1,figure_2,result_1); 205 proper(figure_3,figure_4,result_2); 206 c=rand()%2; 207 d=rand()%4; 208 switch(d) 209 { 210 case 0: 211 if(c==0) 212 { 213 cout<<figure_1<<" + "<<figure_2<<" ="<<endl;break; 214 } 215 else 216 { 217 if(figure_1<figure_2) 218 { 219 cout<<figure_1<<" - "<<figure_2<<" ="<<endl; 220 } 221 else 222 { 223 cout<<figure_2<<" - "<<figure_1<<" ="<<endl; 224 } 225 } 226 break; 227 case 1: 228 if(c==0) 229 { 230 cout<<figure_1<<" + "<<figure_3<<"/"<<figure_4<<" "<<endl; 231 } 232 else 233 { 234 cout<<figure_3<<"/"<<figure_4<<" - "<<figure_1<<" ="<<endl; 235 } 236 break; 237 case 2: 238 if(c==0) 239 { 240 cout<<figure_1<<"/"<<figure_2<<" + "<<figure_3<<"/"<<figure_4<<" ="<<endl; 241 } 242 else 243 { 244 if(result_1<result_2) 245 { 246 cout <<figure_1<<"/"<<figure_2<<" - "<<figure_3<<"/"<<figure_4<<" ="<<endl; 247 } 248 else 249 { 250 cout<<figure_3<<"/"<<figure_4<<" - "<<figure_3<<"/"<<figure_4<<" ="<<endl; 251 } 252 } 253 break; 254 case 3 : 255 cout<<figure_3<<"/"<<figure_4<<" + "<<figure_1<<" ="<<endl; 256 break; 257 } 258 } 259 260 } 261 else if(judgement=='n')//没有负数 262 { 263 for( i=0;i<Number;i++) 264 { 265 figure_1=rand()%range+1; 266 figure_2=rand()%range+1; 267 figure_3=rand()%range+1; 268 figure_4=rand()%range+1; 269 proper(figure_1,figure_2,result_1); 270 proper(figure_3,figure_4,result_2); 271 c=rand()%2; 272 d=rand()%4; 273 switch(d) 274 { 275 case 0: 276 if(c==0) 277 { 278 cout<<figure_1<<" + "<<figure_2<<" ="<<endl;break; 279 } 280 else 281 { 282 if(figure_1>figure_2) 283 { 284 cout<<figure_1<<" - "<<figure_2<<" ="<<endl; 285 } 286 else 287 { 288 cout<<figure_2<<" - "<<figure_1<<" ="<<endl; 289 } 290 291 } 292 break; 293 case 1: 294 if(c==0) 295 { 296 cout<<figure_1<<" + "<<figure_3<<"/"<<figure_4<<" "<<endl; 297 } 298 else 299 { 300 cout<<figure_1<<" - "<<figure_3<<"/"<<figure_4<<" ="<<endl; 301 } 302 break; 303 case 2: 304 if(c==0) 305 { 306 cout<<figure_1<<"/"<<figure_2<<" + "<<figure_3<<"/"<<figure_4<<" ="<<endl; 307 } 308 else 309 { 310 if(result_1>result_2) 311 { 312 cout <<figure_1<<"/"<<figure_2<<" - "<<figure_3<<"/"<<figure_4<<" ="<<endl; 313 } 314 else 315 { 316 cout<<figure_3<<"/"<<figure_4<<" - "<<figure_3<<"/"<<figure_4<<" ="<<endl; 317 } 318 } 319 break; 320 case 3 : 321 cout<<figure_3<<"/"<<figure_4<<" + "<<figure_1<<" ="<<endl; 322 break; 323 324 } 325 } 326 } 327 } 328 } 329 }
五、截图
六、感想:
这次编程一周都在考虑这个问题,用时较长,最终还是完成了,虽然有些不足,但基本功能实现了,感觉挺有成就感,没有让努力付诸东流。
项目计划日志(单位:h):
听课 | 编写程序 | 阅读相关书籍 | 网上查找资料 | 日总计 | |
周一 | 2 | 0 | 1 | 0 | 3 |
周二 | 0 | 1 | 1 | 0 | 2 |
周三 | 0 | 1 | 0 | 0 | 1 |
周四 | 2 | 3 | 0 | 0 | 5 |
周五 | 0 | 5 | 2 | 1 | 8 |
周六 | 0 | 5 | 0 | 0 | 5 |
周日 | |||||
周总计 | 4 | 14 | 4 | 1 | 24 |
时间记录日志(单位:min):
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
星期一 | 14:00 | 15:50 | 10(课间) | 100 | 听课 | 软件工程 |
18:00 | 19:00 | 5 | 60 | 看书 | 构建之法 | |
星期二 | 19:30 | 20:30 | 0 | 60 | 编程 | 四则运算2的程序 |
星期三 | 14:00 | 15:00 | 0 | 60 | 编程 | 四则运算2的程序 |
19:00 | 20:00 | 0 | 60 | 编程 | ||
星期四 | 14:00 | 15:50 | 10(课间) | 100 | 听课 | 软件工程 |
19:30 | 21:30 | 0 | 120 | 编程 | 四则运算2的程序 | |
21:30 | 22:30 | 60 | 看书 | 构建之法 | ||
星期五 | 14:00 | 17:00 | 0 | 180 | 编程 | 四则运算2的程序 |
18:30 | 21:30 | 30 | 150 | 编程 | 四则运算2的程序 | |
星期六 | 7:00 | 12:30 | 30 | 300 | 编程 | 四则运算2程序进行修改、写博客 |
13:00 | 15:00 | 100 | 编程、写博客 |