C语言分支语句与循环语句总结 一、C语言三大结构所有代码都靠这三个1. 顺序结构从上往下依次执行默认2. 分支结构选择满足条件才执行 —— if、else、else if、switch3. 循环结构满足条件就重复执行 —— for、while、do while第一部分分支语句选择结构1. if 语句单选格式if(条件){满足条件执行;}规则• 条件为真非0 → 执行• 条件为假0 → 不执行2. if…else 语句二选一if(条件){成立执行;}else{不成立执行;}一定只会执行其中一个分支3. if…else if…else多分支if(条件1){}else if(条件2){}else{}特点从上往下匹配匹配成功立刻结束4. 三目运算符最简 if elsemax a b ? a : b;等价if(ab) maxa;else maxb;作用简单二选一简化一行代码5. switch 多分支适合固定值判断不能判断区间、大小switch(变量){case 1: ...; break;case 2: ...; break;default: ...;}重点• 必须加 break否则会穿透• case 后面只能是常量• default 相当于 else第二部分循环语句重复执行1. for 循环【考试最常用】格式for(初始化; 判断条件; 更新){循环体;}执行顺序1. 初始化只执行1次2. 判断条件3. 成立 → 执行循环体4. 更新变量5. 回到第二步适合已知循环次数1~100、遍历、统计、素数、闰年2. while 循环while(条件){循环体;}特点先判断后执行条件不成立一次都不执行3. do while 循环do{循环体;}while(条件);特点先执行一次再判断至少执行1次极少考题第三部分两个循环关键字必考1. break• 直接跳出当前循环 / switch• 彻底结束循环2. continue• 跳过本次循环直接进入下一次• 不会结束循环你以前常错continue 不能放在需要“计数、累加”的前面会跳过更新第四部分三种循环区别超清晰对比1. for结构整齐固定次数首选素数、统计9、闰年、求和2. while不固定次数条件满足就循环3. do while至少执行一次几乎不用分支易错1. 和 写混判断相等必须 2. if 条件写反3. if、else 不加括号导致逻辑错乱4. switch 不写 break 造成穿透循环易错1. 循环变量不更新 → 死循环2. printf 写在循环里/外面位置错误3. 素数、公约数 判断条件写反正确n%i0错误i%n04. continue 乱用5. 统计9个数只统计个位漏掉十位最大公约数易错总结• 循环从两数较小值往下找• 判断a%i0 b%i0素数易错总结• 1 不是素数• 2 是唯一偶数素数• 只要能被整除 → 不是素数第七部分一句话终极口诀1. 分支条件成立就执行二选一、多选一2. for固定次数最强、最整齐3. while条件控制循环4. break 结束循环continue 跳过一次例题#define _CRT_SECURE_NO_WARNINGS 1#include stdio.hint main(){int a 0, b 0;for (a 1, b 1; a 100; a){if (b 20) break;if (b % 3 1){b b 3;continue;}b b - 5;}printf(%d\n, a);return 0;}//9*9乘法表int main(){for (int i 1;i 9;i){for (int j 1;j i;j){printf(%d*%d ,i,j, i * j);}printf(\n);}return 0;}//求10 个整数中最大值int main(){int a;scanf(%d, a);int max 0;while(a!0)//只要不为0就一直拆分数字{int dighta % 10;//新定义了一个变量整个数字拆分后的个位数,变量名换dight区分{if (dightmax){max dight;//擂台思想拿刚取出来的数字和当前最大值相比不断更新最大值}a / 10;//去掉个位数把最后一位删掉}}printf(最大的是:%d\n,max);return 0;}//计算1/1-1/21/3-1/41/5 …… 1/99 - 1/100 的值打印出结果//偶数相减奇数相加这个式子的规律int main(){int i;double sum 0;//double是因为1/4是0.25双精度for (i 1;i 100;i){if (i % 2 0){sum sum - 1.0 / i;}elsesum sum 1.0 / i;}printf(%.2f, sum);//保留两位小数return 0;}//写一个代码打印100~200之间的素数#includemath.hint main(){int i;for (i 100;i 200;i){int flag 1;//默认是素数假设当前数字式素数for (int j 2;j sqrt(i);j)//sqrt是库函数平方根从第二个数开始2是唯一的偶数素数//后面的数用平方去除能整除的都不是素数,sqrt要加头文件math.h//不然运行不了{if (i % j 0){flag 0;//能整除的不是素数,break;//停止循环}}if (flag 1)//标记为1的就是素数{printf(%d , i);}}return 0;}//打印1000年到2000年之间的闰年int main(){int year;for (year 1000;year 2000;year){if (year % 4 0 year % 100 ! 0) || (year%4000){printf(%d , year);}}return 0;}//编写程序数一下 1到 100 的所有整数中出现多少个数字9个位十位//(需要拆分个位十位是否有9)int main(){int sum 0;for (int i 1;i 100;i){int ge i % 10;//个位数字只用判断是否有9单个数字 9 19 29 39 49 59 69 79 89 99int shi i / 10;//十位数字需要取出十位判断包含9的个数 90 91 92 93 94 95 96 97 98 99if(ge9){sum 1;}if (shi 9) {sum 1;}}printf(%d , sum);return 0;}//给定两个数求这两个数的最大公约数//输入20 40////输出20int main(){int a, b;int i;scanf(%d %d, a, b);int min a b ? a : b;//判断a和b如果ab,则结果是a,反之则bfor (i min;i 1;i--)//为什么是min从两个数里最小的那个数找起两个数的公约数不可能超过更小的那个{ //为什么是i--:从大到小查找找到第一个符合条件的最大公约数if (a % i 0 b% i 0)//不能写反如果写反则结果完全不同eg:a%i0 -i是a的约数{ // i%a0 -a是i的约数printf(%d, i);break;}}return 0;}//eg: 12 和18//12的最大公约数只能是1218的也只能是18同时可整除12 和18的数字不可能超过12//如果公约数比12还大那根本不可能整除12//为什么是从大到小起点是12就从12往下开始找起直到找到那个可以同时整除的那个数字