序言
C语言中我们遇到的大部分程序甚至我们可以说任何程序,它的基本结构可以通过3种基本的控制结构进行组合来实现,是的,的确如此,我才学习了一个学期,对这个感触还挺大的,感觉我所写的程序都离不开这三大基本:顺序,分支,循环,我愿把它们称之为“三大法宝”。今天我们就来讲讲“三大法宝”中的一个——分支
一,引例
计算机在执行程序时,通常都是按照语句的书写顺序来执行,但在很多情况下,我们需要根据条件来选择执行的语句,这就要使用分支结构来帮助我们实现。
二,简介
分支结构的控制语句总的分为两个:if语句和switch语句
但我们在讲这两个语句前需要带大家认识“关系运算符及其表达式”,“逻辑运算符及其表达式”,“条件运算符及其表达式”,我会带大家认识这三大运算符及其表达式在分支语句的使用。
三,关系运算符及其表达式
1.关系运算符
在C语言中有六个关系运算符,它们分别是“>”,“>=”,“<”,“<=”,“==”,“!=”
作用:判断两个操作数的大小关系。
注意1.
关系运算符是双目运算符,其结合方向是左结合
这里举一个例子:
int a=1,b=2,c=3;
c>b>a的返回值是多少
返回值是0
解释:因为关系运算符是左结合性,先计算“c>b”,条件符合则它的返回值是“1”,接着式子变成了“1>a”,条件不符合则它的返回值是"0"
注意2.
关系运算符的优先级低于算术运算符,但是高于赋值运算符
注意3.
在关系运算符中“>”,“>=”,“<”,“<=”优先级高于“==”,“!=”
注意4.
我们要注意区分赋值运算符“=”与关系运算符“==”,两者作用是不一样的
2.关系表达式
一般形式:表达式1 关系运算符 表达式2
功能:比较两个表达式的大小,返回一个逻辑值(“真”返回1 “假”返回0)
四,逻辑运算符和逻辑表达式
1.逻辑运算符
有三个,分别是:“!”,“&&”,“||”
非运算符(!)是单目运算符,而与运算符(&&)和或运算符(||)是双目运算符,前者等级高于后者,因为单目运算符等级高于双目运算符
2.逻辑表达式
一般形式:表达式1 逻辑运算符 表达式2
或 逻辑运算符 表达式1
在逻辑运算的真值表里我们有记忆的口诀,口诀如下:
在“与”里全真为真,其余为假
在“或”里全假为假,其余为真
我们该怎么理解这个口诀呢?
我在这里举一个例子帮助大家更好理解:在“与”里,我们假设老师要求张三和李四去办公室打扫卫生,那么是不是两个人都来的情况下这个条件才为“真”,其余条件为假;在“或”里,我们假设老师要求张三或者李四来办公室打扫卫生,那么两个人没来的情况下这个条件才为“假”,其余条件为真
大家在这里要注意一点:C语言规定了只对决定整个表达式值所需的最少数目的子表达式进行运算。即在有若干个子表达式组成的逻辑表达式中,从左向右计算,当计算出子表达式的值就确定了整个逻辑表达式的值时,就不再计算右边剩下的子表达式的值,这种情况叫做“短路”。
在“与”运算中,若左边为假,右边就不用算了;在“或”运算中,若左边为真,右边就不用算了(可以结合上面的口诀来理解这段话)
可以通过下面的例题加深理解:
#include<stdio.h>
int main()
{
int a=3,b=3,c=2,d;
printf("%d\n",!a&&!b&&c);
d=c--||(b=6)&&a++;
printf("d=%d\n",d);
return 0;
}
输出结果:0
d=1
五,条件运算符和条件表达式
1.条件运算符
由?和:组成,它是一个三目运算符,需要三个操作数,条件运算符的优先级低于逻辑运算符,高于赋值运算符,它是右结合
2.条件表达式
格式:表达式1?表达式2:表达式3
条件表达式的执行顺序是先计算表达式1的值,若值为非零,表示条件为真,则将表达式2的值作为整个条件表达式的值,否则将表达式3的值作为整个条件表达式的值。
我们来用例题来理解:
#include<stdio.h>
int main()
{
int x=3,y=4;
printf("两个整数中的最大数为:%d",x>y?x:y);
return 0;
}
输出结果:4
六,if-else分支结构
1.if-else语句
1)双分支if语句
形式:
if(表达式)
语句1;
else
语句2;
2)单分支if语句
形式:
if(表达式)
语句/语句组;
需要提醒的是:如果是语句组要用大括号括起来,否则只会执行语句组的第一条语句
2.if语句的嵌套
格式:
if(表达式1)
if(表达式2)
语句1;
else
语句2;
else
if(表达式3)
语句3;
else
语句4;
需要提醒的是:当有多个if-else语句时,else总是跟最近的if匹配,所以这要求写代码的同学在敲代码的时候注意格式的规范
3.多分支if语句
格式:
if(表达式1)
语句1;
else if(表达式2)
语句2;
...
else if(表达式n-1)
语句n-1;
else
语句n;
七,switch分支结构
格式:
switch(表达式)
{
case 常量表达式1:语句1;break;
case 常量表达式2:语句2;break;
...
case 常量表达式n:语句n;break;
default:语句n+1;break;
}
执行过程:首先计算switch后面括号内的表达式,然后将表达式的值从上到下按顺序与各个case后面的常量表达式的值进行比较,若与某个常量表达式的值相等,则执行该常量表达式后面的语句,然后执行break语句跳出switch语句;如果表达式的值与任何一个常量表达式的值都不相等,则执行default后的语句,结束switch语句的执行
需要注意的是:
1.switch后面的表达式可以是任何形式,但是它的值只能为整形,字符型,枚举型之一
2.每个case语句后的常量表达式的值互不相同,否则会出现自相矛盾的情况
3.case与default语句的顺序是不固定的,default语句可以在最前面
4.如果没有break语句,则会计算符合条件的case语句及其以下所有的case语句和default语句
5.case与常量表达式之间一定要有空格,注意格式的规范!
经典例题:输入年份和月份,判断该年该月的天数
这里我只想说明怎么判断闰年
1.对于普通年份来讲:能被4整除但不能被100整除 (year%4==0&&year%100!=0)
2.对于整百年份来讲:能被400整除 (year%400==0)
结束语
分支语句有很多细节需要注意,希望同学们多多关注细节,尤其是我标注的“注意”,我在笔记中结合了一些课本上的例题,有助于大家更好理解。希望我的作品对大家有所帮助!!!