C语言学习笔记[21]:分支语句if...else

C语言是结构化的程序设计语言

  • 顺序结构
  • 选择结构
  • 循环结构

分支语句对应的就是选择结构,循环语句对应的就是循环结构

分支语句

  • if...else
  • switch

循环语句

  • while
  • for
  • do...while

goto语句

语句

C语言中由分号隔开的就是一条语句,比如:

#include <stdio.h>

int main()
{
    printf("Hello, world!\n");
    3 + 5;
    ;//空语句
    return 0;
}

分支语句

if语句

语法结构

if(表达式)
    语句;
//表达式中的值为真则执行语句,为假则不执行
if(表达式)
    语句1;
else
    语句2;
//表达式中的值为真,则执行语句1,为假则执行语句2

C语言中如何表示真假?

非0 是 真  例如 -1 为真

0 是 假

#include <stdio.h>

int main()
{
    int age = 10;
    if(age >= 18)
        printf("成年");
    else
        printf("未成年");
    return 0;
}

通过age的值判断应该执行哪些语句

if和else后面默认只跟一条语句

#include <stdio.h>

int main()
{
    int age = 20;
    if(age >= 18)
        printf("成年\n");
    else
        printf("未成年\n");
        printf("不能喝酒\n");
    return 0;
}

 

所以如果想让if和else控制多条语句,则要给语句加上大括号

#include <stdio.h>

int main()
{
    int age = 20;
    if(age >= 18)
        printf("成年\n");
    else
    {
        printf("未成年\n");
        printf("不能喝酒\n");
    }
    return 0;
}

if...else语句的多分支情况

为什么明明age的值是60,还打印出青年呢?

因为 18 <= age < 26 这个写法是错误的,程序执行到这会先判断 18 <= age,这是成立的所以18 <= age 被替换成 1,替换后的 1 < 26 也成立,所以整个表达式为 真,最终输出青年

#include <stdio.h>

int main()
{
    int age = 20;
    if(age < 18)
        printf("少年\n");
    else if(age >= 18 && age < 26)
        printf("青年\n");
        else if(age >= 26 && age < 40)
            printf("中年\n");
            else if(age >= 40 && age < 60)
                printf("壮年\n");
                else if(age >= 60 && age < 100)
                    printf("老年\n");
                    else
                        printf("老不死\n");
    return 0;
}

悬空else

判断如下代码的结果:

#include <stdio.h>

int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
        if(b == 2)
            printf("1\n");
    else
        printf("2\n");
    return 0;
}

运行结果什么都没打印,这就是else匹配的问题

else是和离他最近的if匹配

而上述代码中的else应该和if(b == 2)匹配,但是if(a == 1)不成立,则无法进入if(b == 2)这里,所以什么都没打印

由此可知,代码的书写风格非常重要

if书写格式的对比

if(condition){
    reutrn x;
}
return y;
if(condition)
{
    return x;
}
else
{
    return y;
}

这两个代码本质是一样的,因为return运行以后,后面的代码就不执行了

但是第二种代码风格更好

#include <stdio.h>

int main()
{
    int num = 1;
    if(num == 5)
    {
        printf("1\n");
    }
    return 0;
}
#include <stdio.h>

int main()
{
    int num = 1;
    if(5 == num)
    {
        printf("1\n");
    }
    return 0;
}

这两个代码本质也是一样的,num == 5和5 == num相比,5 == num可以防止少写一个等号,从而导致if后面的表达式恒为 真

判断一个数是奇数还是偶数

#include <stdio.h>

int main()
{
    //判断一个数是否为奇数
    int num = 0;
    printf("请输入一个数字:");
    scanf("%d", &num);
    if(num % 2 == 1 || num % 2 == -1)
    {
        printf("%d是奇数\n", num);
    }
    else
    {
        printf("%d是偶数\n", num);
    }
    return 0;
}

输出1~100之间的所有奇数

#include <stdio.h>

int main()
{
    //输出1~100之间的奇数
    int i = 0;
    while(i <= 100)
    {
        if(i % 2 == 1)
        {
            printf("%d ", i);
        }
        i++;
    }
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值