• 改进后的四则运算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 }
  • 相关阅读:
    pod 安装
    Mac百度云破解限速-修复选中没有导出下载
    swift -SnapKit一些基本使用
    xcode 显示多个重复模拟器
    xcode选择模拟器显示No Scheme
    Xcode删除指定版本的模拟器
    javaScript基础
    Dao模式多表联查
    SQLServer数据库
    数据库错题分析
  • 原文地址:https://www.cnblogs.com/me-tts/p/5272772.html
Copyright © 2020-2023  润新知