C语言分支和循环
一.if语句
if
if语句的表达式:
// A code block
if(表达式)
{
语句
}
// 例
if(i==1){
printf("i的值是1");
}
表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行。
if-else
当有多种情况,即分支,我们可以用到if-else语句
// A code block
if ( 表达式 )
{
语句1
}
else{
语句2
}
// 例
if(a>1)
{
printf("这个a大于1");
}else
{
printf("这个a小于等于1");
}
注意:else后面无(),代表除if括号外的情况。
*默认在 if 和 else 语句中默认都只控制⼀条语句,所以在不加大括号的时候只有下面一条语句是包含在if/else下,其他的无论满不满足if的情况都一定会执行。
如果有多个分支的话可以:
// A code block
if(表达式){
语句1
}else if(表达式){
语句2
}
...
else if(表达式){
语句n
}
else{
语句n+1
}
嵌套if
在 if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断。
例如判断一个数是整数还是复数后判断该数是奇数还是偶数。
if(i>0){
if(i%2!=0){
printf("i是正奇数");
}else{
printf("i是正偶数");
}
}
if(i<0){
if(i%2!=0){
printf("i是负奇数");
}else{
printf("i是负偶数");
}
}
悬空else
如果有多个 if 和 else , else 总是跟最接近的 if 匹配。
如下例:
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("我会不会打印\n");
else
printf("ABC\n");
这段代码的运行结果是无任何打印
这是一个很容易掉入的坑,判断完a==1的值为假后,由于第一个if和else的对齐,而先入为主的认为这俩个是对应的,但事实是 else 总是跟最接近的 if 匹配。而第一个if语句控制着第二个if-else语句,所以第二个if-else语句根本无法执行,最终什么也没打印。
二.switch语句
switch 语句是⼀种特殊形式的if…else 结构,⽤于判断条件有多个结果的情况。它把多重的 else if 改成更易⽤、可读性更好的形式。
// A code block
switch (expression) {
case 数值1:
表达式1
break;
case 数值2:
表达式2
break;
default:
表达式
break;
}
例:
// int day = 0;
scanf("%d", &day);
switch(day)
{
case 1:
printf("星期⼀\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;
default:
printf("输入错误\n");
break;
}
关于default
*在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实际需求的就可以。不过我们通常是把 default ⼦句放在最后处理的。
*当然default不是必须加的,如果不加,其他没写到的情况就不作处理。
多数值对应一个结果时
当多种情况得到一个结果时,我们可以这么写:
// switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("⼯作⽇\n");
break;
case 6:
case 7:
printf("休息⽇\n");
break;
default:
printf("输入错误\n");
break;
}
三.while循环
while循环语法结构
// A code block
while(表达式)
语句;
// An highlighted block
while(a==1)
{
printf("haha");
}
while语句的语法结构和if非常相似,俩着的区别就是while语句可以实现循环的效果。
while语句的执行流程

首先上来先执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语句,语句执行完后再继续判断,是否进行下一次判断。
while循环实例
在屏幕上打印1到10
// An highlighted block
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
return 0;
}
四.for循环
for循环的语法形式
// A code block
for(表达式1,表达式2,表达式3)
{
语句;
}
表达式1:用于循环变量的初始化
表达式2:用于循环结束条件的判断
表达式3:用于循环变量的调整
for循环的执行流程

⾸先执行表达式1 初始化循环变量,接下来就是执行表达式2 的判断部分,表达式2 的结果如果==0,则循环结束; 表达式2 的结果如果!=0则执行循环语句,循环语句执行完后,再去执行表 达式3 ,调整循环变量,然后再去表达式2 的地方执行判断, 表达式2 的结果是否为0,决定循环是否继续。
整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3在循环。
for循环实践
在屏幕上打印1到10
// An highlighted block
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
printf("%d ", i);
}
return 0;
}
五.do-while循环
do-while语法形式
// A code block
do
语句;
while(表达式);
在循环语句中do-while循环的使用是最少的
do-while循环与for,while循环的区别:
while 和 for 这两种循环都是先判断,条件如果满足就进入循环,执行循环语句,如果不满足就跳出循环;
而 do while 循环则是先直接进入循环体,执行循环语句,然后再执行 while 后的判断表达式,表达式为真,就会进行下一次,表达式为假,则不再继续循环。
do-while执行流程

在 do while 循环中先执行图上的“语句”,执行完语句,在去执行“判断表达式”,如果判断表达式的结果是!=0,则继续循环,执行循环语句;如果判断表达式的结果==0,则循环结束。
所以在 do while 语句中循环体是至少执行⼀次的,这是 do while 循环比较特殊的地方。
do-while循环实例
在屏幕上打印1到10
// An highlighted block
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i = i + 1;
}while(i<=10);
return 0;
}
六.break和continue语句
在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,这是很常见的现象。C语言中提供了 break 和 continue 两个关键字,就是应用到循环中的。
• break 的作用是用于永久的终止循环,只要 break 被执行,直接就会跳出循环,继续往后执行。
例如:
// An highlighted block
#include <stdio.h>
int main()
{
int i = 1;
for(i=1; i<=10; i++)
{
if(i == 5)
break;
printf("%d ", i);
}
return 0;
这个代码的输出结果是1 2 3 4,在i==5时直接跳出for循环。
• continue 的作用是跳过本次循环中 continue 后边的代码。
例如:
// An highlighted block
#include <stdio.h>
int main()
{
int i = 1;
for(i=1; i<=10; i++)
{
if(i == 5)
continue;
printf("%d ", i);
}
return 0;
}
当i==5,时continue跳过了后边的打印,来到了i++的调整部分 ,最后的打印结果是:
1 2 3 4 6 7 8 9 10 。
这里提示一个易错点:
// An highlighted block
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
continue;
printf("%d ", i);
i = i+1;
}
return 0;
}
当i等于5后,就执⾏continue,直接跳过continue的代码,去循环的判断的地⽅
因为这⾥跳过了i = i+1,所以i⼀直为5,程序陷⼊和死循环 。(这也是while循环和for循环不一样的地方)
本期C语言的分支与循环到这里结束了,希望能帮助到大家。👋

3813

被折叠的 条评论
为什么被折叠?



