(因为跨行排版 所以就不用推文答复)
原程式(这个例子 在a = 4 时,
如果删掉(在a = 4 时) 不会执行或测试的指令,
并加上 大括号 和一点注解 方便理解)
真正执行的指令等于如下
#include <stdio.h>
int a,b;
void main(){
a=4;
b=30;
printf("Before the switch statement, a=%d.\n",a);
switch(a)
{
case 1: ;
case 2: ;
case 3: ;
{
/* 此例因为 a = 4 一路往下到此 */
while(a<b)
{
case 4: a=a+5;
} // END of while
break;
}
}//end of switch
printf("after the switch statement, a=%d.\n",a);
}
题目这种程式, 只是为了考试,说实话 Readability 很差。
在实务业界 不应该会有人写出这样的程式。只是出来考人的。
※ 引述《usisiu (LOOK)》之铭言:
: 题目出处:107年 铁路特考 高员三级 资讯处理 程式语言 第五题
: (一)请问下列C程式执行的结果是什么? (10分)
: #include <stdio.h>
: int a,b;
: void main(){
: a=4;
: b=30;
: printf("Before the switch statement, a=%d.\n",a);
: switch(a){
: case 1:a=a*10;break;
: case 2:a=a*10;break;
: case 3:a=a*10;
: while(a<b) case 4:{a=a+5;}break;
: case 5:a=a*10;break;
: default:
: b=a*10;break;
: }//end of switch
: printf("after the switch statement, a=%d.\n",a);
: }
: 疑惑点:
: 我在考试的时候,看不懂 while(a<b) case 4:{a=a+5;}break;
: 所以直接跳过,直接看到 default: b=a*10;break; 这一段,
: 因此我的答案是写
: Before the switch statement, a=4.
: after the switch statement, a=4.
: 但是我用编译器跑过一次,发现答案是
: Before the switch statement, a=4.
: after the switch statement, a=34.
: 怀疑跟 while(a<b) case 4:{a=a+5;}break; 这一句程式码有关