做网站用啥语言,移动端网站提交提交,网站建设路由设置,广州网站建设 易企建站公司分支和循环 前言1. if语句1.1 if1.2 else1.3 分支中包含多条语句1.4 嵌套if1.5 悬空else问题 2. 关系操作符3. 条件操作符4. 逻辑操作符#xff1a; , || , #xff01;4.1 逻辑取反运算符4.2 与运算符4.3 或运算符4.4 练习#xff1a;闰年的判断4.5 短路 5. swit… 分支和循环 前言1. if语句1.1 if1.2 else1.3 分支中包含多条语句1.4 嵌套if1.5 悬空else问题 2. 关系操作符3. 条件操作符4. 逻辑操作符 , || , 4.1 逻辑取反运算符4.2 与运算符4.3 或运算符4.4 练习闰年的判断4.5 短路 5. switch语句5.1 if语句和switch语句的对比5.2 switch语句中的break5.3 switch语句中的default5.4 switch语句中的case和default的顺序问题 6. while循环6.1 if 和 while的对比6.2 while语句的执行流程6.3 while循环的实践6.4 练习 7. for循环7.1 语法形式7.2 for循环的执行流程7.3 for循环的实践7.4 while循环和for循环的对比7.5 练习 8. do-while循环8.1 语法形式8.2 do while循环的执行流程8.3 do while循环的实例8.4 练习 9. break和continue语句9.1 while循环中的break和continue9.1.1 break举例9.1.2 continue举例 9.2 for循环中的break和continue9.2.1 break举例9.2.2 continue举例 9.3 do while循环中的break和continue 10. 循环的嵌套10.1 练习10.2 题目解析10.3 参考代码 11. goto语句 前言
C语言是结构化的程序设计语言这里的结构指的是顺序结构、选择结构、循环结构C语言是能够实 现这三种结构的其实我们如果仔细分析我们日常所见的事情都可以拆分为这三种结构或者这三种结构的组合。 我们可以使用 if 、 switch 实现分支结构使用 for 、 while 、 do while 实现循环结构。 1. if语句
1.1 if
if 语句的语法形式如下:
if ( 表达式 )语句表达式成立为真则语句执行表达式不成立为假则语句不执行 在C语言中0为假非0表示真也就是表达式的结果如果是0则语句不执行表达式的结果如果不是0则语句执行。 例子输入一个整数判断是否为奇数
#include stdio.h
int main()
{int num 0;scanf(%d, num);if(num % 2 1)printf(%d 是奇数\n, num);return 0;
}1.2 else
如果一个数不是奇数那就是偶数了如果任意一个整数我们要清楚的判断是奇数还是偶数怎么表示呢 这里就需要 if…else… 语句了语法形式如下
if ( 表达式 )
语句1
else
语句2例子输⼊⼀个整数判断是否为奇数如果是奇数打印是奇数否则打印数偶数。
#include stdio.h
int main()
{int num 0;scanf(%d, num);if(num % 2 1)printf(%d 是奇数\n, num);elseprintf(%d 是偶数\n, num);return 0;
}练习输入一个年龄 18岁就输出成年否则就输出未成年
#include stdio.h
int main()
{int age 0;scanf(%d, age);if(age18)printf(成年\n);elseprintf(未成年\n);return 0;
}1.3 分支中包含多条语句
默认在 if 和 else 语句中默认都只控制一条语句比如
#include stdio.h
int main()
{int age 0;scanf(%d, age);if(age 18)printf(成年了\n);printf(可以谈恋爱了\n);return 0;
}上面的代码你会发现输入的值不管是18 还是小于18“可以谈恋爱了了” 都会打印在屏幕上。
这是因为 if 语句只能控制一条语句就是 printf(成年了\n); if语句为真则打印成年了if语句为假则不打印对于 printf(可以谈恋爱了\n); 是独立存在的不管if语句的条件的真假都会被执行。 那如果我们要if语句同时控制2条语句怎么办呢 那就要使用 { } 将代码括起来else 后也可以跟上大括号。如下
#include stdio.h
int main()
{int age 0;scanf(%d, age);if(age 18) //if 后使⽤{} 控制多条语句-这个块也叫程序块或者复合语句{printf(成年了\n);printf(可以交⼥朋友了\n);}return 0;
}
#include stdio.hint main()
{int age 0;scanf(%d, age);if(age 18) //if 后使⽤{} 控制多条语句-这个块也叫程序块或者复合语句{printf(成年了\n);printf(可以交⼥朋友了\n);}else //else 后使⽤{}控制多条语句-这个块也叫程序块或者复合语句{printf(未成年\n);printf(不可以早恋哦\n);}
return 0;
}1.4 嵌套if
在 if else 语句中 else 可以与另一个 if 语句连用构成多重判断。 比如要求输入一个整数判断输入的整数是0还是正数或者负数。
#include stdio.h
int main()
{int num 0;scanf(%d, num);if(num 0)printf(输⼊的数字是0\n);else if(num 0) //这⾥的if 相当于嵌套在els语句中形成了嵌套结构 printf(输⼊的数字是正数\n); elseprintf(输⼊的数字是负数\n);return 0;
}上图中else 后面的代码就是嵌套在前面的 else 子句中的构成了嵌套的if语句。 if(num 0) printf(输⼊的数字是0\n); else printf(输⼊的数字是负数\n); 再比如输入一个整数如果是正数再判断是奇数还是偶数并输出 如果不是正数则输出负数。
#include stdio.h
int main()
{int num 0;scanf(%d, num);if(num0){if(num%2 0)printf(偶数\n);elseprintf(奇数\n);}else{printf(负数\n);}return 0;
}下面的代码也是嵌套在 if 语句中的构成了嵌套的 if 语句。 if(num%2 0)printf(偶数\n);elseprintf(奇数\n);以上就是嵌套if语句的语法有了嵌套if语句就可以完成更多复杂逻辑的判断。 练习
输⼊⼀个⼈的年龄
如果年龄18岁打印少年
如果年龄在18岁⾄44岁打印⻘年
如果年龄在45岁⾄59岁打印中⽼年
如果年龄在60岁⾄89岁打印⽼年
如果90岁以上打印⽼寿星参考代码:
//⽅法1
#include stdio.h
int main()
{int age 0;scanf(%d, age);if(age18)printf(少年\n);else if(age44)printf(⻘年\n);else if(age59)printf(中⽼年\n);else if(age90)printf(⽼年\n);elseprintf(⽼寿星\n);return 0;
}//带上⼤括号更容易看明⽩
#include stdio.h
int main()
{int age 0;scanf(%d, age);if(age18){printf(少年\n);}else{if(age44){printf(⻘年\n);}else{if(age59){printf(中⽼年\n);}else{if(age90)printf(⽼年\n);elseprintf(⽼寿星\n);}}}return 0;
}1.5 悬空else问题
如果有多个 if 和 else 可以记住这样一条规则 else 总是跟最接近的 if 匹配。
#include stdio.h
int main()
{int a 0;int b 2;if(a 1)if(b 2)printf(hehe\n);elseprintf(haha\n);return 0;
}程序运行的结果是什么 输出的结果是什么都不输出。 为什么呢 这就是悬空 else 的问题如果有多个 if 和 else 可以记住这样一条规则 else 总是跟最接近的 if 匹配。上面的代码排版让 else 和第一个 if 语句对齐让我们以为 else 是和第一个if匹配的当 if 语句不成立的时候自然想到的就是执行 else 子句打印 haha 但实际上 else 是和第二个if 进行匹配的这样后边的 if…else 语句是嵌套在第一个 if 语句中的如果第一个 if 语句就不成立嵌套 if 和 else 就没机会执行了最终啥都不打印。 如果代码改成下面这样就更加容易理解了
#include stdio.h
int main()
{int a 0;int b 2;if(a 1){if(b 2)printf(hehe\n);elseprintf(haha\n);}return 0;
}或者如果我们希望else确实和第一个if匹配可以这样修改代码
#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. 关系操作符
C 语言用于比较的表达式称为 “关系表达式”relational expression里面使用的运算符就称 为“关系运算符”relational operator主要有下面6个。
大于运算符小于运算符 大于等于运算符 小于等于运算符 相等运算符! 不相等运算符
下面是一些例子。
a b;
a ! b;
a b;
a b;
a b;
a b;关系表达式通常返回 0 或 1 表示真假。 C 语言中 0 表示假所有非零值表示真。比如 20 12返回 1 12 20返回 0 。 关系表达式常用于 if 或 while 结构。
if (x 3) {printf(x is 3.\n);
}注意相等运算符 与赋值运算符 是两个不一样的运算符不要混淆。有时候可能会不小心写出下面的代码它可以运行但很容易出现意料之外的结果。 if (x 3) ...上面示例中原意是 x 3 但是不小心写成 x 3 。这个式子表示对变量 x 赋值 3 它的返回值为 3 所以 if 判断总是为真。 为了防止出现这种错误有的程序员喜欢将变量写在等号的右边。 if (3 x) ...这样的话如果把 误写成 编译器就会报错。
/* 报错 */
if (3 x) ...另一个需要避免的错误是多个关系运算符不宜连用。 i j k上面示例中连续使用两个小于运算符。这是合法表达式不会报错但是通常达不到想要的结果 即不是保证变量 j 的值在 i 和 k 之间。因为关系运算符是从左到右计算所以实际执行的是下面的表达式。 (i j) k上面式子中 i j 返回 0 或 1 所以最终是 0 或 1 与变量 k 进行比较。如果想要判断变量 j 的值是否在 i 和 k 之间应该使用下面的写法。 i j j k比如我们输入一个年龄如果年龄在18岁~36岁之间我们输出青年。 如果我们这样写
#include stdio.h
int main()
{int age 0;scanf(%d, age);if(18age36){printf(⻘年\n);}return 0;
}当我们输入10的时候依然输出青年如下图 这是因为我们先拿18和age中存放的10比较表达式1810为假 18age 的结果是0再拿0和36比较036为真所以打印了青年 所以即使当age是10的时候也能打印青年 逻辑上是有问题这个代码应该怎么写
#include stdio.h
int main()
{int age 0;scanf(%d, age);if(age18 age36){printf(⻘年\n);}return 0;
}以上就是关于操作符我们需要掌握的剩下的只要按照字面意思理解使用就行没有特别注意的
3. 条件操作符
条件操作符也叫三目操作符需要接受三个操作数的形式如下 exp1 ? exp2 : exp3条件操作符的计算逻辑是如果 exp1 为真 exp2 计算计算的结果是整个表达式的结果 如果exp1 为假 exp3 计算计算的结果是整个表达式的结果。 练习1使用条件操作符表示下面代码的逻辑
#include stdio.h
int main()
{int a 0;int b 0;scanf(%d %d, a, b);if (a 5)b 3;elseb -3;printf(%d\n, b);return 0;
}//改造后
#include stdio.h
int main()
{int a 0;int b 0;scanf(%d %d, a, b);b a5 ? 3:-3;printf(%d\n, b);return 0;
}练习2使用条件表达式实现找两个数中较大值。
#include stdio.h
int main()
{int a 0;int b 0;scanf(%d %d, a, b);int m ab ? a : b;printf(%d\n, m);return 0;
}4. 逻辑操作符 , || ,
逻辑运算符提供逻辑判断功能用于构建更复杂的表达式主要有下面三个运算符。
! 逻辑取反运算符改变单个表达式的真假。 与运算符就是并且的意思两侧的表达式都为真则为真否则为假。|| 或运算符就是或者的意思两侧⾄少有⼀个表达式为真则为真否则为假。 注C语言中非0表示真0表示假 4.1 逻辑取反运算符
逻辑反操作比如我们有一个变量叫 flag ,如果flag为假要做一个什么事情就可以这样写代码
#include stdio.h
int main()
{int flag 0;if(!flag){printf(do something\n);}return 0;
}如果 flag 为真 !flag 就是假如果 flag 为假 !flag 就是真。所以上面的代码的意思就是 flag 为假执行if语句中的代码。
4.2 与运算符 逻辑与就是与运算符也是并且的意思 是⼀个双⽬操作符使用的方式是 ab , 两边的表达式都是真的时候整个表达式才为真只要有一个是假则整个表达式为假。
比如如果我们说月份是3月到5月是春天那使用代码怎么体现呢
int month 0;
scanf(%d, month);
if(month 3 month 5)
{printf(春季\n);
}这里表达的意思就是month既要大于等于3又要小于等于5必须同时满足。
4.3 或运算符
逻辑或|| 就是或运算符也就是或者的意思 || 也是⼀个双目操作符使用的方式是 a || b ||两边的表达式只要有一个是真整个表达式就是真两边的表达式都为假的时候才为假。 比如我们说一年中月份是12月或者1月或者2月是冬天那么我们怎么使用代码体现呢
int month 0;
scanf(%d, month);
if(month 12 || month1 || month 2)
{printf(冬季\n);
}4.4 练习闰年的判断
输入一个年份year判断year是否是闰年闰年判断的规则
能被4整除并且不能被100整除是闰年能被400整除是闰年
#include stdio.h
//代码1
int main()
{int year 0;scanf(%d, year);if(year%40 year%100!0)printf(是闰年\n);else if(year%4000)printf(是闰年\n);return 0;
}
//代码2
int main()
{int year 0;scanf(%d, year);if((year%40 year%100!0) || (year%4000))printf(是闰年\n);return 0;
}4.5 短路
C语言逻辑运算符还有一个特点它总是先对左侧的表达式求值再对右边的表达式求值这个顺序是保证的。 如果左边的表达式满足逻辑运算符的条件就不再对右边的表达式求值。这种情况称为“短路”。 如前面的代码: if(month 3 month 5)表达式中 的左操作数是 month 3 右操作数是 month 5 ,当左操作数 month 3 的结果是0的时候即使不判断 month 5 整个表达式的结果也是0不是春季。 所以对于操作符来说左边操作数的结果是0的时候右边操作数就不再执行。 对于 || 操作符是怎么样呢我们结合前面的代码 if(month 12 || month1 || month 2)如果month 12则不用再判断month是否等于1或者2整个表达式的结果也是1是冬季。 所以 || 操作符的左操作数的结果不为0时就无需执行右操作数。 像这种仅仅根据左操作数的结果就能知道整个表达式的结果不再对右操作数进行计算的运算称为短路求值。 练习阅读代码计算代码输出的结果
#include stdio.h
int main()
{int i 0,a0,b2,c 3,d4;i a b d; // a为0 是假 i 0 a 赋值完后 a a 1 后面的b d 不执行//i a||b||d; // 1 3 3 4printf(a %d\n b %d\n c %d\nd %d\n, a, b, c, d);return 0;
}假如 a 1 第一个结果应该是 2 3 3 5 第二个应该是 2 2 3 4 || 是只要一个为真后面的就不执行了 5. switch语句
除了 if 语句外C语言还提供了 switch 语句来实现分支结构。 switch 语句是一种特殊形式的 if…else 结构用于判断条件有多个结果的情况。它把多重的 else if 改成更易用、可读性更好的形式。
switch (expression) {
case value1: statement
case value2: statement
default: statement
}上面代码中根据表达式 expression 不同的值执行相应的 case 分支。如果找不到对应的值 就执行 default 分支。 注: switch 后的 expression 必须是整型表达式case 后的值必须是整形常量表达式 关于switch default语句可以放在switch里的任意位置switch语句当某个case成立时是从这个语句开始向下执行包括default语句case语句没有break 5.1 if语句和switch语句的对比
练习输入任意一个整数值计算除3之后的余数如果使用if语句完成如下
#include stdio.h
int main()
{int n 0;scanf(%d, n);if(n%3 0)printf(整除余数为0\n);else if(n%3 1)printf(余数是1\n);elseprintf(余数是2\n);return 0;
}如果使用switch语句改写就可以是这样的:
#include stdio.h
int main()
{int n 0;scanf(%d, n);switch(n%3){case 0:printf(整除余数为0\n);break;case 1:printf(余数是1\n);break;case 2:printf(余数是2\n);break;}return 0;
}上述的代码中我们要注意的点有
case 和后边的数字之间必须有空格每一个 case 语句中的代码执行完成后需要加上 break 才能跳出这个switch语句。
5.2 switch语句中的break
前面的代码中如果我们去掉case语句中的break会出现什么情况呢
#include stdio.h
int main()
{int n 0;scanf(%d, n);switch(n%3){case 0:printf(整除余数为0\n);case 1:printf(余数是1\n);case 2:printf(余数是2\n);}return 0;
}测试一组看一下结果 我们发现7除以3本来余数是1但是我们发现程序运行的结果多了一行“余数是2”的打印。 这是为什么呢 原因是 switch 语句也是分支效果的只有在 switch 语句中使用break 才能在跳出 switch 语句如果某⼀个 case 语句的后边没有 break 语句代码会继续玩下执行有可能执行其他 case语句中的代码直到遇到 break 语句或者 switch 语句结束。就⽐如上⾯的代码就执行了 case2 中的语句。 所以在 switch 语句中 break 语句是非常重要的能实现真正的分支效果。 当然 break 也不是每个 case 语句都得有这就得根据实际情况来看了。
练习 输入一个1~7的数字打印对应的星期几 例如 输入1 输出星期一 输入2 输出星期二 输入3 输出星期三 输入4 输出星期四 输入5 输出星期五 输入6 输出星期六 输入7 输出星期天 参考代码如下
#include stdio.h
int main()
{int day 0;scanf(%d, day);switch(day){case 1printf(星期⼀\n);break;case 2:printf(星期⼆\n);break;case 3:printf(星期三\n);break;case 4:printf(星期四\n);break;case 5:printf(星期五\n);break;case 6:printf(星期六\n);break;case 7:printf(星期天\n);break;}return 0;
}如果需求发生变化变为
输入1-5输出的是“工作日”;输入6-7输出“休息日”
那参考代码如下
#include stdio.h
int main()
{int day 0;scanf(%d, day);switch(day){case 1case 2:case 3:case 4:case 5:printf(⼯作⽇\n);break;case 6:case 7:printf(休息⽇\n);break;}return 0;
}上面的练习中我们发现应该根据实际的情况来在代码中觉得是否使用 break 或者在哪里使用 break 才能正确完成实际的需求。
5.3 switch语句中的default
在使用 switch 语句的时候我们经常可能遇到一种情况比如 switch 后的表达式中的值无法匹配代码中的 case 语句的时候这时候要不就不做处理要不就得在 switch 语句中加入default 子句。
switch (expression) {case value1: statementcase value2: statementdefault: statement
}switch后边的 expression 的结果不是 value1 也不是 value2 的时候就会执行default 子句。 就比如前面做的打印星期的练习如果 day 的输入不是1~7的值如果我们要提示输入错误则可以这样完成代码
#include stdio.h
int main()
{int day 0;scanf(%d, day);switch(day){case 1case 2:case 3:case 4:case 5:printf(⼯作⽇\n);break;case 6:case 7:printf(休息⽇\n);break;default:printf(输⼊错误\n);break;}return 0;
}5.4 switch语句中的case和default的顺序问题
在 switch 语句中 case 子句和 default 子句有要求顺序吗 default 只能放在最后吗 其实在switch 语句中 case 语句和 default 语句是没有顺序要求的只要你的顺序是满足实际需求的就可以。 不过我们通常是把 default 子句放在最后处理的。
6. while循环
C语言提供了3种循环语句 while 就是其中一种接下来就介绍一下 while 语句。 while 语句的语法结构和 if 语句非常相似。
6.1 if 和 while的对比
if(表达式)
语句;while(表达式)
语句;//如果循环体想包含更多的语句可以加上⼤括号你可以具体写个代码来对比一下
//代码1
#include stdio.h
int main()
{if(1)printf(hehe\n); //if后边条件满⾜打印⼀次hehereturn 0;
}//代码2
#include stdio.h
int main()
{while(1)printf(hehe\n); //while后边的条件满⾜死循环的打印hehereturn 0;
}这就是他们的区别while语句是可以实现循环效果的。
6.2 while语句的执行流程 首先上来就是执行判断表达式表达式的值为0循环直接结束表达式的值不为0则执行循环语句语句执行完后再继续判断是否进行下⼀次判断。 非0为真0为假 6.3 while循环的实践
练习在屏幕上打印1~10的值 参考代码
#include stdio.h
int main()
{int i 1;while(i10){ printf(%d , i);i i1;}return 0;
}此时 i 的值是11 6.4 练习
输入一个正的整数逆序打印这个整数的每一位 例如 输入1234输出4 3 2 1 输入521输出1 2 5 题目解析
要想得到n的最低位可以使用n%10的运算得到的余数就是最低位如1234%10得到4要想去掉n的最低位找出倒数第⼆位则使⽤ nn/10 操作就可以去掉最低位的如 n1234/10得到123123相较于1234就去掉了最低位123%10就得到倒数第⼆位3。循环1和2两个步骤在n变成0之前就能到所有的位。
参考代码
#include stdio.h
int main()
{int n 0;scanf(%d, n);while(n){printf(%d , n%10);n / 10;}return 0;
}7. for循环
7.1 语法形式
for循环是三种循环中使用最多的 for 循环的语法形式如下 for(表达式1; 表达式2; 表达式3)语句//如果循环体想包含更多的语句可以加上⼤括号表达式1 用于循环变量的初始化表达式2 用于循环结束条件的判断表达式3 用于循环变量的调整
7.2 for循环的执行流程 首先执行 表达式1 初始化循环变量接下来就是执行 表达式2 的判断部分 表达式2 的结果如果 0则循环结束 表达式2 的结果如果!0则执行循环语句循环语句执行完后再去执行表达式3 ,调整循环变量然后再去表达式2 的地方执行判断 表达式2的结果是否为0决定循环是否继续。 整个循环的过程中表达式1初始化部分只被执行1次剩下的就是表达式2、循环语句、表达式3在循环。
7.3 for循环的实践
练习在屏幕上打印1~10的值 参考代码
#include stdio.h
int main()
{int i 0;for(i1; i10; i){printf(%d , i);}return 0;
}运行结果 7.4 while循环和for循环的对比 for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分但是 for 循环的三个部分非常集中便于代码的维护而如果代码较多的时候 while 循环的三个部分就比较分散所以从形式上 for 循环要更优⼀些。
7.5 练习
练习1 计算1~100之间3的倍数的数字之和 参考代码
#include stdio.h
int main()
{int i 0;int sum 0;for(i1; i100; i){if(i % 3 0)sum i;}printf(%d\n, sum);return 0;
}//⼩⼩的优化
//如果能直接产⽣3的倍数的数字就省去了多余的循环和判断
#include stdio.h
int main()
{int i 0;int sum 0;for(i3; i100; i3){sum i;}printf(%d\n, sum);return 0;
}8. do-while循环
8.1 语法形式
在循环语句中 do while 语句的使用最少它的语法如下
do
语句
while(表达式)while 和 for 这两种循环都是先判断条件如果满足就进⼊循环执行循环语句如果不满足就跳 出循环 而do while 循环则是先直接进⼊循环体执行循环语句然后再执行 while 后的判断表达式表达式为真就会进⾏下⼀次表达式为假则不再继续循环。 do while 循环结束是要有分号的 8.2 do while循环的执行流程 在 do while 循环中先执行图上的“语句”执行完语句在去执行“判断表达式”判断表达式的结果是!0则继续循环执行循环语句判断表达式的结果0则循环结束。 所以在 do while 语句中循环体是至少执行一次的这是 do while 循环比较特殊的地方。
8.3 do while循环的实例
在屏幕上打印1~10的值
#include stdio.h
int main()
{int i 1;do{printf(%d , i);i i 1;}while(i10);return 0;
}一般 do while使用在循环体至少被执行一次的场景下所以较少一些。
8.4 练习
输入一个正整数计算这个整数是几位数 例如 输入1234 输出4 输入12 输出2 参考代码
#include stdio.h
int main()
{int n 0;scanf(%d, n);int cnt 0;do{cnt;n n / 10;} while (n);printf(%d\n, cnt);return 0;
}这里并非必须使用 do while 语句但是这个代码就比较适合使用 do while 循环因为n即使是 0也是1位数要统计位数的。
9. break和continue语句
在循环执行的过程中如果某些状况发生的时候需要提前终止循环这是非常常见的现象。C语言中提供了 break 和 continue 两个关键字就是应该到循环中的。
break 的作用是用于永久的终止循环只要 break 被执行直接就会跳出循环继续往后执 行。continue 的作用是跳过本次循环 continue 后边的代码在 for 循环和 while 循环中使用continue会跳过本次循环执行接下来的循环 在for循环和while循环里的continue是不一样的在while中continue执行后会直接到判断部分而在for循环中是会执行或–然后到判断部分 9.1 while循环中的break和continue
9.1.1 break举例
#include stdio.h
int main()
{int i 1;while(i10){if(i 5)break;//当i等于5后就执⾏break循环就终⽌了printf(%d , i);i i1;}return 0;
}执行的结果 打印了1,2,3,4后当i等于5的时候循环正 break 的地方终止不再打印不再循环。 所以 break 的作用就是永久的终止循环只要 break 被执行 break 外的第一层循环就终止了。 那以后我们在循环中想在某种条件下终止循环则可以使用 break 来完成我们想要的效果。
9.1.2 continue举例
continue 是继续的意思在循环中的作用就是跳过本次循环中 continue 后边的代码继续进行下一次循环的判断。 上面的代码如果把 break 换成 continue 会是什么结果呢
#include stdio.h
int main()
{int i 1;while(i10){if(i 5)continue;//当i等于5后就执⾏continue直接跳过continue的代码去循环的判断的地⽅//因为这⾥跳过了i i1所以i⼀直为5程序陷⼊和死循环printf(%d , i);i i1;}return 0;
}到这里我们就能分析出来 continue 可以帮助我们跳过某一次循环 continue 后边的代码直接到循环的判断部分进行下一次循环的判断如果循环的调整是在 continue 后边的话可能会造成死循环。
9.2 for循环中的break和continue
9.2.1 break举例
其实和 while 循环中的 break 一样 for 循环中的 break 也是用于终止循环的不管循环还需要循环多少次只要执行到了 break 循环就彻底终止我们上代码。
#include stdio.h
int main()
{int i 1;for(i1; i10; i){if(i 5)break;printf(%d , i);}return 0;
}运行结果 break 的作⽤是永久的终止循环未来我们在某个条件发生的时候不想再继续循环的时候就可以使用 break 来完成。
9.2.2 continue举例
上面的代码如果把 break 换成 continue 会是什么结果呢
#include stdio.h
int main()
{int i 1;for(i1; i10; i){if(i 5)continue;//这⾥continue跳过了后边的打印来到了i的调整部分printf(%d , i);}return 0;
}所以在 for 循环中 continue 的作用是跳过本次循环中 continue 后的代码直接去到循环的调整部分。未来当某个条件发生的时候本次循环无需再执行后续某些操作的时候就可以使用continue 来实现。 在这里我们也可以对比一下 while 循环和 for 循环中 continue 的区别
9.3 do while循环中的break和continue
do while语句中的 break 和 continue 的作用和 while 循环中几乎一模一样大家下来可以自行测试并体会。
#include stdio.h
int main()
{int i 1;do{if(i 5)break;printf(%d , i);i i 1;}while(i10);return 0;
}#include stdio.h
int main()
{int i 1;do{if(i 5)continue;printf(%d , i);i i 1;}while(i10);return 0;
}10. 循环的嵌套
前面学习了三种循环 while do while for 这三种循环往往会嵌套在一起才能更好的解决问题就是我们所说的循环嵌套这里我们就看一个例子。
10.1 练习
找出100~200之间的素数并打印在屏幕上。 注素数又称质数只能被1和本身整除的数字。
10.2 题目解析
要从100 ~ 200之间找出素数首先得有100~200之间的数这里可以使用循环解决。假设要判断i是否为素数需要拿2~ i -1之间的数字去试除 i需要产生2~i - 1之间的数字也可以使用循环解决。如果2~ i -1 之间有数字能整除i则i不是素数如果都不能整除则i是素数。
10.3 参考代码
#include stdio.h
int main()
{int i 0;//循环产⽣100~200的数字for(i100; i200; i){//判断i是否为素数//循环产⽣2~i-1之间的数字int j 0;int flag 1;//假设i是素数for(j2; ji; j){if(i % j 0){flag 0;break;}}if(flag 1)printf(%d , i);}return 0;
}11. goto语句
C语言提供了一种非常特别的语法就是 goto 语句和跳转标号 goto 语句可以实现在同一个函数 内跳转到设置好的标号处。 例如
#include stdio.h
int main()
{printf(hehe\n);goto next:printf(haha\n);next:printf(跳过了haha的打印\n);return 0;
}goto 语句如果使用的不当就会导致在函数内部随意乱跳转打乱程序的执行流程所以我们的建议是能不用尽量不去使用但是 goto 语句也不是一无是处在多层循环的代码中如果想快速跳出使用 goto 就非常的方便了。
for(...)
{for(...){for(...){if(disaster)goto error;}}
}
error
//……本来 for 循环想提前退出得使用 break ⼀个 break 只能跳出⼀层 for 循环如果3层循环嵌套就得使用3个 break 才能跳出循环所以在这种情况下我们使用goto 语句就会更加的快捷。