作业四则运算第二版提交

1.题目要求:

可怜的二柱子同学,老师又对他的自动出题系统提出了新的要求:

  (1)、题目避免重复;
  (2)、可定制(数量/打印方式);
  (3)、可以控制下列参数: 是否有乘除法、是否有括号、 数值范围、加减有无负数、除法有无余数、否支持分数 (真分数,   假分数, …)、是否支持小数 (精确到多少位)、打印中每行的间隔可调整;

2.设计思想:

  1.题目要求:题目避免重复
  将每个算式的第一个数存到一个数组,每次生成第一个数组的时候回溯一遍如果有重复就重新生成。
  2.可定制(数量、打印方式)
  接受用户输入的一个参数来控制打印的数量
  3.是否有乘除法
  将整个算法分成两个部分,一部分有四则运算,另一部分只有加减
  4.是否有括号
  把生成的算式分成两元和三元两种选择
  5.数值范围的限定
  对rand函数做运算处理,使之生成的数在一定范围之内
  6.加减有无负数
  生成两个数之后比较一下,保证前者大于后者
  7.除法有无余数
  生成两个数之后,把这两者做%处理,确保结果为0
  8.是否支持分数假分数,真分数
  将这一点作为限定条件放到第三点问题上一起处理(未实现)
  9.是否支持小数(精确到多少位)
  处理位置与3相同,精确到多少位(未实现)
  10.打印中每行位置的间隔可调整
  在打印每一条数据间控制回车符的数量


  使用语言软件:由于用户输入参数太多,打算使用C#来设计。

  整个程序的构架,因为选择很多,我把选择点全都放在一个while循环里,将选择量简化,在循环里分模块,这样程序看上去比较精简而且清楚

3.程序源代码

  

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace suanshu
{
    
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            shuliang.Text = "10";
            chengchu.Text = "";
            kuohao.Text = "";
            amout1.Text = "0";
            amout2.Text = "100";
            fushu.Text = "";
            xiaoshu.Text = "";
            yushu.Text = "";
            fenshu.Text = "";
            hang.Text = "10";
            hangju.Text = "0";
        }
        Random ra = new Random(System.DateTime.Now.Millisecond);//时间毫秒数,取得随机数
        int rand(int num1, int num2)
        {
            int x;
           // Random ra = new Random(System.DateTime.Now.Millisecond);//时间毫秒数,取得随机数
            x = ra.Next(num1,num2);
            return x;
        }
        bool chongfu(int [] zu,int i,int num)
        {
            if(i==0)
            {
                return true;
            }
            else
            {
                int x=0,biaoji=1;
                while(x<i)
                {
                    if (zu[x] == num)
                    {
                        biaoji = 0;
                        break;
                    }
                    x++;
                }
                if (biaoji == 0)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
            
        }
        bool cefushu(int num1, int num2,int ifushu)
        {
            if (ifushu ==0)
            {
                if (num1 >= num2)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return true;
            }
        }
        bool ceyushu(int num1, int num2, int iyushu)
        {
            if (iyushu == 0)
            {
                if (num1%num2==0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return true;
            }
        }
        bool sushu(int num,int iyushu)  //检测是否是素数
        {
            if (iyushu == 1)
            {
                return false;
            }
            else
            {
                int i = 2, j = num / 2,biaoji=0;
                while (i <= j)
                {
                    if (num % i == 0)
                    {
                        biaoji = 1;
                        break;
                    }
                    i++;
                }
                if (biaoji == 1)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            int ishuliang = Convert.ToInt16( shuliang.Text.Trim());
            int ichengchu,ikuohao,iamout1,iamout2,ifushu,iyushu,ifenshu,ixiaoshu,ihang,ihangju;//获取变量参数
            iamout1 = Convert.ToInt16(amout1.Text.Trim());
            iamout2 = Convert.ToInt16(amout2.Text.Trim());
            ihang = Convert.ToInt16(hang.Text.Trim());
            ihangju = Convert.ToInt16(hangju.Text.Trim());
            if (chengchu.Text.Trim() == "")
            {
                ichengchu = 1;
            }
            else
            {
                ichengchu = 0;
            }
            if (kuohao.Text.Trim() == "")
            {
                ikuohao = 1;
            }
            else
            {
                ikuohao = 0;
            }
            
            if (fenshu.Text.Trim() == "")
            {
                ifenshu = 1;
            }
            else
            {
                ifenshu = 0;
            }
            if (fushu.Text.Trim() == "")
            {
                ifushu = 1;
            }
            else
            {
                ifushu = 0;
            }
            if (yushu.Text.Trim() == "")
            {
                iyushu = 1;
            }
            else
            {
                iyushu = 0;
            }
            if (xiaoshu.Text.Trim() == "")
            {
                ixiaoshu = 1;
            }
            else
            {
                ixiaoshu = 0;
            }
            int i = 0,j=0;
            int num1, num2,p,num3,bj;
            int [] zu;
            string [] zufu={"+","-","*","/"};
            string[] zufu1 = { "+", "-" };
            zu=new int[ishuliang];
                while (i < ishuliang)
                {
                    j = 0;
                    num1 = rand(iamout1, iamout2);   //rand函数是生成一个随机数
                    while (true)
                    {
                        if (j >= ishuliang)
                        {
                            break;
                        }

                        if (chongfu(zu, i, num1))                //chongfu函数是检测产生的数与前面有木有重复
                        {
                            zu[i] = num1;
                            break;
                        }
                        num1 = rand(iamout1, iamout2);   //rand函数是生成一个随机数
                        j++;
                    }
                    string sign,sign1;
                    if (ichengchu == 1)
                    {
                        sign = zufu[rand(0, 4)];
                    }
                    else
                    {
                        sign = zufu1[rand(0, 2)];
                    }
                    if (sign == "/")
                    {
                        if (sushu(num1, iyushu))  //排除素数因素,否则会导致死循环
                        {
                            num2 = 1;
                        }
                        else
                        {
                            while (true)
                            {
                                num2 = rand(iamout1, iamout2);
                                if (num2 == num1) //为了排除出现同一个数相除这种简单的题目
                                {
                                    continue;
                                }
                                if (num2 != 0 && cefushu(num1, num2, ifushu) && ceyushu(num1, num2, iyushu))//num2!=0要放在最前面,防止ceyushu函数中除数为0
                                {
                                    break;
                                }
                            }
                        }
                    }
                    else if (sign == "-")
                    {
                        while (true)
                        {
                            num2 = rand(iamout1, iamout2);
                            if (cefushu(num1, num2, ifushu))
                            {
                                break;
                            }
                        }
                    }
                    else
                    {
                        num2 = rand(iamout1, iamout2);
                    }
                    bj = rand(0,3);
                    if (ikuohao == 1)  //选择有无括号
                    {
                        num3 = rand(iamout1, iamout2);
                        if (ichengchu == 1)
                        {
                            sign1 = zufu[rand(0, 4)];
                        }
                        else
                        {
                            sign1 = zufu1[rand(0, 2)];
                        }
                        if (bj == 0)
                        {
                            textBox1.Text += num1 + sign + num2 + sign1 + num3 + "=  ";
                        }
                        else if (bj == 1)
                        {
                            textBox1.Text += "(" + num1 + sign + num2 + ")" + sign1 + num3 + "=  ";
                        }
                        else
                        {
                            textBox1.Text += num1 + sign +"("+ num2 + sign1 + num3 + ")"+"=  ";
                        }
                    }
                    else
                    {
                        textBox1.Text += num1 + sign + num2 + "=  ";
                       
                    }
                    if (ihang == 0)    //设定每行题目的数量
                    {
                    }
                    else
                    {
                        if ((i % (ihang )) == (ihang-1))
                        {
                            p=0;
                            while(p<=ihangju)
                            {
                                textBox1.Text += "
";   //设置行距
                                p++;
                            }
                        }
                    }
                    i++;
                }
            }
        private void button2_Click(object sender, EventArgs e) //清空
        {
            textBox1.Text = "";
        }
    }
}

4.程序截图实现

5.工作记录表格

                                                                                                                           周活动总结表

                                姓名:柴珏辉                                      

                                日期:2015.3.10

日期       任务

听课

编写程序

阅读课本

准备考试

日总计

周日

周一

周二

 2

 0.5

 2.5

周三

 2.5

 0.5

 3

周四

 1.5

 0.5

 2

周五

 2

 2

周六

 0.5

 0.5

 1

周总结

 4

 4.5

 2

 10.5

                                           二、时间记录表:

                                学生        柴珏辉                                             日期         3.10              

                                教师        王建民                                             课程           PSP       

日期

开始时间

结束时间

中断时间

净时间

活动

备注

 3.10

 8:00

 10:00

 2

 上课

 软件工程课

 3.11

 10:30

 11:30

 1

 编程

 完成四则运算题作业

 3:30

 5:00

 0.5

 1

 编程

 同上

 9:10

 9:40

 0.5

 编程

 同上

 3.12

 4:30

 5:30

 1

 编程

 同上

 3.14

 21:30

 22:00

 0.5

 编程

同上

                                    三、缺陷记录日志:

                  学生       柴珏辉    

                  日期      3.10      

                  教员       王建民   

                  程序号                

日期

编号

类型

引入阶段

排除阶段

修复时间

修复缺陷

 3.11

 1

 编译

 编译

 5min

 Rand函数的new如果在函数中,运行的时候一直出现同一个数

 3.11

 2

 编译

编译 

2min 

 Rand.next(x,y)生成的数a,应该是x<=a<y

 3.11

 3

 设计

 编译

 10min

 在解决除法没有余数的问题中,没有考虑到素数这一因素,导致程序出现死循环

 3.11

 4

 编译

 编译

 1min

C#中,10不能代表bool值,要用truefalse

3.12

5

编译

编译

2min

多了一个大括号

3.12

6

编译

编译

15min

设置自动分行代码时,运行程序出错

原文地址:https://www.cnblogs.com/boluoland/p/4338915.html