一.if语句1.单分支语法形式if(条件 { //要执行的代码 ...... }逻辑如果……就……如果条件判定为真则成立就运行代码不成立就直接跳过。例如#include stdio.h int main() { int score 85; // 定义一个变量 if (score 60) { // 1. 括号内是“判定区”计算 score 60 是否成立 // 2. 在 C 语言中成立返回 1 (真)不成立返回 0 (假) printf(成绩合格\n); // 3. 只有当判定为“真”时才会执行这里的代码 } // 4. 无论上面是否执行程序都会汇合到这里继续运行 return 0; }2.else语句在 C 语言中else语句不能独立存在它必须紧跟在if语句的后面。它的作用是为程序提供一个“备选方案”。语法形式if (表达式) { // 语句块 1 ... } else { // 语句块 2 ... }逻辑if是“如果条件成立就做某事”那么else就是“否则如果不成立就做另一件事”。例如#include stdio.h int main() { int score 55; if (score 60) { // 如果条件 (score 60) 为真执行这里 printf(及格了\n); } else { // 如果条件 (score 60) 为假执行这里 // else 后面不需要写括号和条件它代表所有“剩下的情况” printf(不及格请继续努力。\n); } return 0; }3.else if语句当有三个或更多的可能性需要判断时单靠if和else就不够了。这时就需要用到else if。逻辑是“如果 A 成立就做 A否则如果 B 成立就做 B如果都不成立就做最后的 C”。例如#include stdio.h int main() { int score 85; if (score 90) { // 条件 1如果分数大于等于 90 printf(优秀\n); } else if (score 60) { // 条件 2如果不满足 90但满足大于等于 60 // 只有上面的 if 失败了才会来检查这个 else if printf(及格\n); } else { // 备选方案如果上面的条件全部失败 printf(不及格\n); } return 0; }4.if嵌套if嵌套是指在一个if或else的代码块内部又包含了另一个if语句。它用于处理多层前提条件的情况。语法形式if (外层条件) { // 只有外层条件成立才会进入这里 if (内层条件) { // 只有内外两层条件都成立才会执行这里 } }例子#include stdio.h int main() { int a 1; // 1是0不是 int b 1; if (a 1) { // 第一层先看性别 if (b 1) { //第二层如果是男生再看脸 printf(是个帅哥); } } return 0; }5.易错点1.if括号后面加了个分号;无分号2.判断相等写成了赋值应该为。3.多条语句无大括号当为单条语句时可以无大括号多条语句加上大括号但是if嵌套为悬空匹配时不写大括号{}导致else找错了“对象”所以建议无论是否为单条语句都加上大括号。例如#include stdio.h int main() { int a 0; // 0 表示没票 int b 1; if (a 1) // 外层 if if (b 1) // 内层 if printf(有座票请坐下。); else // 这里的缩进骗了你的眼睛 printf(没票请去买票。); return 0; }此时谁也不打印。逻辑else和第一个if对齐了但编译器根本不看缩进这个else离if (isSeat 1)最近所以它们两个是一伙的所以第一个if不满足条件也就不进入嵌套中。二.三目操作符与短路1.三目操作符代码块条件 ? 表达式1 : 表达式2 ;唯一一个需要三个操作数的运算符语法形式比较精炼。逻辑先看“条件”如果为真非 0整个式子的值就是表达式 1。如果为假等于 0整个式子的值就是表达式 2。例子#include stdio.h int main() { int a 10; int b 20; // 逻辑a 大于 b 吗是的话取 a否则取 b。 int max (a b) ? a : b; printf(较大的数是%d\n, max); return 0; }易错点优先级的问题三目操作符的优先级较低表达式里做了加减乘除。2.短路短路是逻辑运算符逻辑与和||逻辑或的一个非常重要且“聪明”的特性。1.逻辑与短路逻辑对于A B只有A 和 B 都是真结果才是真如果A 是假 (0)那么无论 B 是什么整个式子肯定都是假结果此时编译器会直接跳过 B不再运行 B 部分的代码。例如#includestdio.h int main() { int a 0; int b 10; // 由于 a 1 为假发生短路后面的 (b) 根本不会执行 if (a 1 b 5) { printf(这里进不来\n); } printf(b 的值是: %d\n, b); // 结果仍然是 10而不是 11 return 0; }2.||(逻辑或) 的短路逻辑对于A || B只要有一个是真结果就是真。如果A 是真 (非 0)那么无论 B 是什么整个式子肯定都是真此时编译器会直接跳过 B不再运行 B 部分的代码。例如#includestdio.h int main() { int a 1; int b 10; // 由于 a 1 为真发生短路整个式子已经成立了后面的 (b) 被直接无视 if (a 1 || b 5) { printf(这里能进来\n); } printf(b 的值是: %d\n, b); // 结果仍然是 10而不是 11 return 0; }3.避坑指南1.保持纯粹尽量不要在if的括号里写类似i或修改变量的操。2.顺序至上把最容易判定失败的条件放左边把最容易判定成功的条件放||左边。3.安全检查利用短路做“安全过滤”。三.switch语句特点特殊的if...else结构。语法形式switch(expression) //表示的结果必须为整型字符类型也是整型 { case value: //case后的值必须为整型或字符类型 statement //执行语句 break; //跳出开关 /* 可以有任意数量的 case */ default: //默认分支可选 default_statements; }详细解释1.控制表达式(expression)硬性规定括号内的结果必须是整型int,char,short等。明显错误switch (3.14)或switch (hello)会导致编译失败。2.case标签与常量唯一性每个case后面的常量必须是唯一的不能重复。必须是常量case 1:或case A:是合法的但case x:x是变量是非法的。冒号常量后面必须紧跟一个冒号:。3.break语句关键控制作用执行完当前分支后立即跳出整个switch大括号。如果不写程序会发生“穿透”Fall-through继续执行下一个case里的代码不管条件是否满足。4.default标签地位相当于if-else里的最后一个else。作用当所有的case都不匹配时执行这里的代码。例如#include stdio.h int main() { int floor 2; switch (floor) { case 1: printf(到达 1 楼大厅\n); break; case 2: printf(到达 2 楼餐厅\n); break; case 3: printf(到达 3 楼客房\n); break; default: printf(抱歉该楼层不存在\n); } return 0; }下一节为循环。