实验 4:让计算机做复杂的事情——选择结构

一、实验目标

  1. 能够正确使用 if 语句实现两分支、多分支选择结构。
  2. 能够正确使用 switch 语句实现多分支选择结构。
  3. 初步形成编写C程序解决复杂问题的能力。

二、知识回顾

1. if 语句实现两分支选择结构

  • 语法形式:

    if (表达式) 
        语句1;
    else 
        语句2;
    
  • 表达式可以是任意合法的C表达式。

  • 语句1和语句2可以是单条语句或复合语句(用 {} 括起来的多条语句)。

  • 执行逻辑:若表达式为“真”(非0),执行语句1;否则执行语句2。

2. if 语句嵌套实现多分支选择结构

  • 语法形式:

    if (表达式1) 
        语句1;
    else if (表达式2) 
        语句2;
    else 
        语句3;
    
  • 注意事项

    • else 总是与它上面最近的未配对的 if 配对。
    • 可使用 {} 明确配对关系,增强代码可读性。
    • 建议缩进对齐,便于理解嵌套结构。

3. switch 语句实现多分支选择结构

  • 语法形式:

    switch (表达式) {
        case 常量1:
            语句1;
            break;
        case 常量2:
            语句2;
            break;
        // ...
        default:
            语句n;
    }
    
  • 注意事项

    • 表达式必须是整型或字符型。
    • case 后面的常量值必须互不相同,且与表达式类型一致。
    • 若无 break,程序会继续执行下一个 case,直到遇到 breakswitch 结束。
    • default 分支可选,用于处理未匹配的情况。

三、实验内容与要点

1. 实验1:比较三个数大小(输出最小值)

  • 使用两两比较法,先假设第一个数为最小,再依次与后两个数比较。

  • 代码示例(整型):

    if (min > b) min = b;
    if (min > c) min = c;
    

2. 实验2:计算小于等于1000的正数的平方根

  • 使用 sqrt() 函数(需包含 <math.h>)。

  • 注意输入数据合法性判断:

    if (x <= 1000) {
        // 计算平方根
    } else {
        // 提示输入过大
    }
    

3. 实验3:分段函数计算

  • 使用多分支 if-else if-else 结构。

  • 注意条件范围的划分,如:

    if (x < 1) y = x;
    else if (x < 10) y = 2*x - 1;
    else y = 3*x - 11;
    

4. 实验4:百分制成绩转等级

  • 方法一:使用 if-else if-else 结构。

  • 方法二:使用 switch 结构,结合 score/10 进行等级匹配。

  • 增强程序健壮性:添加输入合法性检查(0~100之间):

    if (score > 100 || score < 0) {
        printf("成绩输入错误\n");
    }
    

5. 实验5(思考题):三个数从小到大排序

  • 方法一:最值法(找出最大值、最小值、中间值)。

  • 方法二:排序法(两两比较并交换):

    if (a > b) { temp = a; a = b; b = temp; }
    if (a > c) { temp = a; a = c; c = temp; }
    if (b > c) { temp = b; b = c; c = temp; }
    

四、重难点总结

重点

  • 选择结构的构建方法。
  • if 语句及其嵌套的使用。
  • switch 语句的使用。

难点

  • if 嵌套的配对逻辑。
  • switch 语句中 break 的作用与使用时机。
  • 如何确保程序能覆盖所有可能的输入情况,增强程序的完备性和健壮性。

五、思考

  1. 如何优化三个数的排序算法?
  2. 是否能用更简洁的代码实现?