作业四则运算第二版提交

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 += "\r\n";   //设置行距
                                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#中,1和0不能代表bool值,要用true和false


3.12


5


编译


编译


2min


多了一个大括号


3.12


6


编译


编译


15min


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

时间: 2024-10-15 00:29:46

作业四则运算第二版提交的相关文章

四则运算第二版

题目要求:在第一次原有的功能的基础上增加以下功能: 1.避免题目的重复 2.可定制(可定制题目数量\打印方式) 3.控制参数的生成: a.是否允许乘除发的生成    b.是否允许有括号的生成(最多支持十个数参与运算)    c.可以设定数值范围的范围 d.是否负数参与运算   e.除法是否有余数 我的代码如下:

团队作业八——第二次团队冲刺(Beta版本)第4天

团队作业八--第二次团队冲刺(Beta版本)第4天 一.每个人的工作 (1) 昨天已完成的工作 做一下用户注册的功能和登录功能. (2) 今天计划完成的工作 完成界面跳转 (3) 工作中遇到的困难 界面跳转涉及到逻辑性相对复杂,所以具体做的时候会出现一些小的问题. (4) 每个人的贡献比 二.燃尽图 三.代码 package com.example.asus.app_sizeyunsuan; import android.content.Intent; import android.suppor

团队作业八——第二次团队冲刺(Beta版本)第5天

团队作业八--第二次团队冲刺(Beta版本)第5天 一.每个人的工作 (1) 昨天已完成的工作 完成界面跳转界面. (2) 今天计划完成的工作 简单模式逻辑代码涉及与相关功能的具体实现 (3) 工作中遇到的困难 错题本功能完成过程中遇到一些问题 (4) 每个人的贡献比 二.燃尽图 三.代码 package com.example.asus.app_sizeyunsuan; import android.os.Environment; import android.support.v7.app.A

C语言实现词频统计——第二版

原需求 1.读取文件,文件内包可含英文字符,及常见标点,空格级换行符. 2.统计英文单词在本文件的出现次数 3.将统计结果排序 4.显示排序结果 新需求: 1.小文件输入. 为表明程序能跑 2.支持命令行输入英文作品的文件名 3. 支持命令行输入存储有英文作品文件的目录名,批量统计 4. 从控制台读入英文单篇作品,重定向输出 代码实现: 在原代码的基础上稍做了修改,使之可以批量读取文件夹下的所有文件,所以加了一个mode来判断是单个文件输入还是文件夹输入,来不及整理程序,所以现在程序有点丑.这次

读《构建之法 现代软件工程(第二版)》

1.读后感: 对于计算机相关专业的学生来说,我们学习了很多的专业课程,像编程语言.算法.数据结构.编译原理.软件工程等.但是我相信很多同学和我一样仍然对于我们现在学到的课程在之后有什么用心存疑惑.也就是说,大家都觉得理论和实践之间有着不可逾越的鸿沟.然而在读到邹欣老师的这本书<构建之法 现代软件工程(第二版)>的时候,我解决了我一直纠结的这个问题. 因为作业要求,第一遍是快速阅读,虽然仍然对书里的一些内容有些疑问,但是仍然觉得这本书有很多特点: (1)文字+图画:很多专业书都有一个问题就是整本

(备忘)Nginx中文手册(技术指南第二版)

Nginx 常见应用技术指南[Nginx Tips] 第二版 目 录 一. Nginx 基础知识二. Nginx 安装及调试三. Nginx Rewrite四. Nginx Redirect五. Nginx 目录自动加斜线:六. Nginx Location七. Nginx expires八. Nginx 防盗链九. Nginx 访问控制十. Nginx日志处理十一. Nginx Cache十二. Nginx 负载均衡十三. Nginx简单优化十四. 如何构建高性能的LEMP环境十五. Ngin

四则运算界面版结对

四则运算界面版编译环境 Eclipse开发人员 周伟雄 学号 201306114339队友 邵家文 学号 201306114322 博客:http://www.cnblogs.com/shaojiawen/ 1.程序支持正整数四则运算,支持分数,除法保留两个小数2.可以出表达式李含有的负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不带括号3用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数4用户在第一次答题时,需要用户输

汇编语言 王爽第二版 总结

汇编语言 王爽第二版 总结,所以内容都是8086的 summary asssembly ,汇编总结 why: 最初始的编程语言就是使用打孔机,打出来的0 1 代码,然后把卡片插入到电脑中运行然后 看输出结果,这种纯01的二进制代码,编写困难调试困难运行结果的显示看着也很蛋疼,就像 一个简单的"hello world",11个字符,需要11×8个二进制,并且再进行输出,就更麻烦,因为 全部都是二进制,代码.为了更高效的开发程序,就出现了汇编语言,用来代替二进制代码的输入. what: 汇

结对作业——四则运算 Part3. 对于结对编程的总结与思考

结对作业--四则运算 Part3. 对于结对编程的总结与思考 PB15061303 刘梓轩PB16061489 艾寅中 GITHUB 地址 戳这里 目录 Part 1. Core代码编写部分 Part 2. 封装与对接相关问题 Part 3. 对于结对编程的总结与思考 关于结对 View:(From 艾中) 不得不说,结对编程给笔者带来了一次全新的编程体验.就领航员与驾驶员的分工而言,刘承担了生成和计算的大部分任务,笔者(艾)负责了显示和输出部分的函数. 首先我作为领航员的时候,实际上是有点懵的