分支语句
分支语句又叫条件判断语句,适用于在程序中进行判断。
分支语句需要了解的概念是:
在C语言中,0意味着假,非0意味着真。
在C语言中,当表达式成立时,意味着真,通常这个时候表达式等同于数值1。当表达式不成立时,意味着假,通常这个时候表达式等同于数值0。
通常对于一个分支语句来说,当其条件为真,即执行分支语句中的指令。当其条件为假。则不执行分支语句中的指令。
实际上,下文所说的“判断条件”,正确来说应该叫做“表达式”。只是为了方便理解而采用了“判断条件”这样的名字。
if else语句
if else语句是C语言中一个用于条件判断的语句。
语法结构为:
if (判断条件) //当判断条件为真(即成立)时,执行if内语句
{ //当if内的执行内容只有一条语句时,可以省略{}
执行内容;
}
else //当判断条件为假(即不成立)时,执行else中的语句
{ //与if一样,当执行内容只有一条语句时,可以省略{}
执行内容;
}
其中,判断条件左右两个括号是必须要加进去的。
判断条件通常会用到笔记5中提到的关系操作符、条件操作符和逻辑操作符。
{}包括了if语句中的内容。
通常,else与if的匹配遵循就近原则,else会与位于它上方且离它最近的if相匹配(假如该else并不是处在if内部或其它函数中)
示例:
int main()
{
int a = 0;
scanf("%d",&a);
if (a > 7) //a大于7时,执行if内的语句
{
printf("%d",a);
}
else //a不大于7时,转而执行else内的语句
{
printf("%d",7);
}
return 0;
}
当要进行多次判断时,可以往if的执行内容里面加入多个if语句,即嵌套if语句。不过,也可以使用else if来实现。
if (判断条件)
{
语句内容
}
else if (判断条件) /*当if中的条件为假时,对else if
的条件进行判断,为真则执行elseif内的语句,不执行else语句*/
{
语句内容
}
else
{
语句内容
}
else if实际上对多重判断if语句的另一种写法。
以下是一个多重判断的if语句:
if (a > 10)
printf("%d",a);
else
//这里可以不用加{},因为整个if else被视为一条语句
if (a > 5)
printf("7");
else
printf("0");
else if实际上就是把第二次判断中的if转移到了第一个else上。这样做的基础在于C语言只读取语句,不会对缩进与语句排列有严格的要求(这与python有很大区别)
else if可以加入多个,在语句中要按照顺序进行排列,程序在执行时会按照从上往下的顺序依次进行判断。
switch语句
switch语句也是分支语句中的一种。
相较于if else语句,switch语句方便进行更多次数的判断。
结构为:
switch (整型表达式) /*switch会记录下整型表达式的值。
这里将这个值设为a*/
{
case 常量表达式b: 语句 //当a等于表达式b的值,执行后面的语句
//case后不需要花括号,可以接任意数量的语句
case 常量表达式c: 语句
case 常量表达式d: 语句
default: 语句 /*当没有一个case语句的表达式值与a相匹配时,
执行default后面的语句*/
}
其中,整型表达式意味着该表达式不能包含浮点数和字符串。由于C语言将字符当作整数来处理,因此该整型表达式可以包含单个字符。
常量表达式意味着该表达式不能包含变量和函数调用。通常的,像5+7这样的表达式为常量表达式,而a+7则不是(假如a不是一个表达常量的宏)。常量表达式的值必须是整数或字符。
每一个case后面跟着的语句最后通常须带有break语句。break语句表示跳出,否则在执行完该case中的语句后程序会继续执行下面case的语句。
示例:
int main()
{
int a = 0;
scanf("%d",&a);
switch (a)
{
case 1: printf("a");
break;
case 2: printf("b");
break;
case 3: printf("c");
break;
default: printf("No!");
}
return 0;
}
补充说明
逻辑运算符&&和||具有“短路”特性。
操作符会首先计算出左操作数的值,然后计算右操作符,当整一个表达式的值可以通过左操作符的值推导出来时,便不会计算右操作数的值。
a = 2
a = 1 && a++ = 3 //因为a = 1已经不成立,整个表达式输出0
//因而不会计算a++ = 3。