选择结构(神奇的"短路"现象)
学习本章的口诀:早配对、早控制、标语句
(1)、def:从main()开始,由上到下有些语句执行有些语句不执行
(2)、两类语句->执行语句:控制语句
1、两类表达式
(1)关系运算符及关系表达式(结果是逻辑值:0或者1)
< 、<= 、>、 >= 、==(比较运算符)、 !=
运算符三要素:功能+优先级+结合性
5>4>3 结果:0
1<2<3 结果:1
(2)逻辑运算符与逻辑表达式(结果是0假或者1真)
&&(逻辑与)------全真为1,有0则0
||(逻辑或)------全0为0,有真为1
!(逻辑非)(单目)------面目全非(真变假,假变真)
2、if语句:
if就近控制一条语句
(1)
if(表达式)
语句序列1;
后继语句(必执行)
(2)if的数量多余else的数量是可以的
if(表达式)
语句序列1;
else
语句序列2;
后继语句(必执行)
(3)if-else嵌套
早配对用else找if
如何找?
①从程序从上到下找else给它配对
②在else上面的离它最近的且未和其他else配对的if
3、switch语句(做菜单)
switch(表达式){
case 常量表达式1(常量整型或字符型):子句1
case 常量表达式2(不能有变量和逗号运算符):子句2
case 常量表达式3(不能出现相同的值):子句3
..............
case 常量表达式n:子句n
default 子句n+1
}
break的作用
#include<stdio.h>
int main(){
char grade;
scanf("%c",&grade);
switch(grade){
case 'a': printf("good\n");
case 'b': printf("better\n");
default: printf("bad\n");
}
return 0;
}
执行过程:程序进入switch语句,会计算switch里面的表达式的值,如合法则找对应的常量表达式进行匹配,输出相应子句,
下面的子句都将被无条件的执行包括default后面的子句,全部执行完,才将退出switch语句
tag:如果都不匹配才会找default(即使说default放在程序的第一句,如果放在第一句且switch匹配失败,执行完default语句后面的子句都将
被无条件执行),相应的default后面的子句都将会被执行
Note:
1、"="是赋值运算符,"=="是比较运算符。
2、6级:< 、<= 、>、 >= (从左到右的方向)
3、7级:==( 比较运算符)、 !=(从左到右的方向)
4、11级:&&(逻辑与)->遇0发生"短路"
5、12级:||(逻辑或)->遇1发生"短路"
6、2级:!(逻辑非)(单目)
7、做题套路:
①检查合法性
②查看是否存在"短路"
③优先级,同级使用结合性
8、每个else一定要先找if;if就近控制一条语句;if-else语句整个算一条语句;复合语句{ }算一条语句
9、如果else发现无法和if配对则Error,即程序bug无法执行。
#include<stdio.h>
int main(){
int m = 5;
if(m++ > 5)
printf("%d",m--);
printf("%d",m);
else
printf("%d",m);
return 0;
}Error
修正:
#include<stdio.h>
int main(){
int m = 5;
if(m++ > 5){
printf("%d",m--);
printf("%d",m);
}
else
printf("%d",m);
return 0;
}