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

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

  • 相关阅读:
    poj 1067||hdu 1527 取石子游戏(博弈论,Wythoff Game)
    CGAffineTransform属性
    自定义UITabBarController
    UISwitch用法:
    UIButton常见属性和方法
    xcode添加背景音乐/音效
    使用cocoaPods加载框架的具体步骤:
    UILabel
    NSString -- UILabel中字体有多种颜色,字符串自动计算高度/换行
    xcode 修改类名 变量名
  • 原文地址:https://www.cnblogs.com/boluoland/p/4338915.html
Copyright © 2011-2022 走看看