作业二:个人编程项目——四则运算

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了作业二:个人编程项目——四则运算相关的知识,希望对你有一定的参考价值。

本周的作业题目要求:

  编写一个自动生成小学四则运算题目的程序,除了支持整数以外,还要支持真分数的四则运算。

编程环境:

  编程语言选择了C#,编程软件选择了Visual Studio 2015。

编程思路:

  在看到题目首先想到了使用Random()这个随机方法进行随机产生数字,同时加减乘除四个运算符用0、1、2、3这个四个数字表示,也通过随机方法生成,在打印输出时再进行判断输出成相应的数学符号。我将题目分成了几个阶段进行编写,分别为整数阶段、分数阶段、混合阶段和优化阶段。

阶段一:

  在这个阶段主要解决的问题就是如何进行随机生成数字与运算符,需要注意的部分是在C#语言中Random()在使用时随机生成的数字是小于你所输入的数字的。为了方便使用同时加入了设置了出题数目与最大值范围的语句,通过用户的输入进行设定,在接收时C#语句默认接收的为String的字符,需要进行转换成Int类型再进行使用。

  代码如下所示:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace 随机生成_控制台
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             Console.Write("请输入生成题目数量:");
14             String strnum = Console.ReadLine();//接收字符
15             int num = Convert.ToInt32(strnum);//转义 题目个数
16 
17             Console.Write("请输入生成数字上限:");
18             String strmaxnum = Console.ReadLine();//接收字符
19             int maxnum = Convert.ToInt32(strmaxnum);//转义 题目数字最大上限
20             Random R = new Random(); 
21             int symbol = 0;
22             for (int i = 0; i < num; i++)
23             {
24                 Console.Write(R.Next(1, maxnum));
25                 symbol = R.Next(0, 4);
26                 switch(symbol)//0-3分别表示加减乘除
27                 {
28                     case 0:Console.Write("+");break;
29                     case 1:Console.Write("-");break;
30                     case 2:Console.Write("*");break;
31                     case 3:Console.Write("/");break;
32                 }
33                 Console.WriteLine(R.Next(1, maxnum) + "=");
34             }
35             Console.ReadLine();
36         }
37     }
38 }

   阶段一实验截图如下:

技术分享

阶段二:

  分数阶段就需要在整数阶段进行一定的修改,首先在随机生成的部分就要多生成两个数字,程序中用n1、n2表示第一个分数的分子与分母,m1、m2来表示第二个数字的分子与分母,题目中要求分数需为真分数,则我们在输出时需要对分子与分母的大小进行比较,将较小的一个数字作为一个分子另一个则为分母,如若两个数字相同时则将其输出为1。运算符则与整数阶段用的一样的方法。

  代码如下所示:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace 随机生成_控制台
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             Console.Write("请输入生成题目数量:");
14             String strnum = Console.ReadLine();//接收字符
15             int num = Convert.ToInt32(strnum);//转义 题目个数
16 
17             Console.Write("请输入生成数字上限:");
18             String strmaxnum = Console.ReadLine();//接收字符
19             int maxnum = Convert.ToInt32(strmaxnum);//转义 题目数字最大上限
20             Random R = new Random(); 
21             int symbol = 0;//运算符
22             int n1, n2, m1, m2;//分数
23             for(int i = 0; i < num; i++)//循环输出
24             {
25                 n1 = R.Next(1, maxnum);
26                 n2 = R.Next(1, maxnum);
27                 m1 = R.Next(1, maxnum);
28                 m2 = R.Next(1, maxnum);
29                 symbol = R.Next(0, 4);
30                 if (n1<n2)//判断是否为真分数,不是则调换顺序,若相同则输出1
31                 {
32                     Console.Write(n1 + "/" + n2);
33                 }
34                 else if(n1 == n2)
35                 {
36                     Console.Write(1);
37                 }
38                 else
39                 {
40                     Console.Write(n2 + "/" + n1);
41                 }
42                 switch (symbol)//0-3分别表示加减乘除
43                 {
44                     case 0: Console.Write("+"); break;
45                     case 1: Console.Write("-"); break;
46                     case 2: Console.Write("*"); break;
47                     case 3: Console.Write("/"); break;
48                 }
49                 if (m1 < m2)
50                 {
51                     Console.WriteLine(m1 + "/" + m2 + "=");
52                 }
53                 else if(m1 > m2)
54                 {
55                     Console.WriteLine(m2 + "/" + m1 + "=");
56                 }
57                 else
58                 {
59                     Console.WriteLine(1 + "=");
60                 }
61             }          
62             Console.ReadLine();
63         }
64     }
65 }

   阶段二实验截图如下:

技术分享

阶段三:

  结合实际情况编写了第三阶段,混合模式(这个混合模式为既有全为整数也有全为分数的,但没有一个式子中分数和整数并存的),混合模式下在出题时前半题目为整数运算,后半为分数运算。在整个程序开始时加入了模式的选择,程序启动时会提示选择,一共有三个模式:整数模式、分数模式、混合模式。在用户选择后会提示选择题目数量与最大数字范围。

  代码如下所示:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading.Tasks;
  6 
  7 namespace 随机生成_控制台
  8 {
  9     class Program
 10     {
 11         static void Main(string[] args)
 12         {
 13             Console.Write("请选择模式(1、分数 2、整数 3、混合):");//模式选择
 14             String numType = Console.ReadLine();
 15             switch (numType)
 16             {
 17                 case "1": Fraction(); break;
 18                 case "2": Integer(); break;
 19                 case "3": Mixture(); break;
 20                 default: Console.WriteLine("输入有误!");break;
 21             }       
 22             Console.ReadLine();
 23         }
 24         public static void Fraction()//分数模式
 25         {
 26             Console.Write("请输入生成题目数量:");
 27             String strnum = Console.ReadLine();//接收字符
 28             int num = Convert.ToInt32(strnum);//转义
 29 
 30             Console.Write("请输入生成数字上限:");
 31             String strmaxnum = Console.ReadLine();//接收字符
 32             int maxnum = Convert.ToInt32(strmaxnum);//转义
 33 
 34             Random R = new Random();
 35             int symbol = 0;//运算符
 36             int n1, n2, m1, m2;//分数
 37             for (int i = 0; i < num; i++)//循环输出
 38             {
 39                 n1 = R.Next(1, maxnum);
 40                 n2 = R.Next(1, maxnum);
 41                 m1 = R.Next(1, maxnum);
 42                 m2 = R.Next(1, maxnum);
 43                 symbol = R.Next(0, 4);
 44                 if (n1 < n2)
 45                 {
 46                     Console.Write(n1 + "/" + n2);
 47                 }
 48                 else if (n1 == n2)
 49                 {
 50                     Console.Write(1);
 51                 }
 52                 else
 53                 {
 54                     Console.Write(n2 + "/" + n1);
 55                 }
 56                 switch (symbol)
 57                 {
 58                     case 0: Console.Write("+"); break;
 59                     case 1: Console.Write("-"); break;
 60                     case 2: Console.Write("*"); break;
 61                     case 3: Console.Write("/"); break;
 62                 }
 63                 if (m1 < m2)
 64                 {
 65                     Console.WriteLine(m1 + "/" + m2 + "=");
 66                 }
 67                 else if (m1 > m2)
 68                 {
 69                     Console.WriteLine(m2 + "/" + m1 + "=");
 70                 }
 71                 else
 72                 {
 73                     Console.WriteLine(1 + "=");
 74                 }
 75             }
 76         }
 77         public static void Integer()//整数模式
 78         {
 79             Console.Write("请输入生成题目数量:");
 80             String strnum = Console.ReadLine();//接收字符
 81             int num = Convert.ToInt32(strnum);//转义
 82 
 83             Console.Write("请输入生成数字上限:");
 84             String strmaxnum = Console.ReadLine();//接收字符
 85             int maxnum = Convert.ToInt32(strmaxnum);//转义
 86             
 87             Random R = new Random();
 88             int symbol = 0;//运算符
 89             for (int i = 0; i < num; i++)//循环输出
 90             {
 91                 Console.Write(R.Next(1, maxnum));
 92                 symbol = R.Next(0, 4);
 93                 switch (symbol)
 94                 {
 95                     case 0: Console.Write("+"); break;
 96                     case 1: Console.Write("-"); break;
 97                     case 2: Console.Write("*"); break;
 98                     case 3: Console.Write("/"); break;
 99                 }
100                 Console.WriteLine(R.Next(1, maxnum) + "=");
101             }
102         }
103         public static void Mixture()//混合模式
104         {
105             Console.Write("请输入生成题目数量:");
106             String strnum = Console.ReadLine();//接收字符
107             int num = Convert.ToInt32(strnum);//转义
108 
109             Console.Write("请输入生成数字上限:");
110             String strmaxnum = Console.ReadLine();//接收字符
111             int maxnum = Convert.ToInt32(strmaxnum);//转义
112 
113             Random R = new Random();
114             int symbol = 0;//运算符
115             int n1, n2, m1, m2;//分数
116             for (int i = 0; i < num; i++)//循环输出
117             {
118                 if (i < (num / 2))
119                 {
120                     Console.Write(R.Next(1, maxnum));
121                     symbol = R.Next(0, 4);
122                     switch (symbol)
123                     {
124                         case 0: Console.Write("+"); break;
125                         case 1: Console.Write("-"); break;
126                         case 2: Console.Write("*"); break;
127                         case 3: Console.Write("/"); break;
128                     }
129                     Console.WriteLine(R.Next(1, maxnum) + "=");
130                 }
131                 else
132                 {
133                     n1 = R.Next(1, maxnum);
134                     n2 = R.Next(1, maxnum);
135                     m1 = R.Next(1, maxnum);
136                     m2 = R.Next(1, maxnum);
137                     symbol = R.Next(0, 4);
138                     if (n1 < n2)
139                     {
140                         Console.Write(n1 + "/" + n2);
141                     }
142                     else if (n1 == n2)
143                     {
144                         Console.Write(1);
145                     }
146                     else
147                     {
148                         Console.Write(n2 + "/" + n1);
149                     }
150                     switch (symbol)
151                     {
152                         case 0: Console.Write("+"); break;
153                         case 1: Console.Write("-"); break;
154                         case 2: Console.Write("*"); break;
155                         case 3: Console.Write("/"); break;
156                     }
157                     if (m1 < m2)
158                     {
159                         Console.WriteLine(m1 + "/" + m2 + "=");
160                     }
161                     else if (m1 > m2)
162                     {
163                         Console.WriteLine(m2 + "/" + m1 + "=");
164                     }
165                     else
166                     {
167                         Console.WriteLine(1 + "=");
168                     }
169                 }
170             }
171         }
172     }
173 }

   阶段三实验截图如下:

技术分享

 

作业总结:

  本次作业的难度还是比较容易的,再编写的时候也没有过多的问题,只要从最简单的整数开始做起就会比较容易做,通过这个作业我发现我这几个阶段的代码都有部分的冗余,第二阶段的分数没有进行约分,这几个问题我在这次作业的最终版本会进行改进。C#语言的熟练度不高,在使用的时候经常会进行API的查询,选择C#进行编写的原因也是在于为了提高对C#语言的熟练度。觉得自己做的好的方面有:代码比较整洁,同时各个重要代码进行了注释。

  这次的作业我认为还要继续做下去的必要,因为我的妹妹刚刚上小学,我可以进一步进行改进可以让她在接下来的学习中进行使用!打算改进的部分有:将其做成窗口模式、加入随机模式(一道题中既有真分数、也有整数)、加入小数模式、加入多式子运算(即一道运算题有多个需要运算的数字)、判断程序(每个题目做完自动进行判断对错,并计算总分)、错题本(每个错过的题目生成TXT文本进行记录,可以二次进行学习)。

以上是关于作业二:个人编程项目——四则运算的主要内容,如果未能解决你的问题,请参考以下文章

作业四:结对编程项目--四则运算

团队-团队编程项目作业名称-项目总结

软件工程个人作业02

结对编程项目-四则运算

结对编程项目-四则运算

作业四