四则运算2
思路:1.用srand函数判断随机数输出是否重复
2.输出的数量直接输入即可,打印方式每行固定输出几个,由用户输入为准。
3.有无乘除:生成随机数c小于4,0为+,1为-,2为*,3为/,没有乘除就排除c为2.3情况
有无负数:排除c为0.1时小于0情况
有无余数:求余判断是否为0
有无括号:括号的情况需要生成多个随机数,所以我决定生成个随机数组,括号的位置也随机插入到随机数后面,运算符也随机插入。
4.设置循环,条件判断,输出时有负数带括号输出,没有直接输出。
代码:
//四则运算2 //孔宇航 2016/3/11 #include <iostream> #include<stdlib.h> #include <time.h> using namespace std; void main() { int a0[1000],b0[1000],c0[1000],a1[1000],b1[1000],c1[1000],a2[1000],b2[1000],c2[1000],a3[1000],b3[1000],c3[1000],C[1000]; int a,b,c,d; int i,j,A0,A1,A2,A3,B0,B1,B2,B3; int num,line,k; int min,max,m; int CC,FS,YS,KH; k=0; A0=0;A1=0;A2=0;A3=0; B0=0;B1=0;B2=0;B3=0; cout<<"*************四则运算2*************"<<endl; cout<<endl; cout<<endl; cout<<"请输入算式数量和每行显示数量(打印方式):"<<endl; cin>>num>>line; cout<<"是否要有乘除法?(1/0)"<<endl; cin>>CC; while(1) //判断输入是否合法 { if(CC != 1&&CC != 0) { cout<<"输入有误,请重新输入:"; cin>>CC; } else break; } cout<<"加减有无负数?(1/0)"<<endl; cin>>FS; while(1) //判断输入是否合法 { if(FS != 1&&FS != 0) { cout<<"输入有误,请重新输入:"; cin>>FS; } else break; } cout<<"除法有无余数?(1/0)"<<endl; cin>>YS; while(1) //判断输入是否合法 { if(YS != 1&&YS != 0) { cout<<"输入有误,请重新输入:"; cin>>YS; } else break; } cout<<"是否有括号?(1/0)"<<endl; cin>>KH; while(1) //判断输入是否合法 { if(KH!= 1&&KH != 0) { cout<<"输入有误,请重新输入:"; cin>>KH; } else break; } cout<<"请输入两个数数值范围min,max(min<max)"<<endl; cin>>min>>max; cout<<endl; while(1) //判断输入是否合法 { if(min>=max) { cout<<"输入有误,请重新输入:"; cin>>min>>max; } else break; } m=max-min+1; for(i=0;i<1000;i++) { a0[i]=0;b0[i]=0; a1[i]=0;b1[i]=0; a2[i]=0;b2[i]=0; a3[i]=0;b3[i]=0; } srand( (unsigned)time( NULL ) );//srand()函数产生一个以当前时间开始的随机种子 for(i=0;;i++) { a=min+rand()%m; b=min+rand()%m; d=min+rand()%m; c=rand()%4; if(CC==0) //如果CC=0,去除c=2,3的情况 { if(c==2||c==3) continue; } if(FS==0) //如果FS=0,去除c=0,1下结果小于0的情况 { if(c==0) { if(a+b<0) continue; } else if(c==1) { if(a-b<0) continue; } } if(YS==0) //如果YS=0,且是除法,去除a,b相除有余数的情况 { if(c==3) if(0 != a%b) continue; } //将算式分为加、减、乘、除 if(c==0) //加法 { for(j=0;j<=A0;j++) { if(a==a0[j]&&b==b0[j]) { B0++;break; } } if(B0>0) { B0=0;continue; } else { a0[A0]=a; b0[A0]=b; c0[A0]=a+b; A0++; } } else if(c==1) //减法 { for(j=0;j<=A1;j++) { if(a==a1[j]&&b==b1[j]) { B1++;break; } } if(B1>0) { B1=0;continue; } else { a1[A1]=a; b1[A1]=b; c1[A1]=a+b; A1++; } } else if(c==2) //乘法 { for(j=0;j<=A2;j++) { if(a==a2[j]&&b==b2[j]) { B2++;break; } } if(B2>0) { B2=0;continue; } else { a2[A2]=a; b2[A2]=b; c2[A2]=a+b; A2++; } } else //除法 { if(b==0) continue; for(j=0;j<=A3;j++) { if(a==a3[j]&&b==b3[j]) { B3++;break; } } if(B3>0) { B3=0;continue; } else { a3[A3]=a; b3[A3]=b; c3[A3]=a+b; A3++; } } if(num==A0+A1+A2+A3) //限制算式数量 break; } //输出 for(i=0;i<A0;i++) // 加法 { k++; if(a0[i]<0) cout<<"("<<a0[i]<<")"; else cout<<a0[i]<<" "; cout<<"+"; if(b0[i]<0) cout<<"("<<b0[i]<<")"; else cout<<" "<<b0[i]<<" "; cout<<"="; if(k%line==0) cout<<endl; else cout<<" "; } for(i=0;i<A1;i++) // 减法 { k++; if(a1[i]<0) cout<<"("<<a1[i]<<")"; else cout<<a1[i]<<" "; cout<<"-"; if(b1[i]<0) cout<<"("<<b1[i]<<")"; else cout<<" "<<b1[i]<<" "; cout<<"="; if(k%line==0) cout<<endl; else cout<<" "; } for(i=0;i<A2;i++) // 乘法 { k++; if(a2[i]<0) cout<<"("<<a2[i]<<")"; else cout<<a2[i]<<" "; cout<<"*"; if(b2[i]<0) cout<<"("<<b2[i]<<")"; else cout<<" "<<b2[i]<<" "; cout<<"="; if(k%line==0) cout<<endl; else cout<<" "; } for(i=0;i<A3;i++) // 除法 { k++; if(a3[i]<0) cout<<"("<<a3[i]<<")"; else cout<<a3[i]<<" "; cout<<"/"; if(b3[i]<0) cout<<"("<<b3[i]<<")"; else cout<<" "<<b3[i]<<" "; cout<<"="; if(k%line==0) cout<<endl; else cout<<" "; } }
截图:
本次程序用了大量的时间,包括在网上查阅相关资料,复习以前知识,敲代码。括号部分只有了初步想法并没有实现此功能深感抱歉,本人编程能力有限,望老师谅解,会在以后的时间里好好学习,过后看看别的同学的学会这部分知识。除了括号的部分,其他功能还算完善,期间遇到些括号找不到错误的问题,由于没有按照代码规范要求编写,下次注意。还有些输出问题,负数加括号问题,输出个数不符合输入的要求,因为没有记录加减乘除的和没有计数和要求数做对比。一次次修改也算是完成了。
项目计划总结 周活动总结表 姓名:孔宇航 日期:2016/3/11 |
|||||||
任务 日期 |
听课 |
编写 程序 |
阅读 课本 |
准备 考试 |
日总计 (分钟) |
||
周日 |
|||||||
周一 |
100 |
60 |
60 |
220 |
|||
周二 |
120 |
30 |
150 |
||||
周三 |
120 |
60 |
120 |
||||
周四 |
100 |
90 |
90 |
280 |
|||
周五 |
300 |
30 |
330 |
||||
周六 |
120 |
120 |
阶段时间和效率 周数:1 |
|||||||
总计 |
200 |
810 |
270 |
1220 |
|||
平均 |
30 |
115 |
40 |
174 |
|||
最大 |
100 |
300 |
90 |
330 |
|||
最小 |
100 |
60 |
30 |
120 |
2,时间记录日志:
学生:孔宇航 日期:2016/3/11
老师:王建民 课程:PSP
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
3/7 |
14:00 |
16:00 |
20 |
100 |
上课 |
|
17:00 |
18:00 |
60 |
编程 |
|||
20:00 |
21:00 |
60 |
读课本 |
|||
3/8 |
15:00 |
17:00 |
120 |
编程 |
||
18:00 |
19:00 |
60 |
查资料 |
|||
21:00 |
21:30 |
30 |
读课本 |
|||
3/9 |
10:00 |
12:00 |
20 |
100 |
查资料 |
|
14:00 |
16:00 |
120 |
编程 |
|||
17:00 |
18:00 |
60 |
写作业 |
|||
20:30 |
21:30 |
60 |
读课本 |
|||
3/10 |
14:00 |
16:00 |
20 |
100 |
上课 |
|
16:00 |
18:00 |
30 |
90 |
编程 |
||
21:00 |
21:30 |
30 |
30 |
读课本 |
||
3/11 |
08:00 13:30 15:00 |
9:00 15:00 20:00 |
60 90 300 |
查资料 休息 编程 |
3,缺陷记录日志:
学生:孔宇航 日期:2016/3/11
老师:王建民
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复阶段 |
修复缺陷 |
3/10 |
1 |
01 |
编写 |
编译 |
2min |
|
括号丢失 |
||||||
2 |
02 |
编写 |
编译 |
10min |
||
逻辑错误 |
||||||
3/11 |
3 |
02 |
编写 |
编译 |
20min |
|
循环错误,计数有误 |
||||||
4 |
02 |
编写 |
编译 |
10min |
||
输出有误,语法错误 |