试题题干
#define N 5
void main()
{
int k, s1=0,s2=0;
for(k=1;k<N;k++)
switch(k%4)
{ case1:
case 2:s1+=1;break;
case3:
case0:s2+=1;break;
}
printf("s1=%d,s2=%d\n",s1,s2);
}
参考答案
试题解析
当switch后面“表达式”的值,与某个case后面的“常量表达式”的执行时,则执行该case后面的语句,当执行到语句break;时,跳出switch语句,即
k=1时,k%4=1%4=1,执行case1,没有遇到break继续执行case2,则s1+=1等价于s1=s1+1=1,遇到break结束循环,此时变量k的值为2;
k=2时,k%4=2%4=2,执行case2,则s1+=1等价于s1=s1+1=1+1=2,遇到break结束循环,此时变量k的值为3;
k=3时,k%4=3%4=3,执行case3,没有遇到break继续执行case0,则s2+=1等价于s2=s2+1=1,遇到break结束循环,此时变量k的值为4;
k=4时,k%4=4%4=0,执行case0,则s2+=1等价于s2=s2+1=1+1=2,遇到break结束循环,此时变量k的值为5;
k=5时,不符合k<5,结束循环。故输出的s1和s2的值为s1=2,s2=2