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

    xiaoxiao2024-04-22  11

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

    2.2 分支语句

    2.2.1 if语句例2-2中程序的功能是统计C语言程序设计课程期末考试各分数段的人数。按照五级制统计可分成以下几档:90~100 A80~89 B70~79 C60~69 D0~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语句也可以不出现,如果不出现,则语句不执行任何动作。

    相关资源:谭浩强C语言程序设计,C 程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar
    最新回复(0)