四则运算出题器3
一、实验题目
这次我的程序,是对四则运算2的进一步扩展
我选的是第一个方向:程序能够接受用户输入的答案,并能判定对错,最后还可以给出总共对/错的数量。
二、实验扩展思想
1、因为我给每个题目都编了序号,所以再输入答案的时候只需按着题目的顺序输入就可以了。
2、判断对错,我是事先定义了一个数组,来存放正确答案,最后把用户输入的答案和正确答案做比较即可
3、给出对/错的数量,这个比较容易,只需要设计两个变量,一个用来计算正确的个数,一个用来计算错误的个数,最后给出答案即可。
三、实验代码
//作者: 信1201-2班 司新红 #include<iostream.h> #include<stdlib.h> #include<time.h> void hycc() { int f;//定义要测试的是四则运算是几进制 cout<<"请输入要测试的四则运算是几进制?"<<endl; cin>>f; int x,y,z,t; //x,y分别表示所产生的两个数,z来控制做加减乘除 int e;//输入每行算数题的个数 srand(time(NULL)); int n; int b;//表示有无负数 int a;//用来输入行间距 int d;//代表输入的答案 float daan[100];//代表正确答案 int zq=0;//用来表示正确答案的个数 int cw=0;//用来表示错误答案的个数 cout<<"需要列出多少到数学题?"<<endl; cin>>n; //n代表出题的个数 cout<<"加减有无负数?(0代表有负数,1代表无负数)"<<endl; cin>>b; cout<<"每行需要打印几个算数题?"<<endl; cin>>e; cout<<"打印时行间距是多少?"<<endl; cin>>a; cout<<"********************************"<<endl; for(int i=0;i<n;i++) { x=rand()%f; y=rand()%f; z=rand()%4; switch(z) { case 0: cout<<i+1<<"、 "<<x<<"+"<<y<<"="<<" "; daan[i+1]=x+y; break; case 1: if(b==1) { if(x<y) { t=x; x=y; y=t; } cout<<i+1<<"、 "<<x<<"-"<<y<<"="<<" "; } else if(b==0) { cout<<i+1<<"、 "<<x<<"-"<<y<<"="<<" "; } daan[i+1]=x-y; break; case 2: cout<<i+1<<"、 "<<x<<"*"<<y<<"="<<" "; daan[i+1]=x*y; break; case 3: if(y!=0) { cout<<i+1<<"、 "<<x<<"÷"<<y<<"="<<" "; } else { i=i-1; } daan[i+1]=(float)x/y; break; default: cout<<"超出测试范围"<<endl; break; } if((i+1)%e==0) { for(int c=0;c<=a;c++) { cout<<endl; } } if((i+1)==n) { cout<<endl; } } for(i=1;i<=n;i++) { cout<<"请作答:"<<endl; cout<<i<<"、"; cin>>d; if(d==daan[i]) { cout<<"恭喜您,回答正确!"<<endl; cout<<endl; zq=zq+1; } else { cout<<"回答错误,正确答案为:"<<" "<<daan[i]<<endl; cout<<endl; cw=cw+1; } } cout<<"回答正确的数量为:"<<" "<<zq<<"个"<<endl; cout<<"回答错误的数量为:"<<" "<<cw<<"个"<<endl; } void bhycc() { int f; cout<<"请输入要测试的四则运算是几进制?"<<endl; cin>>f; int e;//输入每行算数题的个数 int x,y,z,t; //x,y分别表示所产生的两个数,z来控制做加减乘除 srand(time(NULL)); int n;//n代表出题个数 int b;//代表加减有无负数 int a;//用来输入行间距 int d;//代表输入的答案 int daan[100];//代表正确答案 int zq=0;//用来表示正确答案的个数 int cw=0;//用来表示错误答案的个数 cout<<"需要列出多少到数学题"<<endl; cin>>n; //n代表出题的个 cout<<"加减有无负数?(0代表有负数,1代表无负数)"<<endl; cin>>b; cout<<"每行需要打印几个算数题?"<<endl; cin>>e; cout<<"打印时行间距是多少?"<<endl; cin>>a; cout<<"********************************"<<endl; for(int i=0;i<n;i++) { x=rand()%f; y=rand()%f; z=rand()%2; switch(z) { case 0: cout<<i+1<<"、 "<<x<<"+"<<y<<"="<<" "; daan[i+1]=x+y; break; case 1: if(b==1) { if(x<y) { t=x; x=y; y=t; } cout<<i+1<<"、 "<<x<<"-"<<y<<"="<<" "; } else if(b==0) { cout<<i+1<<"、 "<<x<<"-"<<y<<"="<<" "; } daan[i+1]=x-y; break; default: cout<<"超出测试范围"<<endl; break; } if((i+1)%e==0) { for(int c=0;c<=a;c++) { cout<<endl; } } if((i+1)==n) { cout<<endl; } } for(i=1;i<=n;i++) { cout<<"请作答:"<<endl; cout<<i<<"、"; cin>>d; if(d==daan[i]) { cout<<"恭喜您,回答正确!"<<endl; cout<<endl; zq=zq+1; } else { cout<<"回答错误,正确答案为:"<<" "<<daan[i]<<endl; cout<<endl; cw=cw+1; } } cout<<"回答正确的数量为:"<<" "<<zq<<"个"<<endl; cout<<"回答错误的数量为:"<<" "<<cw<<"个"<<endl; } int main() { int c;//c代表输入是否继续的数字 char ch; cout<<"是否支持乘除?(Y/N)"<<endl; cin>>ch; if(ch=='Y'||ch=='y') { hycc(); cout<<"********************************"<<endl; } else if(ch=='N'||ch=='n') { bhycc(); cout<<"********************************"<<endl; } else { cout<<"输入错误,无法为您出题!"<<endl; } cout<<"要继续答题吗?(0:继续 1:退出)"<<endl; cin>>c; if(c==0) { cout<<endl; main(); } else { cout<<endl; return 0; } return 0; }
四运行结果
五、总结
这次的题目有几个选向,由于我的编程能力不强,所以 我选择了第一个方向,在编写程序时还遇到了一定的困难,比如在做除法的时候,由于定义的正确答案的数组是整形,所以导致除法计算一直不正确,所以我选择了把数组定义为浮点型。我在以后的时间里一定会多加联系,争取再实现另外一个方向
PSP
学生 司新红
日期 2014.3.17
教师 王建民
程序号_______________
项目计划总结
|
编程 |
阅读书籍 |
课后复习 |
日总计 |
周日 |
|
|
|
|
周一 |
|
|
|
|
周二 |
30 |
30 |
90 |
150 |
周三 |
90 |
30 |
|
120 |
周四 |
120 |
30 |
|
150 |
周五 |
|
|
|
|
周六 |
|
|
|
|
周总计 |
240 |
90 |
90 |
420 |
时间记录总结
日期 |
开始 |
结束 |
中断时间 |
净时间 |
活动 |
备注 |
C |
U |
3月17日 |
4:00 |
5:00 |
无 |
160 |
编程 |
|
|
|
|
8:00 |
9:30 |
30 |
60 |
复习 |
写作业 |
|
|
|
10:00 |
10:30 |
无 |
30 |
阅读书籍 |
|
|
|
3月18日 |
10:00 |
11:30 |
15 |
75 |
编程 |
休息 |
|
|
|
10:00 |
10:30 |
无 |
30 |
阅读书籍 |
|
|
|
3月19日 |
7:00 |
9:00 |
无 |
120 |
编程 |
|
|
|
缺陷记录日志
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
3月17日 |
01 |
程序 |
编码 |
编译 |
20min |
求几个数中最大值时一直报错,最后我把所求的和放在了一个数组中 |
3月18日 |
02 |
程序 |
编码 |
编译 |
10min |
忘记给正确答案的个数和错误答案的个数赋值 |
|
03 |
程序 |
编码 |
编译 |
30min |
计算除法的正确答案时,不能是浮点型,然后我就把答案这个数组定义成了浮点型 |
3月19日 |
04 |
程序 |
编码 |
编译 |
10min |
在不含有乘除的函数中,忘了给正确答案赋值,导致结果报错 |
|
05 |
程序 |
编码 |
编译 |
10min |
变量用错,运行时运行无响应了。 |