第二次作业

#include <stdio.h>

#include <stdlib.h>//函数原型

int getChoice();

void showMenu();

void doExercise(int);

int test(int);/*

       功能:用户选择功能

       返回:用户的功能选择

       1、加法          2、减法          3、乘法          4、除法         0、退出

*/

int getChoice()

{

       int choice;

       scanf("%d",&choice);

       return choice;

}

/*

       功能:显示功能的菜单

*/

 

void showMenu()

{

       printf("===================================\n");

       printf("\n欢迎使用小学生四则运算练习软件\n");

       printf("\t1、加法练习\t2、减法练习\n");

       printf("\t3、乘法练习\t4、除法练习\n");

       printf("\t5、综合练习\t0、退出系统\n");

       printf("请输入你的选择(0--5):\n");

       printf("\n===================================\n");

}

 

/*

       功能:计分器

*/

void doExercise(int n)

{

       int score=0;             //练习得分,初始化为0

       int i=0;                 //练习题数的计数器

      

       for(i=1;i<=10;i++)

       {

                score=score+test(n);              //间接递归调用test(n)

       }

       printf("本次练习十道题,你做对了%d道\n",score);

}

 

/*

       功能:进行一道题的测试过程

*/

int test(int n)

{

       int ranswer=0;                    //正确答案

       int uanswer=0;                    //用户输入的答案

       int t=0;                          //临时变量

       char operation;                   //运算类别

       int num1=0;                               //操作数1

       int num2=0;                               //操作数2

 

       srand(time(NULL));                //初始化随机数种子

       num1=rand()%10;                   //取0—9之间的随机数

       num2=rand()%10;

 

       //进入程序功能,如果选择5就随机产生1-4所代表的每一种运算方式

       if(n==5)

       {

                n=rand()%4+1;

       }

 

       switch(n)

       {

                case 1:

                        operation='+';

                        break;

 

                case 2:

                        operation='-';

                        break;

 

                case 3:

                        operation='*';

                        break;

 

                case 4:

                        operation='/';

                        break;

       }

 

//加入一条防止“不够减”的语句,当选择减法且num1小于num2时不够减

//不够减的时候,用临时变量交换两个操作数

       if((operation=='-') && (num1<num2))

       {

                t=num1;

                num1=num2;

                num2=t;

       }

 

//防止“除数为0”的程序漏洞

//当num2被随机取值到0时,就将num2强制置为1

//做除法时,将num1的值强制赋值给num1*num2,防止不能整除

       if(operation=='/')

       {

                if(num2==0)

                {

                        num2=1;

                }

                num1=num1*num2;                   //防止num1不能被num2整除的语句

       }

 

//输出测试题本身、提示用户输入

       printf("%d%c%d= ",num1,operation,num2);

       scanf("%d",&uanswer);

 

//程序计算正确结果

       switch(operation)

       {

                case '+':

                ranswer=num1+num2;

                break;

 

                case '-':

                ranswer=num1-num2;

                break;

 

                case '*':

                ranswer=num1*num2;

                break;

 

                case '/':

                ranswer=num1/num2;

                break;

       }

//评判,做对返回1,做错返回0

       if(uanswer==ranswer)

       {

                printf("做对了!\n");

                return 1;

       }

       else

       {

                printf("做错了!\n");

                return 0;

       }

}

 

 

//主函数

int main(void)

{

       int choice=0;            //接收用户的选择

      

      

      

       //循环开始功能,本次用do……while循环

       do

       {

                showMenu();                               //显示菜单

                choice=getChoice();              

 

                //控制choice的范围

                if(choice<0 || choice>5)

                {

                        choice=1;                         //强制做加法

                }

                if(choice==0)

                {

                        break;                                    //用户选择0,退出循环(退出系统)

                }

 

                doExercise(choice);               //做什么练习,并启动评分

       }while(choice!=0);

 

       printf("欢迎使用本软件,再见!\n");

       return 0;

}

收获and感想:刚开始的时候我们并没有考虑那么多,出现了小数减大数,被除数与除数不能整除等情况,我们发现了并完善了这些问题。这些问题让我们觉得,一个程序并不是一开始写出来就很完善的,需要程序员后期不断的去增加新的功能,不断的去调试,不断的去改进,才能写出一个让用户相对满意的程序。结对编程也让我明白了两个人一起协作写代码和一个人写代码的不同。写完的调试过程后,我和我的搭档都有讨论过,每个人都有不同的想法,区别只是在于思维的缜密性,越完善,用户的体验感觉就会越高,那么这个程序就会是一个优秀的程序。而我们一起调试探讨的过程中,也能发现对方所不能发现的问题或者是提出对方没有想到的一些新的想法。在这个检查的过程中,我学到了一个个新的知识点,我知道,我们不可能了解每一个知识点,总有我们还没涉及到的东西,而通过实验通过调试,我们能够发现一些问题,并通过这些问题在网上找到相应的知识点和解决方案,这就是一个很好的学习过程。而一个人的时候,不一定能够发现这些bug或者是解决这些问题。思维的碰撞才能创造出火花,所以我认为结对编程是一个很好的,很能锻炼协作能力以及编程能力的一个方式。

1759128袁铭

1759129周冲

 

posted @ 2019-03-17 19:43  马欧克斯·艾梅卡  阅读(120)  评论(0编辑  收藏  举报