四则运算的扩展

扩展:

  接受用户输入答案,并显示结果和答对个数。

附上代码:

  1 #include<iostream>
  2 #include<conio.h>
  3 #include<cstdlib>
  4 #include<ctime>
  5 #include <iomanip>
  6 using namespace std;
  7
  8 void Rand_Cal_one(int digits[],char characters[],int range)  //随机产生运算数(包含乘除)
  9 {
 10     for(int i=0;i<6;i++){
 11         if(i<3){
 12             digits[i]=rand()%range;//生成四则运算的计算随机数
 13             continue;
 14         }
 15         else if(i<5){
 16             digits[i]=rand()%4;//随机产生标志判断计算符号
 17             continue;
 18         }
 19         else{
 20             digits[i]=rand()%2;//随机产生标志数判断括号位置
 21         }
 22     }
 23 }
 24
 25 void Rand_Cal_two(int digits[],char characters[],int range)  //随机产生运算数(不含乘除)
 26 {
 27     for(int i=0;i<6;i++){
 28         if(i<3){
 29             digits[i]=rand()%range;//生成四则运算的计算随机数
 30             continue;
 31         }
 32         else if(i<5){
 33             digits[i]=rand()%2;//随机产生标志判断计算符号
 34             continue;
 35         }
 36         else{
 37             digits[i]=rand()%2;//随机产生标志数判断括号位置
 38         }
 39     }
 40 }
 41
 42 void Demo(int digits[],char characters[],char * Arithmetic_arr[],double results[],int m,int n) //产生符合要求的运算式
 43 {
 44     char character1,character2;
 45     int character3,character4,range;
 46     cout<<"请输入数字范围(最大值):"<<endl;
 47     cin>>range;
 48     cout<<"请选择是否带括号: Y表示带括号,N表示不带括号"<<endl;
 49     cin>>character1;
 50     cout<<"请选择是否有乘除: Y表示有乘除,N表示无乘除"<<endl;
 51     cin>>character2;
 52     cout<<"请选择每行容纳算是数量:"<<endl;
 53     cin>>character3;
 54
 55     if(character3!=1){
 56         cout<<"请选择行间距(1-n):"<<endl;
 57         cin>>character4;
 58     }
 59
 60     cout<<"-------------------"<<m<<"道算式题如下-------------------------"<<endl;
 61
 62     for(int k=0; k<m; k++){
 63         int flag=k+1;
 64 P:
 65         if (character2==‘Y‘){
 66             Rand_Cal_one(digits,characters,range);
 67         }
 68         else{
 69             Rand_Cal_two(digits,characters,range);
 70         }
 71         Arithmetic_arr[k]=new char[n];
 72         if(k!=0){
 73             for(int i=0;i<k;i++){
 74                 if( digits[0]==Arithmetic_arr[i][0]                    //避免重复
 75                     && characters[digits[3]]==Arithmetic_arr[i][1]
 76                     && digits[1]==Arithmetic_arr[i][2]
 77                     && characters[digits[4]]==Arithmetic_arr[i][3]
 78                     && digits[2]==Arithmetic_arr[i][4]
 79                     &&digits[5]==Arithmetic_arr[i][5]){
 80
 81                     goto P;
 82                 }
 83             }
 84         }
 85
 86         Arithmetic_arr[k][0]=digits[0];        //第一个操作数
 87         Arithmetic_arr[k][1]=characters[digits[3]];//第一个运算符
 88         Arithmetic_arr[k][2]=digits[1];        //第二个操作数
 89         Arithmetic_arr[k][3]=characters[digits[4]];//第二个运算符
 90         Arithmetic_arr[k][4]=digits[2];        //第三个操作数
 91         Arithmetic_arr[k][5]=digits[5];   //存放括号位置标志
 92
 93         if (character1==‘Y‘){
 94             double result1=1,result2=1;
 95             switch(digits[5]){
 96             case 0:
 97                   //计算括号里面的值,并赋值在result中
 98                 switch(characters[digits[3]])
 99                 {
100                 case ‘+‘:result1=(double)digits[0]+(double)digits[1];break;
101                 case ‘-‘:result1=(double)digits[0]-(double)digits[1];break;
102                 case ‘*‘:result1=(double)digits[0]*(double)digits[1];break;
103                 case ‘/‘:result1=(double)digits[0]/(double)digits[1];break;
104                 }
105                 switch(characters[digits[4]])
106                 {
107                 case ‘+‘:results[k]=(double)result1+(double)digits[2];break;
108                 case ‘-‘:results[k]=(double)result1-(double)digits[2];break;
109                 case ‘*‘:results[k]=(double)result1*(double)digits[2];break;
110                 case ‘/‘:results[k]=(double)result1/(double)digits[2];break;
111                 }
112                 if((characters[digits[3]]==‘/‘&&digits[1]==0)||(characters[digits[4]]==‘/‘&&digits[2]==0))//数学规则,商不能为0
113                 {
114                     goto P;
115                 }
116                 else
117                 {
118                     if((characters[digits[3]]==‘+‘||characters[digits[3]]==‘-‘)        //括号在前
119                         &&(characters[digits[4]]==‘*‘||characters[digits[4]]==‘/‘))    //排除无用括号
120                     {
121                         cout<<"(";
122                         if((int)Arithmetic_arr[k][0]<0)
123                         {
124                             cout<<"("<<(int)Arithmetic_arr[k][0]<<")";
125                         }
126                         else
127                             cout<<(int)Arithmetic_arr[k][0];
128                         cout<<Arithmetic_arr[k][1];
129                         if((int)Arithmetic_arr[k][2]<0)
130                         {
131                             cout<<"("<<(int)Arithmetic_arr[k][2]<<")";
132                         }
133                         else
134                             cout<<(int)Arithmetic_arr[k][2];
135                         cout<<")"<<Arithmetic_arr[k][3];
136                         if((int)Arithmetic_arr[k][4]<0)
137                         {
138                             cout<<"("<<(int)Arithmetic_arr[k][4]<<")";
139                         }
140                         else
141                             cout<<(int)Arithmetic_arr[k][4];
142                         cout<<"=";
143
144                         if(flag%character3==0) {cout<<endl;}
145                         else {cout<<setw(character4);}
146
147                         break;
148                     }
149                     else
150                     {
151                         goto P;
152                     }
153                 }
154
155             case 1:  //括号在后
156                 switch(characters[digits[4]])
157                 {
158                 case ‘+‘:result2=(double)digits[1]+(double)digits[2];break;
159                 case ‘-‘:result2=(double)digits[1]-(double)digits[2];break;
160                 case ‘*‘:result2=(double)digits[1]*(double)digits[2];break;
161                 case ‘/‘:result2=(double)digits[1]/(double)digits[2];break;
162                 }
163                 switch(characters[digits[3]])
164                 {
165                 case ‘+‘:results[k]=(double)digits[0]+(double)result2;break;
166                 case ‘-‘:results[k]=(double)digits[0]-(double)result2;break;
167                 case ‘*‘:results[k]=(double)digits[0]*(double)result2;break;
168                 case ‘/‘:results[k]=(double)digits[0]/(double)result2;break;
169                 }
170                 if((characters[digits[4]]==‘/‘&&digits[2]==0)||(characters[digits[3]]==‘/‘&&result2==0))    //数学规则,商不能为0
171                 {
172                     goto P;
173                 }
174                 else
175                 {
176                     if((characters[digits[3]]==‘*‘&&(characters[digits[4]]==‘+‘||characters[digits[4]]==‘-‘))
177                         ||(characters[digits[3]]==‘/‘&&(characters[digits[4]]==‘+‘||characters[digits[4]]==‘-‘||characters[digits[4]]==‘*‘))
178                         ||(characters[digits[3]]==‘-‘&&(characters[digits[4]]==‘+‘||characters[digits[4]]==‘-‘)))    //排除无用括号
179                     {
180                         if((int)Arithmetic_arr[k][0]<0)
181                         {
182                             cout<<"("<<(int)Arithmetic_arr[k][0]<<")";
183                         }
184                         else
185                             cout<<(int)Arithmetic_arr[k][0];
186                         cout<<Arithmetic_arr[k][1];
187                         cout<<"(";
188                         if((int)Arithmetic_arr[k][2]<0)
189                         {
190                             cout<<"("<<(int)Arithmetic_arr[k][2]<<")";
191                         }
192                         else
193                             cout<<(int)Arithmetic_arr[k][2];
194                         cout<<Arithmetic_arr[k][3];
195                         if((int)Arithmetic_arr[k][4]<0)
196                         {
197                             cout<<"("<<(int)Arithmetic_arr[k][4]<<")";
198                         }
199                         else
200                             cout<<(int)Arithmetic_arr[k][4];
201                         cout<<")"<<"=";
202
203                         if(flag%character3==0) {cout<<endl;}
204                         else {cout<<setw(character4);}
205                         break;
206                     }
207
208                     else
209                     {
210                         goto P;
211                     }
212                 }
213             }
214         }
215         else{
216
217             if((int)Arithmetic_arr[k][0]<0)
218             {
219                 cout<<"("<<(int)Arithmetic_arr[k][0]<<")";
220             }
221             else
222                 cout<<(int)Arithmetic_arr[k][0];
223             cout<<Arithmetic_arr[k][1];
224             if((int)Arithmetic_arr[k][2]<0)
225             {
226                 cout<<"("<<(int)Arithmetic_arr[k][2]<<")";
227             }
228             else
229                 cout<<(int)Arithmetic_arr[k][2];
230             cout<<Arithmetic_arr[k][3];
231             if((int)Arithmetic_arr[k][4]<0)
232             {
233                 cout<<"("<<(int)Arithmetic_arr[k][4]<<")";
234             }
235             else
236                 cout<<(int)Arithmetic_arr[k][4];
237             cout<<"=";
238             if(flag%character3==0) {cout<<endl;}
239             else {cout<<setw(character4);}
240         }
241     }
242 }
243
244 int main()
245 {
246     while(1)
247     {
248         cout<<"------------------小学生四则运算产生器-------------------"<<endl;
249
250         srand((unsigned)time(NULL));    //为rand()函数生成不同的随机种子
251
252         int num1,num2=6,num3;
253
254         cout<<"请输入定制数目(输入零结束):"<<endl;      //题目数
255
256         cin>>num1;
257
258         cout<<"答案小数精确度:"<<endl;      //题目数
259
260         cin>>num3;
261
262         if(num1==0){
263
264             cout<<"---------------------谢谢使用!!!----------------------"<<endl;
265             exit(0);
266         }
267
268         char ** Arithmetic_arr=new char*[num1];  //存放运算式动态数组
269
270         double * results=new double[num1];
271
272         double * answer=new double[num1];  //正确答案数组results与接收答案数组answer
273
274         int digits[6];                    //存放计算的随机数字的数组,前三个为随机运算数字,第四第
275                                         //五为随机产生运算符号标志数,第六为判断括号位置标志数。
276         int count=0;
277
278         char characters[6]={‘+‘,‘-‘,‘*‘,‘/‘,‘(‘,‘)‘};    //存放加减乘除及括号等字符数组
279
280         Demo(digits,characters,Arithmetic_arr,results,num1,num2);  //调用计算函数
281
282         delete [] Arithmetic_arr;  //释放动态数组空间
283
284         cout<<"---------------------------------------------------------"<<endl;
285
286         cout<<"请输入结果:"<<endl;
287
288         for(int i=0;i<num1;i++)
289         {
290             cout<<"第"<<i+1<<"题答案是:    ";
291             cin>>answer[i];
292         }
293         for(int j=0;j<num1;j++)
294         {
295             if(results[j]==answer[j])
296             {
297                 count++;
298             }
299         }
300         cout<<"---------------------------------------------------------"<<endl;
301         cout<<"按回车显示答案!"<<endl;
302         cout<<"---------------------------------------------------------"<<endl;
303
304         getch();
305
306         for(int k=0;k<num1;k++)
307         {
308             cout<<"第"<<k+1<<"题正确答案是:    "<<fixed<<setprecision(num3)<<results[k]<<endl;
309         }
310         cout<<"---------------------------------------------------------"<<endl;
311
312         cout<<"答对的题目个数为"<<count+1<<"个"<<endl;
313
314         cout<<endl<<"------------------请输入任意键继续!---------------------"<<endl;
315
316         getch();
317
318         system("CLS");
319     }
320     return 0;
321 }

运行结果截图:

结论:

  程序的结构很重要,良好的可扩展性便于日后添加新的功能。

时间: 2024-10-12 02:32:53

四则运算的扩展的相关文章

四则运算2扩展

一.题目 我在这次扩展中加入了实现让程序能接受用户输入答案,并判定对错,最后给出总共对/错的数量. 二.设计思想 接收用户输入的数,用if结构判断,对则继续,错则给出正解再继续. 有余数除法部分加入类型转换,以实现浮点型答案输出. 增加一个全局变量,对结果对错计数. 因要逐题输入答案,所以去掉分列显示. 三.代码 1 #include<iostream.h> 2 #include<stdlib.h> 3 #include<time.h> 4 5 static int i

四则运算2扩展---c++

题目:让程序能接受用户输入答案,并判定对错.最后给出总共对/错 的数量. 一.设计思想 1.存储用户输入答案,与正确答案比较得出总共对错数量. 二.源程序代码 1 #include<iostream.h> 2 #include<stdlib.h> 3 #include "time.h" 4 #include<stdio.h> 5 int main () 6 { 7 int a,b,c,f,j,i,t,num,l,jj,cc,fw;//i,j,t是计数

二年级四则运算的扩展,可以指定题目数量,并可支持真分数的运算

新加的要求: 1.可指定题目数量: 2.支持真分数运算. 代码编写: #include<stdio.h>  #include<Windows.h>  #include<time.h>  void main()  {      int a, b, c, d,i,m,n;      float p, q;      srand(unsigned( time(NULL)));      for (i = 0; i < 30; i++)      {         a 

小学二年级三十道四则运算题目-扩展运算,添加指定题目数量和支持真分数运算

代码: #include<stdio.h>  #include<Windows.h>  #include<time.h>  void main()  {      int a, b, c, d,i,m,n;      float p, q;      srand(unsigned( time(NULL)));      for (i = 0; i < 30; i++)      {         a = rand() % 100;         b = ran

软件工程——四则运算3(C#)

一.设计思想 设计两个窗体,在第一个窗体中选择功能参数,在第二个窗体中显示所出题目. 二.源代码 Form1.cs: 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Window

云办公-为移动互联网而生的逐浪CMS2 X2.2发布啦

伴随2015新年的钟声,作为国内领无的WEB内核与云计算软件厂商,Zoomla!逐浪软件团队北京.上海.南昌三地团队齐心协力,发布史上功能最强.应用最便捷.使用体验最佳.更加进一步开放云计算与线上办公的新一代产品:Zoomla!逐浪CMS2 x2.2. Zoomla!逐浪CMS2 x2.2是整个CMS2产品线有史以来最重要也是最优秀的产品版本,我们自豪于领先业界于一年之初发布这个产品,更为不到一个月的时间两度更新感到荣耀,为中国站长和开发者服务,是逐浪软件的光荣使命. 这一个产品充体现了逐浪软件

NO.5章 入门(数学问题)

NO.5章 入门篇(3)--数学问题 1. 最大公约数 最小公倍数 1)最大公约数 (GCD) 2)最小公倍数 (LCM) 2. 分数四则运算 1)表示与化简 2)四则运算 3)输出 3. 素数 1)判断 2)获取 4. 质因子分解 5. 大整数运算 1)存储 2)四则运算 6. 扩展欧几里得算法 7. 组合数 原文地址:https://www.cnblogs.com/claremore/p/8823822.html

四则运算3(四则运算2程序的扩展)

题目:选一个方向,将四则运算2程序进行扩展: 方向:让程序能够接受用户输入的答案,并判定对错,最后输出做对题的数量: 思路:将每道题的正确结果保存在数组daan[]中,将用户给出的答案定义为result.当(result==daan[])时,输出“用户所给答案正确”,否则输出“答案错误,正确答案为daan[]” 具体程序代码为: 1 #include<iostream.h> 2 #include<stdlib.h>//使用随机函数 3 #include<time.h>/

四则运算扩展

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms; namespace 第三次作业{ public partial class Form1 : Form { public static int Co