ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

C语言中的分支和循环语句(下)

C语言中的分支和循环语句(下) 上一片博客讲解了我对选择结构相关基本知识的理解这篇将讲解循环结构相关语句。本篇学习目标学完本篇后你将能够区分 while、do-while、for 三种循环的语法格式与适用场景使用嵌套循环解决二维数组遍历等实际问题正确使用 break 和 continue 控制循环流程。本篇讲解内容1. while循环do-while循环for循环及其对比2. 循环的嵌套。3. break和continue在上述循环中的用法。在我们日常生活中经常需要重复一种判断及执行语句多次例如连续求和次数累加等等。所以C语言提供了三种循环下面我一一讲解。一. 循环语句1. while循环while循环的格式while(表达式) { (循环体) }运行模式先判断表达式真则执行循环体假则跳出循环。例子#define _CRT_SECURE_NO_WARNINGS #includestdio.h int a 1; while(a 6) { printf(%d , a); }但是这一个代码块在vs2026上是运行不了的因为变量a一直没有变判断一直为真则系统会陷入死循环所以在循环结构中的变量一般至少有一个在依次循环结束后变化。修改代码#define _CRT_SECURE_NO_WARNINGS #includestdio.h int a 1; while(a 6) { printf(%d , a); a; }每次循环后a均会加一最终会停止运行结果打印1 2 3 4 5 。2. do_while循环但我们做一些小游戏的时候一般需要先打印菜单后选择选项一确定是否进入例如一个猜字游戏菜单void menu() { printf(*****************************\n); printf(**********1-开始游戏*********\n); printf(*****************************\n); printf(**********0-退出游戏*********\n); printf(*****************************\n); printf(请选择); }而大部分游戏具有循环性所以我们需要用循环语句实现所以步骤是打印菜单-选择-1-开始游戏-结束-打印菜单-选择-1......|-0-退出游戏 |-0......那么需要先执行相关命令再循环则单独的while循环语句不能实现就要do_while循环语句其结构是do { 循环体; }while(判断表达式);所以上面提到的猜数字游戏可以这样写int main() { int input 0; do { menu(); scanf(%d, input); switch (input) { case 1: game(); break; case 0: printf(游戏结束\n); break; default: printf(输入错误请重新输入\n); } } while (input); return 0; }game和menu一样都是函数调用这里的实现不在详解有兴趣可以看一看我的代码库https://gitee.com/maomaocyuyan/code_small-project/blob/master/猜数字游戏/猜数字游戏/猜数字.c易忽略1.do后面一般有大括号2.while(判断语句)后有分号。总结while语句是先判断再执行而do_while实现执行后判断。3. for循环for循环可以说是最常用的循环其基本结构for(初始化;判断表达式;变量调整) { 循环体; }相比while循环for循环更加简练且更具有易读性。但是(初始化;判断表达式;变量调整)中的三个部分均可以选择性地省略但判断表达式和变量调整一定要在循环体中体现例如下面两种写法基本等价for(int i0;i10;i) { printf(%d,i); } //等价于 int i 0; for (;;) { printf(%d , i); i; if (i 10) break; }但是第一种写法的整型变量i是临时变量生命周期和作用域均在其所在的for循环语句中循环结束后便自行销毁。4. 三者对比循环类型语法格式执行顺序适用场景典型示例优点缺点whilewhile(表达式) { 循环体; }先判断表达式真则执行循环体假则跳出循环。循环次数不确定需要先判断再执行的情况。while(a 6) { printf(%d , a); a; }结构简单逻辑清晰适合条件控制的循环。若循环体内忘记修改变量容易造成死循环。do-whiledo { 循环体; } while(表达式);先执行一次循环体再判断表达式真则继续循环假则退出。至少需要执行一次循环体的情况如菜单打印、游戏主循环。do { menu(); scanf(%d, input); } while(input);保证循环体至少执行一次适合先执行后判断的场景。循环体至少执行一次若条件一开始就不满足也会多执行一次。forfor(初始化; 判断表达式; 变量调整) { 循环体; }先执行初始化再判断表达式真则执行循环体然后执行变量调整再判断表达式如此循环。循环次数明确或已知范围的情况如遍历数组、累加求和。for(int i 0; i 10; i) { printf(%d, i); }语法简练初始化、判断、调整集中在一行可读性强。三个部分均可省略但若省略不当容易造成死循环或逻辑混乱。二. 嵌套使用举一个最典型的例子二维数组的遍历int main() { int arr[3][5] { 1,2,3,4,5,2,3,4,5,6,3,4,5,6,7 }; for (int i 0;i 3;i) { for (int j 0;j 5;j) { printf(%d , arr[i][j]); } printf(\n); } return 0; }先进入一层循环然后再进入二层循环这实现了二维数组的遍历及打印。其他嵌套同理不再赘述。三. break和continue1. breakbreak用于立即终止当前所在的循环跳出循环体继续执行循环之后的代码。下面分别针对三种循环给出示例。1while循环中的breakint a 1; while (a 10) { if (a 5) break; printf(%d , a); a; }执行效果当a递增到5时break语句立即终止while循环不再执行后续的a和printf因此只打印1 2 3 4。适用场景循环次数不确定但需要在满足某个特定条件时提前结束循环例如在查找数据时找到目标就立即退出。2do-while循环中的breakint input 0; do { scanf(%d, input); if (input 0) break; printf(你输入的是%d\n, input); } while (1);执行效果do-while先执行一次循环体当用户输入0时break立即终止循环即使while(1)条件恒为真也不会继续执行。适用场景菜单选择、游戏主循环等需要先执行一次再判断的场景配合break实现退出功能。3for循环中的breakfor (int i 0; i 10; i) { if (i 5) break; printf(%d , i); }执行效果当i递增到5时break立即终止for循环不再执行后续的i和printf因此只打印0 1 2 3 4。适用场景循环次数明确但需要在满足某个条件时提前结束例如遍历数组时找到目标元素就停止。2. continuecontinue用于跳过本次循环中continue之后剩余的语句直接进入下一次循环的判断。下面分别针对三种循环给出示例。1while循环中的continueint a 0; while (a 6) { a; if (a 3) continue; printf(%d , a); }执行效果当a等于3时continue跳过printf语句直接进入下一次循环判断因此不打印3其余数字正常打印。适用场景需要跳过某些特定值不处理但循环本身继续执行的情况。2do-while循环中的continueint a 0; do { a; if (a 3) continue; printf(%d , a); } while (a 6);执行效果当a等于3时continue跳过printf语句直接进入while(a 6)的判断因此不打印3其余数字正常打印。适用场景至少执行一次循环体同时需要跳过某些特定值不处理的情况。3for循环中的continuefor (int i 0; i 6; i) { if (i 3) continue; printf(%d , i); }执行效果当i等于3时continue跳过printf语句直接执行i进入下一次循环因此不打印3其余数字正常打印。适用场景循环次数明确需要跳过某些特定值不处理例如统计时排除无效数据。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表