分支
C语言中的分支结构由if语句或者switch语句构成。
#if语句
1.基本语法格式:
if ( 表达式 )
语句
表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行。C语言中,0为假,非0表示真。例如:
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)//当模为1时,判断结果便为真,不为1时便为假。
printf("%d 是奇数\n", num);
return 0;
}
那么当这个输出的数是偶数时,又要如何判断并输出呢?
这时就需要 if…else… 语句了,语法形式如下:
if ( 表达式 )
语句1
else
语句2
那么对于一个整数是奇数还是偶数的判断就可以变成这样如下:
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数\n", num);
else
printf("%d 是偶数\n", num);
return 0;
}
以上示例中,if与switch后面都只有一条语句,那么我们在面对多条语句的时候应该怎么办呢?
由于默认在 if 和 else 语句中都只控制⼀条语句,这时便需要借助其他符号。那就是使用 {} 将代码括起来,else 后也可以跟上⼤括号。如下:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age >= 18) //if 后使⽤{} 控制多条语句-
//这个块也叫:程序块,或者复合语句
{
printf("成年了\n");
printf("可以交⼥朋友了\n");
}
return 0;
}
else的用法相同。
当所需条件很多时,可以对if进行嵌套,即else 可以与另⼀个 if 语句连⽤,构成多重判断。例如:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
printf("少年\n");
else if(age<=44)
printf("⻘年\n");
else if(age<=59)
printf("中⽼年\n");
else
printf("⽼年\n");
return 0;
2.关于if与else中的注意点:悬空的else
如果有多个 if 和 else, else 总是跟最接近的 if 匹配。例如:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
示例中的else所对应的是从上到下第二个if,并不是第一个与它正好对齐的if,else与if的对应遵循就近原则。
如果要将else与第一个if对应就应该加上{}。如下:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
printf("hehe\n");
}
else
{
printf("haha\n");
}
return 0;
}```
3.if后面通常放入关系表达式以此来判断真假
关系表达式需要用到关系操作符:< > >= <= !=(不等于) ==
关系操作符的注意点:1.相等运算符==与赋值运算符 = 是两个不⼀样的运算符,不要混淆,否则会导致错误。 例如:
if (x = 3)
原意是 x == 3 ,但是不⼩⼼写成 x = 3 。这个式⼦表⽰对变量 x 赋值 3 ,它的返回值为 3 ,所以 if 判断总是为真。为了防⽌出现这种错误,可以将变量写在右边。如下:
if (3 == x)
注意点2.多个关系运算符不宜连用例如:i < j < k,按照我们的习惯这是正确的,但对于计算机而言,他将按照这个形式计算(i < j) < k,而i < j将返回 0 或 1 ,所以最终是 0 或 1 与变量 k 进行比较。
正确的写法应该是这样:i < j && j < k
关系表达式之间的关系连接用逻辑操作符:&& , || , !
&&:表示并且
||:表示或
!:逻辑取反运算符(改变单个表达式的真假)
例如:如果 flag 为真, !flag 就是假,如果 flag 为假, !flag 就是真
#switch语句
1.基本语句格式:
switch (expression)
{
case value1: statement
case value2: statement
default: statement
}
switch语句会根据不同的返回值,来执行不同的语句。值得注意的是,switch 后的 expression 必须是整型表达式,case 后的值,也必须是整形常量表达式。
2.与if进行对比
例如:输⼊任意⼀个整数值,计算除3之后的余数
if语句形式:
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
if(n%3 == 0)
printf("整除,余数为0\n");
else if(n%3 == 1)
printf("余数是1\n");
else
printf("余数是2\n");
return 0;
}
换成switch语句后:
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch(n%3)
{
case 0:
printf("整除,余数为0\n");
break;
case 1:
printf("余数是1\n");
break;
case 2:
printf("余数是2\n");
break;
}
return 0;
}
3.在书写语句格式时需要注意的是:
(i).case 和后边的数字之间必须有空格。
(ii). 每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。倘若没有break,语句便会逐条打印下来。以上面例子为例,假设输入7,该代码便会从case1开始向下开始进行,便会打印出"余数是1余数是2"(这边省略了换行)这个结果。
(iii)对于多个case的值,所需的结果是相同时便可以写成以下的形式:
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("⼯作⽇\n");
break;
case 6:
case 7:
printf("休息⽇\n");
break;
}
return 0;
}
4.关于switch语句中的default
default表示除了以上case所列举的值外,其他的值都会导致default语句的执行。例如前面打印星期的代码,如果 day 的输入不是1~7的值,如果我们要提示:输入错误,则可以这样完成代码:
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("⼯作⽇\n");
break;
case 6:
case 7:
printf("休息⽇\n");
break;
default:
printf("输入错误");
break;
}
return 0;
}
其中值得注意的是,default与case之间的循序并没有严格的要求,即使default放在case语句的前面也不会影响输出的结果。
以上便是C语言分支的所以的内容,如有不妥之处恳请各位大佬指正,本人萌新一枚。