首页 > 试题广场 >

下面程序执行后s的值为( ) #i...

[单选题]
下面程序执行后s的值为()
#include <stdio.h>
int main() {
    int i=1, j=3, k=0, sum=5;
    switch(k > -i++) {
        case 2: sum += 1; 
        case 1: sum += j;
        case 0: sum += i; break;
        case -1: sum *= -1;
    }
    printf("%d",sum); 
    
    return 0;
}

  • 5
  • 6
  • 9
  • 10
菜鸟一枚,答错请指正,目前在试图通过选项题以及代码题目学习一些理论知识,并希望通过回答增加自己的记忆,多多包涵,谢谢。

我个人觉得考点为:
第一个 i++, ++i.
1.1 - i++,指的是先使用然后再增加,比如: int i = 1; int i_pp = i++: // i_pp = 1;
1.2 - ++i, 指的是先加然后再使用,比如:int i = 1; int pp_i = ++i; //pp_i = 2;

这两点清楚后,就会知道
switch(k> -i++)  等同于 switch(k> -1) //k = 0,所以statement为true即为1。 

第二个,switch case。
当switch case没有break的时候,将会按照代码行数一一执行下去。

通过第一点,得到了switch(1),所以进入case 1,由于没有break,再进入case0,但是,i,已经在switch statement的时候更新了 ,也就是说这个时候的,i,已经是2了。

所以答案为2。

唉,忏愧,天天写for loop,这个都忘记了。
发表于 2019-11-11 14:41:22 回复(3)

忘了i变成2了

发表于 2019-12-04 15:22:19 回复(1)
case后没有break语句,那么会依次执行
编辑于 2019-08-29 23:12:11 回复(0)
k > -i++ 为 1 执行
case1: sum += j;
        case0: sum += i; break;(注意k > -i++)i++了

发表于 2022-02-21 22:12:13 回复(0)
没看到sum的初始值为5...
发表于 2019-09-23 22:25:36 回复(0)
sum 原先是5.。。。。。。
发表于 2022-02-09 15:44:12 回复(0)
switch(k> -i++)相当于switch(0> -2),先跑case(1),sum=5+3=8, 此时i=2.
没有遇到break,继续执行case(0),sum=8+2=10. 遇到break跳出来打印sum.
发表于 2021-05-25 11:36:41 回复(2)
switch(k> -i++) 同 switch(true)。只是i变2了,可以在case后输出i验证。
最终 sum+=j; sum+=i;
发表于 2019-06-15 23:54:43 回复(1)
Switch()表达式判定结束之后I就会自增为2
发表于 2023-10-23 10:44:39 回复(0)
nb,没看到,sum原先是五😭😤
发表于 2022-05-13 20:48:44 回复(0)
妈呀这个题,好吧switch在判断的时候 i 自增了,,然后switch判断为真返回1,。。。。
发表于 2021-10-19 09:59:11 回复(0)
最后难道不是11吗?
发表于 2020-04-28 00:20:29 回复(0)
拙见:第一次判断,k>-i成立,返回真(真就是1),那么去执行case1,则sum=8,但case1后面没有break,则按照控制流继续执行后面的语句,直到遇到break为止;
第二次判断,i已经为2了,k>-i还成立,返回真,继续往下执行控制流,就到了case0,则sum=8+2==10,此时遇到break,跳出判断,打印输出。
结束。
编辑于 2023-12-13 10:41:00 回复(0)
-和++运算优先级相同,结合方向为从右往左
k>-i++
先0>-1,再i=2
发表于 2023-09-01 21:19:39 回复(0)
switch ()里不能是bool类型,只能是int型或者是char?
发表于 2023-07-19 16:31:39 回复(0)
又忘记i++了,笑哭


发表于 2023-03-13 16:52:01 回复(0)
遇到break退出,没想到这点看来基础还是不稳啊啊啊啊啊
发表于 2022-09-14 14:06:45 回复(0)
k > (-i++) 即 1>-2  true 所以返回1
转到case1:sum=5+3
再到case0:   sum=8+2
再break跳出
发表于 2021-11-30 20:59:39 回复(0)
感觉应该是先判断    k>-i  结果成立是,为1,1在++,为   2 .然后从case(2)开始执行,一直到break

发表于 2020-12-15 23:54:19 回复(0)
<p>还有一个点在于switch函数的参数为表达式时,case值的判断</p><p><br></p>
发表于 2020-09-17 17:43:28 回复(0)