用C++实现简单随机二元四则运算

让我们想看看二元四则运算都需要实现什么:

(1) 定制题目数量

(2) 是否有乘除法

(3) 题目数值范围

(4) 加减有无负数

(5) 除法有无余数

(6) 是否支持分数(真分数、假分数…)

(7) 是否支持小数(精确到多少位?)

(8) 打印中每行的间隔

为了实现以上功能,并且为了便于后期实现功能拓展,我们可以将其封装成类,通过在外界设置类的参数,实现不同的功能。可以将类定义如下:

 1 class CTitle
 2 {
 3 public:
 4     CTitle();
 5     ~CTitle();
 6     void setTitleCount(int titleCount);       // 设置题量
 7     void setMD(int hasMD);                    // 设置乘除法
 8     void setBracket(int hasBracket);          // 设置括号
 9     void setNumRand(int numRand);             // 设置数值范围
10     void setMinus(int hasMinus);              // 设置负号
11     void setResidue(int hasResidue);          // 设置余数
12     void setFraction(int hasFraction);        // 设置分数
13     void setFractionType(int fractionType);   // 设置是否支持假分数
14     void setDecimal(int hasDecimal);          // 设置小数
15     void setDecimalLong(int decimalLong);     // 设置小数位数
16     void newTitle();                          // 新建题目
17 private:
18     int titleCount;       //    题目数量
19     int hasMD;            //    是否有乘除法
20     int hasBracket;       //    是否有括号
21     int numRand;          //    数值范围
22     int hasMinus;         //    加减有无负数
23     int hasResidue;       //    除法有无余数
24     int hasFraction;      //    是否支持分数
25     int fractionType;     //    是否支持假分数
26     int hasDecimal;       //    是否支持小数
27     int decimalLong;      //    小数位数
28     int decimalLongPow;   //    小数位数
29 
30     void  newIntegerFormula();                // 新建整数运算公式
31     void  newDecimalFormula();                // 新建小数运算公式
32     void  newFractionFormula();               // 新建分数运算公式
33     void recordTitle(string szTitle);         // 记录题目至文件
34     void recordAnswer(string szAnswer);       // 记录答案至文件
35     void reduceFraction(int &nume, int &deno);// 化简分数
36 };

 

接下来,我们需要实现类的功能接口,并且对类的属性实现初始化

 1 CTitle::CTitle()
 2 {
 3     titleCount   = 0;      //    题量
 4     hasMD        = 0;      //    是否有乘除法
 5     numRand      = 0;      //    数值范围
 6     hasMinus     = 0;      //    加减有无负数
 7     hasResidue   = 0;      //    除法有无余数
 8     hasFraction  = 0;      //    是否支持分数
 9     fractionType = 0;      //    是否支持假分数
10     hasDecimal   = 0;      //    是否支持小数
11     decimalLong  = 0;      //    小数位数
12     decimalLongPow = 0;    //    小数位数
13 }
14 CTitle::~CTitle() 
15 {
16 }
17 // 设置行间距
18 void CTitle::setTitleCount(int titleCount)
19 {
20     this->titleCount = titleCount;
21 }
22 // 设置乘除法
23 void CTitle::setMD(int hasMD)
24 {
25     this->hasMD = hasMD;
26 }
27 // 设置数值范围
28 void CTitle::setNumRand(int numRand)
29 {
30     this->numRand = numRand;
31 }
32 // 设置负号
33 void CTitle::setMinus(int hasMinus)
34 {
35     this->hasMinus = hasMinus;
36 }
37 // 设置余数
38 void CTitle::setResidue(int hasResidue)
39 {
40     this->hasResidue = hasResidue;
41 }
42 // 设置分数
43 void CTitle::setFraction(int hasFraction)
44 {
45     this->hasFraction = hasFraction;
46 }
47 // 设置是否支持假分数
48 void CTitle::setFractionType(int fractionType)
49 {
50     this->fractionType = fractionType;
51 }
52 // 设置小数
53 void CTitle::setDecimal(int hasDecimal)
54 {
55     this->hasDecimal = hasDecimal;
56 }
57 // 设置小数位数
58 void CTitle::setDecimalLong(int decimalLong)
59 {
60     this->decimalLong = decimalLong;
61     this->decimalLongPow = pow(10, decimalLong);
62 }

 

 

 接着,我们为类添加方法,让类可以按需求生成不同类型的运算题目。那么,如何才能使类可以随机生成不同类型的运算呢?通过对题目进行分析,我们发现所有可能出现的运算类型共有4中,他们分别是:

(1)整数运算

(2)整数运算 & 小数运算

(3)整数运算 & 分数运算

(4)整数运算 & 分数运算 & 小数运算

 1 void CTitle::newTitle()
 2 {
 3     srand(time(0));
 4     int numType = 1 + hasDecimal + hasFraction;
 5     int titleType = 1;
 6     for (int i = 0; i < titleCount; i++)
 7     {
 8         switch(numType)
 9         {
10         //    运算中仅有整数运算
11         case 1:
12             newIntegerFormula();
13             break;
14         //    运算中包含包含两种运算,整数+小数 或 整数+分数
15         case 2:
16             titleType = rand() % 2 + 1;
17             if (titleType == 1)
18             {
19                 newIntegerFormula();
20             }
21             else
22             {
23                 if (hasDecimal == 1)
24                 {
25                     newDecimalFormula();
26                 }
27                 else if (hasFraction == 1)
28                 {
29                     newFractionFormula();
30                 }
31             }
32             break;
33         //    运算中包含小数运算和分数运算
34         case 3:
35             titleType = rand() % 3 + 1;
36             if (titleType == 1)
37             {
38                 newIntegerFormula();
39             }
40             else if (titleType == 2)
41             {
42                 newDecimalFormula();
43             }
44             else
45             {
46                 newFractionFormula();
47             }
48             break;
49         }
50     }
51 }

 

接下来我们需要解决的问题就是如何生成整数运算、小数运算以及分数运算并计算其结果。在本例中,我们用文件分别对运算表达式和运算结果进行存储。将表达式存储于Title.txt文件内,将运算结果存储于Answer.txt文件内。

所以,我们先要在Ctitle的构造函数内加入如下代码,以保证每次类初始化时文件内容会被清空。

 1 FILE *fp = NULL;
 2 errno_t err;
 3 if ((err = fopen_s(&fp, "Title.txt", "w")) == 0)
 4 {
 5     fclose(fp);
 6 }
 7 if ((err = fopen_s(&fp, "Answer.txt", "w")) == 0)
 8 {
 9      fclose(fp);
10 }

 

并且增加写入表达式和写入答案的方法

 1 //    记录题目至文件
 2 void CTitle::recordTitle(string szTitle)
 3 {
 4     FILE *fp = NULL;
 5     errno_t err;
 6     if ((err = fopen_s(&fp, "Title.txt", "a")) == 0)
 7     {
 8         fprintf_s(fp, "%s\n", szTitle.c_str());
 9         fclose(fp);
10     }
11 }
12 //    记录答案至文件
13 void CTitle::recordAnswer(string szAnswer)
14 {
15     FILE *fp = NULL;
16     errno_t err;
17     if ((err = fopen_s(&fp, "Answer.txt", "a")) == 0)
18     {
19         fprintf_s(fp, "%s\n", szAnswer.c_str());
20         fclose(fp);
21     }
22 }

 

接下来我们实现创建整数运算的方法,在这里与要注意以下问题:

(1)除法运算时,除数不能为0

(2)若运算不能还有余数,要保证生成的除法运算均可以整除

(3)若运算可以还有余数,要保证生成的结果为: 5 ÷ 2 = 2...1 ,而非2.5

  1 //    新建整数运算公式
  2 void CTitle::newIntegerFormula()
  3 {
  4     string szTitle = "";
  5     string szAnswer = "";
  6     char caTitle[100] = { "" };
  7     char caAnswer[100] = { "" };
  8     int num1 = rand() % numRand + 1;//    随机整数1,默认是正数
  9     int num2 = rand() % numRand + 1;//    随机整数2,默认是正数
 10     int op = rand() % 2 + 1;        //    运算符,默认仅有加减运算
 11     //    设置四则运算
 12     if (hasMD == 1)
 13     {
 14         op = rand() % 4 + 1;
 15     }
 16     switch (op)
 17     {
 18     case 1:
 19         //    加减运算中包含负数
 20         if (hasMinus == 1)
 21         {
 22             num1 = rand() % (numRand * 2) - numRand;
 23             num2 = rand() % (numRand * 2) - numRand;
 24         }
 25         if (num2 < 0)
 26         {
 27             //    记录题目
 28             sprintf_s(caTitle, "%d+(%d)", num1, num2);
 29             szTitle += caTitle;
 30             recordTitle(szTitle);
 31             //    记录答案
 32             sprintf_s(caAnswer, "%d", num1+num2);
 33             szAnswer += caAnswer;
 34             recordAnswer(szAnswer);
 35         }
 36         else
 37         {
 38             //    记录题目
 39             sprintf_s(caTitle, "%d+%d", num1, num2);
 40             szTitle += caTitle;
 41             recordTitle(szTitle);
 42             //    记录答案
 43             sprintf_s(caAnswer, "%d", num1 + num2);
 44             szAnswer += caAnswer;
 45             recordAnswer(szAnswer);
 46         }
 47         break;
 48     case 2:
 49         //    加减运算中包含负数
 50         if (hasMinus == 1)
 51         {
 52             num1 = rand() % (numRand * 2) - numRand;
 53             num2 = rand() % (numRand * 2) - numRand;
 54         }
 55         if (num2 < 0)
 56         {
 57             //    记录题目
 58             sprintf_s(caTitle, "%d-(%d)", num1, num2);
 59             szTitle += caTitle;
 60             recordTitle(szTitle);
 61             //    记录答案
 62             sprintf_s(caAnswer, "%d", num1 - num2);
 63             szAnswer += caAnswer;
 64             recordAnswer(szAnswer);
 65         }
 66         else
 67         {
 68             //    记录题目
 69             sprintf_s(caTitle, "%d-%d", num1, num2);
 70             szTitle += caTitle;
 71             recordTitle(szTitle);
 72             //    记录答案
 73             sprintf_s(caAnswer, "%d", num1 - num2);
 74             szAnswer += caAnswer;
 75             recordAnswer(szAnswer);
 76         }
 77         break;
 78     case 3:
 79         //    记录题目
 80         sprintf_s(caTitle, "%d×%d", num1, num2);
 81         szTitle += caTitle;
 82         recordTitle(szTitle);
 83         //    记录答案
 84         sprintf_s(caAnswer, "%d", num1 * num2);
 85         szAnswer += caAnswer;
 86         recordAnswer(szAnswer);
 87         break;
 88     case 4:
 89         //    除数为0
 90         while (num2 == 0)
 91         {
 92             num2 = rand() % numRand + 1;
 93         }
 94         //    无余数的除法
 95         if(hasResidue == 0)
 96         { 
 97             //    保证可以整除
 98             while (num1 % num2 != 0)
 99             {
100                 num1 = rand() % numRand + 1;
101             }
102             //    记录题目
103             sprintf_s(caTitle, "%d÷%d", num1, num2);
104             szTitle += caTitle;
105             recordTitle(szTitle);
106             //    记录答案
107             sprintf_s(caAnswer, "%d", num1 / num2);
108             szAnswer += caAnswer;
109             recordAnswer(szAnswer);
110         }
111         //    有余数的除法
112         else
113         {
114             //    记录题目
115             sprintf_s(caTitle, "%d÷%d", num1, num2);
116             szTitle += caTitle;
117             recordTitle(szTitle);
118             //    记录答案
119             sprintf_s(caAnswer, "%d...%d", num1 / num2, num1 % num2);
120             szAnswer += caAnswer;
121             recordAnswer(szAnswer);
122         }
123         break;
124     }126 }

 

接下来实现小数运算,在这里,小数的位数是可以自主选定的,所以如果小数位数选择的是2位,那么在记录如文件时也要保证多余位数不会被记录。如double类型默认写入文件是2.510000,那我们只能保留2.51,并将保留后的结果写入文件。

  1 //    新建小数运算公式
  2 void CTitle::newDecimalFormula()
  3 {
  4     string szTitle = "";
  5     string szAnswer = "";
  6     string szOp = "";
  7     string szNum1 = "";
  8     string szNum2 = "";
  9     char caTitle[100] = { "" };
 10     char caAnswer[100] = { "" };
 11     char caNum1[100] = { "" };
 12     char caNum2[100] = { "" };
 13     double dAnswer = 0;
 14     int num1 = rand() % numRand + 1;//    随机整数1,默认是正数
 15     int num2 = rand() % numRand + 1;//    随机整数2,默认是正数
 16     double dotNum1 = (rand() % (decimalLongPow) +1);// 随机小数1
 17     double dotNum2 = (rand() % (decimalLongPow)+1);// 随机小数2
 18     int op = rand() % 2 + 1;    //    运算符,默认仅有加减运算
 19     dotNum1 = dotNum1 / decimalLongPow;
 20     dotNum2 = dotNum2 / decimalLongPow;
 21     sprintf_s(caNum1, "%lf", num1 + dotNum1);
 22     szNum1 += caNum1;
 23     szNum1 = szNum1.substr(0, szNum1.length() - 6 + decimalLong);
 24     sprintf_s(caNum2, "%lf", num2 + dotNum2);
 25     szNum2 += caNum2;
 26     szNum2 = szNum2.substr(0, szNum2.length() - 6 + decimalLong);
 27     //    设置四则运算
 28     if (hasMD == 1)
 29     {
 30         op = rand() % 4 + 1;
 31     }
 32     switch (op)
 33     {
 34     case 1:
 35         //    加减运算中包含负数
 36         if (hasMinus == 1)
 37         {
 38             num1 = rand() % (numRand * 2) - numRand;
 39             num2 = rand() % (numRand * 2) - numRand;
 40             szNum1 = "";
 41             szNum2 = "";
 42             sprintf_s(caNum1, "%lf", num1 + dotNum1);
 43             szNum1 += caNum1;
 44             szNum1 = szNum1.substr(0, szNum1.length() - 6 + decimalLong);
 45             sprintf_s(caNum2, "%lf", num2 + dotNum2);
 46             szNum2 += caNum2;
 47             szNum2 = szNum2.substr(0, szNum2.length() - 6 + decimalLong);
 48         }
 49         if (num2 < 0)
 50         {
 51             //    记录题目
 52             szOp = "";
 53             szNum2 = "(" + szNum2 + ")";
 54             //    记录答案
 55             dAnswer = num1 + dotNum1 + num2 + dotNum2;
 56         }
 57         else
 58         {
 59             //    记录题目
 60             szOp = "";
 61             //    记录答案
 62             dAnswer = num1 + dotNum1 + num2 + dotNum2;
 63         }
 64         break;
 65     case 2:
 66         //    加减运算中包含负数
 67         if (hasMinus == 1)
 68         {
 69             num1 = rand() % (numRand * 2) - numRand;
 70             num2 = rand() % (numRand * 2) - numRand;
 71             szNum1 = "";
 72             szNum2 = "";
 73             sprintf_s(caNum1, "%lf", num1 + dotNum1);
 74             szNum1 += caNum1;
 75             szNum1 = szNum1.substr(0, szNum1.length() - 6 + decimalLong);
 76             sprintf_s(caNum2, "%lf", num2 + dotNum2);
 77             szNum2 += caNum2;
 78             szNum2 = szNum2.substr(0, szNum2.length() - 6 + decimalLong);
 79         }
 80         if (num2 < 0)
 81         {
 82             //    记录题目
 83             szOp = "";
 84             szNum2 = "(" + szNum2 + ")";
 85             //    记录答案
 86             dAnswer = num1 + dotNum1 - num2 - dotNum2;
 87         }
 88         else
 89         {
 90             //    记录题目
 91             szOp = "";
 92             //    记录答案
 93             dAnswer = num1 + dotNum1 - num2 - dotNum2;
 94         }
 95         break;
 96     case 3:
 97         //    记录题目
 98         szOp = "×";
 99         //    记录答案
100         dAnswer = (num1 + dotNum1) * (num2 + dotNum2);
101         break;
102     case 4:
103         //    除数为0
104         while (num2 == 0 && dotNum2 == 0)
105         {
106             num2 = rand() % numRand + 1;
107             dotNum2 = (rand() % (decimalLong)+1);
108         }
109         //    记录题目
110         szOp = "÷";
111         //    记录答案
112         dAnswer = (num1 + dotNum1) / (num2 + dotNum2);
113         break;
114     }
115     //    记录题目
116     szTitle = szNum1 + szOp + szNum2;
117     recordTitle(szTitle);
118     //    记录答案
119     sprintf_s(caAnswer, "%lf", dAnswer);
120     szAnswer += caAnswer;
121     szAnswer = szAnswer.substr(0, szAnswer.length() - 6 + decimalLong);
122     recordAnswer(szAnswer);124 }

 

最后需要进行的就是生成分数,在这里,我们需要注意:

(1)是否进行假分数的运算

(2)要对分数的运算结果进行约分,将分数化为最简。并且将假分数化简。如5/2要化简为2‘1/2(二又二分之一)

  1 //    新建分数运算
  2 void CTitle::newFractionFormula()
  3 {
  4     string szTitle = "";
  5     string szAnswer = "";
  6     char caTitle[100] = { "" };
  7     char caAnswer[100] = { "" };
  8     int deno1 = rand() % numRand + 1;//    随机分母1,默认是正数
  9     int deno2 = rand() % numRand + 1;//    随机分母2,默认是正数
 10     int nume1 = rand() % numRand + 1;//    随机分子1,默认是正数
 11     int nume2 = rand() % numRand + 1;//    随机分子2,默认是正数
 12     int nweNume = 0;
 13     int nweDeno = 0;
 14     //    支持假分数
 15     if (fractionType == 1)
 16     {
 17         //    分母为0或1
 18         while (deno1 == 0 || deno1 == 1)
 19         {
 20             deno1 = rand() % numRand + 1;
 21         }
 22         while (deno2 == 0 || deno1 == 1)
 23         {
 24             deno2 = rand() % numRand + 1;
 25         }
 26     }
 27     //    不支持假分数
 28     if (fractionType == 0)
 29     {
 30         //    分母为0或1
 31         while (nume1 == 0 || nume1 == 1)
 32         {
 33             nume1 = rand() % numRand + 1;
 34         }
 35         while (nume2 == 0 || nume2 == 1)
 36         {
 37             nume2 = rand() % numRand + 1;
 38         }
 39         if (deno1 < nume1)
 40         {
 41             int temp = deno1;
 42             deno1 = nume1;
 43             nume1 = temp;
 44         }
 45         if (deno2 < nume2)
 46         {
 47             int temp = deno2;
 48             deno2 = nume2;
 49             nume2 = temp;
 50         }
 51     }
 52     int op = rand() % 2 + 1;                    //    运算符,默认仅有加减运算
 53     //    设置四则运算
 54     if (hasMD == 1)
 55     {
 56         op = rand() % 4 + 1;
 57     }
 58     switch (op)
 59     {
 60     case 1:
 61         //    记录题目
 62         sprintf_s(caTitle, "%d/%d+%d/%d", nume1, deno1, nume2, deno2);
 63         szTitle += caTitle;
 64         recordTitle(szTitle);
 65         //    记录答案
 66         nweNume = nume1*deno2 + deno1*nume2;
 67         nweDeno = deno1*deno2;
 68         break;
 69     case 2:
 70         //    记录题目
 71         sprintf_s(caTitle, "%d/%d-%d/%d", nume1, deno1, nume2, deno2);
 72         szTitle += caTitle;
 73         recordTitle(szTitle);
 74         //    记录答案
 75         nweNume = nume1*deno2 - deno1*nume2;
 76         nweDeno = deno1*deno2;
 77         reduceFraction(nweNume, nweDeno);
 78         break;
 79     case 3:
 80         //    记录题目
 81         sprintf_s(caTitle, "%d/%d×%d/%d", nume1, deno1, nume2, deno2);
 82         szTitle += caTitle;
 83         recordTitle(szTitle);
 84         //    记录答案
 85         nweNume = nume1*nume2;
 86         nweDeno = deno1*deno2;
 87         break;
 88     case 4:
 89         //    记录题目
 90         sprintf_s(caTitle, "%d/%d÷%d/%d", nume1, deno1, nume2, deno2);
 91         szTitle += caTitle;
 92         recordTitle(szTitle);
 93         //    记录答案
 94         nweNume = nume1*deno2;
 95         nweDeno = deno1*nume2;
 96         break;
 97     }
 98     reduceFraction(nweNume, nweDeno);    //    化简
 99     if (nweNume == 0)
100     {
101         recordAnswer("0");
102     }
103     else if (nweDeno == 1)
104     {
105         sprintf_s(caAnswer, "%d", nweNume);
106         szAnswer += caAnswer;
107         recordAnswer(szAnswer);
108     }
109     else if (nweNume < nweDeno)
110     {
111         sprintf_s(caAnswer, "%d/%d", nweNume, nweDeno);
112         szAnswer += caAnswer;
113         recordAnswer(szAnswer);
114     }
115     else if (nweNume > nweDeno)
116     {
117         if (nweNume%nweDeno != 0)
118         {
119             sprintf_s(caAnswer, "%d'%d/%d", nweNume / nweDeno, nweNume%nweDeno, nweDeno);
120             szAnswer += caAnswer;
121             recordAnswer(szAnswer);
122         }
123         else
124         {
125             sprintf_s(caAnswer, "%d", nweNume / nweDeno);
126             szAnswer += caAnswer;
127             recordAnswer(szAnswer);
128         }
129     }
130     else
131     {
132         recordAnswer("1");
133     }
134 }
135 //    化简分数
136 void CTitle::reduceFraction(int &nume, int &deno)
137 {
138     int temp;
139     int a = nume;
140     int b = deno;
141     int gcd = 0; //    最大公约式
142     if (a < b)
143     {
144         temp = a;
145         a = b;
146         b = temp;
147     }
148     while (b != 0)
149     {
150         temp = a % b;
151         a = b;
152         b = temp;
153     }
154     gcd = a;
155     nume = nume / gcd;
156     deno = deno / gcd;
157 }

 

至此,我们的类就编写完成了。接下来只需要在主函数生成类,并进行类方法的调用就行了。

  1 #include "iostream"
  2 #include "time.h"
  3 #include "CTitle.h"
  4 #include "CTitle.h"
  5 using namespace std;
  6 void setting();
  7 CTitle title;
  8 int lineSpacing = 0;
  9 int main()
 10 {
 11     setting();
 12     title.newTitle();
 13     //    从文件打印题目
 14     FILE *fp = NULL;
 15     FILE *fp2 = NULL;
 16     errno_t err;
 17     char caTitle[100];
 18     char caAnsewr[100];
 19     char myansewr[100];
 20     int mark = 1;
 21     if ((err = fopen_s(&fp, "Title.txt", "r")) == 0 && (err = fopen_s(&fp2, "Answer.txt", "r")) == 0)
 22     {
 23         //    读取题目
 24         while ((fscanf_s(fp, "%s", caTitle, 100) != EOF))
 25         {
 26             //    读取答案
 27             fscanf_s(fp2, "%s", caAnsewr, 100);
 28             do
 29             {
 30                 cout << caTitle << " = ";
 31                 cin >> myansewr;
 32                 if (strcmp(myansewr, caAnsewr) == 0)
 33                 {
 34                     cout << "" << endl;
 35                     mark = 1;
 36                 }
 37                 else
 38                 {
 39                     cout << "×" << endl;
 40                     mark = 0;
 41                 }
 42                 for (int i = 0; i < lineSpacing; i++)
 43                 {
 44                     cout << endl;
 45                 }
 46             } while (mark == 0);
 47         }
 48         cout << "恭喜你完成今日作业" << endl;
 49     }
 50     return 0;
 51 }
 52 void setting()
 53 {
 54     int input = 0;
 55     cout << "请完成如下设置" << endl;
 56     cout << "设置今日题量:";
 57     cin >> input;
 58     title.setTitleCount(input);
 59     cout << endl;
 60     cout << "设置数值范围绝对值:";
 61     cin >> input;
 62     title.setNumRand(input);
 63     cout << endl;
 64     do
 65     {
 66         cout << "加减有无负数,1有0无:";
 67         cin >> input;
 68     } 
 69     while (input != 0 && input != 1);
 70     title.setMinus(input);
 71     cout << endl;
 72     do
 73     {
 74         cout << "是否有乘除法,1有0无:";
 75         cin >> input;
 76     } 
 77     while (input != 0 && input != 1);
 78     title.setMD(input);
 79     cout << endl;
 80     if (input == 1)
 81     {
 82         do
 83         {
 84             cout << "整数除法有无余数,1有0无:";
 85             cin >> input;
 86         } 
 87         while (input != 0 && input != 1);
 88         title.setResidue(input);
 89         cout << endl;
 90     }
 91     
 92     do
 93     {
 94         cout << "是否支持小数,1有0无:";
 95         cin >> input;
 96     } 
 97     while (input != 0 && input != 1);
 98     title.setDecimal(input);
 99     cout << endl;
100     if (input == 1)
101     {
102         cout << "设置小数位数(1~5):";
103         cin >> input;
104         title.setDecimalLong(input);
105         cout << endl;
106     }
107     do
108     {
109         cout << "是否支持分数,1有0无:";
110         cin >> input;
111     } 
112     while (input != 0 && input != 1);
113     title.setFraction(input);
114     cout << endl;
115     if (input == 1)
116     {
117         cout << "设置是否支持假分数,1有0无:";
118         cin >> input;
119         title.setFractionType(input);
120         cout << endl;
121     }
122     cout << "设置打印行间隔:";
123     cin >> input;
124     lineSpacing = input;
125     cout << endl;
126 }

 

恩,对于这一次的作业,我只完成了二元式的生成和运算,没有涉及到多元式,所以没有写上括号生成与运算的问题。本来只是想简单写写,好久没有用C++写过程序了,没想到写着写着就写了这么多行,但好像也没有实现什么功能,只是保证了最基础的运行。还是要继续提升啊。

 

转载于:https://www.cnblogs.com/libaoquan/p/5271351.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/288716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WireShark抓包之提示Alert Level: Fatal, Description: HandShake Failure

1 问题 ssl协议失败的方法,发了client hello包之后回复server hello包失败 2 分析 对比正常client hello的数据包, 我们点击Client Hello包看下详细信息,如下图 感觉ssl协议版本不对 然后我们修改了apache的配置,让代理服务

java地址映射关系,Spring MVC——基础(简介,使用,地址映射)

“大佬们”嘴中的SSH,SSM框架&#xff0c;我这种小白终于解除到第二个S了&#xff0c;关于Spring MVC框架&#xff0c;根据最近的学习发现&#xff0c;还是有很多不足和需要加强巩固的地方&#xff0c;所以&#xff0c;通过总结博客的方式将Spring MVC再次巩固学习一下。Spring…

scrapy爬取动态网页_scrapy_splash 设置随机请求头

本文为 霾大&#xff1a;scrapy_splash 爬取 js 加载网页初体验​zhuanlan.zhihu.com的补充在上面的文章中我们仅仅是初步完成了 scrapy_splash 的简单使用接下来我们将介绍如何是使得 splash 在 render.html &#xff08;默认&#xff09;访问网页时也能动态调整其请求头等&am…

机器学习模型开发必读:开源数据库最全盘点

开发 AI 和机器学习系统从来没有像现在这样方便。类似于 TensorFlow、Torch 和 Spark 这样的开源工具&#xff0c;在 AI 开发者群体中已是无处不在。再加上亚马逊 AWS、Google Cloud 等云服务带来的海量计算能力&#xff0c;将来使用笔记本电脑来训练 ML 模型或许不再难以想象。…

php之clone 复制对象以及__clone魔术方法

如果错误和不足请给予指出&#xff0c;谢谢~ (⊙&#xff3f;⊙) 在开始使用clone之前我们下先看以下一个小例子&#xff1a; <?php //首先定义一个test一个类 class Testclass {//成员变量是$value1public $value1; } //随后new一个obj1 $obj1 new Testclass(); //复…

C#中使用WeiFenLuo.WinFormsUI.Docking.dll实现窗口停靠效果

很酷的效果&#xff0c;很值得好好去学习的哈。 重置工具箱&#xff1a; 新建一个WinForm程序,项目名称为TestDockPanelControl。选中Form1窗体后选择工具箱--->>新建个添加选项卡命名为WeiFenLuo--->>右键--->>选择项--->>浏览--- >>weiFenLuo.…

使用aspnetcore前后端分离开发,你一定要知道这个。

前言用过Vue单页面应用开发的&#xff0c;一定都知道Vue-router这个路由组件&#xff0c;它支持hash和history两种模式。HTML5 History 模式vue-router 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL&#xff0c;于是当 URL 改变时&#xff0c;页面不会重新加载。…

Visual Studio 2015专业版创建Win32控制台应用程序,C,C++源文件

原配的Visual Studio 2015专业版不像之前的版本,在新建项目里面是找不到Win32模板的,那么怎么才能新建Win32项目和Win32控制台应用程序呢?今天我就带大家做一简单介绍。 先看如下图所示: 解决: 1、添加的办法是点击上图所示的新建项目界面的Visual C++下面的Windows,再…

php 序列化对象

习惯性借用手册里面的介绍&#xff1a; 所有php里面的值都可以使用函数serialize()来返回一个包含字节流的字符串来表示。unserialize()函数能够重新把字符串变回php原来的值。序列化一个对象将会保存对象的所有变量&#xff0c;但是不会保存对象的方法&#xff0c;只会保存类…

如何为同一 DTO 属性指定 2 个名称

前言我们在《实现DDD领域驱动设计》中谈到过输出 DTO 的最佳实践&#xff0c;其中一条是&#xff1a;保持输出 DTO 数量最少&#xff0c;尽可能重用。但是&#xff0c;对于 2 个不同接口输出的同一 DTO 属性&#xff0c;客户端可能需要对应不同的名称&#xff0c;比如&#xff…

HDU 4777 Rabbit Kingdom 树状数组

分析&#xff1a;找到每一个点的左边离他最近的不互质数&#xff0c;记录下标(L数组)&#xff0c;右边一样如此&#xff08;R数组&#xff09;&#xff0c;预处理 这个过程需要分解质因数O&#xff08;n*sqrt(n)) 然后离线&#xff0c;按照区间右端点排序 然后扫一遍&#xff0…

按一行一行的方法将一个文本文件复制到另一个文件中_命令行技巧:分割文件内容...

(给Linux爱好者加星标&#xff0c;提升Linux技能)英文&#xff1a;Stephen Snow&#xff0c;翻译&#xff1a;Linux中国/MjSevenlinux.cn/article-10809-1.htmlFedora 发行版是一个功能齐全的操作系统&#xff0c;有出色的图形化桌面环境。用户可以很容易地通过单击动作来完成任…

谷歌浏览器之如何调试页面js

1 问题 谷歌浏览器如果调试页面js 2 举例子 比如我们需要调试www.baidu.com这个页面&#xff0c;我们需要先按下F12&#xff0c;然后再去点击Source,然后在找到相应的js文件&#xff0c;在左边进行打上断点&#xff0c;然后我们再刷新页面&#xff0c;然后我们在右边可以看到…

php判断秒为两位数,判“新”函数:得到今天与明天的秒数

判“新”函数&#xff1a;得到今天与明天的秒数更新时间&#xff1a;2006年10月09日 00:00:00 作者&#xff1a;如果你想根据时间来判断某一时间值(用秒数表示)是否在今天的范围之内。下面这个函数&#xff0c;将帮你轻而易举的判断。函数源代码&#xff1a;----------------…

如何查看文件夹里有几张图片_如何把几张图片合成一个pdf?图片合并为pdf的操作教程...

我在一家公司当美工&#xff0c;平时要接触到很多图片素材&#xff0c;并把它们以pdf格式文件的形式发送给客户查看(以此来摸索出客户想要的图片效果)。把几张图片合并成为一个pdf文件&#xff0c;即是将图片格式转换成为pdf格式&#xff0c;这对我来说不难操作。毕竟是公司的老…

Dapr 能否取代 Spring Cloud?

Dapr 和 Spring Cloud 的区别很多人都是使用 Spring Boot 和 Spring Cloud 来开发微服务。Dapr 也是开发微服务的框架&#xff0c;它和 Spring Cloud 有什么区别呢&#xff0c;其实这不是一个区别的问题&#xff0c;它是不同的时代需要不同的框架。Spring Cloud 是一种产品&…

Start vm by command line

为什么80%的码农都做不了架构师&#xff1f;>>> VBoxHeadless -startvm "dcsvr08" 转载于:https://my.oschina.net/kut/blog/1501095

php之生成器

引用手册&#xff1a;一个生成器函数看起来像一个普通的函数&#xff0c;不同的是普通函数返回一个值&#xff0c;而一个生成器可以yield生成许多它所需要的值。当一个生成器被调用的时候&#xff0c;它返回一个可以被遍历的对象.当你遍历这个对象的时候(例如通过一个foreach循…

使用JDBC进行数据库的事务操作(2)

本篇将讲诉如何使用JDBC进行数据库有关事务的操作。在上一篇博客中已经介绍了事务的概念&#xff0c;和在MySQL命令行窗口进行开启事务&#xff0c;提交事务以及回滚事务的操作。 似乎事务和批处理都可以一次同时执行多条SQL命令&#xff0c;但是事务是如果某一条SQL出错&#…

谷歌浏览器之如何快速找到js、css等文件

1 问题 我们分析前端代码的时候&#xff0c;需要快速定位某个js文件&#xff0c;然后查看里面的源代码 2 具体操作 比如我在www.baidu.com这个页面&#xff0c;我们先按下F12, 然后点击到network,然后我们再用快捷键 ctrl p 比如我们要找tu_d03f361.js 效果如下&#x…