C语言学习笔记——分支与循环

发布时间:2026/7/11 12:21:32
C语言学习笔记——分支与循环 目录1 if语句1.1 if1.2 else1.3 else if1.4 注意事项1.4.1 注意事项11.4.2 注意事项22 switch语句2.1 switch2.2 注意事项2.2.1 空格问题2.2.2 break2.2.3 default 语句的位置3 条件判断常用运算符3.1 关系运算符3.2 逻辑运算符3.2.1 运算符逻辑与3.2.2 ||运算符逻辑或3.2.3 !运算符取反4 while 循环5 for 循环6 do...while循环7 循环中常用关键字7.1 break7.2 continue7.2.1 while中的continue7.2.2 for中的continue7.2.3 do...while中的continue在C语言中分支语句主要有if语句switch语句两种而循环语句主要有while循环for循环do…while循环两种。接下来就来介绍一下这些语句1 if语句1.1 ifif 语句在C语言中的写法如下if(表达式)内部语句;....//其它代码if的执行流程为若表达式条件为真则会执行内部语句若表达式条件为假则不会执行内部语句而是继续执行后方代码。在C语言中非0的数值表示真0则表示假实践判断一个数是否为正数有了 if 语句就可以进行条件判断所以方法就是让用户输入一个数值让 if 语句判断数值是否 00 则输出是正数#includestdio.hintmain(){intnum0;scanf(%d,num);if(num0)//大于0是正数{printf(是正数);}return0;}1.2 elseelse 的用法如下if(表达式)内部语句;else内部语句;...//其它语句当 if 的表达式结果为假if 的内部语句就不会执行会转而去执行 else 的内部语句而 if 的表达式结果为真则 if 的内部语句会执行else 的内部语句不会执行。实践判断一个数是奇数还是偶数让用户输入一个数值使用if…else 语句让 if 语句判断数值 % 2 是否等于0 0 则表明2是因子输出是偶数否则通过else来输出是奇数#includestdio.hintmain(){intnum0;scanf(%d,num);if(num%20)//2是因子是偶数{printf(是偶数);}else//否则就是奇数{printf(是奇数);}return0;}1.3 else ifelse if 的写法如下if(表达式1)内部语句;elseif(表达式2)内部语句;...//其它语句如果表达式1为真则会执行if 的内部语句若表达式1为假不会执行if 的内部语句由表达式2进行判定若表达式2为真则会执行else…if 的的内部语句如果表达式2也为假则不会执行else…if 的内部语句会转而去执行后续的其它语句实践根据输入的年龄判断状态。18打印未成年18并且44打印青年45岁及以上打印中老年通过 if…else if 的方式来进行不同的条件判断满足条件时输出对应信息即可#includestdio.hintmain(){intage0;scanf(%d,age);if(age18)//18岁{printf(未成年);}elseif(age18age44){printf(青年);}else//45岁及以上{printf(中老年);}return0;}1.4 注意事项1.4.1 注意事项1if 后不加大括号时默认只能跟一条语句比如intmain(){if(0)//0表示假printf(hello);//由于0是假所以此语句不会执行printf(world);//if 后默认跟一条所以这条会打印return0;}在上方例子中if 的内部语句只有 printf(“hello”) 这一条不管 if 后的表达式是真实假printf(“world”);都会执行。如果不想执行可以加入大括号比如intmain(){if(0)//0表示假{printf(hello);printf(world);}return0;}在这里由于if后加了大括号所以大括号内的所有语句都是 if 的内部语句if 后的表达式为假就都不会执行1.4.2 注意事项2观看这一段代码它的结果是intmain(){inta0;intb1;if(a)if(b)printf(world);elseprintf(error);return0;}可能会有人觉得是打印error实际上什么都不会输出为什么会这样呢因为else 总与最近的 if 进行对齐所以上面这串代码就可以这样解释a为0b为1else 与最近的 if 对齐也就是 if(b)所以相当于 if(b)…else是 if(a) 的内部语句 if (a) 进行判断结果是假不会执行内部语句所以什么都没有输出更改一下格式后相当于是这样的代码intmain(){inta0;intb1;if(a){if(b)printf(world);elseprintf(error);}return0;}2 switch语句2.1 switchswitch语句的写法如下switch(整形表达式){case(整形常量表达式1):语句[break]case(整形常量表达式2):语句[break]default:语句}整形表达式指计算结果为整形的表达式比如1 2 3 % 2这样的表达式字符也是可以的因为字符是以 ASCII 的形式存储的ASCII 也是整形但是浮点数不能使用。整形常量表达式不可以被修改的值是常量所以这个表达式指像123这样的值字符也可用浮点数不可用。switch 语句会根据整形表达式的值来对 case 中的整形常量表达式进行匹配如果能找到匹配项则执行 case 内的语句找不到并且写了 default 的情况下会执行 default 语句中的内容实践输⼊任意⼀个整数值计算除3之后的余数除3后的余数有012所以只需要在整形表达式内写上取余的表达式让 switch 语句根据结果进行 case 的匹配即可intmain(){intn0;scanf(%d,n);switch(n%3)//计算出0,1,2{case0://计算出0匹配至0printf(余数0);break;case1://计算出1匹配至1printf(余数1);break;case2://计算出2匹配至2printf(余数2);break;}return0;}2.2 注意事项2.2.1 空格问题case后必须要有一个空格否则会有语法错误2.2.2 breakcase 语句中的 break 是用来跳出 switch 语句的如果没有 break 语句那么执行时会一直下滑直到遇到 break 或者 switch 语句结束比如intmain(){intn0;scanf(%d,n);switch(n%3)//计算出0,1,2{case0://计算出0printf(余数0);case1://计算出1printf(余数1);case2://计算出2printf(余数2);break;}return0;}如果 n % 3 计算出0会匹配至 case 0但是由于 case 0 和 case 1没有 break 语句执行时会将 case 0case 1 和 case 2 内的语句按顺序执行2.2.3 default 语句的位置default 语句的位置在 switch 中没有特别要求放在 switch 语句内任何地方都是不影响语法的但是要保证不能影响代码逻辑3 条件判断常用运算符3.1 关系运算符运算符作用判断左侧是否大于右侧判断左侧是否小于右侧判断左侧是否大于等于右侧判断左侧是否小于等于右侧判断左侧是否等于右侧!判断左侧是否不等于右侧以上的运算符会根据结果会返回0或1用来表示假和真3.2 逻辑运算符3.2.1 运算符逻辑与运算符的作用是根据左右两侧的真假情况来得出真假情况包括两侧情况结果1 1两侧都为真结果是真1 0右侧为假结果是假0 1左侧为假结果是假0 0两侧都为假结果是假总结一下就是两真则真一假则假短路现象若运算符左侧的计算结果是假则不会去计算右侧的结果直接得到假也就是03.2.2 ||运算符逻辑或||运算符的作用是根据左右两侧的真假情况来得出真假情况包括两侧情况结果1 || 1两侧都为真结果是真1 || 0一侧为真结果是真0 || 1一侧为真结果是真0 || 0两侧都为假结果是假总结一下就是一真则真两假则假短路现象若||运算符左侧的计算结果是真则不会去计算右侧的结果直接得到真也就是非0默认13.2.3 !运算符取反!运算符的作用是将真转换为假假转换为真案例结果!10!014 while 循环while 的语法如下while(表达式)内部语句while 会根据表达式的结果来执行内部语句结果是假就不执行结果是真则执行执行完毕后会再次进行条件判断结果是假就循环停止结果是真则再执行一次进行往复来回实践打印1-10之间的数字设置变量 i 作为循环变量每一次循环让 i 自增1并打印数值直到 i 大于10循环停止intmain(){inti1;//定义循环变量while(i10)//判断{printf(%d ,i);i;//调整循环变量}return0;}5 for 循环while 循环中循环变量的定义判断调整自增容易因为代码量的增大导致间隔巨大不方便查看所以设计了 for 循环for 的语法如下for(循环变量初始化;条件判断;变量调整){内部语句;}运行 for 循环时先对循环变量进行初始化再进行条件判断若为假则结束循环若为真则执行内部语句执行完内部语句后进行变量调整再进行条件判断若为假则结束循环若为真则执行内部语句如此往复实践打印1-10之间的数字intmain(){inti0;for(i1;i10;i){printf(%d ,i);}return0;}6 do…while循环do…while 循环的语法如下do{内部语句;}while(表达式);do…while与其他的循环不同的点是do…while不管条件如何总会先执行一次内部语句再进行条件判断若为假则结束循环若为真则继续执行内部语句如此往复实践打印1-10之间的数字intmain(){inti1;do{printf(%d ,i);i;}while(i10);return0;}7 循环中常用关键字7.1 break在 while, for, do…while 中break 的作用都是一样的主要作用为结束本层循环并执行后续的代码例子intmain(){inti1;while(i10){if(i5)break;printf(%d ,i);i;}return0;}在这个例子中当循环变量 i 自增到5时会出发 if 语句中的break直接跳出循环因此只会打印1 2 3 47.2 continuecontinue在 whilefordo…while 中的主要效果相近但细节上有微妙的差别作用主要是跳过当次循环的后续语句7.2.1 while中的continuewhile 循环由于变量调整语句的位置较为随意所以可能会导致死循环比如intmain(){inti1;while(i10){if(i5)continue;printf(%d ,i);i;}return0;}当 i 循环至 5 时if 语句的条件判定为真触发 continue直接跳过了后续的打印和 i 语句进行条件判断并进入下次循环但下次循环时i 仍然是5依然不会执行 i 如此往复就变成了死循环7.2.2 for中的continuefor 循环由于执行完了内部语句才会调整变量所以一般不会死循环除非你真的把调整语句写在了 continue 的后面例子intmain(){inti1;for(i1;i10;i){if(i5)continue;printf(%d ,i);}return0;}当 i 等于5时执行 if 内的 continue 语句直接跳过后续的打印语句执行i, 此时的 i 会变成6再次进行判断因此不会死循环7.2.3 do…while中的continuedo…while 中的 continue 与 while 中的类似。也会触发死循环比如intmain(){inti1;do{if(i5)continue;printf(%d ,i);i;}while(i10)return0;}原因与while中相同