C语言三大结构之选择结构

目录

选择结构 

 分支语句(选择结构)

if 语句

switch 语句


选择结构 

什么是语句 

C语言中由一个分号;相隔的就是一条语句 

 分支语句(选择结构)

如果你好好学习,校招时拿一个好offer,走上人生巅峰。

如果你不学习,毕业等于失业,回家卖红薯。

这就是选择!

 if 语句

语法结构:

1        if(表达式)

                  语句;       

2       if(表达式)

                  语句1;

         else

                  语句2;

3//多分支    

        if(表达式1)

                  语句1;

        else if(表达式2)

                  语句2;

        else

                  语句3;

 如果没有花括号来括住选择后的语句,那么只能默认选择语句后的第一条语句是这个选择内的语

#include<stdio.h>
int main()
{
	int age = 20;
	/*if (age >= 18)
		printf("成年\n");*/
	if (age >= 18)
		printf("成年\n");
	else
		printf("未成年\n");
		printf("不能谈恋爱");
    //输出为20 成年 不能谈恋爱
    int age1 = 10;
	if (age1 >= 18)
		printf("成年\n");
	else
	{
		printf("未成年\n");
		printf("不能谈恋爱");
	}
    //输出为成年
	return 0;
}
#include<stdio.h>
int main()
{
	int age = 10;
	if (age < 18)
		printf("少年\n");
	else if (age >= 18 && age < 26)
		printf("青年\n");
	else if (age >= 26 && age < 40)
		printf("中年\n");
	else if (age >= 40 && age < 60)
		printf("壮年\n");
	else if (age >= 60 && age < 100)
		printf("老年\n");
	else
		printf("老不死\n");
//少年
	return 0;
}

解释一下:

如果表达式的结果为真,则语句执行。

在C语言中如何表示真假?

0表示假,非0表示真。

悬空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; 
}

else的匹配:else是和它离的最近的if匹配的。

因为else是和第二个if匹配,所以都进不去第一个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; 
}
//代码1
if (condition) {
    return x; }
return y;
//代码2
if(condition) {
    return x; }
else
{
    return y;
}

虽然代码一和代码二的功能是一模一样的但是明显代码二比较好比较直观

return 语句,返回一个值,如然后结束这个函数

//代码3
int num = 1;
if(num == 5) {
    printf("hehe\n");
}
//代码4
int num = 1;
if(5 == num) {
    printf("hehe\n");
}

代码4更好,因为如果写成5=num,那么轻易发现错误;

switch 语句

Switch适用于多分支的情况

语句项

是一个整型表达式  

#include<stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
		printf("星期一\n");

	case 2:
		printf("星期二\n");
	case 3:
		printf("星期三\n");
	case 4:
		printf("星期四\n");
	case 5:
		printf("星期五\n");
	case 6:
		printf("星期六\n");
	case 7:
		printf("星期日\n");
	
	}
/*输入1的话,
会输出
星期一
星期二
星期三
星期四
星期五
星期六
星期日
*/
switch (day)
	{
	case 1:
		printf("星期一\n");
        break;
	case 2:
		printf("星期二\n");
        break;
	case 3:
		printf("星期三\n");
        break;
	case 4:
		printf("星期四\n");
        break;
	case 5:
		printf("星期五\n");
        break;
	case 6:
		printf("星期六\n");
        break;
	case 7:
		printf("星期日\n");
        break;
	}
/*输入1的话
输出是星期一
*/
 int day = 0;
    switch(day)
   {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("weekday\n");
            break;
        case 6:
        case 7:
            printf("weekend\n");
            break;
        default:
		    printf("输出错误\n");
			break;
	}
   }//break语句 的实际效果是把语句列表划分为不同的分支部分。
	return 0;
}

这个case整形表达式决定了入口,就是从什么地方开始输出

break决定了这个结构的出口

default 字句

如果表达的值与所有的case标签的值都不匹配怎么办?

其实也没什么,结构就是所有的语句都被跳过而已。

程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。

但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?

你可以在语句列表中增加一条default子句,把下面的标签

default:

写在任何一个 case 标签可以出现的位置。

当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。

所以,每个switch语句中只能出现一条default子句。

但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

库里不会投三分

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值