zoukankan      html  css  js  c++  java
  • 作业四则运算第二版提交

    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

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

  • 相关阅读:
    题解 CF171G 【Mysterious numbers
    题解 P1157 【组合的输出】
    题解 P3955 【图书管理员】
    题解 P2036 【Perket】
    题解 CF837A 【Text Volume】
    题解 CF791A 【Bear and Big Brother】
    题解 CF747A 【Display Size】
    题解 P1332 【血色先锋队】
    题解 P2660 【zzc 种田】
    题解 P4470 【[BJWC2018]售票】
  • 原文地址:https://www.cnblogs.com/boluoland/p/4338915.html
Copyright © 2011-2022 走看看