构建之法第一章

除整数外,还要实现真分数的四则运算

①主要函数:

char getSignal();                      //获取随机运算符函数

int random(double,double);             //获取随机数函数

int getResult(int,int,char);           //结果计算函数

int takeTest();                        //题目生成函数

②主函数

void main()

{

         int n,a,right=0;

         double percent;

         printf("Please enter the number of the test:");

         scanf("%d",&n);

         for(int i=0;i<n;i++)

         {

                   a=takeTest();

                   right=right+a;

         }

         printf("Powerful!\n");

         printf("The number of right:%d\n",right);

         percent=((double)right*100.00)/(double)n;

         printf("The percent of right:%0.2f %%\n",percent);

}

③获取随机运算符函数:

char getSignal()

{

    char signal[4]={'+','-','*','/'};

    srand((unsigned)time(NULL));

    return signal[rand()%4];

}

 ④获取随机数函数:

int random(double start, double end)

{

    return (int)(start+(end-start)*rand()/(RAND_MAX+ 1.0));

}

⑤结果计算函数:

int getResult(int num1,int num2,char signal)

{

    int res;

    switch(signal)

    {

    case '+':

        res=num1+num2;break;

    case '-':

        res=num1-num2;break;

    case '*':

        res=num1*num2;break;

    case '/':

        res=num1/num2;break;

    default:

        printf("运算符错误!\n");

    }

    return res;

}

⑥题目生成函数:

int takeTest()

{

    int get;

    int num1,num2,a;

    char signal;

 

    srand((unsigned)time(NULL));

    signal=getSignal();

    num1=random(0,1000);

    num2=random(1,1000);

    if(signal=='-')

    {

        if(num1<num2)

        {

            int temp;

            temp=num1;

            num1=num2;

            num2=temp;

        }

    }

    if(signal=='/')

    {

        if(num2==0)

        {

            int temp;

            temp=num1;

            num1=num2;

            num2=temp;

        }

    }

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

    scanf("%d",&get);

    fflush(stdin);   //清空输入缓冲区

    if(getResult(num1,num2,signal)==get)

        {

        printf("You're right!\n");

        a=1;

        }

    else

    {

        printf("It's wrong!\n");

        printf("The right answer is: %d\n",getResult(num1,num2,signal));

        a=0;

    }

    return a;

}

支持多个运算符

# include <stdio.h>

int main(void)

{

               double a, b;

               int chose;

               printf("欢迎使用我的计算器\n");

               while (1)

               {

                               printf("********************\n");

                               printf("1、两数相加\n");

                               printf("2、两数相减\n");

                               printf("3、两数相乘\n");

                               printf("4、两数相除\n");

                               printf("5、退出\n");

                               printf("********************\n");

                               scanf("%d", &chose);

               /*             if (chose<1 || chose>5)

                               {

                               printf("你的输入有误,请重新输入!\n");

                               continue;

                               }*/

                               switch (chose)

                               {

                               case 1:

                                                             printf("请输入第一个数字:\n");

                                                             scanf("%lf", &a);

                                                             printf("请输入第二个数字:\n");

                                                             scanf("%lf", &b);

                                                             printf("%lf+%lf = %lf\n", a, b, a+b);

                                                             break;

                               case 2:

                                                             printf("请输入第一个数字:\n");

                                                             scanf("%lf", &a);

                                                             printf("请输入第二个数字:\n");

                                                             scanf("%lf", &b);

                                                             printf("%lf-%lf = %lf\n", a, b, a-b);

                                                             break;

                               case 3:

                                                             printf("请输入第一个数字:\n");

                                                             scanf("%lf", &a);

                                                             printf("请输入第二个数字:\n");

                                                             scanf("%lf", &b);

                                                             printf("%lf*%lf = %lf\n", a, b, a*b);

                                                             break;

                               case 4:

                                                             printf("请输入第一个数字:\n");

                                                             scanf("%lf", &a);

                                                             printf("请输入第二个数字:\n");

                                                             scanf("%lf", &b);

                                                             printf("%lf/%lf = %lf\n", a, b, a/b);

                                                             break;

                               case 5:

                                                             printf("再见!\n");

                                                             return  ;

                               default:

                                                             printf("你的输入有误,请重新输入!\n");

                                                             continue;

}

               }

}

   

2.博客作业:我是吕越新,一名计算机应用技术专业的大二学生,我想通过对构建之法的学习,了解软件相关知识,从需求分析到最后软件投入市场过程中如何提高软件质量,了解相关流程,针对不同章节提炼出有内涵的东西,充分利用教材,弥补知识上的空缺,除了课上时间学习外,还要花费5小时闲暇时光在本书上,好好预习,复习,提高学习知识的能力,和小组成员共同进步,学会合作和互相配合,实现共赢。

3.快速看完整章教材,列出你不懂的5-10个问题,发布在你的个人博客上。

1我在《构建之法》第三版的26页看到这样一段话“如果用随机数以增加测试的真实性,好吗?

答:一般情况下不好,如果某个随机数导致程序出错,但是下一次运行又不能重复这一错误,则于事无补。我们还是要用随机数等办法“增加测试真实性”,但不是在单元测试中。单元测试不能解决所有问题,不必期望它会发现所有的缺陷。 

2.单元测试是应在最基本的功能/参数上验证程序的正确性

答:单元测试应该测试程序中最基本的单元—如在c++/c#/java中的类,在此基础上,可以测试一些系统中最基本的功能点(这些功能由几个基本点组成),从面向对象设计原理出发,系统中最基本的功能点也该由一个类及其方法来表现。单元测试API中的每一个方法及每一个参数。

3.单元测试应覆盖所有代码路径

单元测试应覆盖所测单元的代码路径,包括错误处理路径。为了保证代码覆盖率,单元测试必须测试公开的和私有的函数/方法。(基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法)。

4.单元测试必须要用最熟悉代码的人(程序的作者来写)
代码的作者最了解代码的目的、特点和实现的局限性。所以,写单元测试没有比作者更适合的人选了。根据我实践的经验,自己的错误和缺点往往很难由自己发现,即使发现所需花费的时间成本也比较大。所以,才需要互测、互评。代码的作者虽然熟悉代码,但脑中倾向于验证代码的正确性而不是检查错误。有些疏忽很明显但容易视而不见,心中想象的代码是完美的,而屏幕上的代码却有失误。罗杰老师在第一节课时也提到,一般公司的开发人员和测试人员比例是1:1,有时甚至可能达到1:7.可见测试人员不可或缺。开发人员同时作测试人员既越俎代庖又效率低下。所以,我不是很理解和信服书作者的观点。

5.对于“回归测试”中的"回归”,我们可以将其理解为“回归到以前不正常的状态”。

 回归测试最好要自动化,因为这样就可以对于每一个构建快速运行所有回归测试,以保证尽早发现问题。单元测试是回归测试的基础。在专注于模块基本功能的单元测试之外,还有功能测试------从用户的角度检车功能完成得怎么样。在微软的实践中,在一个项目的最后稳定阶段,所有人都要参加全面的测试工作,把以前发现并修复的Bug找出来,一个一个验证,以保证所有已经修复过的Bug的确得到了修复,并且每在最后一个版本中"复发",这是一个大规模的,全面的“回归测试”。

 4.

           一  游戏类软件
      游戏有很多种类,分类方式有很多。比如说按照游戏内容分,分为射击游戏,益智游戏,策略游戏休闲游戏......等等。还可以按照游戏平台分类,游戏大小分类,运行方式分类等多种分类方式。本类软件可以说是最受欢迎的软件,几乎人人都会使用,但是每个人玩的都不尽相同,因为人的喜好不同。游戏最大的乐趣在于,它可以实现现实中我们想做却不能做的事。

        二.  工具类软件

      我对工具类软件是这样理解的:任何对我们有帮助作用的软件,比如WinRar它是我们压缩文件的工具,浏览器是我们上网的工具,暴风影音是我们看视频的工具,我第一次使用这类软件是大一初,决定我使用它有这么几个条件:1.互联网购物兴起。2.我拥有了自己的银行卡。3.淘宝网是我国最大的网购平台,支付宝对应淘宝。4.移动支付的快捷方便。

      我国现在有超过四亿的智能机用户,使用移动平台支付的有不到2个亿,所以还有很大的发展空间,在未来20年,还会大行其道。

             三   系统类软件

      我对系统类软件不是很了解,在这里先科普一下:系统软件是指控制和协调计算机及外部设备,支持应用软件开发和运行的系统,是无需用户干预的各种程序的集合,主要功能是调度,监控和维护计算机系统;负责管理计算机系统中各种独立的硬件,使得它们可以协调工作  我第一次使用是时2016年,当时使用的是智能手机Android系统。原因很简单苹果手机价格高,安卓更加亲民。

     

     

5.软件工程是不是教那些不怎么会写程序的人开发软件? 你怎么看?

软件工程是教那些不会开发复杂项目的人怎样去编程的学科。当学习一门编程语言时,我们会在学习过程中试着编写一些小程序,这些程序可能只有几十行代码,而当我们编写的程序变得复杂,需要成千上万行代码和复杂的逻辑结构时,我们会发现自己变得又不会编程了;就会试着像以前一样按自己所想去实现这个复杂的程序,但是当程序的代码越来越多,结构越来越复杂时,会发现出现的错误也越来越多,同时很难去修改,甚至可能会出现不能修复的错误。所以,一个复杂系统的开发,需要一套规范的管理方法去管理这个开发的过程,软件工程就是关于怎样管理开发过程的学科。软件工程会使你知道怎样去做需求分析以了解程序需要实现的功能,怎样去做系统设计以构建程序的框架,怎样测试以验证程序功能的正确等。你可以通过软件工程的指导去实现一个结构清晰、可维护和健壮的程序。软件工程会教给你如何从工程的角度去完成一个项目的开发,如何处理开发过程中的各种问题,如何创造一个完美的软件系统。

 6你所在的学校有计算机科学专业和软件工程专业么?相关专业的教学计划和毕业出路有什么不同?

有,关于软件工程的教学计划有软件测试和软件开发,学习的相关软件知识更侧重于测试,相对于开发的偏写代码的不同,测试行业试讲开发人员写的程序进行测试,检测其程序是否存高危bug,并能及时的使开发人员修正错误,减少软件开发需要使用的资金,同时软件测试也不一定需要很强的专业能力,相对开发对来说更希望测试一类的工作。
 




 

猜你喜欢

转载自www.cnblogs.com/lyx112/p/8595520.html