C语言分支语句详解

一.if语句

1.if语句:

1.1.语法形式:

        if(表达式)

                语句;

        表达式为真(非零),进去语句内部;表达式为假(零),则不进入语句内部

例1:

你是天才吗?_牛客题霸_牛客网 (nowcoder.com)

解答:

#include <stdio.h>



int main() {

    int a = 0;

    scanf("%d",&a);

    if( a >= 140)//根据题目判断,如果输入大于140则输出Genius;如果输入小于140则不输出

        printf("Genius\n");

    return 0;

}

2.if...else...语句

2.1.语法形式

if(表达式)

        语句1

else

        语句2

表达式为真时进入语句1;为假时进入语句2

例2:将1.1例题增加一个条件

        如果智商大于等于140输出天才,如果智商小于140就输出不是天才,则代码如下:

#include <stdio.h>

int main() {
    int a = 0;
    scanf("%d",&a);
    if( a >= 140)
        printf("Genius\n");//如果智商高于140则执行
    else
        printf("Not Genius\n");//如果智商低于140则执行
    return 0;
}

3.分⽀中包含多条语句

以上只有一条语句,如果有多条语句就要用{ }将语句阔起来

例3:

#include <stdio.h>

int main(){
    int a = 0;
    printf("请输入你的年龄/n");
    scanf("%d",&a);
    if(a >= 18){
    printf("恭喜你\n");
    printf("你已经成年了"\n);
    }
    
    return 0;
}

4.if语句嵌套

在if...else...语句中else后可以跟另一个if语句连用

例4:

再给例1加一个条件

如果智商大于等于200则输出超级天才,在140到200之间则输出天才,低于140则输出不是天才

#include <stdio.h>

int main() {
    int a = 0;
    scanf("%d",&a);
    if( a >= 200)
        printf("Super Genius\n");//如果智商高于200则执行
    else if (a>=140 && a<200)
        printf("Genius\n");//如果智商高于140低于200则执行
    else
        printf("Not Genius\n");//如果智商低于140则执行
    return 0;
}

5.悬空else问题

如果有多个if else语句,则else会跟最近的if匹配

例5:

//有如下代码
#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 ,可以记住这样⼀条规则, else 总是跟最接近 else 和第⼀个 if 语句对⻬,让我们以为 语句不成⽴的时候,⾃然想到的就是执⾏ else ⼦句,打印 else 是和第⼀个if匹配的,当 进⾏匹配的,这样后边的 haha ,但实际上 if...else 语句是嵌套在第⼀个 if else 是和第⼆个 if 成⽴,嵌套 if 和 if 语句中的,如果第⼀个 if 语句就不 else 就没机会执⾏了,最终啥都不打印。

可以将上述代码这样理解:

#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;
}

二.关系操作符

C语⾔⽤于⽐较的表达式,称为“关系表达式”(relationalexpression),⾥⾯使⽤的运算符就称 为“关系运算符”(relationaloperator),主要有下⾯6个。

>                大于运算符        

<                小于运算符

>=              大于等于预算符

<=              小于等于运算符

==              相等运算符

!=               不相等运算符

注意:

= 是赋值运算符    ==是相等运算符

运算符不能连用

三.条件操作符

条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下:

exp1 ? exp2 : exp3

如果表达式exp1为真则返回exp2的结果,exp1为假则返回exp3的结果

例6:

返回两个较大的数

#include <stdio.h>
int main(){
    int a,b;
    scanf("%d %d",&a,&b);
    printf("%d\n",a>b?a:b);
    return 0;
}

四. 逻辑操作符:&&,||,!

&&        逻辑与        两侧只要有表达式为假则为假

||           逻辑或        两侧至少有一个表达式为真则为真

!          逻辑非        改变单个表达式真假

五.短路

C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是 保证的。 如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。

例7:

if(month >= 3 && month <= 5)

表达式中&&的左操作数是 结果是0的时候,即使不判断 month >= 3 ,右操作数是 month = 3 的 month <= 5 ,整个表达式的结果也是0(不是春季)。 所以,对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执⾏。

六.switch语句

除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。 switch 语句是⼀种特殊形式的 的 el if...else 结构,⽤于判断条件有多个结果的情况。它把多重 se if 改成更易⽤、可读性更好的形式。

 switch (expression) {

case value1: statement

case value2: statement

default: statement

}

上述代码中,根据表达式expression的值来确定执行case分支

注意:

switch(expression)中expression必须是整形表达式

case    必须是整型常量表达式

default 在所有的case语句都不匹配时则执行default后的语句

注意:

case之间;case与default之间的先后顺序是无所谓的,可以任意交换

七.if语句与switch语句的对比

例8:

输⼊任意⼀个整数值,计算除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;
}

我们需要注意的问题有:

1.case后面跟常量整形表达式时必须用空格隔开

2.每一个case语句中代码执行完成后,必须通过break跳出这个stitch语句

  • 23
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值