以题目“设int a=0,b=0,c=0,d;计算 d=a--&&b--||c--”为例,关键的是运算符的短路特性。a--先使用a当前值0参与表达式,再自减1变成-1。a在表达式为假(0),所以a--后a减1变成-1,接下来&&的右边b--就不执行,b仍是0。因为前面还为假,所以必须继续运算||右边的c--,用0参与表达式再自减,最终得出四个变量的值分别是 d=0, a=-1, b=0, c=-1。
逗号表达式的使用令人头疼。例如“a = a + i, a + j;”这里的逗号表达式会先执行“a = a + i”,之后表达式的值是“a + j”,但因为没赋值,这部分没有改变a的值。相当于先让a加上了i,再计算a+j但不存储结果。实际执行顺序是a = 97 + 3 = 100,然后a + j = 100 + 5 = 105,但a没变成105,除非显式赋值。因此理解逗号表达式时要特别留心。
switch-case语句常见坑在于忘记写break。比如grade等于'c',执行case 'c'后没有break导致继续执行case后面的代码,可能输出70-79,也会继续运行别的case,出现“穿透”效果。默认情况下,switch-case没有break,就会“唧唧喳喳”地一路往下跑,很容易出错。

赋值表达式的左值必须是单个变量,像“a = y + x = 30”是错误的,因为“y + x”结果是值不能赋值。正确写法是“x = y += x * 30”,先计算x*30加到y中再赋值x。理解赋值链条很重要,否则代码嗡嗡乱。
代码书写建议:做C语言程序时,确保使用英文输入法,符号别搞错。新建工程选择win32 console application,创建空工程后新建c++source file,输入代码并运行。在这个步骤中,如果有不懂,千万别害羞,堆成山的C语言问题都能迎刃而解。
循环计算也很简单,像s=54321题,代码逻辑是:
第一次循环:s=0*10+5=5
第二次循环:s=5*10+4=54
第三次循环:s=54*10+3=543
第四次循环:s=543*10+2=5432
第五次循环:s=5432*10+1=54321
非常直观而且超顺,结果自然是 s=54321,没啥神秘。

C语言中的短路运算符是怎么工作的啊?
哎呀,这个短路运算符超级有意思!& & 和 || 这样玩的,当你左边已经“躺枪”判定结果时(比如 & & 左边为假, || 左边为真),它们会直接跳过右边不算了,嘿,效率杠杠的!比如 a-- && b--,a是0,左边假了,b--压根儿不执行,超级省事吧!这简直是大神的节奏。
switch-case 语句的“穿透效应”是啥意思呢?
说白了,就是你写了一个case,比如case 'c',忘记写break,结果执行完case 'c'后,它不听话,还会跑去执行case后面所有的内容,整个流程连续播,没中场休息。嘿,这就被称作“穿透效应”,所以每个case最好写break,不然代码会乱成一锅粥。
逗号表达式到底怎么玩的,咋理解啊?
哈哈,逗号表达式就是像排队一样先执行左边的,完成后才执行右边的。比如a = a + i, a + j,其实是先a = a + i赋值了,右边a + j只是计算值但没赋,结果a并没有加上j哦!理解逗号表达式语句的顺序很关键,不然代码会让你迷糊啦。
我写的循环代码得不到预期结果怎么办?
别慌别慌,循环代码不显眼的小细节可多了,比如循环条件、初始值,还有表达式的顺序,任何一环挂了,输出都跑偏。你先慢慢调试,打点log,看看每一步s的值变化咋样,像上一题s=54321那样,每次乘10加数字,这样分拆解,肯定能慢慢找到问题所在,写代码嘛,得耐心和点儿小聪明!
添加评论