• 四则运算二(修改后)


    一:设计思想:1、首先将已生成的算式进行保存利用链表,可用检查链表是否相等的方式增加一个检查生成每个链表是否完全相等的函数,在循环过程生成中调用该函数,将新生成算式与已生成算式进行比较,如果重复则删除该式。
    2、增加一个参数,可供使用者输入,此为循环输出的控制条件,输出使用者想要的数量,并打印。
    3、增加用户选择项,选择后进入不同的输出方式,通过逐个对上述3中的条件进行判断,确定输出条件,选择自己想要的输出方式。
    (是否有乘除法/你所需要的数值范围/除法有无余数/打印中每行的间隔)

    二、源代码

    #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<<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<<suijis1<<a<<suijis2<<"="<<endl;
                }
            }
            
        }
     }

    三、结果截图

    四、实验总结

       想编一个完美的程序真的好难!小错误还容易解决,但如果遇到一个麻烦的错误,或自己没找到的错误,那将很费时间。所以,编程前的蓝图很重要,框架写好了,那些不容易发现的错误就会变少,会更节省时间。

       这里我用到的主要是循环和条件语句,因为生成条件只需回答是或者否所以用条件语句十分方便。输出数量主要用循环来控制,循环输出式子。在这里我定义了两个函数,一个输出四则运算式子,另一个只输出加减法。在下面是否有乘除法时,直接调用两者之一就行。数值的范围主要用随机生成数字式子来控制。没行间隔用循环输出回车来实现。有无余数主要是判断,同样调用上面两个函数,存在余数则去掉用加减函数。在这里要感谢帮助我的同学,实现避免重复时费了很大劲,最后在同学的帮助下,用链表解决了这一问题,数据结构要学好啊,要不有思路却不知道怎么去实现。将生成的式子用链表存储起来,依次比较,重复了则返回重新生成。

    五、表格

                                 周活动总结表

    姓名:高扬                                日期:2015.3.14

    日期任务

    听课(分)

    编写程序(分)

    阅读课本(分)

    准备考试(分)

     

     

    日总计(分)

    周日

     

     

     

     

     

     

     

    周一

     

     

     

     

     

     

     

    周二

     400

     

     30

     

     

     

     430

    周三

     100

     30

     20

     

     

     

     150

    周四

     300

     20

     20

     

     

     

     340

    周五

     200

     30

     15

     

     

     

     245

    周六

     

     40

     30

     

     

     

     70

    周总结(分)

     1000

     120

     115

     

     

     

     1235

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

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

    总计

     

     

     

     

     

     

     

    平均

     

     

     

     

     

     

     

    最大

     

     

     

     

     

     

     

    最小

     

     

     

     

     

     

     

    以前各周累计时间                                                                          

    总计

      1000

    120 

     115

     

     

     

    1235 

    平均

     1000

    120 

    115 

     

     

     

    1235 

    最大

     1000

     120

    115 

     

     

     

    1235 

    最小

     1000

    120 

    115 

     

     

     

    1235 

     

     

                                     时间记录表:

    学生         高扬                                           日期        2015.3.14   

    教师        王建民                                             课程           PSP       

    日期

    开始时间

    结束时间

    中断时间

    净时间

    活动

    备注

     2015.3.11

     8:00

     9:50

     10

     100

    听课

     计算机网络课程

     

     13:00

    13:20 

     

     20

    读书

     阅读《梦断代码》

     

    19: 34

     20:00

     

     26

    编写程序 

    考虑编程思路,写框架

     2015.3.12

    10:10

    12:00

    10

    100

    听课

    计算机接口技术课

     

    14:00

    15:50

    10

    100

    听课

    嵌入式开发技术上课

     

     16:30

     16:50

     

     20

     看书

     阅读《梦断代码》

     

     21:10

     21:30

     

     20

    编写程序

     实现部分功能

    2015.3.13

    8:00

    9:50

    10

    100

    听课

    软件工程课

     

    10:10

    12:00

    10

    100

    听课

    操作系统课

     

    12:45

    13:00

     

    15

    看书

    阅读《梦断代码》

     

    20:15

    20:45

     

    30

    编写程序

    实现部分功能

    2015.3.14

    10:15

    11:00

     

    45

    编写程序

     修改错误完善程序

     

     

     

     

     

     

    缺陷记录日志: 

    学生       高扬  

    日期       2015.3.14   

    教员       王建民   

    程序号           

    日期

    编号

    类型

    引入阶段

    排除阶段

    修复时间

    修复缺陷

    2015.3.12

     1

     

     编码

    编译 

     1min

     

     描述:缺少分号

    2015.3.12

     2

     

     编码

     编译

     1min

     

     描述:参数类型定义错误

     2015.3.13

     3

     

     编码

     编译

     1min

     

     描述:函数类型声明错误

    2015.3.14

     4

     

     编码

    执行

     2min

     

     描述:对随机数生成范围的控制条件写错,导致范围出错

    2015.3.14

    5

     

     编码

    执行

     2min

     

     描述:对函数调用不完善,加以补充

     

     

     

  • 相关阅读:
    【LCA】BZOJ1832 & BZOJ1787(AHOI)-集会
    【线段树+离散化】POJ2528-Mayor's posters
    JavaScript Array 整理
    常见的原生javascript DOM操作
    javascript中执行环境和作用域(js高程)
    javascript作用域链
    javascript执行环境及作用域
    [转]深入javascript——原型链和继承
    [转]深入javascript——构造函数和原型对象
    Java接口中的成员变量为什么必须声明为public static final?
  • 原文地址:https://www.cnblogs.com/gaoyang110/p/4338927.html
Copyright © 2020-2023  润新知