一道非专业C语言程序题

img


请问输入2之后,是先累加,还是后累加呢,其实执行完case2的一个结果,然后再执行case3得出另一个结果吗

假如输入 m = 2,执行顺序如下:
switch(m++%4) 这句分解为: switch(m % 4) , m++; 2 % 4 = 2, m++ ==> m = 3;
case 2: 满足条件,所以执行 printf("%5d",m*m); 此时 m = 3, 所以 m*m = 9; 因为这句后面没有 break;语句,所以往下顺序执行 case 3:。
case 3: printf("%5d",m*m*m); 此时 m 仍为 3,所以 3 * 3 * 3 = 27 输出。
最终输出: 9 27

++在后,就是后累加
其实执行完case2的一个结果,然后再执行case3得出另一个结果吗?===对的,因为case 2并没有加break,所以会继续执行case 3的代码

后累加
执行完case2由于没有break返回,继续向下再执行case3
输入2<回车>
代码执行逻辑为
2++%4<==>2%4,2++
switch(2),m=3;
执行case 2:
输出33=9
执行完case2由于没有break返回,继续向下再执行case3
输出3
3*3=27

没有先加和后加的问题,其实不管哪种++都是立刻加一,只不过表达式的值不一样,在后面的++是加一之前的值,在前面的++是加一之后的值

挨个读取你输入的字符,直到读取到回车为止,每读取到一次就+1,acbdef回车,在回车前面一共有6个字符,所以输出6