C语言基础之分支语句

C语言基础之分支语句

分支语句概述

C语言中,代码分为顺序结构,选择结构和循环结构,选择结构对应的即为分支语句。
分支语句中最主要的语句如下:

  1. if语句
  2. switch语句

if语句

if语句是C语言中编写代码最常用的语句之一,常用来判断是否满足条件,进而执行后续的代码。
首先,在介绍if语句前先要了解一个知识点——C语言中,0表示为假,非0表示为真(而不只是1代表真)。

if语句的语法结构

  1.	单if结构:
        if (表达式)
            语句;
  2.	if - else结构(单分支):
        if (表达式)
            语句;
        else
            语句;
  3.	多分支结构:
        if (表达式)
            语句;
        else if (表达式)
            语句;
    ……
        else
            语句;

当表达式判断为真则执行后续的代码,为假则跳过该表达式所控制下的代码执行后面的代码。
重点说明:

  1. if语句中,如果没有用到代码块符号({})时,if语句后只能控制一条语句,如果有多条语句,则必须使用代码块符号({})。
int main()
{
    if(表达式)
   {
        语句列表1;
   }
    else
   {
        语句列表2;
   }
    return 0;
}
  1. 当代码较复杂时,一段代码中出现多次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");

由于else与离它本身最近的if相匹配,顾此处的else的条件为b不等于2时,输出“haha”,而第一个if的条件不成立,所以不能进入到后续的代码,故此处无任何输出。

附上一个简单的if-else语句的代码

int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
		printf("少年\n");
	else if (age >= 18 && age < 40)
		printf("青年\n");
	else if (age >= 40 && age < 60)
		printf("壮年\n");
	else if (age >= 60 && age < 90)
		printf("老年\n");
	else
		printf("老寿星\n");
	return 0;
}

switch语句

switch语句相较于if语句来说在特殊情况下可以简化代码,使代码更加简单,可读性更强,常常用在分支多的情况。

switch语句的语法结构

switch(整型表达式)
{
    case 整形常量表达式:
         语句;
    case 整形常量表达式:
         语句;
    ......
    default:
         语句;
}
  1. switch后跟的表达式必须是整型、
  2. case后面必须跟整形常量。
  3. default:当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。所以,每个switch语句中只能出现一条default子句。
  4. switch-case语句常和break语句搭配使用。如果不使用break语句,当表达式满足一个条件时,编译器会先执行此条件下的代码,接着执行后续所有条件下的代码,也就是说会把满足某个条件后的所有代码都执行完。举例:
int main()
{
    int day = 0;
    scanf("%d",&day);
    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;
   }
    return 0;
}

首先假设此处的代码中都删掉break语句:
当day输入为5时,将会在执行完printf(“星期五\n”)后不会跳出switch语句,而是继续执行后续所有的代码,打印出“星期五、星期六、星期天”。

再看此代码:break语句本身的意思为在此处后跳出循环,不再执行循环中后续的代码,因此在switch语句中,当执行完break语句时,直接跳出switch语句,不再执行switch中的代码,故此处day输入为5时,执行完printf(“星期五\n”)后跳出switch语句。

上一篇:【每日一题】day29_01 正数数组的最小不可组成和


下一篇:Vue 监听鼠标左键 鼠标右键以及鼠标中键修饰符click.left&contextmenu&click.middle