You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何这段C语言程序输出结果是6而非-8?

为什么这段C程序输出是6而不是-8?

你核心的错误是误解了switch的判断条件:switch (x % 2 == 0) 里的判断对象是**x%2 == 0这个布尔表达式的结果**,而不是x%2本身。

具体执行流程分析:

  1. 变量初始化:x=2,a=1
  2. 计算switch条件:x%2的结果是0,0 == 0是布尔真,在C语言中布尔真会被转换为整数1,所以switch实际匹配的是case 1分支
  3. 进入case1后,执行a=a+2,此时a=1+2=3
  4. 因为case1后面没有break语句,程序会继续往下执行后续分支的代码,直到遇到break:
    • 进入case4,执行a=a+3,此时a=3+3=6
    • 遇到case4的break,跳出switch结构
  5. 最后执行printf输出a的值,也就是6

你预想的-8是什么情况?

如果switch的条件写成switch(x%2),那x%2=0会匹配case0:

  • 执行a=a-4 → 1-4=-3
  • 同样因为没有break,继续执行case6的a=a-5 → -3-5=-8
  • 遇到break后输出-8,但这和当前代码的条件完全不同。

内容的提问来源于stack exchange,提问作者Jhoneyd Mechakra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 00:04:56