第三章 选择结构

本文详细介绍了C语言中的选择结构,包括if语句和switch语句的使用。if语句用于实现两个分支的选择,switch语句则用于实现多分支选择。文中讲解了if语句的一般形式和嵌套使用,以及switch语句的结构、case语句的执行规则和break语句的作用。同时,还提到了default子句在无法匹配所有case时的执行情况。

1.选择语句

概述

  • 由于程序处理问题的需要, 在大多数程序中都会包含选择结构, 需要在进行下一个操作之前先进行条件判断。

在这里插入图片描述

分类

  • if 语句
    用来实现两个分支的选择结构。
  • switch 语句
    用来实现多分支的选择结构。

2.if语句

一般形式

if 语句的一般形式如下:

//多分支
if(表达式1)
    语句1;
else if(表达式2)
    语句2;
else
    语句3;

#include <stdio.h>
int main()
{
    if(表达式)
    {
        语句列表1}
    else if(表达式)
    {
        语句列表1}
    else
    {
        语句列表2}
    return 0;
}

选择结构的嵌套形式

在 if 语句中又包含一个或多个 if 语句称为 if 语句的嵌套

else 总是与它上面的最近的未配对的 if 配对。
为了避免混淆可以加花括号来确定配对关系。

3.switch语句

概述

switch 语句是多分支选择语句。 用来实现多分支选择结构。
switch 语句的作用是根据表达式的值, 使流程跳转到不同的语句。
switch 语句的一般形式如下:

switch(整型表达式)//实现判断
{
    语句项;
}

//句项是什么呢?
//是一些case语句:case语句实现选择
//如下:
case 整形常量表达式:
    语句;

//在switch语句中的 break
case 整形常量表达式:
    语句;
    break;

case语句

  • 各个 case 标号出现次序不影响执行结果。
  • 每一个 case 常量必须互不相同; 否则就会出现互相矛盾的现象。
  • case 标号只起标记的作用,并不实现分支功能。
  • 在 case 子句中虽然包含了一个以上执行语句, 但可以不必用花括号括起来, 会自动顺序执行本 case 标号
    后面所有的语句。
  • 多个 case 标号可以共用一组执行语句。
#include <stdio.h>
//switch代码演示
int main()
{
    int day = 0;
    switch(day)
    {
        case 1case 2:
        case 3:
        case 4:
        case 5:
            printf("weekday\n");
            break;
        case 6:
        case 7:
            printf("weekend\n");
            break;
    }
    return 0;
} 

break语句

  • 在switch语句中,我们没法直接实现分支,搭配break使用才能实现真正的分支。
  • break语句的实际效果是把语句列表划分为不同的部分

default子句


如果表达的值与所有的case标签的值都不匹配怎么办?
其实也没什么,结构就是所有的语句都被跳过而已。
程序并不会终止,也不会报错,因为这种情况在C中并不认为适合错误。

但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
你可以在语句列表中增加一条default子句

default 可以写在任何一个case标签可以出现的位置
当 switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。

每个switch语句中只能出现一条default子句。
但是它可以出现在语句列表的任何位置,而且语句流会像贯穿一个case标签一样贯穿default子句。

#include <stdio.h>
int main()
{
    int n = 1;
    int m = 2;
    switch (n)
    {
    case 1:
        m++;
    case 2:
        n++;
    case 3:
        switch (n)
        {//switch允许嵌套使用
        case 1:
            n++;
        case 2:
            m++;
            n++;
        break;
        }
    case 4:
        m++;
        break;
    default:
        break;
    }
    printf("m = %d, n = %d\n", m, n);
    return 0;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值