四则运算2

1.任务要求:对之前的自动出题系统提出了新的要求:

    (1)、题目避免重复;(2)、可定制(数量/打印方式);(3)可以控制下列参数:是否有乘除法、是否有括号(最多可以支持是个数参与计算)、数值范围、加减有无负数、       除     法有无余数、

2.设计思路:(1)主函数中有一个大循环,其中主框架是一个switch语句构成的,可以在四中运算中设置不同的要求并加以 实现。并使程序可以循环运行,即用户可以循环使用;

                     (2)避免重复:可以使用srand函数确保产生的随机数不相同;

                     (3)定制数量/打印方式:每一次循环会出n道题目,每行有num道题目,添加变量N,num,其数值由用户确定;

                     (4)乘除法选择:有无乘除法,加一个变量mul,设置其值并在switch语句中使用,若有乘除法则执行rand()%4,产生 四种运算符号,反之产生加减两种运算;

                    (5)数值范围:两个运算数为可以随便设置范围,其中用判断语句确保除法中除数不等于0;减法中被减数大于减数;

                   (6)除法是否有余数/是否支持分数:添加函数,利用判断语句设定,当题目是除法时如果不能除尽则重新生成题目,直到余数为零,在主函数合适位置处调用添加函                         数,使用户可以进行选择题目中是否包含分数的运算数,如果包括可以重新设置两个运算数变量的格式改为分数,反之不用做处理,并对此函数进行调用

3  源代码

 
  
  1 #include <iostream>
  2 #include<stdlib.h>
  3 #include <time.h>
  4 #include<iomanip>
  5 using namespace std;
  6 
  7 void main()
  8 {
  9     cout << "欢迎进入四则运算出题系统!" << endl;
 10     cout << "*****************************************" << endl;
 11     char g='Y',mod;
 12     while (g == 'Y')
 13     {
 14         cout << "此系统分为两个模块,请进行选择:(A.整数 or B.分数)";
 15         cin >> mod;
 16         if (mod == 'A')
 17         {
 18             int N,max,min,num,j;
 19             char mul,neg,rem;    
 20             srand((unsigned)time(NULL));
 21             cout << "请输入要生成的题目数量N:";
 22             cin >> N;
 23             cout << "打印参数num(每一行有num道题目):";
 24             cin >> num;
 25             cout << "运算数的范围上限max:";
 26             cin >> max;
 27             cout << "运算数的范围下限min:";
 28             cin >> min;
 29             cout << "您是否希望题目中出现乘除运算?(Y(是)or N(否)):";
 30             cin >> mul;
 31             cout << "您是否希望减法题目中出现负数?(Y(是)or N(否)):";
 32             cin >> neg;
 33             cout << "您是否希望除法题目中出现余数?(Y(是)or N(否)):";
 34             cin >> rem;
 35             for (int k=0;k<N;k++)
 36             {
 37                 int a = rand()%(max-min+1) + min ;
 38                 int b = rand()%(max-min+1) + min ;
 39                 if (mul == 'Y')
 40                 {
 41                     j = rand()%4 + 1;
 42                 }
 43                 if (mul == 'N')
 44                 {
 45                     j = rand()%2 + 1;
 46                 }
 47                 switch(j)
 48                 {
 49                 case 1:
 50                     cout << setw(3) << a << "+" << setw(3) << b << "=" ;
 51                     break;
 52                 case 2:
 53                     if (neg == 'N')
 54                     {
 55                         while (a <= b)
 56                         {
 57                             a = rand()%(max-min+1) + min ;
 58                             b = rand()%(max-min+1) + min ; 
 59                         } 
 60                         cout << setw(3) << a << "-" << setw(3) << b << "=" ;break;
 61                     } 
 62                     else
 63                     {
 64                         cout << setw(3) << a << "-" << setw(3) << b << "=" ;break;
 65                     }
 66                 case 3:
 67                     cout << setw(3) << a << "*" << setw(3) << b << "=" ;
 68                     break;
 69                 case 4:
 70                     while (b == 0)
 71                     {
 72                         b = rand()%(max-min+1) + min ;
 73                     }
 74                     if (rem == 'N')
 75                     {
 76                         while((a % b)!= 0)
 77                         {
 78                             a = rand()%(max-min+1) + min ;
 79                             b = rand()%(max-min+1) + min ;
 80                         }
 81                         cout << setw(3) << a << "/" << setw(3) << b << "=" ;break;
 82                     }
 83                     else
 84                     {
 85                         cout << setw(3) << a << "/" << setw(3) << b << "=" ;break;
 86                     }
 87                 }
 88                 if ( (k+1) % num == 0)
 89                 {    
 90                     cout << endl;
 91                 }
 92                 else
 93                 {
 94                     cout << " ";
 95                 }
 96             }
 97         }
 98         else
 99         {
100             int N,max,min,num,j;
101             char mul,neg;    
102             srand((unsigned)time(NULL));
103             cout << "请输入要生成的题目数量N:";
104             cin >> N;
105             cout << "打印参数num(每一行有num道题目):";
106             cin >> num;
107             cout << "运算数的分子和分母的范围上限max:";
108             cin >> max;
109             cout << "运算数的分子和分母的范围下限min:";
110             cin >> min;
111             cout << "您是否希望题目中出现乘除运算?(Y(是)or N(否)):";
112             cin >> mul;
113             cout << "您是否希望减法题目中出现负数?(Y(是)or N(否)):";
114             cin >> neg;
115             for (int k=0;k<N;k++)
116             {
117                 int a1 = rand()%(max-min+1) + min ;
118                 int a2 = rand()%(max-min+1) + min ;
119                 int b1 = rand()%(max-min+1) + min ;
120                 int b2 = rand()%(max-min+1) + min ;
121                 while(a2==0 || b2==0)
122                 {
123                     a2 = rand()%(max-min+1) + min ;
124                     b2 = rand()%(max-min+1) + min ;
125                 }
126                 if (mul == 'Y')
127                 {
128                     j = rand()%4 + 1;
129                 }
130                 if (mul == 'N')
131                 {
132                     j = rand()%2 + 1;
133                 }
134                 switch(j)
135                 {
136                 case 1:
137                     cout << "" << setw(2) << a1 << "/" << setw(2) << a2 << "" << "+" << "" << setw(2) << b1 << "/" << setw(2) << b2 << "" << "=";
138                     break;
139                 case 2:
140                     cout << "" << setw(2) << a1 << "/" << setw(2) << a2 << "" << "-" << "" << setw(2) << b1 << "/" << setw(2) << b2 << "" << "=";
141                     break;
142                 case 3:
143                     cout << "" << setw(2) << a1 << "/" << setw(2) << a2 << "" << "*" << "" << setw(2) << b1 << "/" << setw(2) << b2 << "" << "=";
144                     break;
145                 case 4:
146                     while (b1 == 0)
147                     {
148                         b1 = rand()%(max-min+1) + min ;
149                     }
150                     cout << "" << setw(2) << a1 << "/" << setw(2) << a2 << "" << "*" << "" << setw(2) << b1 << "/" << setw(2) << b2 << "" << "=";
151                     break;
152                 }
153                 if ( (k+1) % num == 0)
154                 {    
155                     cout << endl;
156                 }
157                 else
158                 {
159                     cout << " ";
160                 }
161             }
162 }
163 cout << "您是否要继续答题?请输入:(Y(是)or N(否))";
164 cin >> g;
165 cout << "*****************************************" << endl;
166 }
167 
168 cout << "感谢您的使用,再见!";
169 }
 
  

       由于时间有限、自己能力欠缺、 在是否有括号这一功能上并没有显现。在以后的时间里自己会对这程序做出改进。

 

  

转载于:https://www.cnblogs.com/Lw-1573/p/5268967.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值