四:《初学C语言》— 选择结构

简介: 本篇文章详细讲述了C语言中的选择结构(if...else语句和switch语句)并附上多个代码示例

一:if...else...语句

1.if语句:

语法格式:

if(表达式)
    代码块;

若表达式成立(为真),则代码块执行;表达式不成立(为假),则代码块不执行

在C语言中,0为假;非0表示真。也就是如果表达式里的结果是0的话,则语句不执行;表达式里的结果如果不是0,则语句执行

示例:输入一个整数,判断是否为奇数

#include <stdio.h>
int main()
{
   
    int num = 0; //初始化
    scanf("%d",&num);
    if(num % 2 == 1)
        printf("%d 是奇数\n",num);
    return 0;
}

注意: 变量在创建的时候最好给其一个值(初始化),防止报错

2.else

语法格式:

if(表达式)
    代码块1;
else
    代码块2;

如果if语句成立,则执行代码块1;如果if不成立,则执行else语句中的代码块2

注意: else后面不可以加判断条件;但可以加if

示例1:输入一个整数,判断是否为奇偶数

#include <stdio.h>
int main()
{
   
    int num = 0; //初始化
    scanf("%d",&num);
    if(num % 2 == 1)
        printf("%d 是奇数\n",num);
    else
        printf("%d 是偶数\n",num);
    return 0;
}

示例2:输入一个年龄,如果大于或等于18就输出成年;否则就输出未成年

#include <stdio.h>
int main()
{
   
    int age = 0;
    scanf("%d",&age);
    if(age >= 18)
        printf("成年\n");
    else
        printf("未成年\n");
    return 0;
}

3.分支中包含多条语句:

在C语言中,if或者else只能包含一条语句,每一条语句都是独立存在的。如果想要包含多条语句,则需要把想要包含的语句包裹在{}

#include <stdio.h>
int main()
{
   
    int age = 0;
    scanf("%d",&age);
    if(age >= 18)
    {
   
        printf("成年\n");
        printf("可以谈恋爱了\n");
    }
    else
    {
   
        printf("未成年\n");
        printf("最好不要谈恋爱\n");
    }
    return 0;
}

像这样,被{}包裹的代码叫做代码块也叫程序块,或者复合语句

4.嵌套if

if...else...语句中,else可以与另一个if语句连用,构成多重判断

示例1:输入一个整数,判断输入的整数是0,还是正负数

#include <stdio.h>
int main()
{
   
    int num = 0;
    scanf("%d",&num);
    if(num == 0)
        printf("输入的数字是0\n");
    else if(num > 0) // 这里的if相当于嵌套在else语句中,形成了嵌套结构
        printf("输入的数字是正数\n");
    else
        printf("输入的数字是负数\n");
    return 0;        
}

示例1:嵌套if语句的第二种写法:

#include <stdio.h>
int main()
{
   
    int num = 0;
    scanf("%d",&num);
    if(num == 0)
        printf("输入的数字是0\n");
    else 
    {
   
        if(num > 0) 
            printf("输入的数字是正数\n");
        else
            printf("输入的数字是负数\n");
    }
    return 0;        
}

示例2:输入一个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数,则输出不是正数

#include <stdio.h>
int main()
{
   
    int num = 0;
    scanf("%d",&num);
    if(num>0)
    {
   
        if(num % 2 == 0)
            printf("此数是偶数\n");
        else
            printf("此数是奇数\n");
    }
    else
        printf("此数不是正数\n");
    return 0;
}

示例3:输入一个人的年龄,如果该年龄小于等于18岁,打印“少年”;如果年龄在18~44岁之间,打印“青年”;如果年龄在45~59岁之间,打印“中年”;如果年龄在60~89岁之间,打印“老年”;如果年龄在90及90岁以上,打印“神仙”

#include <stdio.h>
int main()
{
   
    int age = 0;
    scanf("%d",&age);
    if(age <= 18)
        printf("少年\n");
    else if(age < 45)
        printf("青年\n");
    else if(age < 60)
        printf("中年\n");
    else if(age < 90)
        printf("老年\n");
    else if(age > 90)
        printf("神仙\n");
    return 0;
}

5.悬空else问题:

如果有多个ifelseelse总是跟最接近的if匹配 —— 就近原则

#include <stdio.h>
int main()
{
   
    int a = 0;
    int b = 2;
    if(a == 1)
        if(b == 2)
            printf("chang\n");
    else
        printf("xin\n");
    return 0;
}

上述代码准确来说应该是这样的结构:

#include <stdio.h>
int main()
{
   
    int a = 0;
    int b = 2;
    if(a == 1)
        if(b == 2)
            printf("chang\n");
        else
            printf("xin\n");
    return 0;
}
#include <stdio.h>
int main()
{
   
    int a = 0;
    int b = 2;
    if(a == 1)
    {
   
        if(b == 2)
            printf("chang\n");
        else
            printf("xin\n");
    }
    return 0;
}

注意: 此时不会输出任何东西。所以代码一定要注意缩进问题;或者适当的带上大括号,代码的逻辑就会更加的清晰


二:switch语句

  1. 除了if语句外,C语言还提供了switch语句来实现分支结构
  2. switch语句是一种特殊形式的if...else...结构,用于判断条件有多个结果的情况
  3. switch语句把多重的else if 改成更易用、可读性更好的形式

语法格式:

switch(整型表达式)
{
   
    case1:
        代码块1;
    case2:
        代码块2;
    default:
        代码块3;
}

上述语法格式中,根据表达式不同的值,执行相应的case分支;如果找不到对应的值,就执行default分支

注意:

  • switch后的表达式必须是整型表达式
  • case后的值,必须是整型常量表达式

1.if语句和switch语句:

输入任意一个整数值,计算除以3后的余数:

示例1 -- if语句实现:

#include <stdio.h>
int main()
{
   
    int a = 0;
    printf("输入一个数:");
    scanf("%d",&a);
    if(a % 3 == 0)
        printf("整数且余数为0\n");
    else
    {
   
        if(a % 3 == 1)
            printf("余数为1\n");
        else
            printf("余数为2\n");
    }
    return 0;
}

示例2 -- switch语句实现:

#include <stdio.h>
int main()
{
   
    int a = 0;
    printf("输入一个数:");
    scanf("%d",&a);
    switch(a % 3)
    {
   
        case 0:
            printf("整数且余数为0\n");
            break;
        case 1:
            printf("余数为1\n");
            break;
        case 2:
            printf("余数为2\n");
            break;
    }
    return 0;
}

注意:

  • switch语句中的case语句只决定了程序的入口,并没有决定出口,它会继续执行下一个case语句
  • 想要在switch语句中实现分支结构必须要有break
  • 当表达式的结果能够明确的计算出一个值的时候,才会用到switch语句

2.练习:

示例1 -- 输入一个1~7的数字,打印对应的星期:

#include <stdio.h>
int main()
{
   
    int day = 0;
    printf("请输入日期:");
    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;
}

示例2 -- 输入1~5,输出的是工作日;输入6、7,输出的是休息日:

#include <stdio.h>
int main()
{
   
    int day = 0;
    printf("请输入日期:");
    scanf("%d",&day);
    switch(day)
    {
   
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("今天是工作日\n");
            break;
        case 6:
        case 7:
            printf("今天是休息日\n");
            break;
    }
    return 0;
}

注意: 根据实际需求,决定是否使用break

3.default子句:

switch语句中,如果switch后面表达式中的值匹配不到任何case语句的时候,就需要我们在switch语句中加入default子句以维持程序的正常执行

#include <stdio.h>
int main()
{
   
    int day = 0;
    printf("请输入日期:");
    scanf("%d",&day);
    switch(day)
    {
   
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("今天是工作日\n");
            break;
        case 6:
        case 7:
            printf("今天是休息日\n");
            break;
        default:
            printf("输入错误\n");
            break;
    }
    return 0;
}

注意:

switch语句中case语句和default语句是没有顺序要求的,只要顺序满足实际的需求就可以

目录
相关文章
|
1月前
|
网络协议 编译器 Linux
【C语言】结构体内存对齐:热门面试话题
【C语言】结构体内存对齐:热门面试话题
|
14天前
|
存储 搜索推荐 算法
【数据结构】树型结构详解 + 堆的实现(c语言)(附源码)
本文介绍了树和二叉树的基本概念及结构,重点讲解了堆这一重要的数据结构。堆是一种特殊的完全二叉树,常用于实现优先队列和高效的排序算法(如堆排序)。文章详细描述了堆的性质、存储方式及其实现方法,包括插入、删除和取堆顶数据等操作的具体实现。通过这些内容,读者可以全面了解堆的原理和应用。
57 16
|
5月前
|
C语言
【C语言基础篇】结构控制(中)循环结构
【C语言基础篇】结构控制(中)循环结构
|
1月前
|
编译器 C语言 Python
C语言结构
C语言结构
15 0
|
2月前
|
存储 编译器 程序员
C语言程序的基本结构
C语言程序的基本结构包括:1)预处理指令,如 `#include` 和 `#define`;2)主函数 `main()`,程序从这里开始执行;3)函数声明与定义,执行特定任务的代码块;4)变量声明与初始化,用于存储数据;5)语句和表达式,构成程序基本执行单位;6)注释,解释代码功能。示例代码展示了这些组成部分的应用。
95 10
|
2月前
|
C语言
C语言程序设计核心详解 第四章&&第五章 选择结构程序设计&&循环结构程序设计
本章节介绍了C语言中的选择结构,包括关系表达式、逻辑表达式及其运算符的优先级,并通过示例详细解释了 `if` 语句的不同形式和 `switch` 语句的使用方法。此外,还概述了循环结构,包括 `while`、`do-while` 和 `for` 循环,并解释了 `break` 和 `continue` 控制语句的功能。最后,提供了两道例题以加深理解。
|
2月前
|
存储 算法 C语言
数据结构基础详解(C语言): 二叉树的遍历_线索二叉树_树的存储结构_树与森林详解
本文从二叉树遍历入手,详细介绍了先序、中序和后序遍历方法,并探讨了如何构建二叉树及线索二叉树的概念。接着,文章讲解了树和森林的存储结构,特别是如何将树与森林转换为二叉树形式,以便利用二叉树的遍历方法。最后,讨论了树和森林的遍历算法,包括先根、后根和层次遍历。通过这些内容,读者可以全面了解二叉树及其相关概念。
|
2月前
|
C语言
C语言程序设计核心详解 第三章:顺序结构,printf(),scanf()详解
本章介绍顺序结构的基本框架及C语言的标准输入输出。程序从`main()`开始依次执行,框架包括输入、计算和输出三部分。重点讲解了`printf()`与`scanf()`函数:`printf()`用于格式化输出,支持多种占位符;`scanf()`用于格式化输入,需注意普通字符与占位符的区别。此外还介绍了`putchar()`和`getchar()`函数,分别用于输出和接收单个字符。
|
2月前
|
存储 机器学习/深度学习 C语言
数据结构基础详解(C语言): 树与二叉树的基本类型与存储结构详解
本文介绍了树和二叉树的基本概念及性质。树是由节点组成的层次结构,其中节点的度为其分支数量,树的度为树中最大节点度数。二叉树是一种特殊的树,其节点最多有两个子节点,具有多种性质,如叶子节点数与度为2的节点数之间的关系。此外,还介绍了二叉树的不同形态,包括满二叉树、完全二叉树、二叉排序树和平衡二叉树,并探讨了二叉树的顺序存储和链式存储结构。
|
3月前
|
C语言
C语言------选择结构
这篇文章是C语言选择结构的入门实训,包括多个练习题及其源代码,旨在帮助读者熟练掌握条件语句和选择结构程序设计方法,并熟悉switch语句和程序调试过程。
C语言------选择结构