C语言入门4-16分支结构

来源:4-16 分支结构之switch语句

慕神0705132

2016-01-13 14:16

为什么这里要把score除以10呢?



写回答 关注

2回答

  • 张土土
    2016-01-14 13:54:44

    1、score/10是结合隐形强制转换使用。

    2、case 后面跟的是整数,又根据 “switch后面的表达式语句只能是整型或者字符类型”这句话,所以我们可以判断switch后面的表达式是整形的而不是字符型的。

    3、代码中score/10等于8.7,但是因为switch后面的表达式是整形的,所以程序会对8.7做隐形强制转换使其转换为整形。在c++中,小数转换成整形时会把小数点部分舍弃而不是四舍五入,也就是说8.7被转换成8了。 这样一来,switch语句就会执行case 8 这个分支,也就是输出“等级B”。

    3、score/10结合隐形强制转换把分数转换成10、9、8、7、6等整形变量,然后参与switch分支判断,这样就可以实现 90-100分输出“等级A”、80-90分输出“等级B”这种目的。

    张土土

    提交之后才发现我的代码和网页上不太一样,不过原理都是一样的,我的部分代码贴下,方便结合答案理解。 int score = 87; //考试分数为87分 switch(score/10)

    2016-01-14 14:01:32

    共 1 条回复 >

  • 承诺先生
    2016-01-13 14:30:27

    比如说,他考了87分,那么87/10等于8,如果他考了93分,那么93/10等于9,也就是说,可以先通过score/10来取十位数,然后看switch语句中有case多少与之对应,然后依次执行完,遇到break就终止了,不会继续往下执行。例如:把程序中的case 8下面的那个break去掉,那么运行结果就是等级B等级C,因为遇到break才跳出switch,你可以在想想。如下:


    #include <stdio.h>

    int main() 

    {

        int score = 87;   

        score/=10;

        

        switch(score)

        {

            

            case 10:

            case 9:

                printf("等级A");

                break;

            case 8:

                printf("等级B");

                               

            case 7:

            case 6: 

                printf("等级C");

                break;               

            default:

                printf("等级D");

                break;    

        }

        return 0;

    }


C语言入门

C语言入门视频教程,带你进入编程世界的必修课-C语言

926207 学习 · 20797 问题

查看课程

相似问题