四则运算出题2

1、题目要求:

      完成一个程序,自动出四则运算题,范围可以自定,包括加减乘除(有无乘除可以选择),有无括号,有无真分数、负数参与运算,两数除法有无余数,打印方式等均可自主选择。

2、实现思路:

     程序自动出题,运算数和运算符号都是随机,有无括号,有无真分数、负数参与运算,两数除法有无余数,打印方式等均自主选择。。

      (1)先自动出一道题,重复过程所需次数即可;

      (2)出一道题,要分为很多部分:第一个数、运算符号、第二个数、运算符号、第三个数……最少两个数参与运算,根据需要循环产生  符号和数字,知道数字个数满足要求;

      (3)两个数可以直接用随机数产生,四个运算符可以用产生的随机数(1~4)来一一对应,用随机产生的1、2来决定有无乘除,若无乘除,只产生1~2决定加减,若有乘除,产生1~4决定加减乘除;

      (4)用随机产生的1、2来决定两个数的除法有无余数,若有余数,其他可任意出题,若无余数,出现的数值不符合要求,则重新出题,直至满足要求;

      (5)用随机产生的1、2 来决定产生的数是真分数或是整数,如果是真分数,可以用随机产生的两个整数来组成一个分数,将较小的数作为分子即可成为真分数;

      (6)用随机产生的1、2来决定是否有负数,若有负数,需要在输出数值之前输出一个负号,为了区别运算符和负号,需要将整个负数用括号括起来;

      (7)用随机产生的1、2来决定打印方式,即一行有几道题;

      (8)用随机产生的1、2来决定是否有括号,若有括号,随机数来决定左右括号位置;

3、思路整理(实现步骤):

     (1)用随机产生的1、2 来决定第一个数是真分数或是整数,随机产生一个整数或是两个整数组成真分数作为第一个运算数,用随机产生的1、2 来决定第一个数是真分数或是整数,如果可以有负数,用随机数决定产生的数是否为负数,若为负数,将产生的数前加个负号,并用括号括起来,一个数产生

     (2)用产生的随机数1、2用产生的随机数(1~2或1~4)来决定产生的运算符号,分别对应(+-×÷)

     (3)同(1),产生第二个数

     (4)重复(2)(3),产生所需数量的数

     (5)随机产生1、2决定有无括号,再随机产生一个数,决定左右括号的位置

     (6)若除法无余数,重新出第二个数,直到满足为止

4、源代码:

  1 //四则运算出题软件,可以控制有无余数,负数,乘除,括号,真分数,数的范围,打印方式等
  2 //王永维,2016、3、12
  3 
  4 using System;
  5 using System.Collections.Generic;
  6 using System.ComponentModel;
  7 using System.Data;
  8 using System.Drawing;
  9 using System.Linq;
 10 using System.Text;
 11 using System.Windows.Forms;
 12 using System.IO;
 13 
 14 namespace 出题程序
 15 {
 16     public partial class Form1 : Form
 17     {
 18         int youwuchengchu=2;//有无乘除,1 有,2 无
 19         int youwuyushu=1;//有无余数,1 有,2 无
 20         int youwufushu=2;//有无负数,1 有,2 无
 21         int youwukuohao=2;//有无括号,1 有,2 无
 22         int youwuzhenfenshu=2;//有无真分数,1 有,2 无
 23         int min=1, max=100;//数值范围
 24         int countti=10,countshu=2;//题数,数值数,初始为10,2
 25         int count = 1;//数数值个数
 26         int shu1, shu2;
 27         int temp;//用于交换shu1,shu2
 28         int yushu;//用于存储余数
 29         int fuhao;
 30         int dayin=1;//设置打印方式
 31         int randshu;//数值类型随机
 32         int randfushu;//正负符号随机
 33         int kuohaolocation;//左括号的随机位置
 34 
 35         Random A = new Random();//随机数产生
 36         void zhengshu()//产生随机数
 37         {
 38             if (youwuzhenfenshu == 1)// 含有真分数
 39             {
 40                 randshu = A.Next(1, 3);
 41                 if (randshu == 1)
 42                 {
 43                     shu1 = A.Next(min, max);
 44                     shu2 = A.Next(min, max);
 45                     if (shu1 < shu2)
 46                         richTextBox1.Text = richTextBox1.Text + shu1 + "/" + shu2;
 47                     else
 48                         richTextBox1.Text = richTextBox1.Text + shu2 + "/" + shu1;
 49                 }
 50                 else
 51                 {
 52                     shu1 = A.Next(min, max);
 53                     richTextBox1.Text = richTextBox1.Text + shu1;
 54                 }
 55             }
 56             if (youwuzhenfenshu == 2)// 全为整数
 57             {
 58                 shu1 = A.Next(min, max);
 59                 richTextBox1.Text = richTextBox1.Text + shu1;
 60             }           
 61         }
 62         void creatshu()
 63         {
 64             if (youwufushu == 1)//含有负数
 65             {
 66                 randfushu = A.Next(1, 3);
 67                 if (randfushu == 1)
 68                 {
 69                     if (youwuzhenfenshu == 1)// 含有真分数
 70                     {
 71                         randshu = A.Next(1, 3);
 72                         if (randshu == 1)
 73                         {
 74                             shu1 = A.Next(min, max);
 75                             shu2 = A.Next(min, max);
 76                             if (shu1 < shu2)
 77                                 richTextBox1.Text = richTextBox1.Text +"(-"+ shu1 + "/" + shu2+")";
 78                             else
 79                                 richTextBox1.Text = richTextBox1.Text +"(-"+ shu2 + "/" + shu1+")";
 80                         }
 81                         else
 82                         {
 83                             shu1 = A.Next(min, max);
 84                             richTextBox1.Text = richTextBox1.Text + shu1;
 85                         }
 86                     }
 87                     else// 全为整数
 88                     {
 89                         shu1 = A.Next(min, max);
 90                         richTextBox1.Text = richTextBox1.Text + "(-" + shu1 + ")";
 91                     }
 92                     
 93                 }
 94                 else
 95                 {
 96                     zhengshu();
 97                 }
 98             }
 99             else
100             {
101                 zhengshu();
102             }
103         }
104         void creatfuhao()//产生运算符号
105         {
106             //if(youwukuohao==1)
107             if (youwuchengchu == 1)
108             {
109                 fuhao = A.Next(1, 5);
110                 if (fuhao == 1)
111                     richTextBox1.Text = richTextBox1.Text + "";
112                 else if (fuhao == 2)
113                     richTextBox1.Text = richTextBox1.Text + "";
114                 else if (fuhao == 3)
115                     richTextBox1.Text = richTextBox1.Text + " × ";
116                 else
117                     richTextBox1.Text = richTextBox1.Text + " ÷ ";
118 
119             }
120             if (youwuchengchu == 2)
121             {
122                 fuhao = A.Next(1, 3);
123                 if (fuhao == 1)
124                     richTextBox1.Text = richTextBox1.Text + "";
125                 else
126                     richTextBox1.Text = richTextBox1.Text + "";
127             }
128         }
129 
130         public Form1()
131         {
132             InitializeComponent();
133         }
134 
135         private void Form1_Load(object sender, EventArgs e)
136         {
137 
138         }
139         private void textBox1_TextChanged(object sender, EventArgs e)
140         {
141             min = int .Parse(textBox1.Text);
142         }
143         private void textBox2_TextChanged(object sender, EventArgs e)
144         {
145             max = int.Parse (textBox2.Text);
146         }
147         private void textBox3_TextChanged(object sender, EventArgs e)
148         {
149             countti = int.Parse(textBox3.Text);
150         }
151         private void radioButton1_CheckedChanged(object sender, EventArgs e)
152         {
153             if (radioButton1.Checked == true)
154                 youwuchengchu = 1;
155         }
156         private void radioButton2_CheckedChanged(object sender, EventArgs e)
157         {
158             if (radioButton2.Checked == true)
159                 youwuchengchu = 2;
160         }
161         private void radioButton3_CheckedChanged(object sender, EventArgs e)
162         {
163             if (radioButton3.Checked == true)
164                 youwufushu = 1;
165         }
166         private void radioButton4_CheckedChanged(object sender, EventArgs e)
167         {
168             if (radioButton4.Checked == true)
169                 youwufushu = 2;
170         }
171         private void radioButton5_CheckedChanged(object sender, EventArgs e)
172         {
173             if (radioButton5.Checked == true)
174                 youwuyushu = 1;
175         }
176         private void radioButton6_CheckedChanged(object sender, EventArgs e)
177         {
178             if (radioButton6.Checked == true)
179                 youwuyushu = 2;
180         }
181         private void radioButton7_CheckedChanged(object sender, EventArgs e)
182         {
183             if (radioButton7.Checked == true)
184                 youwuzhenfenshu = 1;
185         }
186         private void radioButton8_CheckedChanged(object sender, EventArgs e)
187         {
188             if (radioButton8.Checked == true)
189                 youwuzhenfenshu = 2;
190         }
191         private void radioButton9_CheckedChanged(object sender, EventArgs e)
192         {
193             if (radioButton9.Checked == true)
194                 dayin = 1;
195         }
196         private void radioButton10_CheckedChanged(object sender, EventArgs e)
197         {
198             if (radioButton10.Checked == true)
199                 dayin = 2;
200         }
201         private void radioButton11_CheckedChanged(object sender, EventArgs e)
202         {
203             if (radioButton11.Checked == true)
204                 youwukuohao = 2;
205         }
206         private void radioButton12_CheckedChanged(object sender, EventArgs e)
207         {
208             if (radioButton12.Checked == true)
209                 youwukuohao = 1;
210         }
211         private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
212         {
213             countshu = int.Parse(comboBox1.Text);
214         }
215         private void button1_Click(object sender, EventArgs e)
216         {
217             richTextBox1.Text = "出题结果:\n";
218 
219             if (youwuyushu==1)//可以有余数
220             {
221                 for (int i = 0; i < countti; i++)
222                 {
223 
224                     if (youwukuohao==1)
225                     {
226                         int randnum = A.Next(1, 100);
227                         if (randnum < 10)
228                         {
229                             youwukuohao = 2;
230                         }
231                         else
232                             youwukuohao = 1;
233                        
234                     }
235                     //产生括号位置
236                     for (int j=0;j<10 ;j++ )//只循环十次,若有合适位置,则产生;若没有,则位置为1
237                     {
238                         kuohaolocation = A.Next(1, 10);
239                         if (countshu > 2 && kuohaolocation < (countshu - 1))
240                         {
241                             break;
242                         }
243                         kuohaolocation = 1;
244                     }
245 
246 
247                     //输出题号
248                     richTextBox1.Text = richTextBox1.Text + "(" + (i + 1) + ")\t";
249 
250                     //产生第一个数
251                     creatshu();
252                     //产生运算符号
253                     creatfuhao();
254                     //第二个数前产生左括号
255                     if (youwukuohao == 1 && kuohaolocation == 1 && countshu > 2 && kuohaolocation < (countshu - 1))
256                     {
257                         richTextBox1.Text = richTextBox1.Text + "(";
258                     }                 
259                     //产生第二个数
260                     creatshu();
261                     for (count = 2; count < 10; count++)
262                     {
263                         if (count == countshu)//判断数值个数够不够
264                         {
265                             break;
266                         }
267 
268                         //产生运算符号
269                         creatfuhao();
270                         if (youwukuohao == 1 && kuohaolocation == count  && countshu > 2 && kuohaolocation < (countshu - 1))
271                         {
272                             richTextBox1.Text = richTextBox1.Text + "(";
273                         }  
274                         //产生第3……10个数
275                         creatshu();
276 
277                     }
278                     
279                     //在末尾添加右括号
280                     if (countshu > 2 && kuohaolocation < (countshu - 1) && youwukuohao == 1)
281                     {
282                         richTextBox1.Text = richTextBox1.Text + " )";
283                     }
284                     if (dayin == 1)//打印方式,一列或者两列
285                     {
286                         richTextBox1.Text = richTextBox1.Text + " =\n";
287                     }
288                     else
289                     {
290                         if (i % 2 == 0)//打印方式,一列或者两列
291                         {
292                             richTextBox1.Text = richTextBox1.Text + " =\t\t\t\t";
293                         }
294                         else
295                         {
296                             richTextBox1.Text = richTextBox1.Text + " =\n";
297                         }
298 
299                     }
300                 }
301             }
302             else//不可以有余数
303             {
304                 for (int i = 0; i < countti; i++)
305                 {
306                     //输出题号
307                     richTextBox1.Text = richTextBox1.Text + "(" + (i + 1) + ")\t";
308 
309                     //产生第一个数
310                     shu1 = A.Next(min, max);
311 
312                     //产生运算符号
313                     fuhao = A.Next(1, 5);
314 
315                     if (fuhao==4)//如果是除法
316                     {
317                         for (; ; )//使两数相除没有余数,大数为 shu1
318                         {
319                             //产生第二个数
320                             shu2 = A.Next(min, max);
321                             if (shu1 < shu2)
322                             {
323                                 temp = shu2;
324                                 shu2 = shu1;
325                                 shu1 = temp;
326                             }
327                             yushu = shu1 % shu2;
328                             if (yushu==0)
329                             {
330                                 break;
331                             }
332                         }
333                     }
334 
335                     //输出第一个数
336                     if (youwufushu == 1)//含有负数
337                     {
338                         randfushu = A.Next(1, 3);
339                         if (randfushu == 1)
340                         {
341                             richTextBox1.Text = richTextBox1.Text + shu1;
342                         }
343                         else
344                         {
345                             richTextBox1.Text = richTextBox1.Text + "(-" + shu1 + ")";
346                         }
347                     }
348                     else
349                     {
350                         richTextBox1.Text = richTextBox1.Text + shu1;
351                     }
352 
353                     //输出运算符
354                     if (youwuchengchu == 1)
355                     {
356                         if (fuhao == 1)
357                             richTextBox1.Text = richTextBox1.Text + "";
358                         else if (fuhao == 2)
359                             richTextBox1.Text = richTextBox1.Text + "";
360                         else if (fuhao == 3)
361                             richTextBox1.Text = richTextBox1.Text + " × ";
362                         else
363                             richTextBox1.Text = richTextBox1.Text + " ÷ ";
364                     }
365                     if (youwuchengchu == 2)
366                     {
367                         if (fuhao == 1||fuhao==3)
368                             richTextBox1.Text = richTextBox1.Text + "";
369                         else
370                             richTextBox1.Text = richTextBox1.Text + "";
371                     }                  
372 
373                     //输出第二个数
374                     if (youwufushu == 1)//含有负数
375                     {
376                         randfushu = A.Next(1, 3);
377                         if (randfushu == 1)
378                         {
379                             richTextBox1.Text = richTextBox1.Text + shu2;
380                         }
381                         else
382                         {
383                             richTextBox1.Text = richTextBox1.Text + "(-" + shu2 + ")";
384                         }
385                     }
386                     else
387                     {
388                         richTextBox1.Text = richTextBox1.Text + shu2;
389                     }
390                     //在末尾添加右括号
391                     if (countshu>2&&kuohaolocation < (countshu - 2) && youwukuohao == 1)
392                     {
393                         richTextBox1.Text = richTextBox1.Text + " )";
394                     }
395 
396                     if (dayin==1)//打印方式,一列或者两列
397                     {
398                         richTextBox1.Text = richTextBox1.Text + " =\n";
399                     }
400                     else
401                     {
402                         
403                         if (i%2 == 0)//打印方式,一列或者两列
404                         {
405                             richTextBox1.Text = richTextBox1.Text + " =\t\t\t";
406                         }
407                         else
408                         {
409                             richTextBox1.Text = richTextBox1.Text + " =\n";
410                         }     
411                     }
412                 }
413             }
414         }
415         private void button2_Click(object sender, EventArgs e)
416         {
417             //string s = richTextBox1.Text;
418             //s = s.Replace("\n", "\r\n");
419             //StreamWriter myStream;
420             //saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
421             //saveFileDialog1.FilterIndex = 2;
422             //saveFileDialog1.RestoreDirectory = true;
423             //if (saveFileDialog1.ShowDialog() == DialogResult.OK)
424             //{
425             //    myStream = new StreamWriter(saveFileDialog1.FileName);
426             //    myStream.Write(richTextBox1.Text); //写入
427             //    myStream.Close();//关闭流
428             //}
429             //自动设置路径和名称,但txt文本中不能自动换行,不知何原因
430             richTextBox1.SaveFile("出题.txt", RichTextBoxStreamType.PlainText);//保存在 bin 目录debug 下
431         }
432     }
433 }

5、运行结果

项目计划日志(单位:h):

  听课 编写程序 阅读相关书籍 网上查找资料   日总计
周一 2 4 1 0 7
周二  0 2  0  0 2
周三  0 3  1  0 4
周四 2 2  0  0 4
周五  0 6 2 0 8
周六  0 4 0  0 4
周日          
周总计 4 21 0 4 29

时间记录日志(单位:min):

日期 开始时间 结束时间 中断时间 净时间 活动 备注
星期一 14:00 15:50 10(课间) 100 听课 软件工程上课
  16:20 17:40 0 80 看一些资料,编程 自学delphi,利用delphi7完成了一个计算器简单程序
  19:30 21:40 0 130
星期二 19:30 21:30 0 120 编程 四则运算2的程序
星期三 14:00  15:00 0  60 编程 四则运算2的程序
  19:00 21:30 0 150 编程
星期四 14:00 15:50 10(课间) 100 听课 软件工程上课
  19:30 21:50 0 100 编程 四则运算2的程序
星期五 14:00 17:00 0 180 编程 四则运算2的程序
  18:30 21:50 0 150 编程 四则运算2的程序
星期六 8:00 11:30 20(去同学宿舍学习交流) 200 修改,调试,发布 四则运算2程序进行修改、调试、写博客并发布
  14:00 15:40   100 修改博客  

 

这次换用了C#编写此程序,随机数的定义方法有了改变,很多都是因为语言不通,语法不同导致的错误

 

缺陷记录日志:

  出现的问题 修复所用时间(min)
    1     随机数产生的函数有问题,跟C++有所不同 10
2 if 语句太多,逻辑关系出错 20
3 break在for循环中的放置有问题 10
4 最后的输出txt,txt文本中不能换行 30
posted @ 2016-03-12 09:46  David~Wang  阅读(329)  评论(1编辑  收藏  举报