四则运算2
题目:
1.题目避免重复/ 2.可定制(数量/打印方式) 3.可以控制下列参数 *是否有乘除法 *是否有括号(最多可支持10个数参与计算) *数值范围 *加减有无负数 *除法有无余数
设计思路:
各项条件的选择都通过生成随机数并通过if-else语句进行选择,数值范围通过为随机数限定范围来生成,嵌套比较多,容易混乱。值得注意的是除法分母不能为0 ,要加以限制。打印方式也通过选择语句选择打印到文档或者屏幕。
/*2016/3/11 没有实现括号的运算,加不进去了:( */ #include<iostream> #include<fstream> #include<time.h> #include<stdlib.h> #include<math.h> using namespace std; void main() { ofstream outfile; outfile.open("题目.txt"); int num1,num2,num3,num4,num,c,d,f; char y; int xZ[3]; int range; srand((int)time(0)); // 时间种子 cout<<"选择打印方式:(1代表屏幕,0代表文件):"; cin>>f; cout<<"输入题目的数量:"; cin>>num; cout<<"整数数值范围:(1000以内,100以内,10以内)"; cin>>range; while(range!=10&&range!=100&&range!=1000) { cout<<"请输入10,100,或1000:"; cin>>range; } cout<<"是否有乘除法,有输入1,没有输入0:"; cin>>xZ[0]; cout<<"加减有无负数,有输入1,没有输入0:"; cin>>xZ[1]; if(xZ[0]==1) { cout<<"除法有无余数,有输入1,没有输入0:"; cin>>xZ[2]; } for(int i=0;i<num;i++)//输出题目的循环 { num1=rand()%range; num2=rand()%range; num3=rand()%range; num4=rand()%range; c=1+(int)(4*rand()/(RAND_MAX+1.0)); d=1+(int)(2*rand()/(RAND_MAX+1.0)); if(d%2==0)//随机确定整数运算还是真分数运算 { if(xZ[0]==1)//确定是否有乘除 { if(c%4==0)//除法 { if(xZ[2]==0)//是否有余数 { if(num1%num2==0) { if(f==1) cout<<num1<<"/"<<num2<<"="<<endl; else outfile<<num1<<"/"<<num2<<"="<<endl; } else { while(num1%num2!=0) { num1=rand()%range; num2=rand()%range; } if(f==1) cout<<num1<<"/"<<num2<<"="<<endl; else outfile<<num1<<"/"<<num2<<"="<<endl; } } else { if(f==1) cout<<num1<<"/"<<num2<<"="<<endl; else outfile<<num1<<"/"<<num2<<"="<<endl; } } if(c%4==2)//减法 { if(xZ[1]==0)//是否有负数 { if(num1<num2) { if(f==1) cout<<num2<<"-"<<num1<<"="<<endl; else outfile<<num2<<"-"<<num1<<"="<<endl; } else if(f==1) cout<<num1<<"-"<<num2<<"="<<endl; else outfile<<num1<<"-"<<num2<<"="<<endl; } else if(f==1) cout<<num1<<"-"<<num2<<"="<<endl; else outfile<<num1<<"-"<<num2<<"="<<endl; } if(c%4==1) if(f==1) cout<<num1<<"+"<<num2<<"="<<endl; else outfile<<num1<<"+"<<num2<<"="<<endl; if(c%4==3) if(f==1) cout<<num1<<"*"<<num2<<"="<<endl; else outfile<<num1<<"*"<<num2<<"="<<endl; } else//无乘除 { if(c%2==0)//减法 { if(xZ[1]==0)//是否有负数 { if(num1<num2) { if(f==1) cout<<num2<<"-"<<num1<<"="<<endl; else outfile<<num2<<"-"<<num1<<"="<<endl; } else { if(f==1) cout<<num1<<"-"<<num2<<"="<<endl; else outfile<<num1<<"-"<<num2<<"="<<endl; } } else { if(f==1) cout<<num1<<"-"<<num2<<"="<<endl; else outfile<<num1<<"-"<<num2<<"="<<endl; } } if(c%2==1) { if(f==1) cout<<num1<<"+"<<num2<<"="<<endl; else outfile<<num1<<"+"<<num2<<"="<<endl; } } } else//真分数运算 { switch(c%4)//判断运算符 { case(0):y='+';break; case(1):y='-';break; case(2):y='*';break; case(3):y='/';break; } if(num1>num2)//判断大小,组合成真分数,并确保分母不为0 { if(f==1) cout<<"("<<num2<<"/"<<num1<<")"; else outfile<<"("<<num2<<"/"<<num1<<")"; } else { if(num2==0) { do{num2=rand()%range;} while(num2==0); } if(f==1) cout<<"("<<num1<<"/"<<num2<<")"; else outfile<<"("<<num1<<"/"<<num2<<")"; } if(f==1) cout<<y; else outfile<<y; if(num3>num4) { if(f==1) cout<<"("<<num4<<"/"<<num4<<")"; else outfile<<"("<<num4<<"/"<<num4<<")"; } else { if(num4==0) { do{num4=rand()%range;} while(num4==0); } if(f==1) cout<<"("<<num3<<"/"<<num4<<")"; else outfile<<"("<<num3<<"/"<<num4<<")"; } if(f==1) cout<<"="<<endl; else outfile<<"="<<endl; } } outfile.close(); }
|
听课 |
编写程序 |
阅读相关书籍 |
网上查找资料 |
日总计 |
周一 |
2 |
0 |
1 |
0 |
3 |
周二 |
0 |
2 |
1 |
1 |
4 |
周三 |
0 |
0 |
0 |
0 |
0 |
周四 |
2 |
1 |
0 |
1 |
4 |
周五 |
0 |
2 |
1 |
1 |
4 |
周六 |
0 |
4 |
0 |
1 |
5 |
周日 |
|
|
|
|
|
周总计 |
4 |
9 |
3 |
4 |
20 |
时间记录日志
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
星期一 |
14:00 |
15:50 |
10min |
100min |
上课 |
软件工程 |
|
19:00 |
20:00 |
|
60min |
看书 |
构建之法 |
星期二 |
19:00 |
23:00 |
10min |
230min |
编程、看书、查找资料 |
二柱子运算程序 |
星期三 |
|
|
|
|
|
|
星期四 |
14:00 |
15:50 |
10min |
100min |
上课 |
软件工程 |
|
19:00 |
21:00 |
|
120min |
编程、查资料 |
二柱子运算程序 |
星期五 |
16:00 |
20:30 |
30min |
240min |
编程、看书、查找资料 |
二柱子运算程序 |
星期六 |
7:30 |
12:30 |
|
300min |
编程,查资料 |
二柱子运算程序 |
缺陷日志
日期 |
编号 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
3.10 |
1 |
|
|
3.11 |
不能实现打印方式的选择 |
3.10 |
2 |
|
|
|
没有多元运算 |
3.11 |
3 |
|
|
|
不能实现括号运算 |