关于小学生算术练习题的结对编程

本篇博客主要写关于我们第一次结对编程的经历和感想。本篇博客将分成四部分:两人对于题目的探讨、程序主要功能讲解和结对编程感想。

一、  题目探讨

因为我们题目探讨和结对编程是穿插进行的,所以两个合在一起写。

我们得到的题目如下:

小学老师要每周给同学出300道四则运算练习题,两个运算符、100以内数字,并且保证答案在0-100之间(不包括0和100)

题中获取的信息:

1.300道题

2.三个随机数字,两个随机运算符

3.数字范围:(0,100)

4.答案范围:(0,100)

5.四则运算

此5点是题目中的显性要求。

然后因为是小学生且四则运算练习题,所以应该不会出现负数和小数。

虽然最后答案已限定在(0,100),但是有两个运算符,所以在中间的第一步计算也不应该出现负数,所以也将第一步的答案设定在(0,100)(不设上限为100,第一步乘法可能会很大,例44*44/22)。同时第一步和第二步都不能出现答案是小数的。

同时四则运算是存在优先级的。代码不能将该算式拆成前后两式,然后简单的顺序运算,这样将导致答案出错,最终我们选择不拆分,直接写原式进行正确答案计算。

在确认好要求,我们开始结对编写代码,代码贴在博客的最后方,欢迎借鉴使用。

二、  程序主要功能

首先是程序的主界面:

 

1就是题中的功能实现了,但是我们在编程中考虑到每次都是300道题需要做太久,所以我们做了第2个功能,自主练习,在这个功能里,可以自由的设定要自己要做题目的数量,如下图:

 

然后是1中的具体实现界面:

 

然后在做完题目后,会显示分数和错题答案:

 

如果你本次练习全对,则会显示不一样的内容,如下图:

 

这就是本软件的全部功能了!

三、  对于结对编程的感想

A同学:在这次结对编程中,我感触比较深的是太探讨题目的环节,两个人一起对题目进行探讨,这是得对题目的解读更加的全面和深刻,就像其实,我在第一解读题目的时候,我认为的两个运算符的意思是随机从“+”和“-”中选一个使用,如果一个人的话,可能就这样错下去,写完所有程序,到最后可能都没有发现,不过因为这次两个人的结对编程,所以我的错误在提出时就很好的被纠正了,但是其实在实际编程中,我在这次的感觉中,我认为结对编程的效率没有两个人各编写一部分的效率高,甚至有时候要向对方解释自己这样写的意图是什么,这样甚至连自己一个人编写代码的效率都赶不上,可能是这次结对编程的题目比较简单吧,可以在以后编写一些较复杂、大型的程序的时候,我就能够感受到结对编程带来的好处了吧!

B同学:我的感受其实和A同学的感受差不多吧,但是我在其中能感受到其他的一些感觉,因为我的编程能力较A同学来说,可能要弱很多,所以在这次结对编程中,我看着A同学编程时,不懂的就问,A同学给我详细的解释,还有我编程时,A同学帮我及时的指出错误和一些注意事项,这都使我学习到很多知识,所以在这次结对编程以后,我的感觉是比较良好的,因为通过这次结对编程,我提高了我的编程能力,也学习到了更多编程时的方法。

具体代码:

  1 #include<iostream>
  2 #include<cstdlib>
  3 #include<ctime>
  4 #include<conio.h>
  5 using namespace std;
  6 int firnu[5000], secnu[5000], thinu[5000], symbol[5000], result[5000], score = 0, input[5000];
  7 int tinum = 300;
  8 int randnumber()//随机数生成函数
  9 {
 10     int t;
 11     t = rand() % 100 + 1;
 12     if(t==100)
 13         t = randnumber();
 14     return t;
 15 }
 16 int randsymbol()//+或-号的随机生成
 17 {
 18     int t,i;
 19     t = rand() % 16;
 20     return t ;
 21 }
 22 void output(int i)//答案输出函数
 23 {
 24     for (int t = 0; t < 20; t++)
 25             cout << " ";
 26 cout << "" << i + 1 << "题 :" ;
 27 switch(symbol[i])
 28 {
 29     case 0:
 30         cout << firnu[i] << " + " << secnu[i] << " + " << thinu[i] << " = ";
 31         break;
 32     case 1:
 33         cout << firnu[i] << " + " << secnu[i] << " - " << thinu[i] << " = ";
 34         break;
 35     case 2:
 36         cout << firnu[i] << " + " << secnu[i] << " × " << thinu[i] << " = ";
 37         break;
 38     case 3:
 39         cout << firnu[i] << " + " << secnu[i] << " ÷ " << thinu[i] << " = ";
 40         break;
 41     case 4:
 42         cout << firnu[i] << " - " << secnu[i] << " + " << thinu[i] << " = ";
 43         break;
 44     case 5:
 45         cout << firnu[i] << " - " << secnu[i] << " - " << thinu[i] << " = ";
 46         break;
 47     case 6:
 48         cout << firnu[i] << " - " << secnu[i] << " × " << thinu[i] << " = ";
 49         break;
 50     case 7:
 51         cout << firnu[i] << " - " << secnu[i] << " ÷ " << thinu[i] << " = ";
 52         break;
 53     case 8:
 54         cout << firnu[i] << " × " << secnu[i] << " + " << thinu[i] << " = ";
 55         break;
 56     case 9:
 57         cout << firnu[i] << " × " << secnu[i] << " - " << thinu[i] << " = ";
 58         break;
 59     case 10:
 60         cout << firnu[i] << " × " << secnu[i] << " × " << thinu[i] << " = ";
 61         break;
 62     case 11:
 63         cout << firnu[i] << " × " << secnu[i] << " ÷ " << thinu[i] << " = ";
 64         break;
 65     case 12:
 66         cout << firnu[i] << " ÷ " << secnu[i] << " + " << thinu[i] << " = ";
 67         break;
 68     case 13:
 69         cout << firnu[i] << " ÷ " << secnu[i] << " - " << thinu[i] << " = ";
 70         break;
 71     case 14:
 72         cout << firnu[i] << " ÷ " << secnu[i] << " × " << thinu[i] << " = ";
 73         break;
 74     case 15:
 75         cout << firnu[i] << " ÷ " << secnu[i] << " ÷ " << thinu[i] << " = ";
 76         break;
 77 }
 78 }
 79 void randcount(int i)//随机算术题生成
 80 {
 81     double a, a1;
 82     firnu[i] = randnumber();
 83     secnu[i] = randnumber();
 84     thinu[i] = randnumber();
 85     symbol[i]=randsymbol();
 86     switch(symbol[i])
 87     {
 88         case 0:
 89             result[i] = firnu[i] + secnu[i] + thinu[i];
 90             if(firnu[i]+secnu[i]>=100||result[i]>=100||result[i]<=0)
 91                 randcount(i);
 92             break;
 93         case 1:
 94             result[i] = firnu[i] + secnu[i] - thinu[i];
 95             if(firnu[i]+secnu[i]>=100||result[i]>=100||result[i]<=0)
 96                 randcount(i);
 97             break;
 98         case 2:
 99             result[i] = firnu[i] + secnu[i] * thinu[i];
100             if(secnu[i]*thinu[i]>=100||result[i]>=100||result[i]<=0)
101                 randcount(i);
102             break;
103         case 3:
104             result[i] = firnu[i] + secnu[i] / thinu[i];
105             a = 1.0 * secnu[i] / thinu[i];
106             if(!((int)a==a)||result[i]>=100||result[i]<=0)
107             randcount(i);
108             break;
109         case 4:
110             result[i] = firnu[i] - secnu[i] + thinu[i];
111             if(firnu[i]-secnu[i]<=0||result[i]>=100||result[i]<=0)
112                 randcount(i);
113             break;
114         case 5:
115             result[i] = firnu[i] - secnu[i] - thinu[i];
116             if(firnu[i]-secnu[i]<=0||result[i]>=100||result[i]<=0)
117                 randcount(i);
118             break;
119         case 6:
120             result[i] = firnu[i] - secnu[i] * thinu[i];
121             if(secnu[i]*thinu[i]>=100||result[i]>=100||result[i]<=0)
122                 randcount(i);
123             break;
124         case 7:
125             result[i] = firnu[i] - secnu[i] / thinu[i];
126             a = 1.0 * secnu[i] / thinu[i];
127             if(!((int)a==a)||result[i]>=100||result[i]<=0)
128             randcount(i);
129             break;
130         case 8:
131             result[i] = firnu[i] * secnu[i] + thinu[i];
132             if(firnu[i]*secnu[i]>=100||result[i]>=100||result[i]<=0)
133                 randcount(i);
134             break;
135         case 9:
136             result[i] = firnu[i] * secnu[i] - thinu[i];
137             if(firnu[i]*secnu[i]>=100||result[i]>=100||result[i]<=0)
138                 randcount(i);
139             break;
140         case 10:
141             result[i] = firnu[i] * secnu[i] * thinu[i];
142             if(firnu[i]*secnu[i]>=100||result[i]>=100||result[i]<=0)
143                 randcount(i);
144             break;
145         case 11:
146             result[i] = firnu[i] * secnu[i] / thinu[i];
147             a = 1.0 * firnu[i] * secnu[i] / thinu[i];
148             if(!((int)a==a)||firnu[i]*secnu[i]>=100||result[i]>=100||result[i]<=0)
149             randcount(i);
150             break;
151         case 12:
152             result[i] = firnu[i] / secnu[i] + thinu[i];
153             a = 1.0 * firnu[i] / secnu[i];
154             if(!((int)a==a)||result[i]>=100||result[i]<=0)
155                 randcount(i);
156             break;
157         case 13:
158             result[i] = firnu[i] / secnu[i] - thinu[i];
159             a = 1.0 * firnu[i] / secnu[i];
160             if(!((int)a==a)||result[i]>=100||result[i]<=0)
161                 randcount(i);
162             break;
163         case 14:
164             result[i] = firnu[i] / secnu[i] * thinu[i];
165             a = 1.0 * firnu[i] / secnu[i];
166             if(!((int)a==a)||result[i]>=100||result[i]<=0)
167                 randcount(i);
168             break;
169         case 15:
170             result[i] = firnu[i] / secnu[i] / thinu[i];
171             a = 1.0 * firnu[i] / secnu[i];
172             a1 = 1.0 * firnu[i] / secnu[i] / thinu[i];
173             if(!((int)a1==a1)||!((int)a==a)||result[i]>=100||result[i]<=0)
174                 randcount(i);
175             break;
176     }
177 }
178 void title()//输出标题
179     { 
180         system("CLS");
181         int i;
182         for (i = 0; i < 75; i++)
183             cout << "-";
184         cout << endl;
185         for (i = 0; i < 28; i++)
186             cout << " ";
187         cout << "小 学 生 算 术\n\n";
188         for (i = 0; i < 75; i++)
189             cout << "-";
190         cout << endl;
191 }
192 void setque(){
193     title();
194     srand((int)time(0));
195     cout<<"算术练习:"<<endl;
196     for (int i = 0; i < tinum;i++){
197         randcount(i);
198         output(i);
199         cin >> input[i];
200         if(input[i]==result[i])
201             score++;
202     }
203     for (int i = 0; i < 75; i++)
204             cout << "-";
205             cout<<endl;
206     if(score==tinum){
207     for (int i = 0; i < 12; i++)
208         cout << " ";
209     cout << "太棒了,你在本次练习中获得了满分!请继续努力哦!" << endl; 
210     } 
211     else{
212     cout << "你本次做题的成绩为:" << score << endl; 
213     cout << "错题答案:" << endl;
214     for (int i = 0; i < tinum;i++){
215         if(result[i]!=input[i]){
216         output(i);
217         cout << result[i]<<endl;
218     }
219 }
220     }
221     for (int i = 0; i < 75; i++)
222             cout << "-";
223             cout<<endl;
224     for (int i = 0; i < 28; i++)
225             cout << " ";
226     cout<<"按任意键返回!";
227     getch();
228 } 
229 int main()
230 {
231     x:
232     score=0;
233     title();
234     cout<<"\t\t\t         请选择\n\n\t\t\t   1  一周300算术题\n\n\t\t\t   2  自主练习\n\n\t\t\t   3  退出系统\n\n";
235     switch(getch()){
236         case '1':tinum=300;setque();goto x;break;
237         case '2':cout<<"请输入你想要练习的题目数量:";cin>>tinum;setque();goto x;break;
238         case '3':exit(0);
239     } 
240     return 0;
241 }

 

posted on 2021-04-27 22:03  时埋  阅读(160)  评论(0编辑  收藏  举报