关于C语言中的分支知识讲解

1. if语句

1.1 if

if语句的写法如下:

if (表达式)
    语句

括号里的表达式如果成立,则会执行下面的语句,如果不成立,则不执行

C语言中成立就为真,不成立就为假,1为真,0为假,所以表达式里如果是1则会执行下面语句,如果是0则不执行

下面是使用if语句判断是否为奇数

#include 
int main()
{
     int num = 0;
     scanf("%d", &num);
     if(num % 2 == 1)
         printf("%d 是奇数\n", num);
     return 0;
}

1.2 else

如果这个数不是奇数,那么应该就是偶数了,这时候就可以使用到else了

if (表达式)
    语句1
else 
    语句2

这时候如果 if 里的表达式不成立,则会执行语句2

例题:输入一个数,判断是否为奇数,如果是奇数打印奇数,否则打印偶数

#include 
int main()
{
	int a;
	scanf("%d", &a);
	if (a % 2 == 1)
		printf("奇数");
	else
		printf("偶数");
	return 0;
}

1.3 分支中包含多条语句

还是用奇数偶数来说:如果上面那道题这样写:

#include 
int main()
{
	int a;
	scanf("%d", &a);
	if (a % 2 == 1)
		printf("奇数");
        printf("不是偶数"); //加了这一行
	else
		printf("偶数");
	return 0;
}

多半你的编译器就会报错了

因为默认在 if 和 else 语句中只控制一条语句

为了解决这个问题我们可以加个大括号{}如下:

#include 
int main()
{
	int a;
	scanf("%d", &a);
	if (a % 2 == 1) {      //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
		printf("奇数");
        printf("不是偶数");
    }
	else {
		printf("偶数");
    }
	return 0;
}

这样就可以完美运行了

1.4 多重判断

如果要有多次判断,可以使用(else if)语句放在 if 和 else 之间,形成多次判断,例如:

int main()
{
	int a;
	scanf("%d", &a);
	if (a == 0) {
		printf("结果为0");
	}
	else if (a > 0) {
		printf("结果为正数");
	}
	else {
		printf("结果为负数");
	}
	return 0;
}

这样就可以形成三次判断,三种情况,如果想要更多情况可以持续的增加 (else if)的个数

1.5 嵌套 if

嵌套就是一个套一个的感觉,在这里要说的是一个if 语句中再套一个if 语句,如下:

#include 
int main()
{
    int num = 0;
    scanf("%d", &num);
    if(num>0)
    {
        if(num%2 == 0)
            printf("偶数\n");
        else
            printf("奇数\n");
    }
    else
    {
        printf("⾮正数\n");
    }
    return 0;
}

在if 语句中还有一个if 语句,这个就是嵌套if

当num>0的时候,会进入到另一个if 语句里面,判断num%2 == 0这个条件

1.6缩进else的问题

#include 
 int main()
 {
     int a = 0;
     int b = 2;
     if(a == 1)
         if(b == 2)
             printf("hehe\n");
     else
         printf("haha\n");
     return 0;
 }

猜猜上述程序运行的结果是什么?

如果你想成了:因为a = 0,所以不满足第一个if(a == 1)的语句然后进入else运行printf("haha\n")这行代码就中陷阱了

因为else语句总是会与最接近它的if 语句匹配

所以代码的呈现应该是这样

#include 
 int main()
 {
     int a = 0;
     int b = 2;
     if(a == 1)
         if(b == 2)
             printf("hehe\n");
         else
             printf("haha\n");
     return 0;
 }

所以最终结果为无任何输出

如果想输出printf("haha\n")该怎么改呢?如下:

#include 
 int main()
 {
     int a = 0;
     int b = 2;
     if(a == 1){
         if(b == 2)
             printf("hehe\n");
     }
     else {
         printf("haha\n");
     }
     return 0;
 }

2. 关系操作符

顾名思义比较两者之间的关系,操作符有多种

>(大于) <(小于) >=(大于等于) <=(小于等于) ==(等于) !=(不等于)

这些操作符通常返回1表示真,0表示假

a = (1 > 0) //真为1,a = 1
b = (20 < 2) //假为0,b = 0
c = (20 == 5) //c = 0 

但是要注意的是,判断是否相等用的是两个等号(==),而一个等号(=)的含义是将等号右边的值赋给左边,且关系符不能连用

int a = 5,b = 3,c = 2;
if (a > b > c) { //err
    printf("hello world");
}

这样子连用是达不到目的的,因为关系运算符会从左到右依次计算,先判断a是否大于b,如果a>b,则它们的值为1,然后开始比较1是否大于c,所以最好别连用关系符,如果实在是想要知道怎么样可以这样比,可以看看下面的逻辑操作符

3. 条件操作符

条件操作符也叫三目操作符,拥有三个操作数

ret = (a > b) ? c : b

它类似于 if 语句,先判断(a>b),如果是真(返回1),则返回:前面的c,否则返回0,返回值为b

上面的条件操作符也可以用下面的if语句代替

if (a > b) {
    ret = c;
}
else {
    ret = b;
}

4. 逻辑操作符:&&、||、! 

&&是表示并且的意思,||是表示或的意思,!是取反(比如如果1是真,加上!1就是假) 

4.1 &&

上面说了不能使用a > b > c这种连续的关系操作符,那么这时候就可以使用&&并且达到目的

int a = 5,b = 3,c = 2;
if (a > b && b > c) {
    printf("hello world");
}

 表达式的意思是 a > b 和 b > c 两者的表达式都为真时,整体才为真,才能执行语句

 4.2 ||

int a = 5,b = 3,c = 2;
if (a > b || b > c) {
    printf("hello world");
}

如果这用 || 表示的就是如果 a > b 或者 b > c任意一个表达式成立,那么就为真,执行语句 

 4.3 !

上面说了,!表示取反

int a = 5,b = 3,c = 2;
if (!(a > b)) {
    printf("hello world");
}

 上面是执行不了语句的,因为a > b为真,那么取反过后为假,则不会执行下面语句

4.4 短路

int a = 3,b = 5,c = 2;
if (a > b && b > c) {
    printf("hello world");
}

还是这段代码举例,在表达式 (a > b && b > c) 中,必须要两个都为真才能整体为真,那如果第一个 a > b 不成立,那么整体就都为假,第二个就不需要判断了,这个时候就称为短路,把第二个给短路了

或语句也一样,(a > b || b > c) 中,只要两个之一为真那么整体就为真,所以当第一个为真时,就无需判断第二个是否为真了,这个时候就把第二个给短路了

5. switch语句

除了 if 语句可以做分支结构外,switch也可以做分支结构

switch 相比与 if 语句在处理将要使用多个 (else if)有时候更好用,且更容易让人读懂

switch(表达式) {
    case 值1: (语句)
    case 值2: (语句)
    .
    .   
    .    
    default: (语句)
}

表达式中的值如果为值1,则从 case 值1开始往下执行,如果表达式中的值case中无符合的值,那么就由default开始执行

注:default并不是只能放在末尾,case也不是只能放前面

感谢大家的观看,如有问题可共同讨论

你可能感兴趣的:(c语言)