四则运算(二)

一、题目及题目要求:编写程序,随机输出小学四则运算题目。

1.避免出题重复

2.可定制(打印数量/打印方式)

3.实现控制下列参数:是否有乘除法、是否有括号、数值范围、加减有无负号、除法有无余数、是否支持分数(真分数、假分数)、是否支持小数(精确到多少位)、打印中每行的间隔可以调整。

二、设计思路

    避免出题重复:利用srand函数,让随机数每次产生的不一样。

    可定制:通过对数量的键入,在for循环中使循环次数小于键入值。

    是否有乘除法:条件判断,用条件约束输出中符号的随机情况。

    数值范围:在产生随机数时通过键入控制模,从而使运算数不超过此范围。

    加减有无负号:判断两操作数,第一操作数若比第二操作数小则此次循环作废,重复循环。

    除法有无余数:判断第一操作数模第二操作数的结果,若为0即可输出。

三、代码

#include<iostream.h>
#include<stdlib.h>
#include<time.h>
int main()
{  
    srand(time(NULL)); 
    int sm;              //sm 即题目的数量
    char cc;             //cc 即算式中有无乘除
    char ys;             //ys即有无余数
    int sz;              //sz 即数值取值范围
    char zf;             //zf即加法运算出不出现正负
    char fh;             //fh即四则运算中的加减乘除
    int ls;              //ls即输出的列数
    cout<<"请输入您需要的题目数目:   ";
    cin>>sm;
    cout<<"运算中需要乘除法吗?(y/n)";
    cin>>cc;
    if(cc=='y')
    {
        cout<<"除法中需要出现余数吗?(y/n)";
        cin>>ys;
    }
    cout<<"请输入运算数的最大取值范围:";
    cin>>sz;
    cout<<"减法中出现负数吗?(y/n)";
    cin>>zf;
    cout<<"您想输出几列?";
    cin>>ls;
    cout<<"***********************************************"<<endl;
    for(int i=0;i<sm;i++)          //for循环中用sm来控制循环次数
    {   
        int a=rand()%sz;     
        int b=rand()%sz; 
        int c;
        if(cc=='y')                //此处判断用不用到乘除法
            c=rand()%4;   
        else if(cc=='n')
            c=rand()%2;
        if(c==0)                   //此处判断运算符号
        {           
            fh='+';   
        }     
        if(c==1)   
        {           
            fh='-';   
        }  
        if(c==2)   
        {           
            fh='*';   
        }    
        if(c==3)   
        {           
            fh='/';   
        }
        if(c==3&&b==0)            //除数不能为0
        {
            i--;
            continue;
        }
        if(c==1&&zf=='n'&&a<b)     //减法结果不为负数
        {
            i--;
            continue;
        }
        if(c==3&&ys=='n'&&a%b!=0)  //除法结果不产生余数
        {
            i--;
            continue;
        }
        cout<<i+1<<""<<a<<fh<<b<<'='<<"         ";
        if((i+1)%ls==0)            //控制输出的列数
        {
            cout<<endl;
        }
    }
    cout<<"***********************************************"<<endl;
    return 0;
}

四、运行截图

五、总结

    这次实验是在上一次实验的基础上的一个提升,在编程过程中遇到了很多问题和错误,最后也能自己找出来并改正。真的感觉很久没有这么用力的去写这么多代码了,有找到了那种编出一段代码,发现一个错误后的激动心情。

六、周活动总结表

姓名:范德一                        日期2015.3.15

日期   任务 听课  编写程序 阅读课本 准备考试     日总计

周二

100 30 10       140

周三

  30         30

周四

100 60 10       170

周五

  30         30

周六

  30         30

周日

  120         120

周总结

200 300 20       520

阶段时间和效率                                            周数(上一次周活动表的周数+1):

不包括上一周在内的累计时间      

总计

 200

 300

 20

 

 

 

 520

平均

 200

 300

 20

 

 

 

 520

最大

 200

 300

 20

 

 

 

 520

最小

 200

 300

 20

 

 

 

 520

 以前各周的累计时间      

总计

 200

 300

  20

 

 

 

 520

平均

 200

300

  20

 

 

 

 520

最大

 200

300

 20

 

 

 

 520

最小

 200

300

  20

 

 

 

 520

二、时间记录表:

学生        范德一                                            日期   2015315 

教师        王建民                                             课程        软件工程      

日期

开始时间

结束时间

中断时间

净时间

活动

备注

 3.10

 22:15

 22:45

 无

30

编写程序 

作业 

 3.11

22:00

22:30

 无

30

编写程序

作业

 3.12

21:30

22:30

60

编写程序

作业

3.13

21:15

21:45

30

编写程序

作业

 3.14

22:10

22:40

 无

30

编写程序

 作业

 3.15

 9:00

 11:00

 无

 120

 编写程序

 作业

 

三、缺陷记录日志:

学生           范德一       

日期     2015315 

教员          王建民         

程序号                         

日期

编号

类型

引入阶段

排除阶段

修复时间

修复缺陷

 3.10

 1

 A

编译

编译

3min

 

 在cc==‘n’时,n没有用单引号引上

 3.12

 2

A

编译

 编译

5min

 

 让程序中的for循环继续运行用的break而不是 continue

 3.12

 3

B

运行

运行后

10min

 

 一次循环不成立后继续运行for循环,忘记了i--

 3.15

4

A

编译

编译

1min

 

漏掉;

3.15

5

B

运行

运行后

10min

 

判断除法没有余数时 if(c==3&&ys=='n'&&a%b!=0),落下了c==3这个条件

原文地址:https://www.cnblogs.com/fan123/p/4339590.html