资讯动态

C语言分支与循环全解析:从基础语法到猜数字实战

发布时间:2026/10/23 5:03:24 来源:尧图企业网站定制
一、C语言三种程序结构C语言是结构化程序设计语言所有业务逻辑都可以拆解为顺序结构、选择分支结构、循环结构的组合。分支选择if、switch满足不同条件执行不同代码循环while、for、do‑while重复执行一段代码C语言规则0代表假非0全部代表真。二、分支语句1. if‑else语句1.1基础if条件为真执行语句为假跳过。Cif(表达式)语句;//示例判断奇偶 #include stdio.h int main() { int num 3; if (num % 2 1 { printf(奇数\n); } else { printf(偶数\n); } return 0; }if‑else二选一条件成立执行if否则执行else。注意if/else默认只管辖紧跟的1条语句多条语句必须用{ }包裹形成复合代码块否则逻辑错乱。1.2多分支if‑else if‑else适合多条件判断从上往下依次匹配匹配成功就结束分支。Cif(条件1){}else if(条件2){}else{}//示例成绩评级 #include stdio.h int main() { int score 75; if(score 90) { printf(优秀\n); } else if(score 60) { printf(及格\n); } else{ printf(不及格\n); } return 0; }1.3嵌套if 悬空else问题if里面继续写if就是嵌套if。重点else永远匹配离它最近、还没有配对的if和排版对齐无关写代码尽量加{}大括号避免悬空else带来逻辑bug。#include stdio.h int main() { int a 0; int b 2; if(a 1) { if(b 2) printf(hehe\n); else printf(haha\n); } return 0; }2.常用运算符①关系运算符比较 !坑点判断相等是赋值千万不要写混不要连续写 如18age36C语言会从左向右运算逻辑错误正确写法age18 age36。//示例判断青年18-36岁 #include stdio.h int main() { int age 20; if(age 18 age 36) { printf(青年\n); } return 0; }②条件运算符三目运算符exp1 ? exp2 : exp3exp1为真执行exp2否则执行exp3可以简单替代简单if‑else。例m ab ? a : b;取出a、b较大值。//示例求两数最大值 #include stdio.h int main() { int a 10,b 20; //int a 10; //int b 20; int max ab ? a : b; printf(%d\n, max); return 0; }③逻辑运算符!逻辑取反逻辑与两边全部为真才为真左边为假右边不执行短路||逻辑或一边为真即为真左边为真右边不执行短路。短路求值只要左边已经可以确定整个表达式结果右边代码直接不运行。典型例子闰年判断(year%40 year%100!0) || (year%4000)。//示例闰年 #include stdio.h int main() { int year 2024; if((year % 4 0 year % 100 ! 0) || (year % 400 0)) { printf(闰年\n); } return 0; }3. switch分支语句适合整型常量多分支判断.语法输入1-7输出星期 # include stdio.h int main() { int day 3; switch(day) { case 1: printf(周一\n); break; case 2: printf(周二\n); break; case 3: printf(周三\n); break; default: printf(输入错误\n); break; } return 0; }#include stdio.h int main() { int day 2; switch (day) { case 1: case 2: case 3: printf(工作日\n); break; case 6: case 7: printf(周末\n); break; } return 0; }关键点switch括号内必须是整型case后必须是整型常量break非常关键没有break会发生case穿透继续执行后面case代码可以故意利用穿透实现多case执行同一套代码default所有case都不匹配时执行位置不强制习惯写最后。三、三大循环1. while循环Cwhile(条件){循环体;}逻辑先判断后执行。条件非0就执行循环体为0结束。适合循环次数不确定的场景。//打印1-5 #include stdio.h int main() { int i 1; while (i 5) { printf(%d , i); i; } return 0; }2. for循环最常用适合已知循环次数场景Cfor(表达式1;表达式2;表达式3){循环体;}//打印1-5 #include stdio.h int main() { for (int i 1; i 5; i) { printf(%d, i); } return 0; }执行顺序初始化 → 判断 → 循环体 → 调整 → 判断 →循环体……优势初始化、判断、调整全部集中写在一起可读性高。C99支持直接for(int i1;i10;i)在for头定义循环变量。3. do‑while循环Cdo{循环体;}while(条件);先执行循环体再判断条件循环体至少执行1次。适合需要先做一次操作再判断要不要继续循环比如数字位数统计、输入校验。// 统计数字位数 #include stdio.h int main() { int n 123; int count 0; do { count; n / 10; } while (n ! 0); printf(%d位\n, count); return 0; }break和continuebreak直接彻底终止本层循环跳出循环#include stdio.h int main() { for (int i 1; i 5; i) { if (i 3) break; printf(%d, i); } return 0; }continue跳过本次循环后面剩余代码直接进入下一轮循环判断。#include stdio.h int main() { for (int i 1; i 5; i) { if (i 3) continue; printf(%d, i); } return 0; }⚠️while中使用continue要小心如果变量自增写在continue后面会造成死循环for循环中continue会直接跳到表达式3变量调整不容易死循环。循环嵌套循环里面套循环外层循环跑一次内层循环跑完完整一轮。//打印2*2乘法口诀表 #include stdio.h int main() { for (int i 1; i 2; i) { for (int j 1; j 2; j) { printf(%d*%d%d, i, j, i * j); } printf(\n); } return 0; }经典案例找出100‑200之间素数外层遍历数字内层做试除判断是否是素数。#include stdio.h int main() { int i; int j; for (i 100; i 200; i) { int flag 1;//为素数时 for (j 2; j i; j) { if (i % j 0) { flag 0; break; } } if (flag 1) { printf(%d , i); } } return 0; }goto语句在同一个函数内直接跳转到标记标签。#include stdio.h int main() { printf(A\n); goto end; printf(B\n); end: printf(C\n); return 0; }不建议随意滥用容易打乱流程适合多层循环快速跳出、统一错误资源释放处理Linux内核、SQLite等开源项目会在错误处理场景使用goto。四、实战猜数字游戏随机数随机数三剑客rand()生成伪随机数返回0~32767头文件stdlib.hsrand(seed)设置随机数种子程序运行期间调用一次就够time(NULL)获取时间戳秒做动态种子头文件time.h。生成指定区间随机数公式C//生成[a,b]范围随机数a rand() % (b - a 1)示例1‑100随机数rand()%100 1完整猜数字游戏核心逻辑做菜单选择1开始游戏0退出生成随机数循环接收玩家输入提示猜大/猜小直到猜对。#include stdio.h #include stdlib.h #include time.h void game() { int r rand()%1001; int guess0; while(1) { printf(请猜数字); scanf(%d,guess); if(guessr) printf(猜小了\n); else if(guessr) printf(猜大了\n); else { printf(恭喜猜对\n); break; } } } void menu() { printf(猜数字游戏\n); printf(1.开始游戏 0.退出\n); } int main() { int input0; srand((unsigned int)time(NULL)); do { menu(); printf(请选择); scanf(%d,input); switch(input) { case 1: game();break; case 0: printf(游戏结束\n);break; default:printf(输入错误请重新选择\n);break; } }while(input); return 0; }五、学习小结if‑else处理分支多条语句加大括号、警惕悬空elseswitch适合整型常量多分支牢记break穿透现象while先判后做do‑while先做后判至少执行一次for适合已知次数循环break结束循环continue跳过本轮剩余代码逻辑运算符 ||存在短路特性写判断表达式需要留意randsrandtime组合生成真正变化的随机数可以实现很多趣味小游戏。练习小拓展可以给猜数字游戏增加最大猜测次数限制、计时功能进一步巩固分支循环知识

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑