C语言学习笔记(浙大翁恺版)第三周(2)

本文探讨了如何在Python中实现比较三个数的嵌套if-else结构,级联的elseif选择以及switch-case的高效多路分支处理。通过实例讲解了避免常见错误的方法,并介绍了switch语句的特性和适用场景。
摘要由CSDN通过智能技术生成

3.2.1 嵌套的if-else

之前我们比较过两个数的大小,那么如何比较三个数的大小?

可以先比较两个数的大小,胜出者再去和第三个数比较,其算法图解为:

#include <stdio.h>
int main()
{
    int a, b, c;
    int max = 0;
    printf("请输入三个整数:");
    scanf("%d %d %d", &a, &b, &c);
    if (a > b)
    {
        max = a;
        if (a > c)
            max = a;
        else
            max = c;
    }
    else
    {
        max = b;
        if (b > c)
            max = b;
        else
            max = c;
    }
    printf("%d", max);
}

当if的条件满足/不满足的时候要执行的语句也可以是一条if或者if-else语句。这就是嵌套的if语句

那么else的匹配机制是什么呢?else总是与最近的那个if相匹配。 C中缩进不暗示相匹配。只有大括号能改变匹配模式。为了避免错误,可以在每个if、else要执行的语句加上大括号,

3.2.2 级联的else if 

else if 和if-else可不是一回事,引入一个分段函数的小例:x>0时候y=1,<0时候=-1,=0时候=0。

if(x>0) 
    y=1;
else if(x<0)
    y=-1;
else
    y=0;

可以看到,else if提供了多分支选择的条件。现在我们编写比较大小或者部分嵌套条件的程序时就可以采用这种方法来写了。需要注意的是:else if相当于是在第一个分支中的else部分内部嵌套了一个if-else语句,所以else if后面必须要写上条件

放一个程序对比:

 左边的程序实现了单一出口,也就是f事先定好就是用来做某个输出用途的,而右边的输出值是不固定的,不便于维护和查错。

3.2.3 if-else的常见错误

  •  忘写大括号{}
  • if条件后面加了分号
  • 错误使用=和==
  • else匹配

 

 此时printf语句不会执行

 

此时整个{}内的语句都不会执行,因为分号让整个语句结束了。

 条件出错,()里可以是表达式,但是结果必须是0或1,正确的应该把=改为==,a==b才是做判断。

 像前文说的,每个要执行的部分都加上大括号,就不会出现else匹配错误的情况了。

3.2.4 多路分支

我们当然可以用已经学过的知识点:else if写出多路分支的选择程序 

它的逻辑是将你输入的值与条件逐一进行比对然后再执行,我们有另外一种更加高效的方法来完成它:switch-case语句

switch():根据switch括号内的变量或者表达式结果来决定执行哪个case冒号后面的语句,直到遇到break为止。如果所有条件都不匹配,执行default的语句。比起上面的if语句来说,switch语句符合哪种情况就会直接跳转到其所在行然后执行,不会再从第一个情况开始比对。十分的干净利落。

switch (控制表达式)

{case 常量:

语句;}

但是switch语句也是有局限性的:它括号里的表达式结果或者是变量只能是整型或者字符型,因此它的case里的常量只能是常数或者常数计算表达式如1、2、3;1+1,1+2;a、b、c;定义的常量等。

break语句

并不是不同的case分割了switch语句,实际上,如果case之间没有break语句的话,程序会从第一个符合的case开始将所有case加上default都执行一遍最后退出。case只是标志了整个分支开始执行的位置。

注:如果两个情况要执行的语句相同,比如100分和90+分都是一个等级,可以写成这样:

switch(grades)
case 10:
case 9: printf("你的成绩是A!");break;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值