问答详情
源自:4-16 分支结构之switch语句

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

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



提问者:慕神0705132 2016-01-13 14:16

个回答

  • 张土土
    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”这种目的。

  • 承诺先生
    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;

    }