C语言分支语句-总结笔记

本文介绍了C语言中的控制语句,重点讲解了分支语句,包括if单分支、if-else双分支以及if-elseif-else多分支结构,并通过示例解释了条件判断和代码块的使用。同时提到了switch语句在多分支选择中的应用,强调了break语句的重要性以及default子句的使用。文章还通过实例展示了如何避免悬空else和优化代码风格。
摘要由CSDN通过智能技术生成

分支语句

C语言是结构化的编程语言。C语言对生活中的事情进行抽象,总结为顺序、判断、循环关系。

概述:

判断(分支)语句:

  • if
  • switch

循环语句:

  • while
  • for
  • do while

go to

1.什么是语句

C语言的语句可以分为一下几类:

  1. 表达式语句
  2. 函数调用语句
  3. 控制语句
  4. 复合语句
  5. 空语句

本次介绍的是控制语句。

控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言有三种结构:顺序结构、选择结构、循环结构)

可以分为三类:

  • 条件判断语句(分支语句):if语句、switch语句;
  • 循环语句:do while语句、while语句、for语句;
  • 转向语句:break语句、goto语句、continue语句、return语句

下面我们将逐一介绍

2.分支语句(选择结构)

2.1 if语句

在你面前有两个选择或者多个选择时。example:周一、三、五选择吃火锅,二四六选择吃盖饭,周日随缘。那么这个例子就需要进行选择,在C语言中可以使用if语句实现。

//语法结构
//单个if
if (表达式)
    语句;

//if与else
if (表达式)
    语句;
else
    语句二;

//多个选择时,可以用else if
if (表达式)
    语句一;
else if (表达式)
    语句二;
else 
    语句三;

  • 对于单if语句,如果if语句后面的表达式成立,则执行if下面的代码。
  • 对于else if语句,如果 if 语句的表达式成立则执行 if 下面的代码,否则执行 else 后面的语句。
  • 对于多个选择。自上而下按顺序判断,如果有满足 if 或 else if 的表达式时,执行相应的语句。if 和 else if 语句没有满足条件的,则执行else的语句
  • else 或 else if 与最近的 if配套,不能只看缩进关系。每个判断后,语句如果包含多个(多行),应使用 { }代码块.

代码演示:

//one

#include <stdio.h>

int main()
{
    int age = 0;
    scanf("%d", &age);
    if (age < 18)
    {
        printf("未成年人\n");
        printf("禁止吸烟\n");
    }
    return 0;
}
//two

#include <stdio.h>

int main()
{
    int age = 0;
    scanf("%d",&age);
    if (age<18)
        printf("未成年");
    else
        printf("已成年");
    
	return 0;
}
//three

#include <stdio.h>

int main()
{
    int age = 0;
    scanf("%d",&age);
    if (age < 18)
        printf("未成年");
    else if (age>=18 && age <=30)
        printf("青年");
     else if (age>30 && age <=50)
        printf("中年");
     else
         printf("老年");
    return 0;
}

以上年龄划分仅为演示代码。

总结:

  • 如果语言表达式为真,则语句执行。
  • C语言中用 0 表示假,用非 0 表示真。

如果条件成立,要执行多条语句,要使用代码块,上面代码 one 中就是使用了代码块。一对 { } 就是一个代码块。

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

看以下代码:

#include <stdio.h>

int main()
{
    int a = 0;
    int b = 2;
    if (a==1)
        if (b==1)
            printf("I am so happy today");
    else 
        printf("I am so sad today");
	return 0;
}

那么上面的代码输出是什么呢?

答案是没有输出。因为 else 是与最近的 if 配套的,不能只看缩进,else 与 (b==1) 这层 if 搭配。由于判断 a=1 的 if 条件已经不成立了,所以根本不会运行 表达式一后面的执行语句。

改正

//适当的使用 { } 可以是代码的逻辑更清晰
//要有良好的写代码的习惯和让人舒服的风格
#include <stdio.h>

int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
	{
		if (b == 2)
			printf("I am so happy today");
		else
			printf("I am so sad today");
	}
	return 0;
}
2.1.2 if风格对比
//代码1
if (condition)
{
	return x;
}
return y;

//代码2
if (condition)
{
	return x;
}
else 
{
	return y;
}

其实上面两个代码的作用是一样的,代码二逻辑更为清晰。像我一样的初学者,建议代码二。

//代码三
int main()
{
    int num = 1;
    if (5 == num)
    {
        printf("I am happy");
    }
	return 0;
}

if 的判断语句这样写的话,如果出现少些一个等号这样的错误,会直接报错导致程序运行不了,防止条件判断语句变为 赋值语句,程序能运行但是有 bug。

2.1.3小练习
//判断一个数是否为奇数,是的话就输出。
int main()
{
    int num = 0;
    scanf("%d",&num);
    if (num %2 == 1)
        printf("%d\n",num);
	return 0;
}
//打印0~100之间的奇数
//这里会用到循环,主要看if
int main()
{
	int main()
{
	int i = 0;
	while (i <= 100)
	{
		if (i % 2 == 1)
		{
			printf("%d\n",i);
		}
		i++;
	}

	return 0;
}
2.2 switch语句

switch语句也是分支语句的一种。常常用于多分支的结构。

比如:按照输入的数字输出对应的星期几,那么我们也可以用 7个 if 语句判断实现。但是代码冗杂,这是哦我们可以使用 switch 语句。

switch (整形表达式)
{
	语句项;
}

语句项是什么?

//语句项是一些case语句
case 整型常量表达式:
	语句;

通过代码来看一下:

#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");   
   }
    return 0;
}

那么结果是什么呢?

如果输入6,会发现输出 星期六 星期天。

why?

是因switch语句的执行顺序是判断成功自上而下一次执行。也就是说输入 6 的时候。case 6 成立输出星期六,但是没有终止,因此会输出星期天。

以上情况可以用break解决

#include <stdio.h>
int main()
{
    int day = 0;
    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;
}

那么如果我们现在要求:输入1~5输出“工作日”,输入6或7输出“休息日”。

代码:

int main()
{
    int day = 0;
    scanf("%d",&day);
    switch (day)
    {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("工作日");
            break;
        case 6:
        case 7:
            printf("休息日");
            break;
    }
    return ;
}

break语句 的实际效果是把语句列表划分为不同的分支部分。

2.2.x default子句

如果我们输入的条件与case都不一致怎么办?

答:使用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;
}

//输出
m = 5  n = 3 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值