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

本周的作业题目要求:

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

编程环境:

  编程语言选择了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文本进行记录,可以二次进行学习)。

时间: 2024-08-08 15:14:54

作业二:个人编程项目——四则运算的相关文章

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

队友  史劭聪 import java.awt.BorderLayout; import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; im

20175209王梓鸿 结对编程项目—四则运算 第一周 阶段总结

20175209王梓鸿 结对编程项目-四则运算 第一周 阶段总结 一.需求分析 1.题目要求: 实现一个命令行程序,要求: 自动生成小学四则运算题目(加.减.乘.除) 支持整数 支持多运算符(比如生成包含100个运算符的题目) 支持真分数 统计正确率 扩展需求 文件 处理生成题目并输出到文件 完成题目后从文件读入并判题 多语言支持简体中文,繁體中文,English 生成题目去重 二.设计思路 1.编写背景及完成情况 在开始写设计思路之前,我觉得应该说一下我们编写的情况(可能有些跑题).这次结对的

20175325 第一周结对编程项目 四则运算

20175325 第一周结对编程项目 四则运算 一.需求分析: 能根据用户输入的数字生成四则运算的题目数量 能自动生成规定范围内的四则运算题目(加.减.乘.除) 能够判断四则运算的结果是否正确并进行数量统计 能多次生成四则运算题目 支持多运算符 用户能够选择是否开始答题 统计题目正确率 题目去重 多语言支持:简体中文, 繁體中文, English 文件: 处理生成题目并输出到文件 完成题目后从文件读入并判题 二.设计思路: 和之前所学的C语言中的四则运算方法作类比,在JAVA中运用了C语言里的一

20175325 第二周结对编程项目 四则运算

20175325 第二周结对编程项目 四则运算 一.需求分析: 实现一个命令行程序,要求: 自动生成小学四则运算题目(加.减.乘.除) 支持整数 支持多运算符(比如生成包含100个运算符的题目) 支持真分数 统计正确率 题目去重 能多次生成四则运算题目 能根据用户输入的数字生成四则运算的题目数量 多语言支持: 简体中文, 繁體中文, English 文件: 处理生成题目并输出到文件 完成题目后从文件读入并判题 用户能够选择是否开始答题 二. 设计思路: 产生随机数并且考虑符号的优先级. 能实现整

20175311胡济栋 2018-2019-2《Java程序设计》结对编程项目-四则运算 第二周 阶段性总结

20175311胡济栋 2018-2019-2<Java程序设计>结对编程项目-四则运算 第二周 阶段性总结 需求分析 这是利用栈来设计一个计算器的第二阶段总结. 自动生成四则运算的题目(加.减.乘.除) 需要实现计算结果的输出 将正确的计算结果与用户输入的计算结果进行比较得出最终的正确率 之前编写的程序还有很多问题,这周主要对这些问题进行改进和升级,我们成功实现了这些功能. 设计思路 1. 首先我们需要编写随机生成数字和随机生成符号的代码,把他们编写好后保存 2. 我们需要利用之前编写好的随

结对编程项目——四则运算

1. 结对编程项目---四则运算 (10分) 基本功能要求: 1) 实现一个带有用户界面的四则运算.2) 生成的题目不能重复.3) 支持负数,例如-1,-1/2,-3‘4/5等.(达成) 需要支持的基本设定参数 1) 题目的数量  2) 数值的范围  3) 题目中最多几个运算符(目前没有达成)  4) 题目中或运算过程中有无有分数(比如进行整数除法的时候不能除尽) 5) 题目中是否有乘除法  6) 题目中是否有括号 (目前没有达成) 7) 题目中或运算过程中有无负数         学习感受:

20165206 结对编程项目-四则运算 阶段一总结

20165206 结对编程项目-四则运算 阶段一总结 一.需求分析 通过命令行输入生成题目的数量,随机生成题目. 生成的题目不重复. 生成的四则运算题目支持整数.支持多运算符. 能够根据作答情况统计正确的个数. 二.设计思路 设计一个类来实现整数的四则运算. 用一个循环结构来生成随机数,生成题目. 设计一个类来比较输入的答案与正确答案是否一致. 判断做的题是否正确,并返回正确的个数. 设计单元测试,对代码进行测试及修改 UML图: 三.核心代码 生成随机数: while(true){ a=new

20165318 结对编程项目-四则运算 阶段总结

20165318 结对编程项目-四则运算 阶段总结 一.需求分析 能随机生成n道四则运算题目,n由使用者输入 支持整数和分数 支持多运算符 能够判断正误,错误时能提醒并输出正确答案 能计算出正确率 能多次生成题目,直到使用者选择退出 后续拓展的可能 题目去重 文件: 处理生成题目并输出到文件 完成题目后从文件读入并判题 多语言支持:简体中文, 繁體中文, English 二.设计思路(同时输出UML类图) 首先考虑生成题目. 随机生成题目,用到Random函数,生成题目应该是同时随机生成数字和四

20165214 结队编程项目-四则运算(第二周)

20165214 第一次结队编程项目--四则运算第二周 需求分析 本周的结队编程想要实现一个四则运算系统,它可以自动生成n个计算题(本周不包括分数),其中n由我们输入.每输出一道题目,运行程序的人需要输入相应的答案,直到最后一道题做完.最后,统计正确率.然后,在这个基础上可以进行相应的功能扩展,比如语言支. 设计思路 我需要在上周的基础上对程序进行补充.在题目的生成上,应该再加上括号.÷./ 本周达成: ①能够随机生成n道题目,n由我们输入,最大长度可直接在程序里面修改: ②支持真分数运算: ③

20165230 结对编程项目-四则运算 整体总结

20165230 结对编程项目-四则运算 整体总结 一.需求分析 随机生成题目 生成的题目个数从命令行输入 用户可选择生成不同难度的题目,比如通过参数指定: (1) 运算符个数范围 (2) 运算符限定(小学一年级题目只生成 + - 题目) 能多次生成题目 题目运算(判题) 支持多运算符 支持整数 支持真分数 题目合法性判断 可独立使用 可用于测试生成题目的正确性 扩展需求 题目去重 支持多语言 处理生成题目并输出到文件 完成题目后从文件读入并判题 二.设计思路 设计一个IntNumber类,用来