一 设计思路
题目:
用户输入答案,判断正误并输出正误体数。
将所有运算的结果存入一个数组中,用户再将答案存入另一个数组中,结果正确记录一次,结果错误也记录一次,最后输出记录。
二 源代码
#include <iostream.h> #include <string.h> #include <stdlib.h> #include<time.h> int main() { using namespace std; srand(time(NULL)); //使随机数不重复 int num[100]; int result[100]; int answer[100]; int m1=0; int m2=0; int m3=0; cout<<"输入最大范围:"; cin>>num[7]; cout<<"输出多少道题:"; cin>>num[5]; cout<<"打印几列:"; cin>>num[6]; cout<<"是否有乘除法(0表示有,1表示没有):"; cin>>num[3]; switch(num[3]) { case 0: for(int i=0;i<num[5];i++) //循环输出题目个数 { int num0=rand()%num[7]; int num1=rand()%num[7]; string str1[4]={"+","-","*","%"}; int a=rand()%4; if((i+1)%num[6]==0) { cout<<num0<<str1[a]<<num1<<"="<<endl; //如果符合要求则换行 } else { cout<<num0<<str1[a]<<num1<<"="<<" "; //否则继续在同一行输出 } switch(a) { case 0: //将加减乘除所得的结果全部存入一个数组中 result[m1]=num0+num1; m1++; break; case 1: result[m1]=num0-num1; m1++; break; case 2: result[m1]=num0*num1; m1++; break; case 3: result[m1]=num0/num1; m1++; break; } } break; case 1: cout<<"加减有无负数(0表示有,1表示没有):"; cin>>num[4]; switch(num[4]) { case 0: for(int i=0;i<num[5];i++) { int c=-rand()%101+25; //随机产生负数赋予c int d=-rand()%101+25; //随机产生负数赋予d string str2[2]={"+","-"}; //只在加减之中选择输出 int b=rand()%2; if(c<0&&d>=0) //if语句判断有无负数 { if((i+1)%num[6]==0) { cout<<"("<<c<<")"<<str2[b]<<d<<"="<<endl; } else { cout<<"("<<c<<")"<<str2[b]<<d<<"="<<" "; } switch(b) { case 0: result[m1]=c+d; m1++; break; case 1: result[m1]=c-d; m1++; break; case 2: result[m1]=c*d; m1++; break; case 3: result[m1]=c/d; m1++; break; } } else if(c>=0&&d<0) { if((i+1)%num[6]==0) { cout<<c<<str2[b]<<"("<<d<<")"<<"="<<endl; } else { cout<<c<<str2[b]<<"("<<d<<")"<<"="<<" "; } switch(b) { case 0: result[m1]=c+d; m1++; break; case 1: result[m1]=c-d; m1++; break; case 2: result[m1]=c*d; m1++; break; case 3: result[m1]=c/d; m1++; break; } } else if(c<0&&d<0) { if((i+1)%num[6]==0) { cout<<"("<<c<<")"<<str2[b]<<"("<<d<<")"<<"="<<endl; } else { cout<<"("<<c<<")"<<str2[b]<<"("<<d<<")"<<"="<<" "; } switch(b) { case 0: result[m1]=c+d; m1++; break; case 1: result[m1]=c-d; m1++; break; case 2: result[m1]=c*d; m1++; break; case 3: result[m1]=c/d; m1++; break; } } else { if((i+1)%num[6]==0) { cout<<c<<str2[b]<<d<<"="<<endl; } else { cout<<c<<str2[b]<<d<<"="<<" "; } switch(b) { case 0: result[m1]=c+d; m1++; break; case 1: result[m1]=c-d; m1++; break; case 2: result[m1]=c*d; m1++; break; case 3: result[m1]=c/d; m1++; break; } } } break; case 1: //无负数则直接输出 for(int i=0;i<num[5];i++) { int c=-rand()%101+25; int d=-rand()%101+25; string str2[2]={"+","-"}; int b=rand()%2; if((i+1)%num[6]==0) { cout<<num[0]<<str2[b]<<num[1]<<"="<<endl; } else { cout<<num[0]<<str2[b]<<num[1]<<"="<<" "; } switch(b) { case 0: result[m1]=c+d; m1++; break; case 1: result[m1]=c-d; m1++; break; case 2: result[m1]=c*d; m1++; break; case 3: result[m1]=c/d; m1++; break; } } } } cout<<"please input answer:"; for(int h=0;h<num[5];h++) { cin>>answer[h]; //用户输入到数组里 } for(int h1=0;h1<num[5];h1++) { if(answer[h1]==result[h1]) //比较量数组的结果,输出正确数 { m2=m2+1; } else { m3=m3+1; } } cout<<"正确数目"<<" "<<m2<<" "<<"错误数目"<<" "<<m3; }
三 实验截图
四 实验总结
通过本次实验,我了解到命名一定要慎重,要能够见名知意,不然代码一长很容易搞乱,我的就有些乱了,弄到后面都迷糊了,而且并没有提前定义好,只是到了后面随着用随着定义,这个习惯以后一定改