四则运算3
一、题目要求
在四则运算2的基础上,增加功能:让程序能接受用户输入答案,并判定对错。最后给出总共对/错的数量。
二、设计思想
在上次实验的基础上,增加判断用户输入答案正确与否的判断,最后给出总共对/错的数量。
三、源程序代码
1 #include<iostream.h> 2 #include<stdlib.h> 3 #include<time.h> 4 int display(int number,int mul,int num,int neg,int remainder)//打印方式控制输出列数 5 { 6 int *a=new int[number]; 7 int *b=new int[number]; 8 int *c=new int[number]; 9 int m;//控制题目避免重复 10 int t;//中间变量 11 int n1=0;//保存正确题目数量 12 int n2=0;//保存错误题目数量 13 double result;//用户输入的题目结果 14 for(int i=0;i<number;i++)//随机两个生成运算操作数 15 { 16 m=1;//初始化 17 a[i]=rand()%num; 18 b[i]=rand()%num; 19 if(mul==0)//没有乘除法 20 { 21 c[i]=rand()%2;//随机生成0-1的数字,分别表示加减 22 } 23 else if(mul==1)//有乘除法 24 { 25 c[i]=rand()%4;//随机生成0-3的数字,分别表示加减乘 26 } 27 for(int j=0;j<i;j++) 28 { 29 if(a[j]==a[i]&&b[j]==b[i]&&c[j]==c[i])//比较新生成的操作数与原来的是否相同 30 { 31 i=i-1; 32 m=0; 33 } 34 } 35 while(m)//若不同则输出 36 { 37 switch(c[i]) 38 { 39 case 0: 40 cout<<a[i]<<"+"<<b[i]<<"="<<endl; 41 cout<<"请输入结果:"<<endl; 42 cin>>result; 43 if(result==a[i]+b[i]) 44 { 45 cout<<"回答正确!"<<endl; 46 n1++; 47 } 48 else 49 { 50 cout<<"回答错误!"<<endl; 51 cout<<"正确结果为:"<<a[i]+b[i]<<endl; 52 n2++; 53 } 54 break; 55 case 1: 56 if(neg==0)//减法没有负数 57 { 58 if(a[i]<b[i]) 59 { 60 t=a[i]; 61 a[i]=b[i]; 62 b[i]=t; 63 } 64 cout<<a[i]<<"-"<<b[i]<<"="<<endl; 65 cout<<"请输入结果:"<<endl; 66 cin>>result; 67 if(result==a[i]-b[i]) 68 { 69 cout<<"回答正确!"<<endl; 70 n1++; 71 } 72 else 73 { 74 cout<<"回答错误!"<<endl; 75 cout<<"正确结果为:"<<a[i]-b[i]<<endl; 76 n2++; 77 } 78 break; 79 } 80 81 else if(neg==1)//减法有负数 82 { 83 cout<<a[i]<<"-"<<b[i]<<"="<<endl; 84 cout<<"请输入结果:"<<endl; 85 cin>>result; 86 if(result==a[i]-b[i]) 87 { 88 cout<<"回答正确!"<<endl; 89 n1++; 90 } 91 else 92 { 93 cout<<"回答错误!"<<endl; 94 cout<<"正确结果为:"<<a[i]-b[i]<<endl; 95 n2++; 96 } 97 break; 98 } 99 100 case 2: 101 cout<<a[i]<<"*"<<b[i]<<"="<<endl; 102 cout<<"请输入结果:"<<endl; 103 cin>>result; 104 if(result==a[i]*b[i]) 105 { 106 cout<<"回答正确!"<<endl; 107 n1++; 108 } 109 else 110 { 111 cout<<"回答错误!"<<endl; 112 cout<<"正确结果为:"<<a[i]*b[i]<<endl; 113 n2++; 114 } 115 break; 116 case 3: 117 if(b[i]==0)//分母为零则不计入总数 118 { 119 i=i-1;break; 120 } 121 else if(remainder==0)//除法没有余数 122 { 123 if(a[i]%b[i]==0) 124 { 125 cout<<a[i]<<"/"<<b[i]<<"="<<endl; 126 cout<<"请输入结果:"<<endl; 127 cin>>result; 128 if(result==a[i]/b[i]) 129 { 130 cout<<"回答正确!"<<endl; 131 n1++; 132 } 133 else 134 { 135 cout<<"回答错误!"<<endl; 136 cout<<"正确结果为:"<<a[i]/b[i]<<endl; 137 n2++; 138 } 139 break; 140 } 141 else 142 { 143 i=i-1;break; 144 } 145 } 146 else if(remainder==1)//除法有余数 147 { 148 if(a[i]%b[i]!=0) 149 { 150 cout<<a[i]<<"/"<<b[i]<<"="<<endl; 151 cout<<"请输入结果:"<<endl; 152 cin>>result; 153 if(result==(double)a[i]/b[i]) 154 { 155 cout<<"回答正确!"<<endl; 156 n1++; 157 } 158 else 159 { 160 cout<<"回答错误!"<<endl; 161 cout<<"正确结果为:"<<(double)a[i]/b[i]<<endl; 162 n2++; 163 } 164 break; 165 } 166 else 167 { 168 i=i-1;break; 169 } 170 } 171 172 /* if((i+1)%l==0) 173 { 174 cout<<endl; 175 } 176 else 177 { 178 cout<<"\t"; 179 } 180 */ 181 } 182 break;//跳出循环 183 } 184 } 185 cout<<"您一共答对"<<n1<<"道题目"<<endl; 186 cout<<"您一共答错"<<n2<<"道题目"<<endl; 187 return 0; 188 } 189 void main() 190 { 191 int number;//题目数量 192 // int l;//输出的列数 193 int mul;//乘除法 194 int num;//数值范围 195 int neg;//负数 196 int remainder;//余数 197 int c;//循环变量 198 while(c) 199 { 200 srand((unsigned) time(NULL));//调用随机函数发生器 201 cout<<"---------------------------------"<<endl; 202 cout<<"| 四则运算 |"<<endl; 203 cout<<"---------------------------------"<<endl; 204 cout<<"请输入要打印的题目数量:"<<endl; 205 cin>>number; 206 while(number<0) 207 { 208 cout<<"输入错误!"<<endl; 209 cout<<"请输入要打印的题目数量:"<<endl; 210 cin>>number; 211 } 212 // cout<<"请输入要输出的列数(1-10):"<<endl; 213 // cin>>l; 214 cout<<"是否有乘除法(0表示没有;1表示有)"<<endl; 215 cin>>mul; 216 while(mul!=0&&mul!=1) 217 { 218 cout<<"输入错误,请重新输入!是否有乘除法(0表示没有;1表示有)"<<endl; 219 cin>>mul; 220 } 221 if(mul==1) 222 { 223 cout<<"除法有无余数(0表示没有;1表示有)"<<endl; 224 cin>>remainder; 225 while(remainder!=0&&remainder!=1) 226 { 227 cout<<"输入错误,请重新输入!除法有无余数(0表示没有;1表示有)"<<endl; 228 cin>>remainder; 229 } 230 } 231 cout<<"请输入正整数的数值范围(即最大数):"<<endl; 232 cin>>num; 233 cout<<"减法有无负数(0表示没有;1表示有)"<<endl; 234 cin>>neg; 235 while(neg!=0&&neg!=1) 236 { 237 cout<<"输入错误,请重新输入!"<<endl; 238 cout<<"减法有无负数(0表示没有;1表示有)"<<endl; 239 cin>>neg; 240 } 241 display(number,mul,num,neg,remainder); 242 cout<<"继续请输入1,退出请输入0"<<endl; 243 cin>>c; 244 } 245 }
四、运行结果截图
五、日志记录
六、实验总结
通过本次实验,我又发现了自己在编程上的不足,由于之前的四则运算2写得有点乱,导致它的扩展也不是很清楚。
把所有参数都写到一个函数里,不利于扩展。以后应该多加注意。而且程序还有些不足之处,例如无法定制打印格式,
对于有余数的情况,只能输出小数,而不能显示余数。