二柱子2

一、问题描述:

一、要求:
    1、题目避免重复
    2、可定制(数量/打印方式)
    3、可以控制下列参数:是否有乘除法,是否有括号,数值范围,加减有无负数,除法有无余数,是否支持分数(真分数假分数),

         是否支持小数(精确到多少位),打印中每行的间隔。

二、问题分析:

  问题一:题目避免重复

    srand(time(NULL))函数;
  问题二:可定制(数量/打印方式)

    数量:将题目数量以数组的形式让用户输入;
    打印方式:以用户的输入数字来选择打印方式,几行几列...;

  问题三:可以控制:是否有乘除法、是否有括号、数值范围、加减有无负数、除法有无余数、是否支持分数(真假分数,、、、)
      是否支持小数(精确带多少位)、打印中每行间隔可调整

    在选则有无上述各种数,用数字0,1表示有无。

三、源代码:

#include<iostream.h>
#include<stdlib.h>
#include<time.h>

void main( )
 {
     srand(time(NULL));//避免题目重复
     int i,j, x,y,t,b;//x,y表示两个数随机数,i表示题目的数量,t,b是在两个数相减中保证结果为正定义的变量
     int a[7];
      cout<<"请输入要打印的题目数:"<<endl;   
      cin>>a[0];
      while(a[0]<=0)  //题目数必须为正数
      {
          cout<<"请重新输入有效的题目数:"<<endl;
          cin>>a[0];
      };
      cout<<"请选择否有乘除法(是1;否0):"<<endl;
      cin>>a[1];
      while((a[1]!=1)&&(a[1]!=0)) //只能选择1或0
      {
          cout<<"请重新输入有效的数值:"<<endl;
          cin>>a[1];
      };
      cout<<"请输入运算数的范围:"<<endl;
      cin>>a[2];
      while(a[2]<=0)  //运算数必须为正数
      {
          cout<<"请重新输入有效的范围:"<<endl;
          cin>>a[2];
      };
     cout<<"请选择结果有无负数(是1;否0):"<<endl;
     cin>>a[3];
     while((a[3]!=1)&&(a[3]!=0))  //只能选择1或0
     {
         cout<<"请重新输入有效的数值:"<<endl;
         cin>>a[3];
     };
     cout<<"请选择结果有无余数(是1;否0):"<<endl;
     cin>>a[4];
     while((a[4]!=1)&&(a[4]!=0))  //只能选择1或0
     {
         cout<<"请重新输入有效的数值:"<<endl;
         cin>>a[4];
     };
     cout<<"请输入要打印的列数: "<<endl;
     cin>>a[5];
     while(a[5]<=0)
     {
         cout<<"请重新输入有效列数:  "<<endl;
         cin>>a[5];
     };
     cout<<"请输入每行间隔数: "<<endl;
     cin>>a[6];

for(i=0;i<a[0];i++)
    {
        if(a[1]==1)//有乘除法的运算
        {
            t=rand()%4;
        }
        else//无乘除法的运算
        {
            t=rand()%2;
        }
        x=rand()%a[2]+1;
        y=rand()%a[2]+1;
        if(t==0)//加法
        {
            
          
           if((i+1)%a[5]==0)//判断是否换行
           {
               cout<<endl;
           if(a[6]!=0)
           {
               for(j=0;j<a[6];j++)
               {
                   cout<<‘\t‘;
               }
           }
           }
           cout<<i+1<<"·"<<x<<"+"<<y<<"="<<endl;
           
        }
        if(t==1)//减法,考虑是否存在负数
        {
            if(a[3]==0)//不存在结果负数
            {
                b=x;
                x=y;
                y=b;

}
            if(a[3]==1)//存在结果是负数
            {

}
            
            
             if((i+1)%a[5]==0)//判断是否换行
             {
                 cout<<endl;
             
               
               if(a[6]!=0)//如果间隔数不是零
               {

for(j=0;j<a[6];j++)
                   {
                       cout<<‘\t‘;
                   }
               }
             }
             cout<<i+1<<"·"<<x<<"-"<<y<<"="<<endl;
        }
        if(t==2)//乘法
        {
            
            
             if((i+1)%a[5]==0)//判断是否换行
           {
              
               if(a[6]!=0)
               {
                   cout<<endl;
               
                   for(j=0;j<a[6];j++)
                   {
                       cout<<‘\t‘;
                   }
               }
             }
             cout<<i+1<<"·"<<x<<"*"<<y<<"="<<endl;

}
        if(t==3)//除法,考虑结果是否有余数
        {
            if(a[4]==1)//结果有余数
            {}
            else
            {
                while(x%y!=0)//不能整除,重新生成随机函数
                {
                    x=rand()%a[2]+1;
                    y=rand()%a[2]+1;
                };

}
        
            
             if((i+1)%a[5]==0)//判断是否换行
           {
               cout<<endl;
             
               if(a[6]!=0)
               {
                   for(j=0;j<a[6];j++)
                   {
                       cout<<‘\t‘;
                   }
               }
             }
        cout<<i+1<<"·"<<x<<"/"<<y<<"="<<endl;
        }
    }
    cout<<"结束,欢迎下次使用"<<endl;
}

运行结果截图:

五、总结

  在本次编程中,有很多小的问题,但是确实我们平时不注意的问题,本来最初的想法是一层一层函数的调用,但是调用函数学的不是很明白,所以造成很多错误,后来又想用if或者switch语句各种嵌套,但是又出现很多代码重复,虽然思路不难,但是没什么技术含量,最后我又分情况讨论,把各种限制条件加到加减乘除每种情况下,这样只是打印输出需要重复写,其余的限制条件就不必了。所以我知道每次编写程序前,必须做到胸中有沟壑,并把详情仔细的过滤下,从中找到最好的解决方案。

还有一点要改进当然地方是,列数总是输出不对,我就不截图了,以后会改进。

六、周活动总结表


项目计划总结

周活动总结表

姓名:张瑶                                                       日期:2016/3/9


任务

日期


听课


编程


阅读课外数目


锻炼身体


写老师留得作业


业余活动


日总计

(分钟)


周日


100


30


130


周一


400


30


430


周二


200


30


60


290


周三


100


60


30


60


120


370


周四


200


30


30


40


300


周五


200


100


30


40


370


周六


40


30


40


120


230


阶段时间和效率

周数:1


总计


60


415


410


370


420


490


230


平均


30


69


68


61


70


67


46


最大


30


400


200


100


200


200


60


最小


30


15


30


30


30


30

2,时间记录日志:

学生:张瑶                                                                     日期:2016/3/9

老师:王建民                                                                      课程:PSP


日期


开始时间


结束时间


中断时间


净时间


活动


备注


3/8


08:00


12:00


40


200


上课


14:30


15:30


60


构思程序


16:00


17:00


60


写作业


21:00


21:30


30


读构建之法


3/9


08:00


10:00


20


100


听课


11:00


12:00


60


编程


14:00


15:00


60


写作业


21:00


21:30


30


读构建之法


3/10


10:00


12:00


20


100


听课


14:00


14:30


30


编程


15:00


16:00


60


写作业


21:00


21:30


30


读构建之法


3/11


08:00


12:00


40


200


听课


14:00


15:40


100


编程


21:00


21:30


30


读构建之法

3,缺陷记录日志:

学生:张瑶                                                                    日期:2016/3/9

老师:王建民


日期


编号


类型


引入阶段


排除阶段


修复阶段


修复缺陷


3/8


1


001


编程


编译


15min


描述:函数定义错误


2


002


编程


编译


10min


描述:函数调用出现错误


3/9


3


003


编程


编译


2


描述:switch语句掌握不好


4


004


编程


编译


10min


描述:输入时换行,导致错误


3/10


5


005


编程


编译


5min


描述:输出混乱


3/11


6


006


编程


编译


5min


描述:

在运行时,输出的格式不是按要求的输出的,原因是if语句插入的位置不正确

时间: 2024-10-20 03:25:56

二柱子2的相关文章

二柱子四则运算3

二柱子四则运算3 可怜的二柱子……又一次被坑了…… 老师又在上次的“二柱子四则运算2”的基础上增添了要求,如下: 1.学生写的程序必须能判定用户的输入答案是否正确.直到题目结束,告诉用户做对了几道题. 2.程序必须能处理四种运算的混合模式. 注意:连续的减法和除法,应该遵守左结合的规定. 连续除法要打括号,否则会引起歧义. 一.实验思路 二.实验源代码 三.实验总结和反思 最后,附上我和我的小伙伴的工作照……没有正脸.老师们不要介意啦啦啦~~~~ 小伙伴博客内容页:http://www.cnbl

二柱子的难题02

老师又向二柱子提出一些要求,二柱子很崩溃 具体要求如下: 题目避免重复 可定制(数量/打印方式) 可控制参数    1是否有乘除法    2是否有括号    3数值范围    4加减法有无负数    5除法有无余数 可怜的二柱子经过8h的奋战,终于在01版本的基础上改出了满足要求的02版本 1 #include <iostream> 2 #include <iomanip> 3 #include <fstream> 4 #include <ctime> 5

二柱子四则运算定制版+升级版

题目:在上次程序的基础上,实现对连除的判断,并且实现多个数的混合运算,要求可以输入结果,并进行判断. 思路:基于上次程序,首先思考混合运算,这里运用两个数组,分别记录随机产生的运算数和运算符号.然后对连除进行判断,,检查运算符号数组里是否有连续的除号,有的话加上括号,避免歧义.最后对运算结果进行计算,并对用户输入的结果进行比较,给出相应提示,回答,计算方面,要优先对括号,乘除进行运算,然后再进行加减运算,每次运算完后都要记录下运算的结果. 代码: //吕广浩 3/19 #include<iost

RIGHT-BICEP单元测试——“二柱子四则运算升级版”

RIGHT-BICEP单元测试 ——“二柱子四则运算升级版” ”单元测试“这对于我们来说是一个全新的专业含义,在上了软件工程这门课,并当堂编写了简单的"求一组数中的最大值"函数的单元测试之后,我们对它有了全新的认识. 单元测试:即为, 老师让我们回去之后将“二柱子四则运算升级版”的程序进行单元测试(二柱子程序的源码我已经上传,这里不再重复,只列举单元测试的部分和分析),如下: PS.这里附上老师上课讲的关于RIGHT-BICEP测试的方法: 6个值得测试的具体部位,他们能够提高我们的测

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

程序设计思想 程序的主要设计思想为用字符串数组保存生成的运算题,将操作数采用单独算法处理,然后进行类型转换和操作符一起存入数组中,鉴于字符串的特性,可以对字符串的长度进行随意添加而不必考虑长度问题,最后进行字符串数组的输出产生客户要求的运算题; 源代码 #include<stdlib.h> #include<conio.h> #include<time.h> #include<iostream> #include<string> #include

150313 那个可怜的二柱子同学

今天的软件工程概论课,老师出了这么个问题: 可怜的二柱子同学,老师又对他的自动出题系统提出了新的要求: 题目避免重复 可定制(数量.打印方式): 可以控制下列参数:是否有乘除法.数值范围.加减有无负数.除法有无余数.是否支持分数(真分数.假分数): 我想了两种解决方法: 一.使用数据库: 避免重复:随机数及符号大量生成录入数据库,生成md5,数据库查询(Select Distinct MD5,第一整数,符号,第二整数 from 题目表). 定制:输入框,输入题目数量.打印方式可以用[x++ if

二柱子的出题软件

二柱子的软件 支持真分数的四则运算 可定义出题数量 #define _CRT_SECURE_NO_DEPRECATE#include<stdio.h>#include<Windows.h>#include<time.h>int main(){ int a, b, c, d, e, f, g, k; float p, q; printf("请输入想要の数量"); scanf("%d",&k); srand(unsigned(

二柱子2.0编程总结

                                                                                时间记录表: 学生         王美仪                单位(分钟)         日期        2018.10.8             教师         王建民 日期 开始时间 结束时间 中断时间 净时间 活动 备注 2018.10.8 18:30 19:52 0 82 编程 基本完成 2018310.

二柱子升级版

一.实验思路二柱子的老师又提出了新的要求,要求能在线答题,保存错题.为了避免主函数代码过于重复,将"生成某一个范围内的随机数"."生成随机的分数"."生成一个运算符"."判断整数的正负并取相反数"."把int类型装换为string类型".以及"含有括号的运算"."含有真分数的运算"和"不含真分数的运算"等封装成函数.为了避免定义整型变量,计算时强制

苦逼的二柱子的四则运算问题

问题:二柱子将做好的项目交给了老师,几天后又得到新的需求:   1.实现在线答题:   2.答题结束后,可以判断对错:   3.并将错题的结果保存起来 #include<iostream>#include<stdarg.h>#include<stdlib.h>#include<time.h>#include<math.h>using namespace std;int main(){cout<<endl;cout<<&qu