《C语言程序设计与实践(第2版)》——2.2 分支语句

简介: 在if语句中,各个条件从前往后依次求值,直到满足某个条件,这时执行对应的语句部分,执行完毕后,整个if结构结束。注意:其中语句1~n中的任何语句都可以是括在花括号中的若干条语句。如果其中没有一个条件满足,那么就执行位于最后一个else之后的语句。

本节书摘来自华章出版社《C语言程序设计与实践(第2版)》一书中的第2章,第2.2节,作者:凌云等著,更多章节内容可以访问云栖社区“华章计算机”公众号查看

2.2 分支语句

2.2.1 if语句
例2-2中程序的功能是统计C语言程序设计课程期末考试各分数段的人数。按照五级制统计可分成以下几档:
90~100 A
80~89 B
70~79 C
60~69 D
0~59 E
要求输出各分数段的具体人数。
例2-2 用if语句统计各分数段的人数。

#include <stdio.h>
/* 统计各分数段人数*/
int main()
{
    int score, i;
    int grade[5];

    for (i = 0; i < 5; i++)
        grade[i] = 0;    /* 各分数段人数初始值设置为0 */
    printf("请输入第一位学生的成绩:\n");    /* 在屏幕上输出提示信息 */
    scanf("%d", &score);    /* 调用scanf函数输入第一位学生的成绩 */
    while (score != -1)    /* 当score等于-1时退出循环 */
    {
        if (score >= 0 && score < 60)
            grade[0]++;    /* 成绩为E的人数加1 */
        else if (score >= 60 && score < 70)
            grade[1]++;    /* 成绩为D的人数加1 */
        else if (score >= 70 && score < 80)
            grade[2]++;    /* 成绩为C的人数加1 */
        else if (score >= 80 && score < 90)
            grade[3]++;    /* 成绩为B的人数加1 */
        else if (score >= 90 && score <= 100)
            grade[4]++;    /* 成绩为A的人数加1 */
        else
            printf("输入的成绩非法\n");
        printf("请输入下一位学生的成绩(输入-1表示结束输入):\n");
        scanf("%d", &score);    /* 调用scanf函数输入下一位学生的成绩 */
    }
    printf("各分数段的人数分别如下:\n");
    for (i = 0; i < 5; i++)
        printf("%d\n", grade[i]);    /* 输出各分数段的人数 */
    return 0;
}

在程序的控制过程中,我们通常会对满足不同条件的数据进行不同的处理,在例2-2中,程序要求根据不同的输入进行数据的统计,其中用于成绩人数分布统计的语句就是一组if语句。
在C语言程序中经常会采用如下模式来表示多路判定:

if (条件1)
   语句1
else if (条件2)
   语句2
...
else
   语句n

这就是C语言中的if语句。在if语句中,各个条件从前往后依次求值,直到满足某个条件,这时执行对应的语句部分,执行完毕后,整个if结构结束。注意:其中语句1~n中的任何语句都可以是括在花括号中的若干条语句。如果其中没有一个条件满足,那么就执行位于最后一个else之后的语句。如果没有最后一个else及对应的语句,那么这个if结构就不执行任何动作。在第一个if与最后一个else之间可以有0个或多个
else if (条件)

语句

就风格而言,我们建议读者采用缩进格式。
2.2.2 switch语句
C语言中的多路分支,也可以用switch语句完成。例2-2中的if语句完全可以用switch语句替换,替换后的程序如例2-3所示。
例2-3 用switch语句统计各分数段的人数。

#include <stdio.h>
/* 统计各分数段人数*/
int main()
{
    int score, i;
    int grade[5];
    int index;

    for (i = 0; i < 5; i++)
        grade[i] = 0;    /* 各分数段人数初始值设置为0 */
    printf("请输入第一位学生的成绩:\n");    /* 在屏幕上输出提示信息 */
    scanf("%d", &score);    /* 调用scanf函数输入第一位学生的成绩 */
    while (score != -1)    /* 当score等于-1时退出循环 */
    {
        if (score < 0 || score > 100)
            printf("输入的成绩非法\n");
        else
        {
            index = score < 60 ? 0 : 1 + (score – 60) / 10;
            switch (index)
            {
                case 0:
                    grade[0]++;    /* 成绩为E的人数加1 */
                    break;
                case 1:
                    grade[1]++;    /* 成绩为D的人数加1 */
                    break;
                case 2:
                    grade[2]++;    /* 成绩为C的人数加1 */
                    break;
                case 3:
                    grade[3]++;    /* 成绩为B的人数加1 */
                    break;
                case 4:
                case 5:
                    grade[4]++;    /* 成绩为A的人数加1 */
                    break;
                default:;
            }
        }
        printf("请输入下一位学生的成绩(输入-1表示结束输入):\n");
        scanf("%d", &score);    /* 调用scanf函数输入下一位的学生成绩 */
    }
    printf("各分数段的人数分别如下:\n");
    for (i = 0; i < 5; i++)
        printf("%d\n", grade[i]);    /* 输出各分数段的人数 */
    return 0;
}

其中加粗斜体显示的switch语句完成了例2-2中的if…else…语句的功能。switch语句的通用用法如下:

switch(表达式)
{
   case 表达式1:语句1
   case 表达式2:语句2
   ...
   case 表达式n:语句n
   default: 语句n+1
}

执行switch语句时,先计算表达式的值,然后依次与表达式1~表达式n的值进行比较。如果与某一个表达式的值匹配,就执行其后的所有语句,如果没有与任何一个表达式匹配成功,则执行default后面的语句n+1。default语句也可以不出现,如果不出现,则语句不执行任何动作。

相关文章
|
1天前
|
存储 算法 程序员
【C言专栏】C 语言结构体的应用与实践
【4月更文挑战第30天】C语言中的结构体是自定义数据类型的关键,它组合不同类型的數據以创建新类型,尤其适合处理复杂对象如学生信息。通过定义结构体如`struct Student`,包含名字、学号和成绩,可以方便地实例化和访问成员。结构体在链表实现、函数参数传递和数组中都有广泛应用,如表示链表节点和处理批量数据。理解并熟练运用结构体对于C语言编程至关重要,能提升代码效率和可读性。
|
2天前
|
C语言
【精通C语言】:分支结构if语句的灵活运用
【精通C语言】:分支结构if语句的灵活运用
11 1
|
2天前
|
存储 缓存 算法
C语言循环语句的探讨与实践
C语言循环语句的探讨与实践
10 1
|
3天前
|
关系型数据库 MySQL 编译器
探索C语言的魅力:从基础到实践
探索C语言的魅力:从基础到实践
13 3
|
3天前
|
C语言
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
|
3天前
|
C语言
C语言 浙大版《C语言程序设计(第3版)》题目集 练习8-8 移动字母 (10分)
C语言 浙大版《C语言程序设计(第3版)》题目集 练习8-8 移动字母 (10分)
|
3天前
|
C语言
浙大版《C语言程序设计(第3版)》题目集 练习8-2 计算两数的和与差 (10分)
浙大版《C语言程序设计(第3版)》题目集 练习8-2 计算两数的和与差 (10分)
|
3天前
|
C语言
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)
|
3天前
|
C语言
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-6 删除字符 (20分)
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-6 删除字符 (20分)
|
3天前
|
C语言
pta 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数 (20分)
pta 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数 (20分)