一、题目
用程序实现用户要求的若干道2年级四则运算题,允许用户答题并判断对错。
二、设计思想
建立两个数组,一个存正确运算结果,一个存用户输入的结果,比较后得出是否正确。
三、源代码
#include<iostream.h> #include<time.h> #include<stdlib.h> #include<math.h> int main() { int num1,num2,num0,c; int limit[8]; double num3,num4; srand((int)time(0)); // 不同的时间,产生不同的随机数,但不保证缩小范围后是不是一样的数,是缺陷 cout<<"输入题目的数量:"; cin>>num0; cout<<endl; double sum[num0]; double result[num0]; cout<<"输入打印中每行的间隔:"; cin>>limit[0]; cout<<endl; cout<<"输入打印中每行的题目数:"; cin>>limit[1]; //每次都输入太麻烦了,这个设置一般是一样的,可否改为设置一次即可 cout<<endl; cout<<"输入操作数的数值范围的最小值和最大值:"; cin>>limit[2]>>limit[3]; cout<<endl; cout<<"是否有乘除法,有输入1,没有输入0:"; cin>>limit[4]; cout<<endl; cout<<"加减有无负数,有输入1,没有输入0:"; cin>>limit[5]; cout<<endl; if(limit[4]==1) { cout<<"除法有无余数,有输入1,没有输入0:"; cin>>limit[6]; cout<<endl; } if(limit[4]==0) { cout<<"是否支持小数,有输入1,没有输入0:"; cin>>limit[7]; cout<<endl; if(limit[7]==1) { cout<<"若支持小数,精确到多少位:"; cin>>limit[8]; cout<<endl; } } for(int i=0;i<num0;i++) //输出题目的循环 { num1=limit[2]+(int)(limit[3]*rand()/(RAND_MAX+1.0)); num2=limit[2]+(int)(limit[3]*rand()/(RAND_MAX+1.0)); c=1+(int)(4*rand()/(RAND_MAX+1.0)); if(limit[4]==1) { if(c%4==0) { if(limit[6]==0) { if(num1%num2==0) { sum[i]=num1/num2; cout<<"第"<<i+1<<"道:"<<num1<<"/"<<num2<<"="<<" "; } else { while(num1%num2!=0) { num2=num2-num1%num2; } sum[i]=num1/num2; cout<<"第"<<i+1<<"道:"<<num1<<"/"<<num2<<"="<<" "; } } } //输出有无余数的除法 if(c%4==1) { sum[i]=num1+num2; cout<<"第"<<i+1<<"道:"<<num1<<"+"<<num2<<"="<<" "; } if(c%4==2) { sum[i]=num1-num2; cout<<"第"<<i+1<<"道:"<<num1<<"-"<<num2<<"="<<" "; } if(c%4==3) { sum[i]=num1*num2; cout<<"第"<<i+1<<"道:"<<num1<<"*"<<num2<<"="<<" "; } } //输出有乘除法的题目 else { if(limit[7]==1) { num3=pow(0.1,limit[8])+(int)(1*rand()/(RAND_MAX+1.0))+num1; num4=pow(0.1,limit[8])+(int)(1*rand()/(RAND_MAX+1.0))+num2; } if(limit[5]==1) { if(c%2==0) { sum[i]=pow(-1,i)*num3-pow(-1,i+1)*num4; cout<<"第"<<i+1<<"道:"<<pow(-1,i)*num3<<"-"<<pow(-1,i+1)*num4<<"="<<" "; } if(c%2==1) { sum[i]=pow(-1,i)*num3+pow(-1,i+1)*num4; cout<<"第"<<i+1<<"道:"<<pow(-1,i)*num3<<"+"<<pow(-1,i+1)*num4<<"="<<" "; } } //输出有小数的题目 else { if(c%2==0) { sum[i]=num3-num4; cout<<"第"<<i+1<<"道:"<<num3<<"-"<<num4<<"="<<" "; } if(c%2==0) { sum[i]=num3+num4; cout<<"第"<<i+1<<"道:"<<num3<<"+"<<num4<<"="<<" "; } } //输出有无负数的加减 } if((i%limit[1])+1==limit[1]) //每行打印的题目数 for(int k=0;k<=limit[0];k++) cout<<endl; //每行打印的间隔 } for(int j=0;j<num0;j++) { cout<<"输入第"<<j+1<<"道题的答案:"; cin>>result[j]; if(result[j]==sum[j]) { cout<<"正确"<<endl; } else { while(result[j]!=sum[j]) { cout<<"错误,请重试"<<endl; cout<<"输入第"<<j+1<<"道题的答案:"; cin>>result[j]; if(result[j]==sum[j]) { cout<<"正确"<<endl; } } } } return 0; }
四、结果截图
五、实验总结
创建sum和数组是int型后发现小数相加是double型的,而double转换成int会丢失精度,所以把sum数组变成了double型。
以后要注意变量类型的要求。