P25【C语言初阶】分支语句
1.概述
C语言是【结构化】的程序设计语言:顺序结构,选择结构,循环结构
C语句可分为以下五类: 1. 表达式语句 2. 函数调用语句 3. 控制语句 4. 复合语句 5. 空语句
控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语 言有九种控制语句。
可分成以下三类: 1. 条件判断语句也叫分支语句(选择结构):if语句、switch语句;
2. 循环执行语句(循环结构):do while语句、while语句、for语句;
3. 转向语句:break语句、goto语句、continue语句、return语句。
2.分支语句(选择结构)
2.1 if 语句
以上,如果表达式为真,则执行语句。
以上,如果表达式为真,则执行语句1,如果为假,则执行语句2。如果要同时执行多条语句要加上大括号,即使用代码块。
示例如下:
多分支
多分支示例如下
注如下的错误写法:这样也会输出青年,因为执行过程是10>=18为假,所以为0,0<28为真,所以执行输出语句。
else会和最近的if匹配。
2.1.1 语句的书写
//代码1
if (condition) {
return x;
}
return y;
//代码2
if(condition)
{
return x;
}
else
{
return y;
}
//代码3
int num = 1;
if(num == 5)
{
printf("hehe\n");
}
//代码4
int num = 1;
if(5 == num)
{
printf("hehe\n");
}
如上所示,代码2和4的书写更加规范,易于阅读
2.1.2 练习
1.判断一个数是否为奇数
2.输出1-100之间的奇数
2.2 switch 语句
比如我想输入1-7,分别会输出星期一到七,如果写成 if.......else语句会太复杂,此时就比较适合用switch语句。
语句结构如下:
其中语句项为:
注:switch和case后必须是整型,case还要求必须是常量,当然字符也可以,因为字符是以ASCII码值的形式存储的。
2.2.1 switch语句中的break
以上需求的实现:
#include <stdio.h>
int main()
{
int day = 0;
scanf_s("%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;
}
return 0;
}
switch语句工作过程:首先根据switch后面的表达式的值,决定和哪个case语句匹配,就从哪个case语句进入,进入后执行语句,执行完成后通过break跳出switch语句,如果没有break就会顺着一直往下走。
#include <stdio.h>
int main()
{
int day = 0;
scanf_s("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
break;
}
return 0;
}
2.2.2 编程好习惯
在最后一个 case 语句的后面加上一条 break语句。 (之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句)。
2.2.3 default 语句
如果输入的表达的值与所有的case标签的值都不匹配, 则所有的语句都被跳过。 程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。 但是,如果不想忽略不匹配所有标签的表达式的值时,可以在语句列表中增加一条default子句。 当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。 所以,每个switch语句中只能出现一条default子句。 但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。
#include <stdio.h>
int main()
{
int day = 0;
scanf_s("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
break;
default:
printf("输入错误\n");
break;
}
return 0;
}
2.2.4 练习
最后输出结果是m=5,n=3。
#include <stdio.h>
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:
m++;//m=3
case 2:
n++;//n=2
case 3:
switch (n)
{//switch允许嵌套使用
case 1:
n++;
case 2:
m++;//m=4
n++;//n=3
break;//此break只会跳出嵌套的这个switch,依然在大的switch中
}
case 4:
m++;//m=5
break;
default:
break;
}
printf("m = %d, n = %d\n", m, n);//m=5,n=3
return 0;
}
总结:1.switch语句是可以嵌套的
2.在switch语句中,没有break会一直往下执行
3..break只会跳出自己所在的switch语句