软件工程个人作业2

1》题目要求:

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

1、题目避免重复;
2、可定制(数量/打印方式);
3、可以控制下列参数:

*是否有乘除法;

*是否有括号(最多可以支持十个数参与计算);

*数值范围;

*加减有无负数;

*除法有无余数!

2》设计思想:

这次编程主要是在上一次的基础之上,作进一步的要求,然后实现不同方式的输出。

1)题目避免重复的实现:先定义三个数组,然后再循环时将产生的运算符和两个运算数(随机产生的三个数)存入数组,每进行一次循环,就将数组中的数和前面的相比,如果两个运算符和运算数都和前面某一组数相等,那么重新产生一组随机数,实现避免重复。

2)可定制的实现:打印数量,就是输入一个数,然后进行该数次循环,然后输出。打印方式主要是可以在屏幕上输出,也可以实现输出到一个记事本文件中,这用到了输入输出流 的知识。

3)1.是否有乘除法,用if语句实现,如果有乘除法,则进一步选择是否有余数,我的程序是对有余数的选择直接输出,如果没有余数,就是被除数减去余数在输出。

2.数值范围:可以定义一个数s,用随机数rand()%s 就是产生1~s的随机数。

3.加减法无负数,就是保证后一个数比前一个数大,有负数,在其中加入负号。

ps:是否括号功能较难,暂时还未实现

源代码:

//四则运算2
//2016 3 14 Sunzhe
#include<fstream>
#include<iostream>
using namespace std;

void chengchufa(int m,int s)
{
  int v;
  int j[100],k[100],l[100];//用于检查重复的数组
  cout<<"请输入选择:1.有余数 2.无余数:"<<endl;
  cin>>v;
  for(int i=0;i<m;i++)
  {
    int n=rand()%4; //产生随机数,运算符
    int a=rand()%s;//产生1~s随机数
    int b=rand()%s;//产生1~s随机数
    j[i]=n;
    k[i]=a;
    l[i]=b;
    for(int r=i-1;r>=0;r--)//向前检查重复,如果重复则重新生成
    {
      if(j[r]==j[i]&&k[r]==k[i]&&l[r]==l[i])
      {
          int n=rand()%4; //产生随机数,运算符
          int a=rand()%s;//产生1~s随机数
          int b=rand()%s;//产生1~s随机数
       }
    }

    if(n==0)

    {
      cout<<a<<"+"<<b<<"="<<endl;
    }
    else if(n==1){
      cout<<a<<"-"<<b<<"="<<endl;
    }
    else if(n==2){
      cout<<a<<"*"<<b<<"="<<endl;
    }
    else{
      if(a<b)//实现被除数比除数大
      {
        int w;
        w=a;
        a=b;
        b=w;
      }
      if(b==0)
      {
        b++;
      }
      if(v==1)//有余数
      {
        cout<<a<<"/"<<b<<"="<<endl;
      }
      if(v==2)
      {
        a=a-a%b;
        cout<<a<<"/"<<b<<"="<<endl;
      }
    }
  }
}

void jiajianfa(int m,int s){

    int u;
    int j[100],k[100],l[100];//用于检查重复的数组
    cout<<"请输入选择:1有负数 2无负数"<<endl;
    cin>>u;
    for(int i=0;i<m;i++)
    {
      int n=rand() %2;//产生随机数,运算符的

      int a=rand()%s;//产生1~s随机数
      int b=rand()%s;//产生1~s随机数
      j[i]=n;
      k[i]=a;
      l[i]=b;
      for(int r=i-1;r>=0;r--)
      {
        if(j[r]==j[i]&&k[r]==k[i]&&l[r]==l[i])
        {
            int n=rand()%4; //产生随机数,运算符
            int a=rand()%s;//产生1~s随机数
            int b=rand()%s;//产生1~s随机数
        }
      }

      if(u==1) //有负数
      {
        if(n==0)
        {
            cout<<"(-"<<a<<")+"<<b<<"="<<endl;
        }
        else
        {
            cout<<a<<"-"<<b<<"="<<endl;
        }
      }
      if(u==2)//无负数
      {
          if(a<b)//实现减法无负数
          {
            int w;
            w=a;
            a=b;
            b=w;
          }
          if(n==0)
          {
              cout<<a<<"+"<<b<<"="<<endl;
          }
          else
          {
              cout<<a<<"-"<<b<<"="<<endl;
          }
      }
    }

}
void dayinfangshi(int m,int s){
    int t;
    cout<<"请输入选择1.在屏幕输出2.在文件输出"<<endl;
    cin>>t;
    if(t==1)
    {
      for(int i=0;i<m;i++)
      {
        int n=rand()%4; //产生随机数,运算符
        int a=rand()%s;//产生1~s随机数
        int b=rand()%s;//产生1~s随机数

        if(n==0){
          cout<<a<<"+"<<b<<"="<<endl;
        }
        else if(n==1){
          cout<<a<<"-"<<b<<"="<<endl;
        }
        else if(n==2){
          cout<<a<<"*"<<b<<"="<<endl;
        }
        else{
          if(a<b)//实现被除数比除数大
          {
            int w;
            w=a;
            a=b;
            b=w;
          }
          if(b==0)
          {
            b++;
          }
          cout<<a<<"/"<<b<<"="<<endl;
        }
      }
     }
     if(t==2)
    {
        ofstream outfile("f1.dat",ios::out);//定义文件流对象,打开磁盘文件f1.dat
        if(! outfile) //如果打开失败返回0值
        {
            cerr<<"open error!"<<endl;
            exit(1);
        }
        for(int i=0;i<m;i++)
        {
            int n=rand()%4; //产生随机数,运算符
            int a=rand()%s;//产生1~s随机数
            int b=rand()%s;//产生1~s随机数

            if(n==0){
              outfile<<a<<"+"<<b<<"="<<endl;
            }
            else if(n==1){
              outfile<<a<<"-"<<b<<"="<<endl;
            }
            else if(n==2){
              outfile<<a<<"*"<<b<<"="<<endl;
            }
            else{
              if(a<b)//实现被除数比除数大
              {
                int w;
                w=a;
                a=b;
                b=w;
              }
              if(b==0)
              {
                b++;
              }
              outfile<<a<<"/"<<b<<"="<<endl;
            }
        }
        outfile.close();
    }
}

void main()
{
  int x;//进行选择的数
  q:cout<<"请选择要进行的运算:1.整数运算 2.真分数运算 3.退出程序"<<endl;
  cin>>x;
  switch(x)
  {
    case 1://进行整数的运算
    {
      int m;//题目的数量
      cout<<"请输入想打印的数量:"<<endl;
      cin>>m;

      int s;//数值范围
      cout<<"请输入想要计算的数值范围(1~ 你输入的数):"<<endl;
      cin>>s;
      int t;
      cout<<"请输入选择:"<<endl;
      cout<<"1.有乘除法"<<endl;
      cout<<"2.无乘除法"<<endl;
      cout<<"3.打印方式"<<endl;
      cin>>t;
      if(t==1){//有乘除法
        chengchufa(m,s);

      }
      if(t==2)//无乘除法
      {
        jiajianfa(m,s);
      }
      if(t==3)
      {
        dayinfangshi(m,s);
      }
    goto q;
    }
    case 2:
    {
      for(int i=0;i<30;i++)
      {
          int c=rand()%100;//产生1~100随机数
          int d=rand()%100;//产生1~100随机数
          int e=rand()%100;//产生1~100随机数
          int f=rand()%100;//产生1~100随机数

          //保证为真分数
          if(c>d)
          {
            int t;
            t=d;
            d=c;
            c=t;
          }
          if(e>f)
          {
            int s;
            s=f;
            f=e;
            e=s;
          }
          if(d==0){d++;} //分母不为零
          if(f==0){f++;} //分母不为零
          //约分化为最简
          for(int a=c;a>0;a-- )
          {
            if(c%a==0&&d%a==0)
            {
              c=c/a;
              d=d/a;
              break;
            }
          }
          for(int b=e;b>0;b-- )
          {
            if(e%b==0&&f%b==0)
            {
              e=e/b;
              f=f/b;
              break;
            }
          }

          int n=rand() %4; //产生运算符的随机数

        if(n==0){
          cout<<c<<"/"<<d<<"+"<<e<<"/"<<f<<"="<<endl;
        }
        else if(n==1){
          cout<<c<<"/"<<d<<"-"<<e<<"/"<<f<<"="<<endl;
        }
        else if(n==2){
          cout<<c<<"/"<<d<<"*("<<e<<"/"<<f<<")="<<endl;
        }
        else
        {
          cout<<c<<"/"<<d<<"/("<<e<<"/"<<f<<")="<<endl;
        }
    }
    goto q;
  }
  case 3:
  {
    exit(0);
  }

 }
}

3》运行结果截图:

时间: 2024-10-05 17:27:36

软件工程个人作业2的相关文章

软件工程第一次作业补充

软件工程第一次作业的补充 对于作业"在一周之内快速看完<构建之法>,列出你不懂的5-10个问题". 作业要求有: (1)在每个问题后面,请说明哪一章节的什么内容引起了你的提问,提供一些上下文 (2)列出一些事例或资料,支持你的提问 (3)说说你提问题的原因,你说因为自己的假设和书中的不同而提问,还是不懂书中的术语,还是对推理过程有疑问,还是书中的描述和你的经验(直接经验或间接经验)矛盾? 例如:我看了这一段文字 (引用文字),有这个问题 (提出问题):我查了资料,有这些说法

软件工程教学作业 汇总

本篇文章收集并整理各位教师在博客园中发表的软件工程教学作业,希望为各位老师.学生和爱好者提供便利. 如果博文作者提出异议或意见,本人虚心接受并诚恳道歉. 小林觉 http://www.cnblogs.com/juking/ 学年 学期 作业 链接 简介 2015-2016 1 1 http://www.cnblogs.com/juking/p/4787124.html http://www.cnblogs.com/juking/p/4803578.html   2015-2016 1 2 htt

软件工程第一次作业程序开发历程

收到软件工程的作业,面对题目“......”.我先拟定了一个大概的思路,以及一些关键的函数.思路利用循环产生30道算术式,并计算答案,存储答案,在利用循环显示30道题的答案. 而关键函数我认为就是随机正整数的产生.考虑到这点,我决定用javascript来编写我的程序,其一是因为最近学习js,其二是因为对c和c++有点陌生了,然后javascript有Math.random这个函数,尽管它只能产生0与1之间的随机数.决定完语言后,我又分析了下题目,考虑到涉及真分数的问题,我将程序分成整数与真分数

软件工程个人作业02-1

老师对自动出题的系统又有了新的功能: 1.是否有乘除法: 2.是否有括号:最多可支持十个数参与计算 3.数值范围: 4.加减结果有无负数: 5.除法结果有无余数: (因为和上文的思路有些交汇,不懂的可以参考上文 >>点击这里参考上文) 下面是我的思路: 1.是否有乘除法: 分条件设置a的值 如果选择无乘除:a=(int)(0+Math.random()*2);//a=0或a=1时分别对应着string数组的"+""-" 如果选择无乘除:a=(int)(0

软件工程结对作业02(借鉴版)

软件工程结对作业02(借鉴版) 在编写程序的时候因为不会将Java程序嵌入进jsp中所以借鉴了一个学姐的程序,下面是学姐的程序.但在对学姐程序就行修改时发现了一些问题: 在Newjsp中能调用html中的题目个数的参数 在Myjsp中不能调用html中的题目个数的参数 其中这个参数timugeshu,是我自己后来添加的,用来改变题目个数的,与Java程序无关,只在jsp文件中作用 源程序: NewFeil.html <!DOCTYPE html> <html> <head&g

软件工程课堂作业04

软件工程课堂作业04 源代码: 1 package jian; 2 import java.io.*; 3 import java.util.Scanner; 4 public class Point3D{ 5 public static int Lenght(int list[],int lenght) 6 { 7 int i,max; 8 max=list[0]; 9 for(i=1;i<=(lenght-1);i++) 10 { 11 if(list[i]>max) 12 { 13 ma

软件工程个人作业12

软件工程个人作业12 程序题目: •三人行设计了一个灌水论坛.信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子.坊间风闻该“水王”发帖数目超过了帖子数目的一半. •如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗? 一.设计思想 根据“水王”发帖数目超过了帖子数目的一半,通过寻找发帖数过半的ID找出“水王”. 二.源代码: 1 package finding; 2 3 impor

软件工程结对作业 四则运算界面设计

软件工程结对作业 四则运算界面设计 康鑫  PB16060203 娄雨禛  PB16060356 一.项目分析 二.进度规划与完成情况 三.主要函数 四.简单的数据测试 五.编程困惑与心得 原文地址:https://www.cnblogs.com/RainLou/p/8735480.html

作业八:软件工程学期作业总结

1.学习收获 A):你书写的代码量(多少行) 看到要统计书写代码量才想起自己在编码后没有妥善地保管好代码,而是删除整个工程项目或者在项目中删除以前的代码继续写下一次的.粗略地估计下,大三开学到现在,除了满课的日子,每天编写代码的数量都会在300行左右.(虽然觉得少得有点惭愧,但是每次都会因为学到很多东西感到充实). B):熟悉(了解)哪几个软件工具? MyEclipse:完成软工作业时,经常使用到. GitHub :会一些最基本的使用操作. 除此之外还有MY SQL,MYSQL SQL Serv

软件工程概论作业02

这周,我们上了软件工程概论第三节课,终于体会到的程序员的不易,作业一次比一次难,老师提出的要求越来越多,就像未来的客户一样,要求永远无止境. 这次还在上次的要求上提出了新的要求,要求可选择整数还是分数,可指定范围,不可重复. 可怜的二柱子同学,老师又对他的自动出题系统提出了新的要求: 可以控制下列参数: 是否有乘除法: 是否有括号(最多可以支持十个数参与计算): 数值范围: 加减有无负数: 除法有无余数! 日期 开始时间 结束时间 中断时间 净时间 活动 备注 C U 3/10 14:00 16