• 关于随机四则运算的小程序


    2015-03-12

    基本上是按上一篇博文中的思想,粗略的编写了一个beta版,不足也是有的,一些判断机智,程序的健壮性有待改进。

      1 #include<iostream>
      2 #include<time.h>
      3 using namespace std;
      4 typedef struct node{
      5     int num1;
      6     int num2;
      7     char ope;
      8     struct node *next;
      9 }node,*linknode;                                                        //定义三个操作数的数据结构,用于对产生数据的记录   
     10 
     11 void Math(int num,linknode &L,int chengchu,int fanwei,int yushu);       //产生数据
     12 void InitList(linknode &L);                                             //链表初始化
     13 void Insertlist(linknode &L,int one,int two,char thr);                  //插入数据
     14 int Serchlist(linknode L,int one,int two,char thr);                     //查询节点
     15 void Printrecord(linknode &L,int hang);                                 //输出数据
     16 void menu1();                                                           //大要求的菜单选项
     17 void choice(int *n);                                                    //对用户的提供的选择
     18 void menu2();                                                           //是否有乘除法,数值范围,打印中每行的间隔可调整,除法有无余数,
     19 void standerd(int *n,int *f,int *y,int *h);
     20 
     21 void main()
     22 {
     23     int num=5;        //出题数量
     24     int chengchucan=0;
     25     int fanweican=100;
     26     int yushucan=0;
     27     int hangcan=0;
     28     linknode l;
     29     InitList(l);
     30     choice(&num);    
     31     standerd(&chengchucan,&fanweican,&yushucan,&hangcan);
     32     Math(num,l,chengchucan,fanweican,yushucan);         //调用函数,产生数据
     33     Printrecord(l,hangcan);
     34 }
     35 
     36 void menu1()
     37 {
     38     cout<<"- - - - -  - - - - - - 菜单- - - - - - -- - - - - - "<<endl;
     39     cout<<"                   1.定制出题数量                   "<<endl;
     40     cout<<"                   2.定制打印                       "<<endl;                      //附加功能??
     41     cout<<"                   3.退出菜单                       "<<endl;
     42     cout<<"                   4.使用说明                       "<<endl;
     43     cout<<"- - - - -  - - ---------------二柱子- "<<endl;
     44 }
     45 
     46 void menu2()
     47 {
     48     cout<<"~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~菜单~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~"<<endl;
     49     cout<<"                   1.是否有乘除法                  "<<endl;
     50     cout<<"                   2.数值范围                       "<<endl; 
     51     cout<<"                   3.除法有无余数                   "<<endl; 
     52     cout<<"                   4.打印中每行的间隔可调整         "<<endl; 
     53     cout<<"                   5.退出菜单                       "<<endl;
     54     cout<<"~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~~ ~ ~ ~ ~ ~ ~ ~ 二柱子 ~"<<endl;
     55 
     56 }
     57 
     58 void choice(int *n)
     59 {
     60     int choi,number;
     61     menu1();
     62     cout<<"请输入选择"<<endl;
     63     cin>>choi;
     64     while(choi!=3)
     65     {
     66         switch(choi)
     67         {
     68         case 1:
     69             {
     70                 cout<<"请输入题目数量"<<endl;
     71                 cin>>number;
     72                 *n=number;
     73                 menu1();
     74                 cin>>choi;
     75                 break;
     76             }
     77         case 2:
     78             {
     79                 cout<<"定制打印"<<endl;
     80                 menu1();
     81                 cin>>choi;
     82                 break;
     83             }
     84         case 4:
     85             {
     86                 cout<<" 使用说明书"<<endl;
     87                 menu1();
     88                 cin>>choi;
     89                 break;
     90             }
     91             
     92         }
     93     }
     94 }
     95 
     96 void standerd(int *chengchu,int *fanwei,int *yushu,int *hangjian)
     97 {
     98     int select,can1,can2,can3,can4;
     99     menu2();
    100     cout<<"请输入选择"<<endl;
    101     cin>>select;
    102     while(select!=5)
    103     {
    104         switch(select)
    105         {
    106         case 1:          //是否有乘除法
    107             {
    108                 cout<<"请输入选择 0代表设定乘除法1代表不设定乘除法(程序默认拥有乘除法)"<<endl;
    109                 cin>>can1;
    110                 if(can1==1)
    111                     *chengchu=1;
    112                 menu2();
    113                 cin>>select;
    114                 break;
    115             }
    116         case 2:        //数值范围
    117             {
    118                 cout<<"请输入 您想要的出题数值范围(程序默认数值范围为100以内)"<<endl;
    119                 cin>>can2;
    120                 *fanwei=can2;
    121                 menu2();
    122                 cin>>select;
    123                 break;
    124             }
    125         case 3:       //除法有无余数 
    126             {
    127                 cout<<"请输入选择 0代表设定允许余数1代表不允许除法有余数(程序默认会有余数)"<<endl;
    128                 cin>>can3;
    129                 *yushu=can3;
    130                 menu2();
    131                 cin>>select;
    132                 break;
    133             }
    134         case 4:       //打印中每行的间隔可调整
    135             {
    136                 cout<<"请输入 您想要的打印题目之间的间隔(程序默认打印题目之间的间隔为0)"<<endl;
    137                 cin>>can4;
    138                 *hangjian=can4;
    139                 menu2();
    140                 cin>>select;
    141                 break;
    142             }
    143         }
    144     }
    145 
    146 }
    147 void Math(int num,linknode &L,int chengchu,int fanwei,int yushu)
    148 {
    149     srand(time(NULL));
    150     int a,b,c,rule;
    151     char d;
    152     int sancan=4;
    153     int onecan=100;
    154     if(chengchu==1)               //对乘除参数进行判断,为1时设置参数的改变
    155         sancan=2;
    156 
    157     onecan=fanwei;                //对数值范围的修改,默认为
    158     for(int x=0;x<num;x++)
    159     {        
    160         a=rand()%onecan;
    161          b=rand()%onecan;
    162         c=rand()%sancan;
    163         //cout<<"连续输入三个数"<<endl;       //测试产生数据相同时的结构是否成立
    164         //cin>>a>>b>>c;
    165         rule=0;
    166         switch(c)
    167         {
    168         case 0:
    169             d='+';
    170             break;
    171         case 1:
    172             d='-';
    173             break;
    174         case 2:
    175             d='*';
    176             break;
    177         case 3:
    178             d='/';
    179             break;
    180         } 
    181         rule=Serchlist(L,a,b,d);
    182         if(rule==0)
    183         {
    184             x--;
    185             //cout<<"ji zhi "<<endl;
    186         }
    187         else if(yushu==1&&c==3&&a%b!=0)
    188         {
    189             x--;
    190             cout<<"余数设置规则"<<endl;
    191         }
    192         else
    193             Insertlist(L,a,b,d);
    194         
    195     }
    196 }
    197 
    198 void InitList(linknode &L)
    199 {
    200     L=new node;
    201     L->next=NULL;
    202 }
    203 
    204 void Insertlist(linknode &L,int one,int two,char thr)
    205 {
    206     linknode p=L;
    207     while(p->next!=NULL)
    208         p=p->next;
    209     node * s=NULL;
    210     s = (node *) malloc (sizeof(node));
    211     s->num1=one;
    212     s->num2=two;
    213     s->ope=thr;
    214     s->next=p->next;
    215     p->next=s;
    216 }
    217 
    218 int Serchlist(linknode L,int one,int two,char thr)
    219 {
    220     if(L->next==NULL)
    221         return 1;
    222     linknode p=L->next;
    223     while(p!=NULL)
    224     {
    225         if(p->num1==one&&p->num2==two&&p->ope==thr)
    226             return 0;
    227         p=p->next;
    228     }
    229     return 1;
    230 }
    231 
    232 void Printrecord(linknode &L,int hang)
    233 {
    234     int a=hang;
    235     linknode p=L->next;
    236     while(p    !=NULL)
    237     {
    238         cout<<p->num1<<p->ope<<p->num2<<"="<<endl;
    239         while(hang>0)
    240         {
    241             cout<<endl;
    242             hang--;
    243         }
    244         hang=a;
    245         p=p->next;
    246     }
    247 }
    
    

    
    
      通过设计这些小应用,可以练习一些基本编程的数据结构,解决问题可以采用分部分的拆分题目,对题目进行模块化设计,但设计的模块一定要有顺序,新模块在已有的模块基础之上,所以应该保证设计新模块时,原有的基础是正确的,这样才能保证你是离成功越来越近的,而不是背道而驰。

    一、项目计划总结:

     

    第二周活动总结表

    姓名:赵小早                                       日期:3/10/2015

    日期       任务

    听课

    编写程序

    阅读课本

    准备考试

     

     

    日总计

    周日

     

     

     

     

     

     

     

    周一

     

     

     

     

     

     

     

    周二

     80

     100

     30

     

     

     

     

    周三

     80

     60

     

     

     

     

     

    周四

     

     60

     

     

     

     

     

    周五

     

     

     

     

     

     

     

    周六

     

     

     

     

     

     

     

    周总结

     

     

     

     

     

     

     

    二、时间记录表:

    学生      小早                                                  日期         3/10/2015              

    教师        王建民                                             课程           PSP       

    日期

    开始时间

    结束时间

    中断时间

    净时间

    活动

    备注

     3/10

     2:00

     4:00

     

     100

     编程

     

     3/11

     2:00

     4:00

     

     

     上课

     

     

     4:00

     6:00

     

     

     编程

     

     3/15

     3:00

    4 :00

     

     

     编程

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    三、缺陷记录日志:

    学生         小早  

    日期         310   

    教员       王建民   

    程序号                

    日期

    编号

    类型

    引入阶段

    排除阶段

    修复时间

    修复缺陷

     3/10

     20

     传入指针,操作指针

     设计

     编译

     5min

     

     对传入指针,传地址形式的操作参数,疏忽了加星号

     

     40

    链表创建

     设计

     编译

     5min

     

     创建链表时申请节点大小的空间(采用指针方式创建节点)

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    linux的crash之hardlock排查记录
    linux 巨页使用测试
    linux 巨页使用测试以及勘误1
    python判断两个list包含关系
    JavaScript--数据结构之栈
    JavaScript--数据结构与算法之列表
    js数组详解:
    基于jQuery的插件开发
    函数的理解:
    JS面向对象:
  • 原文地址:https://www.cnblogs.com/zZ-ily/p/4333814.html
Copyright © 2020-2023  润新知