基于c++的小学四则运算练习系统
本次结对编程我们实现了一个基于c++的小学四则运算练习系统,细则如下:
一、实验目的:
1、本系统是基于Dev-C++为小学老师和学生提供的一个有关于四则运算练习的系统。
2、为老师进行100以内四则运算的出题,减缓老师的工作压力。
3、增强同学的四则运算能力,是我们这个系统的最主要功能,本系统可让学生和老师进行实时性练习。
二、实验环境:
通过Dev-C++进行编写。
三、实验内容:
1、便于小学老师给学生出100以内的两个运算符的四则运算习题,为老师节省出题时间。
2、老师可以通过该系统将习题打印出来,对学生进行笔试,同时也可打印有答案版本,利于判断答案是否正确。
3、学生可进行交互式做题,可在线上进行习题的练习,解决了练习地点受限的情况,可以让学生随时随地进行习题的练习。
四、实验功能展示:
主界面的实现:

根据需求,进行功能选择,在每次功能实现后,都会让用户再次进行功能选择:

倘若所输入数结果大于100,会对用户进行提醒:

当选择打印题目功能时,会将用户录入的所有题目进行打印:

也可打印有答案版本:

汇总功能实现截图如下:

五、实验过程中遇到的问题和解决:
问题:这次实验原本只定义了一个数组来存放数据,然后出现了输出结果乱码的错误。
解决方案:找到问题所在之后,修改了代码改为两个数组。
问题:运行时还出现过return value 3221225477的错误,程序强制中断,但是代码并没有报错也没有warning。
解决方案:过两个人的仔细排查和网上搜寻资料找到了原因,原来是由于重复定义了数组导致一个变量没有分配内存。最终经过修改之后,成功运行。
六、实验代码:
代码细则如下:
1 #include <iostream> 2 using namespace std; 3 int main(){ 4 char sym[300][2]; 5 double num[300][4]; 6 int finish=1; 7 int i=0; 8 cout<<"--------------四则运算模拟器----------------"<<endl; 9 while(finish){ 10 cout<<"请选择功能:"<<endl; 11 cout<<"1.输入运算式 2.打印题目 3.打印答案 4.结束程序"<<endl; 12 int x; 13 cin>>x; 14 switch(x){ 15 case 1: 16 { 17 cout<<"请输入运算式:(例:4+5*7)"<<endl; 18 cin>>num[i][0]>>sym[i][0]>>num[i][1]>>sym[i][1]>>num[i][2]; 19 switch(sym[i][1]){ 20 case '+': 21 switch(sym[i][0]) 22 { 23 case '+':num[i][3]=num[i][0]+num[i][1]+num[i][2];break; 24 case '-':num[i][3]=num[i][0]-num[i][1]+num[i][2];break; 25 case '*':num[i][3]=num[i][0]*num[i][1]+num[i][2];break; 26 case '/':num[i][3]=num[i][0]/num[i][1]+num[i][2];break; 27 }break; 28 case '-': 29 switch(sym[i][0]) 30 { 31 case '+':num[i][3]=num[i][0]+num[i][1]-num[i][2];break; 32 case '-':num[i][3]=num[i][0]-num[i][1]-num[i][2];break; 33 case '*':num[i][3]=num[i][0]*num[i][1]-num[i][2];break; 34 case '/':num[i][3]=num[i][0]/num[i][1]-num[i][2];break; 35 }break; 36 case '*': 37 switch(sym[i][0]) 38 { 39 case '+':num[i][3]=num[i][0]+num[i][1]*num[i][2];break; 40 case '-':num[i][3]=num[i][0]-num[i][1]*num[i][2];break; 41 case '*':num[i][3]=num[i][0]*num[i][1]*num[i][2];break; 42 case '/':num[i][3]=num[i][0]/num[i][1]*num[i][2];break; 43 }break; 44 case '/': 45 switch(sym[i][0]) 46 { 47 case '+':num[i][3]=num[i][0]+num[i][1]/num[i][2];break; 48 case '-':num[i][3]=num[i][0]-num[i][1]/num[i][2];break; 49 case '*':num[i][3]=num[i][0]*num[i][1]/num[i][2];break; 50 case '/':num[i][3]=num[i][0]/num[i][1]/num[i][2];break; 51 }break; 52 } 53 cout<<"="<<num[i][3]<<endl; 54 if(num[i][3]>=100){ 55 cout<<"结果超过100,是否重新输入"<<endl; 56 cout<<"1是 2否"<<endl; 57 int k; 58 cin>>k; 59 switch(k){ 60 case 1:break; 61 case 2:{ 62 i++; 63 break; 64 } 65 } 66 } 67 else { 68 69 i++; 70 } 71 break; 72 } 73 case 2:{ 74 cout<<"打印题目中:"<<endl; 75 for(int t=0;t<i;t++){ 76 cout<<num[t][0]<<sym[t][0]<<num[t][1]<<sym[t][1]<<num[t][2]; 77 cout<<endl; 78 } 79 break; 80 } 81 case 3:{ 82 cout<<"打印答案中:"<<endl; 83 for(int t=0;t<i;t++){ 84 cout<<num[t][0]<<sym[t][0]<<num[t][1]<<sym[t][1]<<num[t][2]<<"="<<num[t][3]; 85 cout<<endl; 86 } 87 break; 88 } 89 case 4:{ 90 finish=0; 91 break; 92 } 93 return 0; 94 } 95 } 96 }
七、实验小结与体会:
结对编程是一种程序员之间思维产生碰撞且相较于独自一人编程来说效率更高的一种编程方式,它可以解决独自一人编程所不能解决的很多问题,比如当编程思路遇到问题的时候,通过与同伴的交流和沟通,便可以有新的解决方法,可以大大节省时间。在结对编程的时候同样可以增加自身的编写能力,在看别人编写代码过程中,会紧跟别人的思路,会努力地去看懂别人的代码,不同的思路之间的碰撞出更好的思想,这也是结对编程存在的意义。在这次结对编程中我收获颇多,这也大大的增加了我编程的履历,为今后的编程打下了更坚实的基础。

浙公网安备 33010602011771号