关于小学生算术练习题的结对编程
本篇博客主要写关于我们第一次结对编程的经历和感想。本篇博客将分成四部分:两人对于题目的探讨、程序主要功能讲解和结对编程感想。
一、 题目探讨
因为我们题目探讨和结对编程是穿插进行的,所以两个合在一起写。
我们得到的题目如下:
小学老师要每周给同学出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 }