C语言入门笔记(四):if、switch、逻辑运算——程序的分岔路口

📅 2026/6/16 19:46:03
C语言入门笔记(四):if、switch、逻辑运算——程序的分岔路口
引入引入大家好我是尉迟洛林。这是C语言入门笔记的第四篇。上一篇我们总结了C语言中常用的操作符知道了怎么用、-、这些符号做运算和赋值。但是程序不可能永远“一根筋”地往下跑。更多时候我们需要程序学会“做判断”——“如果今天是周末就睡个懒觉否则就早起上班。”“根据考试分数判断是优秀、及格还是不及格。”这种“判断”和“选择”的能力在C语言里就靠分支与循环来实现。而在学分支之前我们需要先认识两个重要的“裁判”关系操作符和逻辑操作符。这篇笔记信息量不小让我们一起开始吧。正文1 关系操作符C语言用于比较的表达式称为“关系表达式”大于运算符小于运算符大于等于操作符小于等于操作符相等运算符!不相等运算符关系表达式通常返回0 或1表⽰真假。C语⾔中0表⽰假所有⾮零值表⽰真。⽐如20 12 返回1关系表达式常⽤于if或while 结构。2 逻辑操作符 || 并且都为真则为真反之为假|| 或者至少有一个表达式为真则为真反正为假取反或取非改变单位表达式的真假注C语⾔中⾮0表⽰真0表⽰假2.1 逻辑取反运算符#includestdio.hintmain(){intflag0;if(!flag){printf(do something\n);}return0;}如果flag 为真!flag 就是假如果flag 为假!flag 就是真所以上⾯的代码的意思就是flag 为假执⾏if语句中的代码。2.2 逻辑与运算符 就是与运算符也是并且的意思是⼀个双⽬操作符使⽤的⽅式是ab, 两边的表达式都是真的时候整个表达式才为真只要有⼀个是假则整个表达式为假intmonth0;scanf(%d,month);if(month3month5)//只有两个表达式都为真才执行{printf(春季\n);}2.3 逻辑或运算符|||| 就是或运算符也就是或者的意思|| 也是⼀个双⽬操作符使⽤的⽅式是a || b ||两边的表达式只要有⼀个是真整个表达式就是真两边的表达式都为假的时候才为假。intmonth0;scanf(%d,month);if(month12||month1||month2)//有一个表达式为真就执行{printf(冬季\n);}2.4 短路C语⾔逻辑运算符还有⼀个特点它总是先对左侧的表达式求值再对右边的表达式求值这个顺序是保证的。// 短路示例inta0;if(a!0a1){// 因为 a ! 0 为假 发生短路a 根本不会执行}printf(%d\n,a);// a 仍然是 0没有被自增如果左边的表达式满⾜逻辑运算符的条件就不再对右边的表达式求值。这种情况称为“短路”。3 if语句3.1 语法形式if(表达式)语句;表达式成⽴为真则语句执⾏表达式不成⽴为假则语句不执⾏。3.2 elseif(表达式)语句1else语句2当if为假时就执行else的语句。3.3分支中包含多条语句默认在if 和else 语句中默认都只控制⼀条语句我们可以用{}把我们的多条语句括起来。如#includestdio.hintmain(){intage0;scanf(%d,age);if(age18){printf(未成年\n);printf(不可以早恋\n);}else//else 后使⽤{}控制多条语句这个块也叫程序块或者复合语句{printf(成年了\n);printf(可以谈恋爱\n);}return0;}3.4 if嵌套在if else 语句中else 可以与另⼀个if 语句连⽤构成多重判断。#includestdio.hintmain(){intnum0;scanf(%d,num);if(num0){if(num%20)//这个是嵌套在if语句中的构成了嵌套的if语句。printf(偶数\n);elseprintf(奇数\n);}else{printf(⾮正数\n);}return0;}3.5 悬空else问题如果有多个if和else可以记住这样⼀条规则else总是跟最接近的if匹配。为了防止这个问题可以在写代码的时候注意大括号的使用让代码的可读性更高。4 条件操作符条件操作符也叫三⽬操作符需要接受三个操作数的形式如下exp1?exp2:exp3条件操作符的计算逻辑是如果 exp1 为真则计算 exp2exp2 的结果就是整个表达式的结果。如果 exp1 为假则计算 exp3exp3 的结果就是整个表达式的结果。5 swich语句switch 语句是⼀种特殊形式的if…else 结构⽤于判断条件有多个结果的情况。它把多重的else if 改成更易⽤、可读性更好的形式。5.1 语法形式switch(expression){casevalue1:statementcasevalue2:statement...default:statement}上⾯代码中根据表达式就执⾏expression 不同的值执⾏相应的default 分⽀。如果找不到对应的值.case 分⽀。注• switch 后的expression 必须是整型表达式• case 后的值必须是整形常量表达式case 和后面的值之间最好加上空格比如 case 1:这样代码可读性更好。每个 case 分支的代码执行完后通常需要加上 break 来跳出 switch。但有时候故意不加可以实现多个 case 共用同一段代码。5.2 switch语句中的breakswitch 语句也是实现分支效果的。只有在 switch 语句中使用break才能跳出 switch 语句。如果某一个case语句的后面没有break语句代码会继续往下执行有可能执行其他case语句中的代码直到遇到break或者整个switch语句结束。所以在 switch 语句中break非常重要它能实现真正的“多选一”分支效果。当然break也不是每个case后面都必须有有时候我们故意不加来实现多个case共用同一段代码。比如switch(month){case12:case1:case2:printf(冬季\n);break;case3:case4:case5:printf(春季\n);break;// ... 其他季节同理default:printf(输入错误\n);break;}5.3 switch语句中的default当expression的值与所有case的值都不匹配时程序就会执行default分支。就像上面冬季的例子如果用户输入了13既不等于12、1、2也不等于其他季节的case值最终就会落到default分支打印“输入错误”。在 switch 语句中case和default没有严格的顺序要求只要满足实际需求就行。不过我们通常把default放在最后处理这样逻辑最清晰。写在最后感谢你读到这里。这篇笔记的信息量比前几篇都大但“分支与循环”确实是C语言从“计算器”变成“智能程序”的关键一步。我初学的时候最容易被两件事搞晕一是else到底和哪个if配对二是switch里忘写break导致代码“一泻千里”。不知道你有没有类似的困惑想和大家聊聊悬空else和switch的break你踩过哪些坑对于“短路”这个特性你有没有什么巧妙的用法或者记忆口诀下一篇我们要进入“循环”了你对for和while有什么想提前了解的吗欢迎在评论区分享你的经验或疑问每一条留言我都会认真看。如果这篇笔记对你有帮助点个关注就是对我最大的鼓励。我们下篇见