天天看點

四則運算出題器(c++)

一、設計思路

這次版本加入了一下功能:

可定制題目的數量:修改循環次數;

可以定制每行列印的題目數和行間距的大小(目前題目序号可以整除定制數時輸出輸入的行間距個換行符);

可以定制算式的範圍(修改随機數的最大值);

可以選擇有無乘除法(沒有乘除法即修改符号的情況,有四種改為兩種);

可以選擇減法中得數是否可以為負(不要負數的情況即比較減式中倆數大小,大數放前面)。

二、代碼

1 #include<iostream.h>
  2 #include<stdlib.h>
  3 #include<time.h>
  4 int main()
  5 {
  6     int Ques1=1;
  7     int Ques2=1;
  8     int Ques3=100;
  9     char Ques4='y';
 10     int Ques5=1;
 11     char Ques6='n';
 12     char Ques7='n';
 13 Again:
 14     cout<<"請輸入題目數量:";
 15     cin>>Ques1;
 16     cout<<"請輸入每行列印題目數(1-5):";
 17     cin>>Ques2;
 18     cout<<"請輸入算式中數值的最大值:";
 19     cin>>Ques3;
 20     while(1)
 21     {
 22         cout<<"運算中需要乘除法嗎?y:需要;n:不需要";
 23         cin>>Ques4;
 24         cout<<"減法運算需要有負數嗎?y:需要;n:不需要";
 25         cin>>Ques7;
 26         cout<<"行間距(正整數):";
 27         cin>>Ques5;
 28         srand(time(NULL));
 29         if(Ques4=='y')
 30         {
 31             while(1)
 32             {
 33                 if(Ques1<1)
 34                 {
 35                     cout<<"輸入有誤,請重新輸入:";
 36                     cin>>Ques1;
 37                 }
 38                 else
 39                 {
 40                     for(int j=0;j<Ques1;j++)
 41                     {
 42                         if(j!=0&&j%Ques2==0)
 43                         {
 44                             for(int i=0;i<Ques5;i++)
 45                             {
 46                                 cout<<endl;
 47                             }        
 48                         }
 49                         int num1=rand()%Ques3;
 50                         int num2=rand()%Ques3;
 51                         int sign=rand()%4;
 52                         switch(sign)
 53                         {
 54                         case 0:
 55                             cout<<j+1<<":"<<" "<<num1<<"+"<<num2<<"="<<"	";
 56                             break;
 57                         case 1:
 58                             if(Ques7=='y')
 59                             {
 60                                 cout<<j+1<<":"<<" "<<num1<<"-"<<num2<<"="<<"	";
 61                             }
 62                             else
 63                             {
 64                                 if(num1>num2)
 65                                 {
 66                                     cout<<j+1<<":"<<" "<<num1<<"-"<<num2<<"="<<"	";
 67                                 }
 68                                 else
 69                                 {
 70                                     cout<<j+1<<":"<<" "<<num2<<"-"<<num1<<"="<<"	";
 71                                 }
 72                             }
 73                             break;
 74                         case 2:
 75                             cout<<j+1<<":"<<" "<<num1<<"*"<<num2<<"="<<"	";
 76                             break;
 77                         case 3:
 78                             if(num2!=0)
 79                             {
 80                                 cout<<j+1<<":"<<" "<<num1<<"/"<<num2<<"="<<"	";
 81                             }
 82                             else
 83                             {
 84                                 j--;
 85                             }
 86                             break;
 87                         }
 88                     }
 89                     break;
 90                 }
 91             }
 92             break;
 93         }
 94         if(Ques4=='n')
 95         {
 96             while(1)
 97             {
 98                 if(Ques1<1)
 99                 {
100                     cout<<"輸入有誤,請重新輸入:";
101                     cin>>Ques1;
102                 }
103                 else
104                 {
105                     for(int j=0;j<Ques1;j++)
106                     {
107                         if(j!=0&&j%Ques2==0)
108                         {
109                             for(int i=0;i<=Ques5;i++)
110                             {
111                                 cout<<endl;
112                             }
113                         }
114                         int num1=rand()%Ques3;
115                         int num2=rand()%Ques3;
116                         int sign=rand()%2;
117                         switch(sign)
118                         {
119                         case 0:
120                             cout<<j+1<<":"<<" "<<num1<<"+"<<num2<<"="<<"	";
121                             break;
122                         case 1:
123                             if(Ques7=='y')
124                             {
125                                 cout<<j+1<<":"<<" "<<num1<<"-"<<num2<<"="<<"	";
126                                 break;
127                             }
128                             else
129                             {
130                                 if(num1>num2)
131                                 {
132                                     cout<<j+1<<":"<<" "<<num1<<"-"<<num2<<"="<<"	";
133                                     break;
134                                 }
135                                 else
136                                 {
137                                     cout<<j+1<<":"<<" "<<num2<<"-"<<num1<<"="<<"	";
138                                     break;
139                                 }
140                             }
141                             break;
142                         }
143                     }
144                 }
145                 break;
146             }
147             break;
148         }
149         
150         else
151         {
152             cout<<"輸入有誤,請按要求輸入!"<<endl;
153         }
154     }
155     cout<<endl;
156     while(1)
157     {
158         cout<<"還需要繼續出題還是退出?(y:繼續出題;n:退出)";
159         cin>>Ques6;
160         if(Ques6=='y')
161         {
162             goto Again;
163         }
164         if(Ques6=='n')
165         {
166             goto Exit;
167         }
168         else
169         {
170             cout<<"輸入有誤,請重新輸入:";
171         }
172     }
173 Exit:
174     return 0;
175 }      

三、運作結果

四、實驗總結

  在這次試驗中,我發現了我不會使用函數,導緻所有的代碼都是在主函數中完成的,看上去很亂,還有對檔案的讀寫也不明白,要想把這個程式做得更好,我接下來還要繼續看課本,找資料。