C语言_0209笔记_if else/嵌套/级联/switch case

文章详细介绍了C语言中的条件判断结构,包括单一if语句、if-else搭配使用、嵌套的if-else以及多路分支的switch-case语句。通过实例解释了如何进行时间差计算、找零计算以及比较三个数的最大值。同时强调了关系运算符的使用和注意事项,如等号`=`与双等号`==`的区别,以及运算符的优先级。文章还提到了代码风格,建议在if和else后使用大括号以减少错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3.1.1 时间差做判断

3.1.2 找零计算器

3.1.4 否则的话

3.1.5 if语句再探

3.2.1嵌套的if-else

3.2.2级联的else if

3.2.3if-else的常见错误

3.2.4多路分支

知识点提炼

if语句(一个条件)

 if (im<0)
    {
        im=60+im;
        ih--;
    }
  • if(*条件*) 这句后面是没有分号的,因为分号意味着这句结束,所以分号应该放在之后要执行的语句后面。

  • 表明if语句决定后面的赋值语句是否被执行。if后面如果只有一条执行语句的话,就不用写大括号。即:没有大括号的时候只有后面的一句话是有效的。

  • 写程序时不管后面几条语句,一定都要加大括号(避免出错)

关系运算符

  • 注意判断是否相等是【==】,容易出错

  • 关系运算的结果只有0和1,布尔型

#include<stdio.h>
int main()
{
    printf("%d\n",5==3);//0
    printf("%d\n",5>3);//1
    printf("%d\n",5<=3);//0
    return 0;
}
  • 关系运算符的优先级比算术运算符低,比赋值高;

7>=3+4
int r=a>0 //r=0或1
  • 其中==和!=的优先级比其他关系运算符的优先级低,连续的关系运算符从左到右进行

5>3==6>4//1
6>5>4//从左到右,1>4,不成立,结果为0
a==b>0
a==b==6

if else语句(2-3个条件)

  • 特点:if else注意这里的条件一定是非正即负,非黑即白,非0即1的,需要有相当明确的界限。

  • 要么要么,二选一的时候没必要做两次判断,灵活运用if-else

//找最大值:
int max=0;
if(a>b)
{max=a;}
if(b<a)
{max=b;}
//a=b的时候,max=0

改进版本

int max=0;
if(a>b)
{max=a;}
else
{max=b;}

前面已经标红注明了,不再赘述。

嵌套if-else

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

if (a > b)
    {
        max = a;
        if (a > c)
            max = a;
        else
            max = c;
    }
  • else总是与最近的那个if相匹配。 C中缩进不暗示相匹配。只有大括号能改变匹配模式。为了避免错误,可以在每个if、else要执行的语句加上大括号。

级联if else(3+条件)

  • 例子:分段函数: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后面必须要写上条件

多路分支switch case:多个条件

  • 可以用级联else if也可以用switch case语句。比起if语句来说,switch语句符合哪种情况就会直接跳转到其所在行然后执行,不会再从第一个情况开始比对。十分的干净利落。

  • switch():根据switch括号内的变量或者表达式结果来决定执行哪个case冒号后面的语句直到遇到break为止如果所有条件都不匹配,执行default的语句。

switch (控制表达式)
{case 常量:
    语句;
}
  • switch语句括号里的表达式结果或者是变量只能是整型

  • case语句里的常量只能是常数或者常数计算表达式或者定义的常量,如1、2、3;1+1,1+2;a、b、c。

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

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

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

注释

  • 利于人类理解

  • // 单行

  • /* */ 多行注释

//这是一些注释
 
/*这也是
一些
注释*/
  • 一次性注释多行:选中+CTRL+【/?】键;一键注释、一键取消注释

项目学习记录

0209做判断

#include<stdio.h>
int main()
{
    int hour1,minute1;
    int hour2,minute2;
 
    scanf("%d %d",&hour1,&minute1);
    scanf("%d %d",&hour2,&minute2);
 
    int ih=hour2-hour1;
    int im=minute2-minute1;
    if (im<0)//当分钟数的差为负,向小时借一位
    {
        im=60+im;
        ih--;
    }
    printf("时间差是%d小时%d分\n",ih,im);
}

0209找零if else

#include<stdio.h>
    int main(){
    
    int price = 0, bill = 0;
 
    printf("请输入金额(元):");
    scanf("%d", &price);
    printf("请输入票面(元):");
    scanf("%d", &bill);
 
    int change = bill - price;
    if (change > 0)
    {
        printf("找您%d元。\n", change);
    }
    else
    {
        printf("您的钱不够。\n");
    }
 
    return 0;
}

0209比较三个数的大小

#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);
}

0209switch case

  • 无法运行

#include <stdio.h>
    int main(){
        int x;
        scanf("%d",&x);
        switch(x)
        case x<0:
            printf("%d",-1);
            break;
        case x=0:
            printf("%d",0);
            break;    
        case x>0:
            printf("%d",2*x);
            break;    
        return 0;
    }
    //case语句里的常量只能是常数或
    //者常数计算表s达式或者定义的常量,如1、2、3;1+1,1+2;a、b、c。
  • 改进一些,x=0时无法输出。

#include <stdio.h>
    int main(){
        int x;
        scanf("%d",&x);
        int a;
        if (x<=0)
            a=-x;
        if (x>0)
            a=x;    
        switch(x/a){
            case 1:
            printf("%d",2*x);
            break;
        case -1:
            printf("%d",-1);
            break;    
        default:
            printf("%d",0);
        }
        
        return 0;
    }
    //(x/a)由于除数不为0,因此不进入switch分支,那么x=0这条路就不正确
  • 正确版

#include <stdio.h>
    int main(){
        int x;
        scanf("%d",&x);
        int a;
        if (x<0)
            a=-x;
        else if (x>0)
            a=x;
        else
            a=1;        
        switch(x/a){
            case 1:
            printf("%d",2*x);
            break;
            case -1:
            printf("%d",-1);
            break;    
        default:
            printf("%d",0);
        }
        
        return 0;
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值