改进后的四则运算2

对上一个程序的一些错误的解决办法:

①问题:num2每次生成的数都一样

解决办法:因为粗心,忘了写上

num2 = random() % (max - min + 1) + min;

这一语句。

②问题:输出中出现“?”

解决办法:将输出语句中的“÷”改为“/”

③对于要求中余数、负数,我还是没有能够实现,不过我会继续改进的

代码:

  1 #include <iostream>
  2 #include <time.h>
  3 #include <stdio.h>
  4 #include <stdlib.h>
  5 #include <iomanip>
  6 #include <math.h>
  7 #include <fstream>
  8 #include <string>
  9 #define random()(rand()%1000)
 10 using namespace std;
 11 
 12 
 13 //数字转换为字符串
 14 string int_string(int number)
 15 {
 16     int value = abs(number);//取绝对值
 17     char str[100];
 18     _itoa_s(value, str, 10); //运用itoa()函数将int型整数转换为字符串 
 19     string str_= str;
 20     return str_;
 21 }
 22 //算式转换为字符串
 23 string group(string str1, string str2, char m)  // group:算式组合
 24 {
 25     string Equation;       // equation:算式
 26     Equation = str1 + m + str2;
 27     return Equation;
 28 }
 29 //生成运算符
 30 char mark(int opt)
 31 {
 32     int opt1, a;
 33     char symbol[1]; // 符号数组
 34     if (opt == 0)
 35     {
 36         opt1 = 2;
 37     }
 38     if (opt == 1)
 39     {
 40         opt1 = 4;
 41     }
 42     a = random() % opt1+1; //随机生成1-2或1-4的数,随opt的值而定,opt意为是否含有乘除法
 43     if (a == 1) symbol[0] = '+';
 44     if (a == 2) symbol[0] = '-';
 45     if (a == 3) symbol[0] = '*';
 46     if (a == 4) symbol[0] = '/';
 47     return symbol[0];
 48 }
 49 //主函数
 50 void main()
 51 {
 52     srand((int)time(NULL));     //设置时间种子,每次执行种子不同,生成不同的随机数
 53     int num1, num2,minus;
 54     int    opt, bracket, output, max, min, amount, control, b, c,d;
 55     string str_num1, str_num2, value; //数字-字符串
 56     cout << "是否需要包含乘除法?1(有),0(没有):" << endl;
 57     cin >> opt;    //opt:选择是否含有乘除法
 58     /*cout << "是否需要包含负数1(有),0(没有):" << endl;
 59     cin >> minus; */
 60     cout << "是否含有括号?1(有),0(没有):" << endl;
 61     cin >> bracket;
 62     cout << "题目是否要在文件中输出?1(是),0(不是):" << endl;
 63     cin >> output;
 64     cout << "请输入数字范围:(格式为:最小数 空格 最大数)" << endl;
 65     cin >> max>>min;
 66     cout << "请输入出题数量:" << endl;
 67     cin >> amount;
 68     string equation[1000]; //定义数组
 69     char symbol;
 70     ofstream fout;
 71     /*if (opt == 1)
 72     {
 73         cout << "除法有无余数,1(有),0(无)" << endl;
 74             cin >> remainder;
 75     }*/
 76     if ( output == 1 )
 77     {
 78         fout.open("output.txt");
 79         fout << amount << "道四则运算题如下:" << endl;
 80     }
 81     else
 82     {
 83         cout << amount << "道四则运算题如下:" << endl;
 84     }
 85     for (int i = 0; i<amount; i++)  //为输出规定题数
 86     {
 87         num1 = random() % (max - min + 1) + min;// 随机生成min-max的整数
 88         num2 = random() % (max - min + 1) + min;// 随机生成min-max的整数
 89         control = random() % 9 + 2;  //控制是几个数的运算式,最多支持10个数的运算式
 90         symbol = mark(opt);
 91         /*if (minus == 0)      //本来要加负数的,思路有点不清晰,以后改进
 92         {
 93             str_num1 = int_string(num1);
 94             str_num2 = int_string(num2);
 95         }
 96         if (minus == 1)
 97         {
 98             d = random() % 2; //随机生成0-1的数
 99             if (d == 0)
100             {
101                 str_num1 = int_string(num1);
102                 str_num2 = '-' + str_num2;
103             }
104         }*/
105         str_num1 = int_string(num1);
106         str_num2 = int_string(num2);
107         equation[i] = group(str_num1, str_num2, symbol);
108         if (control >= 2)
109         {
110             for (; control >= 2; control--)
111             {
112                 symbol = mark(opt);
113                 str_num1 = equation[i];
114                 if (bracket == 1)
115                 {
116                     b = random() % 2; //随机生成0-2的数
117                     if (b == 0)  //如果b=0,就在字符串str_num1的左右加上括号
118                     {
119                         str_num1 = '(' + str_num1 + ')';
120                     }
121                 }
122                 symbol = mark(opt);
123                 num2 = random() % (max - min + 1) + min;// 随机生成min-max的整数
124                 str_num2 = int_string(num2);
125                 b = random() % 2;
126                 if (b == 0)
127                 {
128                     value = str_num1;
129                     str_num1 = str_num2;
130                     str_num2 = value;
131                 }
132                 equation[i] = group(str_num1, str_num2, symbol);
133             }
134         }
135         //判断是否重复
136         int repeat = 0; //repeat:重复 
137         for (c = 0; c<i; c++)
138         {
139             if (equation[c] == equation[i])
140             {
141                 i = i - 1;
142                 repeat = 1;
143                 break;
144             }
145         }
146         if (repeat != 1)//若不重复,则输出 
147         {
148             if (output == 1)
149             {
150                 fout << equation[i] << "=" << endl;
151             }
152             else
153             {
154                 cout << equation[i] << "=" << endl;
155             }
156         }
157 
158     }
159     if (output == 1) //输出到文件
160     {
161         fout.close();
162     }
163 }
原文地址:https://www.cnblogs.com/me-tts/p/5272772.html