kiko小剧场
kiko:各位真的是好久不见,【百炼成神】专栏终于要回归了!
小明:真的是拖欠了好久哦···我都不打算订阅了的说。
kiko:呜呜呜,我保证,以后一周至少两更!一周两更!
小明:行叭!那就赶紧开始叭~
往期必看
【C语言百炼成神】第一日·操作符
【C语言百炼成神】第二日·操作符
【C语言百炼成神】第三日·操作符
【C语言百炼成神】第四日·操作符
【C语言百炼成神】功法一·常量与变量
kiko小剧场
知识点1:语句
1.1 语句
1.表达式语句
2.控制语句
3.空语句
4.复合语句
知识点2:选择结构
2.1 if语句
1.if语句的单分支
2.if语句的双分支
3.if语句的多分支
4.if语句与代码块
5.悬空else
2.2switch语句
1.switch语句的定义
2.switch语句的实战案例
知识点2:选择结构
2.1 if语句
Q1:什么是if语句?
A1:if语句提供一种二分支选择的控制流程,它根据表达式的值来决定执行两个不同情况下的其中一个分支程序段。
1.if语句的单分支
单分支就是只有一个分支,当给定的条件满足时,执行一个语句1;当条件不满足时,不进行任何操作,因此只有语句1一种输出,因此我称之为单分支。
if(表达式)语句1;//如果为真,执行语句;否则不执行//C语言规定:0为假,非0为真
案例1:如果小于18岁,输出未成年。
//该情况只有一个分支,即只有小于18这种情况输出。#includeint main(){ int age=10; if(age<18) printf("未成年\n"); return 0;}
3.if语句的多分支
多分支就是有多个分支,这边使用else if来使得if语句也可以进行多个分支的判断,我们在程序中只要通过增加else if,就可以增加if语句判断的分支数。
如下例中,当表达式1满足执行语句1;如果不满足表达式1,满足表达式2,执行语句2;其余情况执行语句3,有3种不同的分支,因此我们称之为多分支。
if(表达式1)//表达式1为真,执行语句1语句1;else if(表达式2)//表达式1为假,表达式2为真,执行语句2语句2;else//其余所有情况,执行语句3语句3;
案例3:输入年龄后,判断一个人的年龄范围并输出其结果(共有5种可能:未成年、青年、壮年、老年、老不死)
//有5种不同的输出,因此判断为多分支,需要结合else if#includeint main(){ int age=0; scanf("%d",&age); if(age<18) printf("未成年\n"); else if (18<=age && age=50 && age=50 && age<90) printf("老年\n"); else//最后一个else也可以省略 printf("老不死"); return 0;}
结果居然是什么都没有输出。这是因为else是和离它最近if相匹配的,也就是与if(b==1)相匹配,因此上图橙色方框圈起来的这几行代码都属于if (a==1) 条件满足的情况,而本题a初始化为0,不满足a==1,因此就不会有任何输出。
2.2switch语句
1.switch语句的定义
Q1:什么是switch语句?
A1:switch语句是一种专门进行多分支选择的分支控制语句。上面介绍了if语句使用else if可以实现多分支,但是具体实现起来程序冗长且难以理解,而采用switch语句实现分支则结构更清晰。switch语句的一般语法结构如下:
switch(表达式){case 常量表达式1:语句1;(break;)case 常量表达式2:语句2;(break;)···case 常量表达式n:语句n;(break;)default:语句n+1;}
switch语句的执行过程:
- 计算switch表达式的值。
- 将该值与case后面的常量表达式的值相比较,当switch表达式的值与某个常量表达式i的值一致时,就从该case后的语句i开始执行,直到遇到break语句或整个switch结束。
- 若switch表达式与任何常量表达式的值均不同时,则执行default后面的语句或执行switch结构的后续语句。
上述switch结构的几点注意:
(1)switch 后面的圆括号内的表达式类型一般为整型、字符型和枚举型,不能为浮点型。
(2)case标签: case后必须跟整数类型(包括char类型)的常量或整型常量表达式。
(3)break语句:它使程序控制跳出当前循环或switch语句的剩余部分,它实际效果是把语句列表划分为不同的分支部分。
2.switch语句的实战案例
案例1.0 选择打印星期
//该程序在接收到整数1-7后,会打印相对应星期,然后运行到break,跳出switch语句#includeint main(){ int day = 0; scanf("%d", &day); switch (day)//day必须定义为整型 { case 1+0 :printf("星期1\n");break;//case1+0 √ case后跟整型常量就行 case 2:printf("星期2\n");break; case 3:printf("星期3\n");break; case 4:printf("星期4\n");break; case 5:printf("星期5\n");break; case 6:printf("星期6\n");break; case 7:printf("星期7\n");break; } return 0;}
案例1.1 改进打印星期
题目变化:输入1-5打印工作日;输入6-7打印休息日.
kiko:巧妙利用case语句未遇到break程序会持续进行,因此无论从case1进入还是从case5进入,最终都会在printf(“工作日”)下一行的break结束switch语句;case6&case7同理。