C语言学习-第四章 选择结构程序设计③

133 阅读1分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第9天,点击查看活动详情

选择结构的嵌套

在if语句中又包含多个if语句称为if语句的嵌套(nest)

if语句的第3种形式就属于if语句的嵌套,其一般形式如下:

if () {
    if () 语句1        // 内嵌if
    else 语句2        // 内嵌if
} else {
    if () 语句3        // 内嵌if
    else 语句4        // 内嵌if
}

用switch语句实现多分枝选择结构

switch 语句是多分支选择语句。

示例:

//    按照成绩的等级输出百分制分数段 A: >85  B: 70 ~ 84 C : 60 ~69 D: <60
    char grade;
    scanf("%c", &grade);
    printf("Your score:");
    switch (grade) {
        case 'A':
            printf("85 ~ 100\n");
            break;
        case 'B':
            printf("70 ~ 84\n");
            break;
        case 'C':
            printf("60 ~ 69\n");
            break;
        case 'D':
            printf("< 60\n");
            break;
        default:
            printf("enter data error!\n");
    }

image.png

switch语句的 一般形式:

switch(表达式) 
{
    case 常量1: 语句1;
    case 常量2: 语句2;
         .       .
         .       .
         .       .
    case 常量n: 语句n;
    default: 语句 n + 1
}
  • "表达式" 其值的类型应为整数类型(包括字符型)
  • switch下面的花括号内是一个复合语句。包括若干语句,是switch语句的语句体
  • 可以没有default标号,如果没有与switch表达式相匹配的case常量,则不执行任何语句,流程转到switch语句的下一个语句。
  • 各个case标号出现次序不影响执行结构。
  • 每一个case常量必须互不相同
  • case标号只起到标记的作用。在执行switch语句时,根据表达式的值找到匹配的入口标号,并不在此进行条件检查,在执行完一个case标号后面的语句后,就从此标号开始执行下去,不再进行判断。如上述示例中,如果没有break语句,将连续输出:

image.png

  • 在case子句中的执行语句,可以不用花括号括起来
  • 多个case标号可以共用一组执行语句,例如
case 'A':
case 'B':
case 'C': printf(">60 \n"); break;
.
.
.

注意: 一般情况下,在执行一个case子句后,应当用break语句使流程跳出switch结构,即终止switch语句的执行。最后一个case子句(今为default子句)中可不必加break语句,因为流程已到了switch结构的结束处。

选择结构综合举例

  1. 写一程序,判断某一年是否为闰年。

image.png

#include <stdio.h>

int main() {
    int year, leap;
    printf("enter year:");
    scanf("%d", &year);
//    方法1
//    if (year % 4 == 0) {
//        if (year % 100 == 0) {
//            if (year % 400 == 0) {
//                leap = 1;
//            } else {
//                leap = 0;
//            }
//        } else {
//            leap = 1;
//        }
//    } else {
//        leap = 0;
//    }

// 方法2
//    if (year % 4 != 0) leap = 0;
//    else if (year % 100 != 0) leap = 1;
//    else if (year % 400 != 0) leap = 0;
//    else leap = 1;

// 方法3
    if ((year %4 == 0 && year % 100 != 0) || year % 400 == 0) leap = 1;
    else leap = 0;

    if (leap) printf("%d is", year);
    else printf("%d is not", year);
    printf(" a leap year.");
    return 0;
}