分支语句
程序执行的时候按代码执行顺序先后通常可分为以下三类:
- 顺序执行
- 选择执行
- 循环执行
这三类分别由代码位置、分支语句、循环语句进行控制,今天主要说的是后面两种。
分支语句又可以分为单分支多分支语句,其中两种分支主要的区别就是代码执行到分支语句时面临几个选择,多分支是有两个以上的选择。
if…else…
程序流程图执行如下图所示:
只会执行if中的语句或者执行else中的语句,二选一。
if…else if…else…
一层一层条件进行判断,直到找到匹配条件或者没有找到匹配条件。多个分支语句也可以嵌套使用,使得代码执行的路径一层一层的筛选。
使用多层if嵌套时要格外注意悬空的else问题,C语言中规定else子句从属于最靠近他的不完整的if语句,可以使用{}
进行分割。我们在写代码的时候要养成好习惯,每一个代码块加上一个{},可以使代码可阅读性提高。
大家可以体会一下,下面两段代码哪个更易于阅读:
//
// Created by Zhu Shichong on 2023/1/9.
//
#include <stdio.h>
int main() {
int i=15;
if(i>1)
if(i<10)
printf("i>1 and i<10\n");
else
printf("no,they are not\n");
return 0;
}
//
// Created by Zhu Shichong on 2023/1/9.
//
#include <stdio.h>
int main() {
int i = 15;
if (i > 1) {
if (i < 10){
printf("i>1 and i<10\n");
}
}
else{
printf("no,they are not\n");
}
return 0;
}
注意:不加{}的if语句下面最多放一条表达式,多条表达式必须加上{}
switch…case…
除了if…else…语句,还有switch…case…语句,两者都不错在使用方法上if更加简单灵活,我们平时更倾向于使用if else语句。
注意:
-
(1)switch用于Int /char/long/long long类型的变量和多个特定常量的判别处理,不能用于float和double类型,但可以经过数据类型转换后再使用。
-
(2)在case后的各常量表达式的值不能相同,否则会出现错误。
-
(3)不是每一个case都需要包含break.如果case语句不包含break,则继续执行后续的case,直到遇 到break为止。
-
(4)一个switch语句可以有一个default(也可以没有),出现在switch的结尾。default可用于上面所有case 都不为真时执行。
-
(5)如果每个case语句中都存在break语句,则各 case 和 default 子句的先后顺序的变动,不会影响程序执行结果。
举两个梨子:
#include<stdio.h>
main()
{
int k;
scanf("%d",&k);
switch(k)
{
case 1: printf("a"); break;
case 2: printf("b");
default: printf("c"); break;
}
}
#include<stdio.h>
main()
{
int k;
scanf("%d",&k);
switch(k)
{
case 1: printf("a"); break;
default: printf("c"); break;
case 2: printf("b"); break;
}
}
循环语句
循环语句中着重注意for循环、while循环、continue、break
for 循环
for循环是最灵活的循环,他完全可以代替while循环,for循环的一般形式如下:
for循环中有且只能有两个分号,并且两分号之间可以有多个简单表达式,中间表达式的选取遵循逗号运算符!
//
// Created by Zhu Shichong on 2023/1/9.
//
#include<stdio.h>
main()
{
int i=0;
int j=0;
// while (i<10);
for(i=0,j=0;j<10,i<10;i+=1,j+=2){
printf("%d %d\n",i,j) ;
}
}
while 循环
while语句时会先判断循环条件再看是否执行与剧中的代码,他有一个双胞胎叫do{}while(),后者会先执行一次然后判断是否满足执行条件再决定是否执行下一次。
除此之外循环支持嵌套使用,支持嵌套分支语句。且使用循环语句的时候有两个常用的关键字continue
,break
二者作用分别如下:
- continue 跳过本次循环,进入下次循环
- break 跳出本层循环。
今天的内容到此结束!