關於隨機四則運算的小程序


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

 

 創建鏈表時申請節點大小的空間(采用指針方式創建節點)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM