8 判断,分支,循环语句
1. if-else 条件语句1.1 基本作用根据条件真假选择性执行代码。C 语言规则非 0 为真0 为假。1.2 三种基础格式格式 1单 if满足条件才执行if(条件表达式){// 条件为真时执行}#includestdio.hintmain(){intnum90;if(num60){printf(及格\n);}return0;}格式 2if-else二选一if(条件表达式){// 条件为真执行}else{// 条件为假执行}#includestdio.hintmain(){intnum90;if(num60){printf(good\n);}else{printf(not good\n);}return0;}D:\cproject\cmake-build-debug\high.exe good格式 3if-else if-else多分支判断适合区间判断、多条件依次筛选。if(条件1){// 条件1成立}elseif(条件2){// 条件1不成立、条件2成立}elseif(条件3){// 条件1、2不成立、条件3成立}else{// 以上都不成立}#includestdio.hintmain(){intnum88;if(num90){printf(first\n);}elseif(num80){printf(second\n);}elseif(num70){printf(third\n);}else{printf(last\n);}return0;}D:\cproject\cmake-build-debug\high.exe second1.3 嵌套 if-elseif /else 内部再写 if 判断实现多层逻辑#includestdio.hintmain(){intage20;intsex1;// 1男 0女if(age18){printf(成年\n);if(sex1){printf(男性\n);}else{printf(女性\n);}}else{printf(未成年\n);}return0;}2. switch-case 分支语句2.1 适用场景判断某个变量等于某个固定值等值判断不适合区间判断。相比多分支 if-else if结构更清晰、执行效率更高。2.2 标准语法switch(表达式){case常量1:语句;break;case常量2:语句;break;// 可写多个 casedefault:以上都不匹配时执行;break;}语法规则switch 括号内只能是 整型、字符型int /char不能是浮点型、区间表达式case 后面必须是常量不能写变量、表达式break跳出 switch不加 break 会发生穿透继续执行下一个 casedefault可选所有 case 都不匹配时执行位置任意一般放最后。2.3 示例数字匹配#includestdio.hintmain(){intnum2;switch(num){case1:printf(数字1\n);break;case2:printf(数字2\n);break;case3:printf(数字3\n);break;default:printf(其他数字\n);break;}return0;}字符型 switch#includestdio.hintmain(){charchB;switch(ch){caseA:printf(等级A\n);break;caseB:printf(等级B\n);break;caseC:printf(等级C\n);break;default:printf(未知等级\n);}return0;}经典用法case 穿透合理利用多个 case 执行同一段代码可以省略中间的 break#includestdio.hintmain(){intmonth3;switch(month){case3:case4:case5:printf(春季\n);break;case6:case7:case8:printf(夏季\n);break;case9:case10:case11:printf(秋季\n);break;case12:case1:case2:printf(冬季\n);break;default:printf(月份错误\n);}return0;}3. while、do-while、forC 语言常用三种循环while、do-while、for配合 break、continue 实现跳转核心作用重复执行一段代码通用规则表达式结果 非0为真0为假条件为真继续循环条件为假退出循环3.1 while 循环while(条件表达式){// 循环体条件为真时重复执行}执行流程1.先判断条件表达式2.条件为真 → 执行循环体再回到步骤 13.条件为假 → 直接跳出循环基础示例#includestdio.hintmain(){inti1;while(i5){printf(%d ,i);i;// 自增避免死循环}return0;}特点:先判断后执行条件一开始就为假循环体一次都不执行适合循环次数不确定的场景死循环慎用while(1){printf(死循环\n);}3.2 do-while 循环do{// 循环体}while(条件表达式);// 末尾必须加分号 ;执行流程1.先执行一次循环体2.再判断条件3.条件为真继续循环为假则退出#includestdio.hintmain(){inti1;do{printf(%d ,i);i;}while(i5);return0;}核心特点:先执行后判断无论条件真假循环体至少执行 1 次末尾 ; 不能漏语法强制要求常用场景菜单交互、至少执行一次的业务逻辑3.3 for 循环for(表达式1;表达式2;表达式3){// 循环体}表达式 1初始化变量只执行一次表达式 2循环条件判断同 while表达式 3每次循环结束后执行一般做自增 / 自减执行流程1.执行 表达式 1 → 初始化2.判断 表达式 2为真 → 执行循环体 → 执行表达式 3 → 回到步骤 2为假 → 跳出循环#includestdio.hintmain(){inti;// 初始化i1; 判断i5; 每次结束ifor(i1;i5;i){printf(%d ,i);}return0;}for 循环灵活写法写法 1省略表达式 1变量提前初始化inti1;for(;i5;i){printf(%d ,i);}写法 2省略表达式 3自增写在循环体内inti;for(i1;i5;){printf(%d ,i);i;}写法 3三个全省略 → 死循环for(;;){printf(死循环\n);}4. 循环跳转语句break /continue4.1 break作用直接跳出当前所在循环 /switch终止整个循环。#includestdio.hintmain(){inti;for(i1;i5;i){if(i3){break;// 遇到i3直接跳出循环}printf(%d ,i);}return0;}4.2 continue作用跳过本次循环剩余代码直接进入下一次循环判断不终止循环。#includestdio.hintmain(){inti;for(i1;i5;i){if(i3){continue;// i3时跳过本次输出直接下一轮}printf(%d ,i);}return0;}5. 循环嵌套多层循环循环内部再写循环常用场景打印图形、二维数据遍历。示例九九乘法表#includestdio.hintmain(){inti,j;// 外层行for(i1;i9;i){// 内层列for(j1;ji;j){printf(%d*%d%d ,j,i,i*j);}printf(\n);// 换行}return0;}规则break/continue只作用于当前一层循环不会影响外层实战案例#includestdio.hintmain(){intsum0;inti;for(i1;i100;i){sumi;}printf(总和 %d\n,sum);// 输出 5050return0;}