C语言分⽀和循环

1. if语句

1.1 if

if 语句的语法形式如下:
if ( 表达式 )
语句
表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏
在C语⾔中,0为假,⾮0表⽰真,
也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果不
是0,则语句执⾏。
例⼦:输⼊⼀个整数,判断是否为奇数
# include <stdio.h>
int main ()
{
     int num = 0 ;
     scanf ( "%d" , &num);
     if (num % 2 == 1 )
        printf ( "%d 是奇数 \n" , num);
     return 0 ;
}

1.2 else

如果⼀个数不是奇数,那就是偶数了,如果任意⼀个整数,我们要清楚的判断是奇数还是偶数怎么表
⽰呢?
这⾥就需要 if...else... 语句了,语法形式如下:
if ( 表达式 )
语句 1
else
语句 2
例⼦:输⼊⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印偶数。
# include <stdio.h>
int main ()
{
     int num = 0 ;
     scanf ( "%d" , &num);
     if (num % 2 == 1 )
            printf ( "%d 是奇数 \n" , num);
     else
            printf ( "%d 是偶数 \n" , num);
     return 0 ;
}
练习:输⼊⼀个年龄,>= 18岁就输出:成年,否则就输出:未成年
# include <stdio.h>
int main ()
{
     int age = 0 ;
     scanf ( "%d" , &age);
     if (age>= 18 )
              printf ( " 成年 \n" );
     else
              printf ( " 未成年 \n" );
     return 0 ;
}

1.3 分⽀中包含多条语句

默认在 if else 语句中默认都只控制⼀条语句,⽐如:
# include <stdio.h>
int main ()
{
        int age = 0 ;
        scanf ( "%d" , &age);
        if (age >= 18 )
                printf ( " 成年了\n" );
        printf ( " 可以谈恋爱了\n" );
        return 0 ;
}
上⾯的代码,你会发现输⼊的值不管是>=18 还是<18,"可以谈恋爱了" 都会打印在屏幕上。
这是因为 if 语句只能控制⼀条语句,就是 printf(" 成年了 \n"); ,if语句为真,则打印成年了,
if语句为假,则不打印,对于 printf(" 可以谈恋爱了 \n"); 是独⽴存在的,不管if语句的条件的真
假,都会被执⾏。那如果我们要if语句同时控制2条语句,怎么办呢?那就要使⽤ {} 将代码括起来,
else 后也可以跟上⼤括号。如下:
# include <stdio.h>
int main ()
{
        int age = 0 ;
        scanf ( "%d" , &age);
        if (age >= 18 ) //if 后使⽤ {} 控制多条语句 - 这个块也叫:程序块,或者复合语句
   {
                printf ( " 成年了 \n" );
                printf ( " 可以谈恋爱了 \n" );
   }
        return 0 ;
}
# include <stdio.h>
int main ()
{
        int age = 0 ;
        scanf ( "%d" , &age);
        if (age >= 18 ) //if 后使⽤ {} 控制多条语句 - 这个块也叫:程序块,或者复合语句
   {
                printf ( " 成年了\n" );
                printf ( " 可以谈恋爱了 \n" );
   }
        else //else 后使⽤ {} 控制多条语句 - 这个块也叫:程序块,或者复合语句
   {
                printf ( " 未成年 \n" );
                printf ( " 不可以早恋哦 \n" );
   }
        return 0 ;
}

1.4 嵌套if

if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断。
⽐如:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。请看如下代码:
# include <stdio.h>
int main ()
{
        int num = 0 ;
        scanf ( "%d" , &num);
        if (num == 0 )
                printf ( " 输⼊的数字是 0\n" );
        else if (num > 0 ) // 这⾥的 if 相当于嵌套在 else 语句中,形成了嵌套结构
                printf ( " 输⼊的数字是正数 \n" );
        else
                printf ( " 输⼊的数字是负数 \n" );
        return 0 ;
}
上图中橙⾊背景的代码就是嵌套在前⾯的 else ⼦句中的,构成了嵌套的if语句。
再⽐如:
输⼊⼀个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:⾮正数。
# include <stdio.h>
int main ()
{
        int num = 0 ;
        scanf ( "%d" , &num);
        if (num> 0 )
   {
        if (num% 2 == 0 )
                printf ( " 偶数 \n" );
        else
                printf ( " 奇数 \n" );
   }
        else
   {
                printf ( " ⾮正数 \n" );
   }
        return 0 ;
}
上⾯的代码中橙⾊背景的代码也是嵌套在 if 语句中的,构成了嵌套的 if 语句。
以上就是嵌套if语句的语法,有了嵌套if语句,就可以完成更多复杂逻辑的判断。
练习:
输⼊⼀个⼈的年龄
如果年龄 < 18 岁,打印 " 少年 "
如果年龄在 18 岁⾄ 44 岁打印 " ⻘年 "
如果年龄在 45 岁⾄ 59 岁打印 " 中⽼年 "
如果年龄在 60 岁⾄ 89 岁打印 " ⽼年 "
如果 90 岁及以上打印 " ⽼寿星 "
参考代码:
// ⽅法 1
# include <stdio.h>
int main ()
{
        int age = 0 ;
        scanf ( "%d" , &age);
        if (age< 18 )
                printf ( " 少年 \n" );
        else if (age<= 44 )
                printf ( " ⻘年 \n" );
        else if (age<= 59 )
                printf ( " 中⽼年 \n" );
        else if (age<= 89 )
                printf ( " ⽼年 \n" );
        else
                printf ( " ⽼寿星 \n" );
        return 0 ;
}
// 带上⼤括号更容易看明⽩
# include <stdio.h>
int main ()
{
        int age = 0 ;
        scanf ( "%d" , &age);
        if (age< 18 )
   {
                printf ( " 少年 \n" );
   }
        else if (age<= 44 )
   {
                        printf ( " ⻘年 \n" );
   }
        else  if (age<= 59 )
   {
                        printf ( " 中⽼年 \n" );
    }
        else  if (age<= 89 )
                        printf ( " ⽼年 \n" );
        else
printf ( " ⽼寿星 \n" );
return 0 ;
}

1.5 悬空else问题

如果有多个 if else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。
我们⾸先从下⾯代码开始
1 # include <stdio.h>
2 int main ()
3 {
4          int a = 0 ;
5          int b = 2 ;
6         if (a == 1 )
7          if (b == 2 )
8                  printf ( "hehe\n" );
9          else
10                 printf ( "haha\n" );
11         return 0 ;
12 }
程序运⾏的结果是啥?
很多初学者,上来以判断 a 是 0,不等于 1 ,那就执⾏ else ⼦句,打印 haha
但是当你去运⾏代码,输出的结果是:啥都不输出。
为什么呢?
这就是悬空 else 的问题,如果有多个 if else ,可以记住这样⼀条规则, else 总是跟最接近
if 匹配。
上⾯的代码排版,让 else 和第⼀个 if 语句对⻬,让我们以为 else 是和第⼀个if匹配的,当 if
语句不成⽴的时候,⾃然想到的就是执⾏ else ⼦句,打印 haha ,但实际上 else 是和第⼆个 if
进⾏匹配的,这样后边的 if...else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句就不
成⽴,嵌套 if else 就没机会执⾏了,最终啥都不打印。
如果代码改成下⾯这样就更加容易理解了
# include <stdio.h>
int main ()
{
        int a = 0 ;
        int b = 2 ;
        if (a == 1 )
{
           if (b == 2 )
                printf ( "hehe\n" );
           else
                printf ( "haha\n" );
}
        return 0 ;
}
或者如果我们希望else确实和第⼀个if匹配,可以这样修改代码:
# include <stdio.h>
int main ()
{
        int a = 0 ;
        int b = 2 ;
        if (a == 1 )
   {
                if (b == 2 )
                        printf ( "hehe\n" );
   }
else
{
printf ( "haha\n" );
}
return 0 ;
}
只要带上适当的⼤括号,代码的逻辑就会更加的清晰,所以⼤家以后在写代码的时候要注意括号的使
⽤,让代码的可读性更⾼。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值