自主建站平台,网站建设logo显示怎么设置,discuz轉wordpress,有限公司在线网站C语言分支和循环#xff08;上#xff09; 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;闰年… C语言分支和循环上 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 参考代码10.4 优化代码 11. goto语句 正文开始 C语言是结构化的程序设计语言这里的结构指的是
顺序结构、选择结构、循环结构C语言是能够实现这三种结构的其实我们如果仔细分析我们日常所见的事情都可以拆分为这三种结构或者这三种结构的组合。 我们可以使用 if 、 switch 实现分支结构使用 for 、 while 、 do while 实现循环结构。 1. if语句
1.1 if
if 语句的语法形式如下: 表达式成立为真则语句执行表达式不成立为假则语句不执行。 在C语⾔中0为假⾮0表⽰真也就是表达式的结果如果是0则语句不执行表达式的结果如果是不是0则语句执行。 例⼦输⼊⼀个整数判断是否为奇数 if 语句图示
1.2 else
如果⼀个数不是奇数那就是偶数了如果任意⼀个整数我们要清楚的判断是奇数还是偶数怎么表示呢 这⾥里就需要 if…else… 语句了语法形式如下 例⼦输⼊⼀个整数判断是否为奇数如果是奇数打印是奇数否则打印数偶数。 练习输⼊⼀个年龄18岁就输出成年否则就输出未成年
1.3 分支中包含多条语句
默认在 if 和 else 语句中默认都只控制⼀条语句if 后不加大括号的情况下那如果我们要if语句同时控制2条语句怎么办呢那就要使⽤ {} 将代码括起来else后也可以跟上⼤括号。
示例1 示例2
1.4 嵌套if
在 if else 语句中 else 可以与另⼀个 if 语句连⽤构成多重判断。 ⽐如要求输⼊⼀个整数判断输⼊的整数是0还是正数或者负数。请看如下代码 上述代码也可以这样写如下 再比如输⼊⼀个整数如果是正数再判断是奇数还是偶数并输出如果不是正数则输出负数。 以上就是嵌套if语句的语法有了嵌套if语句就可以完成更多复杂逻辑的判断。 练习
1.5 悬空else问题
如果有多个 if 和 else 可以记住这样⼀条规则 else 总是跟最接近的 if 匹配。 我们首先从下面代码开始 上⾯的代码排版让 else 和第⼀个 if 语句对⻬让我们以为 else 是和第⼀个if匹配的当 if 语句不成⽴的时候⾃然想到的就是执⾏ else ⼦句打印 haha 但实际上 else 是和第⼆个 if进⾏匹配的这样后边的 if…else 语句是嵌套在第⼀个 if 语句中的如果第⼀个 if 语句就不 成⽴嵌套 if 和 else 就没机会执⾏了最终啥都不打印。 如果代码改成下⾯这样就更加容易理解了。 或者如果我们希望else确实和第⼀个if匹配可以这样修改代码
要带上适当的⼤括号代码的逻辑就会更加的清晰所以⼤家以后在写代码的时候要注意括号的使用让代码的可读性更高。 下面是不合法代码
2. 关系操作符
C语⾔⽤于比较的表达式称为“关系表达式”relational expression里面使用的运算符就称为“关系运算符”relational operator主要有下面6个。 下面是一些例子。
关系表达式通常返回 0 或 1 表示真假。 C语⾔中 0 表⽰假所有⾮零值表⽰真。⽐如 20 12 返回 1 12 20 返回 0 。 关系表达式常⽤于 if 或 while 结构。 例子1 例子2 注意相等运算符 与赋值运算符 是两个不⼀样的运算符不要混淆。有时候可能会不小心写出下面的代码它可以运行但很容易出现意料之外的结果。 上面示例中原意是 a 3 但是不小心写成 a 3 。这个式⼦表⽰对变量 a 赋值 3 它的返回值为 3 所以 if 判断总是为真。 为了防止出现这种错误有的程序员喜欢将变量写在等号的右边。
这样的话如果把 误写成 编译器就会报错。 另⼀个需要避免的错误是多个关系运算符不宜连⽤。 上⾯式⼦中 i j 返回 0 或 1 所以最终是 0 或 1 与变量 k 进行比较。如果想要判断变量 j 的值是否在 i 和 k 之间应该使用下面的写法。 例子 比如我们输⼊⼀个年龄如果年龄在18岁~36岁之间我们输出⻘年。
3. 条件操作符
条件操作符也叫三⽬操作符需要接受三个操作数的形式如下 条件操作符的计算逻辑是如果 exp1 为真 exp2 计算计算的结果是整个表达式的结果如果exp1 为假 exp3 计算计算的结果是整个表达式的结果.
练习1 练习2使⽤条件表达式实现找两个数中较⼤值。
4. 逻辑操作符,||,
逻辑运算符提供逻辑判断功能⽤于构建更复杂的表达式主要有下⾯三个运算符。 ! 逻辑取反运算符改变单个表达式的真假。 与运算符就是并且的意思两侧的表达式都为真则为真否则为假。 || 或运算符就是或者的意思两侧⾄少有⼀个表达式为真则为真否则为假。 注C语言中非0表示真0表示假
4.1 逻辑取反运算符 比如我们有⼀个变量叫 flag ,如果flag为假要做⼀个什么事情就可以这样写代码 如果 flag 为真 !flag 就是假如果 flag 为假 !flag 就是真 所以上⾯的代码的意思就是 flag 为假执⾏if语句中的代码。
4.2 与运算符 就是与运算符也是并且的意思 是⼀个双⽬操作符使⽤的⽅式是 ab , 两边的表达式都是真的时候整个表达式才为真只要有⼀个是假则整个表达式为假。 比如如果我们说月份是3月到5月是春天那使用代码怎么体现呢 这⾥表达的意思就是month既要大于等于3⼜要大于等于5必须同时满足。
4.3 或运算符 || 就是或运算符也就是或者的意思 || 也是⼀个双⽬操作符使⽤的⽅式是 a || b || 两边的表达式只要有⼀个是真整个表达式就是真两边的表达式都为假的时候才为假。 比如我们说⼀年中月份是12月或者1月或者2月是冬天那么我们怎么使用代码体现呢
4.4 练习闰年的判断
输入⼀个年份year判断year是否是闰年
4.5 短路
C语⾔逻辑运算符还有⼀个特点它总是先对左侧的表达式求值再对右边的表达式求值这个顺序是保证的。如果左边的表达式满⾜逻辑运算符的条件就不再对右边的表达式求值。这种情况称为“短路”。
如下面的代码: 表达式中的左操作数是 month 3 右操作数是 month 5 ,当左操作数 month 3 的结果是0的时候即使不判断 month 5 整个表达式的结果也是0不是春季。 所以对于操作符来说左边操作数的结果是0的时候右边操作数就不再执行。 对于 || 操作符是怎么样呢我们结合前⾯的代码 如果month12则不⽤再判断month是否等于1或者2整个表达式的结果也是1(是冬季)。 所以 || 操作符的左操作数的结果不为0时就无需执行右操作数。 像这种仅仅根据左操作数的结果就能知道整个表达式的结果不再对右操作数进⾏计算的运算称为短路求值。 练习阅读代码计算代码输出的结果 例子2 5. switch语句
除了 if 语句外C语言还提供了 switch 语句来实现分支结构。 switch 语句是一种特殊形式的if…else 结构用于判断条件有多个结果的情况。它把多重 的 else if 改成更易用、可读性更好的形式。 上⾯代码中根据表达式 expression 不同的值执行相应的 case 分支。如果找不到对应的值就执行 default 分支。 注意
switch 后的 expression 必须是整型表达式case 后的值必须是整形常量表达式
例子1 例子2
5.1 if语句和switch语句的对比
练习输⼊任意⼀个整数值计算除3之后的余数 如果使⽤if语句完成如下 如果使⽤switch语句改写就可以是这样的 上述的代码中我们要注意的点有
case 和后边的数字之间必须有空格每⼀个 case 语句中的代码执行完成后需要加上 break 才能跳出这个switch语句。
5.2 switch语句中的break
前⾯的代码中如果我们去掉case语句中的break会出现什么情况呢 我们发现5除以3本来余数是2但是我们发现程序运行的结果多了一行“余数是0”的打印。 这是为什么呢 原因是 switch 语句也是分支效果的只有在 switch 语句中使用 break 才能在跳出 switch 语 句如果某⼀个 case 语句的后边没有 break 语句代码会继续玩下执行有可能执行其他 case语句中的代码直到遇到 break 语句或者 switch 语句结束。 所以在 switch 语句中 break 语句是非常重要的能实现真正的分支效果。 当然 break 也不是每个 case 语句都得有这就得根据实际情况来看了。 练习 参考代码如下 如果需求发生变化变为 那参考代码如下 上面的练习中我们发现应该根据实际的情况来在代码中觉得是否使用 break 或者在哪里使用break 才能正确完成实际的需求。
5.3 switch语句中的default
在使⽤ switch 语句的时候我们经常可能遇到⼀种情况比如 switch 后的表达式中的值无法匹配代码中的 case 语句的时候这时候要不就不做处理要不就得在 switch 语句中加入 default 子句。 switch 后边的 expression 的结果不是 value1 也不是 value2 的时候就会执行default 子句。
就比如前面做的打印星期的练习如果 day 的输⼊不是1~7的值如果我们要提示输入错误则可以这样完成代码
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 语句 这就是他们的区别while语句是可以实现循环效果的。
6.2 while语句的执行流程 首先上来就是执⾏判断表达式表达式的值为0循环直接结束表达式的值不为0则执行循环语句语句执行完后再继续判断是否进行下⼀次判断。
6.3 while循环的实践
练习在屏幕上打印1~10的值
6.4 练习 题目解析 参考代码
7. for循环
7.1 语法形式
for 循环是三种循环中使用最多的 for 循环的语法形式如下
表达式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的值
7.4 while循环和for循环的对比 for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分但是 for 循环的三个部 分⾮常集中便于代码的维护而如果代码较多的时候 while 循环的三个部分就比较分散所以从形式上 for 循环要更优⼀些。
7.5 练习
练习1 计算1~100之间3的倍数的数字之和 下面小小的优化 ,如果能直接产生3的倍数的数字就省去了多余的循环和判断
8. do-while循环
8.1 语法形式
在循环语句中 do while 语句的使⽤最少它的语法如下
while 和 for 这两种循环都是先判断条件如果满足就进入循环执行循环语句如果不满足就跳出循环而 do while 循环则是先直接进入循环体执行循环语句然后再执行 while 后的判断表达式表达式为真就会进行下一次表达式为假则不再继续循环。
8.2 do while循环的执行流程 在 do while 循环中先执行图上的“语句”执行完语句在去执行“判断表达式”判断表达式的 结果是!0则继续循环执⾏循环语句判断表达式的结果0则循环结束。 所以在 do while 语句中循环体是⾄少执行⼀次的这是 do while 循环⽐较特殊的地方。
8.3 do while循环的实例
在屏幕上打印1~10的值 ⼀般 do while 使⽤在循环体至少被执行一次的场景下所以较少一些。
8.4 练习 这⾥并非必须使用 do while 语句但是这个代码就比较适合使用 do while 循环因为n即使是 0也是1位数要统计位数的。
9. break和continue语句
在循环执行的过程中如果某些状况发⽣的时候需要提前终止循环这是⾮常常见的现象。C语⾔中提供了 break 和 continue 两个关键字就是应该到循环中的。
break 的作用是用于永久的终止循环只要 break 被执行直接就会跳出循环继续往后执行。continue 的作⽤是跳过本次循环 continue 后边的代码在 for 循环和 while 循环中有所 差异的。
9.1 while循环中的break和continue
9.1.1 break举例 打印了1,2,3,4后当i等于5的时候循环正 break 的地方终止不再打印不再循环。 所以 break 的作用就是永久的终止循环只要 break 被执行 break 外的第⼀层循环就终止了。那以后我们在循环中想在某种条件下终止循环则可以使用 break 来完成我们想要的效果。
9.1.2 continue举例 因为这里跳过了i 所以i⼀直为5程序陷入和死循环 。 到这里我们就能分析出来 continue 可以帮助我们跳过某⼀次循环 continue 后边的代码直接到循环的判断部分进行下⼀次循环的判断如果循环的调整是在 continue 后边的话可能会造成死循环。
9.2 for循环中的break和continue
9.2.1 break举例
其实和 while 循环中的 break 一样 for 循环中的 break 也是用于终止循环的不管循环还需 要循环多少次只要执⾏到了 break 循环就彻底终止我们上代码。 break 的作⽤是永久的终止循环未来我们在某个条件发生的时候不想再继续循环的时候就可以使用break 来完成。
9.2.2 continue举例 所以在 for 循环中 continue 的作用是跳过本次循环中 continue 后的代码直接去到循环的调整部分。未来当某个条件发生的时候本次循环无需再执行后续某些操作的时候就可以使用continue 来实现。 for循环的初始化判断循环三个表达式都可以省略 但是判断部分省略要注意如果省略了表示判断部分恒为真可能就打印死循环了 下面是个初始化省略前的代码 下面是个初始化省略后的代码
9.3 do while循环中的break和continue
do while 语句中的 break 和 continue 的作用和 while 循环中几乎⼀模⼀样大家下来可以 自行测试并体会。 do while – break例子: do while – continue例子 上述代码 死循环。
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()
{//产生100~200之间的数int i 0;int count 0;//for(i 101; i 200; i2) 优化for (i 100; i 200; i){int flag 1;//假设i是素数//产生的i就是100到200之间的数字//每次循环进来产生一个i这个时候判断i是否是素数//方法是产生2~i-1之间的数字去试除iint j 0;for (j 2; j i - 1; j){if (i % j 0){flag 0;//表示i不是素数break;}}if (flag 1){printf(%d , i);count;}}printf(\ncount %d\n, count);return 0;
}运行结果
10.4 优化代码 #include stdio.h
#include math.h
int main()
{//产生100~200之间的数int i 0;int count 0;for (i 101; i 200; i2){int flag 1;//假设i是素数//产生的i就是100到200之间的数字//每次循环进来产生一个i这个时候判断i是否是素数//方法是产生2~i-1之间的数字去试除iint j 0;for (j 2; j sqrt(i); j){if (i % j 0){flag 0;//表示i不是素数break;}}if (flag 1){printf(%d , i);count;}}printf(\ncount %d\n, count);return 0;
}运行结果
11. goto语句
C语言提供了⼀种非常特别的语法就是 goto 语句和跳转标号 goto 语句可以实现在同⼀个函数内跳转到设置好的标号处。 例如下面是我们正常打印 下面用goto语句 goto 语句如果使用的不当就会导致在函数内部随意乱跳转打乱程序的执行流程所以我们的建议是能不用尽量不去使用但是 goto 语句也不是一无是处在多层循环的代码中如果想快速跳出使⽤用goto 就非常的方便了。 本来 for 循环想提前退出得使用break ⼀个 break 只能跳出⼀层 for 循环如果3层循环嵌套 就得使用3个 break 才能跳出循环所以在这种情况下我们使用 goto 语句就会更加的快捷。 完