//2016.3.15 唐野野,胡潘华 #include<stdio.h> #include<iostream> #include<time.h> #include<fstream> #include<ostream> #include<string> #include<stdlib.h> using namespace std; #define MAX N /*无打印功能的无括号算式*/ //int a(void) //{ //} /*有打印功能的无括号算式*/ //int b(void) //{ //} /*无打印功能的带括号的算式*/ int q(void) { srand((unsigned)time(NULL)); int i,j,x,a,b,c,d,n3,c2,v1,h1; int y,y1,y2,y3,y4,y5,y6,y7,y8,y9,y0; char t0[20],t1[20],t2[20],t3[20],t4[20],t5[20],t6[20],t7[20],t8[20],t9[20]; string a2,a3,a4,a5,a6,a7,a8,a9,a10; char b1[10],c1,d1[10]; char a1[4]={'+','-','*','/'}; char p[10]; char p1[10],p2[10]; int N; cout<<"请输入题目的数量!"<<endl; cin>>i; cout<<"请输入多少数以内的四则运算"<<endl; cin>>N; //cout<<"是否有乘除号?(1是,0否)"<<endl; //cin>>x; for(j=0;j<i;j++) { int yzero=rand()%3;//定义z0..z9所匹配的项目 int yone=rand()%3; int ytwo=rand()%3; int ythree=rand()%3; int yfour=rand()%3; int yfive=rand()%3; int ysix=rand()%3; h1=rand()%10;//定义生成表达式里数的个数 y0=rand()%N;itoa(y0,t0,10);string z0=t0; y1=rand()%N;itoa(y1,t1,10);string z1=t1; y2=rand()%N;itoa(y2,t2,10);string z2=t2; y3=rand()%N;itoa(y3,t3,10);string z3=t3; y4=rand()%N;itoa(y4,t4,10);string z4=t4; y5=rand()%N;itoa(y5,t5,10);string z5=t5; y6=rand()%N;itoa(y6,t6,10);string z6=t6; y7=rand()%N;itoa(y7,t7,10);string z7=t7; y8=rand()%N;itoa(y8,t8,10);string z8=t8; y9=rand()%N;itoa(y9,t9,10);string z9=t9; int l=rand()%4; a2=z0+a1[l]+z1; l=rand()%4; switch(yzero){ case 0: {a3='('+a2+')'+a1[l]+z2;break;} case 1: {a3=z2+a1[l]+'('+a2+')';break;} case 3: {a3=a2+a1[l]+z2;break;} } l=rand()%4; switch(yone){ case 0: {a4='('+a3+')'+a1[l]+z3;break;} case 1: {a4=z3+a1[l]+'('+a3+')';break;} case 2: {a4=z3+a1[l]+a3;break;} } l=rand()%4; switch(ytwo){ case 0: {a5='('+a4+')'+a1[l]+z4;break;} case 1: {a5=z4+a1[l]+'('+a4+')';break;} case 2: {a5=z4+a1[l]+a4;break;} } l=rand()%4; switch(ythree){ case 0: {a6='('+a5+')'+a1[l]+z5;break;} case 1: {a6=z5+a1[l]+'('+a5+')';break;} case 2: {a6=z5+a1[l]+a5;break;} } l=rand()%4; switch(yfour){ case 0: {a7='('+a6+')'+a1[l]+z6;break;} case 1: {a7=z6+a1[l]+'('+a6+')';break;} case 2: {a7=z6+a1[l]+a6;break;} } l=rand()%4; switch(yfive){ case 0: {a8='('+a7+')'+a1[l]+z7;break;} case 1: {a8=z7+a1[l]+'('+a7+')';break;} case 2: {a8=z7+a1[l]+a7;break;} } l=rand()%4; switch(ysix){ case 0: {a9='('+a8+')'+a1[l]+z8;break;} case 1: {a9=z8+a1[l]+'('+a8+')';break;} case 2: {a9=z8+a1[l]+a8;break;} } int n2=rand()%3; switch(h1){ case 0: {j=j-1;break;} case 1: {j=j-1;break;} case 2: {a2=z0+a1[l]+z1; cout<<a2<<endl;break;} case 3: { if(n2==2) {a3='('+a2+')'+a1[l]+z2; cout<<a3<<endl;break;} if(n2==1) {a3=z2+a1[l]+'('+a2+')'; cout<<a3<<endl;break;} if(n2==0) {a3=a2+a1[l]+z2; cout<<a3<<endl;break;} } case 4: { if(n2==2) {a4='('+a3+')'+a1[l]+z3; cout<<a4<<endl;break;} if(n2==1) {a4=z3+a1[l]+'('+a3+')'; cout<<a4<<endl;break;} if(n2==0) {a4=z3+a1[l]+a3; cout<<a4<<endl;break;} } case 5: { if(n2==2) {a5='('+a4+')'+a1[l]+z4; cout<<a5<<endl;break;} if(n2==1) {a5=z4+a1[l]+'('+a4+')'; cout<<a5<<endl;break;} if(n2==0) {a5=z4+a1[l]+a4; cout<<a5<<endl;break;} } case 6: { if(n2==2) {a6='('+a5+')'+a1[l]+z5; cout<<a6<<endl;break;} if(n2==1) {a6=z5+a1[l]+'('+a5+')'; cout<<a6<<endl;break;} if(n2==0) {a6=z5+a1[l]+a5; cout<<a6<<endl;break;} } case 7: { if(n2==2) {a7='('+a6+')'+a1[l]+z6;; cout<<a7<<endl;break;} else if(n2==1) {a7=z6+a1[l]+'('+a6+')'; cout<<a7<<endl;break;} else if(n2==0) {a7=z6+a1[l]+a6; cout<<a7<<endl;break;} } case 8: { if(n2==2) {a8='('+a7+')'+a1[l]+z7; cout<<a8<<endl;break;} if(n2==1) {a8=z7+a1[l]+'('+a7+')'; cout<<a8<<endl;break;} if(n2==0) {a8=z7+a1[l]+a7; cout<<a8<<endl;break;} } case 9: { if(n2==2) {a9='('+a8+')'+a1[l]+z8; cout<<a9<<endl;break;} if(n2==1) {a9=z8+a1[l]+'('+a8+')'; cout<<a9<<endl;break;} if(n2==0) {a9=z8+a1[l]+a8; cout<<a9<<endl;break;} } } } return 0; } int liunianji(void) { int h; cout<<"是否要给六年级同学出题:"<<endl; cin>>h; if(h==1) { srand((unsigned)time(NULL)); int i,j,x,a,b,c,d,n3,c2,v1,h1; int y,y1,y2,y3,y4,y5,y6,y7,y8,y9,y0; char t0[20],t1[20],t2[20],t3[20],t4[20],t5[20],t6[20],t7[20],t8[20],t9[20]; string p2,p3,p4,p5,p6,p7,p8,p9,p10; char b1[10],c1,d1[10]; char a1[4]={'+','-','*','/'}; char a2[10]; char aj; int a4[4]={1,1,2,2}; int a5[10]; char p[10]; char p1[10],o[10]; int N; cout<<"请输入题目的数量!"<<endl; cin>>i; int b2[10],a3[100],s1[100]; cout<<"请输入多少数以内的四则运算"<<endl; cin>>N; //cout<<"是否有乘除号?(1是,0否)"<<endl; //cin>>x; for(j=0;j<i;j++) { int yzero=rand()%3;//定义z0..z9所匹配的项目 int yone=rand()%3; int ytwo=rand()%3; //定义生成表达式里数的个数 y0=rand()%N;itoa(y0,t0,10);string z0=t0; y1=rand()%N;itoa(y1,t1,10);string z1=t1; y2=rand()%N;itoa(y2,t2,10);string z2=t2; y3=rand()%N;itoa(y3,t3,10);string z3=t3; y4=rand()%N;itoa(y4,t4,10);string z4=t4; y5=rand()%N;itoa(y5,t5,10);string z5=t5; int l=rand()%4; p2=z0+a1[l]+z1; if(a1[l]=='+') {b2[0]=y0+y1;} if(a1[l]=='-') {b2[0]=y0-y1;} if(a1[l]=='*') {b2[0]=y0*y1;} if(a1[l]=='/') {b2[0]=y0/y1;} a5[0]=a4[l]; a2[0]=a1[l]; l=rand()%4; a5[1]=a4[l]; a2[1]=a1[l]; switch(yzero){ case 0: { p3='('+p2+')'+a1[l]+z2; if(a1[l]=='+') {b2[1]=b2[0]+y2;} if(a1[l]=='-') {b2[1]=b2[0]-y2;} if(a1[l]=='*') {b2[1]=b2[0]*y2;} if(a1[l]=='/') {b2[1]=b2[0]/y2;} } break; case 1: {p3=z2+a1[l]+'('+p2+')'; if(a1[l]=='+') {b2[1]=b2[0]+y2;} if(a1[l]=='-') {b2[1]=b2[0]-y2;} if(a1[l]=='*') {b2[1]=b2[0]*y2;} if(a1[l]=='/') {b2[1]=b2[0]/y2;} }break; case 2: { p3=p2+a1[l]+z2; a5[1]=a4[l]; if(a5[0]>=a5[1]) {if(a1[l]=='+') {b2[1]=b2[0]+y2;} if(a1[l]=='-') {b2[1]=b2[0]-y2;} if(a1[l]=='*') {b2[1]=b2[0]*y2;} if(a1[l]=='/') {b2[1]=b2[0]/y2;} } if(a5[0]<a5[1]) { int n1; n1=a5[0]; a5[0]=a5[1]; a5[1]=n1; aj=a2[0]; a2[0]=a2[1]; a2[1]=aj; if(a2[0]=='+') { if(a1[l]=='*'){ b2[1]=y1*y2; b2[1]=b2[1]+y0; } if(a1[l]=='/'){ b2[1]=y1/y2; b2[1]=b2[1]+y0; } } if(a2[0]=='-') { if(a1[l]=='*'){ b2[1]=y1*y2; b2[1]=b2[1]-y0; } if(a1[l]=='/'){ b2[1]=y1/y2; b2[1]=b2[1]-y0; } } } } break; } l=rand()%4; a5[2]=a4[l]; a2[2]=a1[l]; switch(yone){ case 0: {p4='('+p3+')'+a1[l]+z3; if(a1[l]=='+') {b2[2]=b2[1]+y3;} if(a1[l]=='-') {b2[2]=b2[1]-y3;} if(a1[l]=='*') {b2[2]=b2[1]*y3;} if(a1[l]=='/') {b2[2]=b2[1]/y3;} } case 1: {p4=z3+a1[l]+'('+p3+')'; if(a1[l]=='+') {b2[2]=b2[1]+y3;} if(a1[l]=='-') {b2[2]=b2[1]-y3;} if(a1[l]=='*') {b2[2]=b2[1]*y3;} if(a1[l]=='/') {b2[2]=b2[1]/y3;}} case 2: {p4=z3+a1[l]+p3; a5[2]=a4[l]; if(a5[0]>a5[2]) {if(a1[l]=='+') {b2[2]=b2[1]+y2;} if(a1[l]=='-') {b2[2]=b2[1]-y2;} if(a1[l]=='*') {b2[2]=b2[1]*y2;} if(a1[l]=='/') {b2[2]=b2[1]/y2;} } if(a5[0]==a5[2]) { if(a1[l]=='+'){ if(a2[0]=='+'){ if(a2[1]=='+'){ b2[2]=y0+y1; b2[2]=b2[2]+y3; b2[2]=b2[2]+y3; } if(a2[1]=='-'){ b2[2]=y0+y1; b2[2]=b2[2]-y3; b2[2]=b2[2]+y3; } } if(a2[0]=='-'){ if(a2[l]=='+'){ b2[2]=y0-y1; b2[2]=b2[2]+y3; b2[2]=b2[2]+y3; } if(a2[l]=='-'){ b2[2]=y0-y1; b2[2]=b2[2]-y3; b2[2]=b2[2]+y3; } } } if(a1[l]=='-'){ if(a2[0]=='+'){ if(a2[l]=='+'){ b2[2]=y0+y1; b2[2]=b2[2]+y3; b2[2]=b2[2]-y3; } if(a2[l]=='-'){ b2[2]=y0+y1; b2[2]=b2[2]-y3; b2[2]=b2[2]-y3; } } if(a2[0]=='-'){ if(a2[l]=='+'){ b2[2]=y0-y1; b2[2]=b2[2]+y3; b2[2]=b2[2]-y3; } if(a2[1]=='-'){ b2[2]=y0-y1; b2[2]=b2[2]-y3; b2[2]=b2[2]-y3; } } } if(a1[l]=='*'){ if(a2[1]=='+'){ if(a2[0]=='*') {int ax=y0*y1;int bx=y2*y3;b2[2]=ax+bx;} if(a2[0]=='/') {int ax=y0/y1;int bx=y2*y3;b2[2]=ax+bx;}} if(a2[1]=='-'){ if(a2[0]=='*') {int ax=y0*y1;int bx=y2*y3;b2[2]=ax-bx;} if(a2[0]=='/') {int ax=y0/y1;int bx=y2*y3;b2[2]=ax-bx;}} if(a2[1]=='*'||'/') {b2[2]=b2[1]*y3;} } if(a1[l]=='/'){ if(a2[1]=='+'){ if(a2[0]=='*') {int ax=y0*y1;int bx=y2/y3;b2[2]=ax+bx;} if(a2[0]=='/') {int ax=y0/y1;int bx=y2/y3;b2[2]=ax+bx;}} if(a2[1]=='-'){ if(a2[0]=='*') {int ax=y0*y1;int bx=y2/y3;b2[2]=ax-bx;} if(a2[0]=='/') {int ax=y0/y1;int bx=y2/y3;b2[2]=ax-bx;}} if(a2[1]=='*'||'/') {b2[2]=b2[1]/y3;} } } if(a5[0]<a5[2]) { if(a1[l]=='*'){ if(a2[0]=='+'){ if(a2[1]=='+'){ b2[2]=y3*y2; b2[2]=b2[2]+y0; b2[2]=b2[2]+y1; } if(a2[1]=='-'){ b2[2]=y3*y2; int xz=y0+y1;b2[2]=xz-b2[2]; } } if(a2[0]=='-'){ if(a2[l]=='+'){ b2[2]=y3*y2; int at=y0-y1; b2[2]=y2+b2[2]; } if(a2[l]=='-'){ b2[2]=y3*y2; int ap=y0-y1; b2[2]=y2-b2[2]; } } } if(a1[l]=='/'){ if(a2[0]=='+'){ if(a2[1]=='+'){ b2[2]=y3/y2; b2[2]=b2[2]+y0; b2[2]=b2[2]+y1; } if(a2[1]=='-'){ b2[2]=y3/y2; int xz1=y0+y1;b2[2]=xz1-b2[2]; } } if(a2[0]=='-'){ if(a2[l]=='+'){ b2[2]=y3/y2; int at1=y0-y1; b2[2]=y2+b2[2]; } if(a2[l]=='-'){ b2[2]=y3/y2; int ap1=y0-y1; b2[2]=y2-b2[2]; } } } } } break; } h1=rand()%2+3; int n2=rand()%3; switch(h1){ case 2: {p2=z0+a1[l]+z1; cout<<p2<<endl; s1[j]=b2[0];}break; case 3: { if(n2==2) {p3='('+p2+')'+a1[l]+z2; cout<<p3<<endl;} if(n2==1) {p3=z2+a1[l]+'('+p2+')'; cout<<p3<<endl;} if(n2==0) {p3=p2+a1[l]+z2; cout<<p3<<endl;} s1[j]=b2[1]; } break; case 4: { if(n2==2) {p4='('+p3+')'+a1[l]+z3; cout<<p4<<endl;break;} if(n2==1) {p4=z3+a1[l]+'('+p3+')'; cout<<p4<<endl;break;} if(n2==0) {p4=z3+a1[l]+p3; cout<<p4<<endl;break;} s1[j]=b2[2]; }break; } cout<<"请输入你的答案:"<<endl; cin>>v1; a3[j]=v1; if(a3[j]==s1[j]) { int g1=g1+1; cout<<"答对了,真棒!!"<<endl; cout<<"你已答对了"<<g1<<"道题"<<endl; } if(a3[j]!=s1[j]) { j=j-1; cout<<"答错了,还需多加努力!"<<endl; } } } return 0; } /*有打印功能的带括号算式*/ //int p(void) //{ //} int main(void) { int n,n1; cout<<"是否有括号?(1有,0否)"<<endl; cin>>n1; if(n1==1) { cout<<"是否打印?(1存入文档,0否)"<<endl; cin>>n; if(n==0) { q(); } //if(n==1) // { // p(); // // } // } //if(n1==0) //{ // cout<<"是否打印?(1存入文档,0否)"<<endl; //cin>>n; //if(n==1) //{ //b(); //} //if(n==0) //{ //a(); // } //} } liunianji(); return 0; }
本次作业的题目:
在四则运算2的基础上,再添加一些条件,总共要求满足如下条件:
1.题目避免重复。
2.可制定。(数量/打印方式)
3.可以控制下列参数:
- 是否有乘除法
- 是否有括号(最多可支持10个数参与计算)
- 数值范围
- 加减有无负数
- 乘除有无余数
(新要求)
4.学生写的程序必须能判定用户的输入答案是否正确
5.程序必须能处理混合四则运算
个人体会:
这次实验是相对失败的一次,因为在周五就基本完成了任务,后来心想能增加功能,反而在更改的过程中,出现诸多失误。不过我们小组保证,在接下来的程序里,我们定会好好努力去完成。
项目计划总结:
日期&&任务 | 听课 | 编写程序 | 阅读相关书籍 | 网上查找资料 | 日总计 |
周一 | 100 | 0 | 25 | 15 | 140 |
周二 | 180 | 0 | 0 | 180 | |
周三 | 100 | 0 | 0 | 100 | |
周四 | 100 | 30 | 25 | 155 | |
周五 | 180 | 180 | |||
周六 | 100 | 60 | 15 | 175 | |
周日 | 30 | 30 | |||
周总计 | 200 | 560 | 145 | 55 | 960 |
时间记录日志
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
3/14 | 14:00 | 15:50 | 10 | 100 | 听课 | 上课 |
19:10 | 19:30 | 25 | 阅读书籍 | 《构建之法》 | ||
21:00 | 21:25 | 20 | 网上查找资料 | |||
3/15 | 19:00 | 22:00 | 10 | 180 | 编程 | |
3/16 | 20:00 | 21:40 | 100 | 编程 | ||
3/17 | 14:00 | 15:50 | 10 | 100 | 听课 | 软件工程上课 |
19:00 | 19:30 | 30 | 看书 | 《构建之法》 | ||
20:00 | 20:25 | 25 | 查阅资料 | |||
3/18 | 16:00 | 19:00 | 180 | 编程 | ||
3/19 | 9:00 | 11:00 | 20 | 100 | 编程 | |
14:00 | 15:00 | 60 | 看书 | 《构架之法》 | ||
15:50 | 16:05 | 15 | 查资料 | |||
3/20 | 19:00 | 19:30 | 30 | 看书 | 《构建之法》 |
缺陷记录日志:
日期 | 编号 | 类型 | 引入阶段 | 排除阶段 | 修复时间 | 修复缺陷 |
3月15日 | 1 | 数据定义错误 | 编码 | 编码 | 10min | |
重复定义数据 | ||||||
2 | 逻辑结构错误 | 编码 | 运行 | 50min | ||
使用变量g时,在循环中重复定义g=0 | ||||||
3月17日 | 3 | 数组问题 | 编码 | 编译 | 60min | |
用数组解决符号优先级问题 | ||||||
4 | 循环语句逻辑出错 | 编码 | 编译 | 1min | ||
缺少结束语break |
合作照片:
小组成员:唐野野http://www.cnblogs.com/tyyhph/,胡潘华。