• 四则运算测试(修改后)


    (为了方便看出式子个数,我对程序做了稍加修改,加上了序号。)

    一、源代码

    #include<iostream.h>
    #include <stdlib.h>
    #include<time.h>
    char fuhao1()//构造自动随机生成符号"+、-、*、/"的函数
    {
        int fuhaos1;
        char a;
        fuhaos1=rand()%4;//取随机数
        switch(fuhaos1)//通过判断随机数值选择符号
        {
          case 0:a='+';break;
          case 1:a='-';break;
          case 2:a='*';break;
          case 3:a='/';break;
        }
        return a;
    }
    char fuhao2()//构造自动随机生成符号"+、-"的函数
    {
        int fuhaos2;
        char a;
        fuhaos2=rand()%2;//取随机数
        switch(fuhaos2)//通过判断随机数值选择符号
        {
          case 0:a='+';break;
          case 1:a='-';break;
        }
        return a;
    }
    typedef struct LNode//单链表存储结构,为实现避免重复
    {
        int first_1;
        int second_2;
        char ope;
        LNode *next;
    }LNode,*LinkList;
    void Initlist(LinkList &L)//构造一个空的单链表L,为实现避免重复
    {
        L=new LNode;
        L->next=NULL;
    }
    void Insert(LinkList &L,int f,char op,int s)//插入数据的函数
    {
        LNode *temp,*head;
        temp=new LNode;
        head=L;
        temp->first_1=f;
        temp->second_2=s;
        temp->ope=op;
        temp->next=NULL;
        while(head->next!=NULL)
        {
            head=head->next;
        }
        head->next=temp;
    }
    int ifrepeat(LinkList L,int a,char b,int c)// 是否有重复
    {
        LNode *head;
        int flag=0;
        head=L->next;
        while(head!=NULL)
        {
            if((head->first_1==a)&&(head->ope==b)&&(head->second_2==c))
                flag=1;
            head=head->next;
        }
        return flag;
    }
    void main()
    {
        LinkList L;
        int i,j,suijis1,suijis2,shul,fanwei1,fanwei2,jiange,rep;
        char fuh,yushu;
        char a;
        Initlist(L);
        cout<<"***************欢迎进行小学生运算测试*******************"<<endl;
        cout<<"请对您所需要的题目类型进行选择:"<<endl;
        cout<<"是否有乘除法(y/n):"<<endl;//输出所需要的选择条件,并输入对应参数
        cin>>fuh;
        cout<<"请输入你所需要的数值范围(最小最大值):"<<endl;
        cin>>fanwei1;
        cin>>fanwei2;
        cout<<"请输入打印中每行的间隔:"<<endl;
        cin>>jiange;
        cout<<"请输入除法有无余数(y/n)"<<endl;
        cin>>yushu;
        cout<<"请输入你所需要产生的题目数:"<<endl;
        cin>>shul;
        srand(time(NULL));//生成随机数的时候根据系统时间变化而变化
        for(i=0;i<shul;i++)//循环输出所需的题目数量
        {       
            for(j=0;j<jiange;j++)//控制题目行间隔
            {
               cout<<endl;
            }
            
    XH:        if(yushu=='y')//判断是否存在余数
            {    
                suijis1=fanwei1+rand()%(fanwei2-fanwei1+1);//生成随机数一
                if(fuh=='y')//判断是否有乘除号
                a=fuhao1();
                else
                a=fuhao2();
                suijis2=fanwei1+rand()%(fanwei2-fanwei1+1);//生成随机数二            
                rep=ifrepeat(L,suijis1,a,suijis2);
                if(rep==1)
                    goto XH;
                else
                {
                    Insert(L,suijis1,a,suijis2);//插入链表
                    cout<<"("<<i+1<<")"<<suijis1<<a<<suijis2<<"="<<endl;
                }
            }
            else 
            {    
                suijis1=fanwei1+rand()%(fanwei2-fanwei1+1);//生成随机数一    
                suijis2=fanwei1+rand()%(fanwei2-fanwei1+1);//生成随机数二
                if(suijis1%suijis2!=0)//判断是否存在余数
                {
                    a=fuhao2();//有余数则随机生成+、-符号运算
                }
                else
                {
                    if(fuh=='y')//判断是否有乘除号
                    a=fuhao1();
                    else
                     a=fuhao2();;//没有余数则随机生成四则运算
                }
                rep=ifrepeat(L,suijis1,a,suijis2);
                if(rep==1)
                    goto XH;
                else
                {
                    Insert(L,suijis1,a,suijis2);//调用检查是否重复的函数
                    cout<<"("<<i+1<<")"<<suijis1<<a<<suijis2<<"="<<endl;
                }
            }
            
        }
     }

    二、测试计划及结果

    1、首先检查题目数量,分别输入生成10个和10000个题目,取范围0-10按说取值范围生成10000个应该报错,但程序并未出现该情况,可能检查重复存在缺陷。之后用边界来检测,取范围(1,1),生成五个式子,按说如果重复才能实现,程序在生成四个式子后便停止了,说明检查重复正确,只是缺少报错机制。

    输入数量为10000:

    边界为(1,1)

    2、在生成式子中有零作为除数,缺少了一个排除机制,程序不够完善。在小个数内不会报错,也未检查出重复。

    3、检查是否输出程序符合客户要求,输入y存在乘除法,输入n不存在(由于条件时是否为y,所以输入其他字符也不会输出乘除法)。

    4、在输入不存在乘除法时,仍会提问是否有余数,程序有待完善。

    5、输入范围中存在负数时,负数出现时不会加括号,导致式子不规范。

    6、在输入不存在余数时,加减符号出现的次数大于乘除,存在缺陷。

  • 相关阅读:
    JavaSE:和网络相关的协议
    随机产生四位,任意位或者范围数字方法
    随机产生四位,任意位或者范围数字方法
    如何保留小数精度
    如何保留小数精度
    JDK开发环境搭建及环境变量配置详细教程
    JDK开发环境搭建及环境变量配置详细教程
    排序算法
    html中a标签如何设置行宽高
    MyEclipse10破解详细说明
  • 原文地址:https://www.cnblogs.com/gaoyang110/p/4340953.html
Copyright © 2020-2023  润新知