3.c语言的分支和循环

if语句

1. if的概念及使用

if语句的语法形式如下:

1   if(表达式) //根据自己的需要来设定,用来判断真假
2       语句

表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏。
在C语⾔中,0为假,⾮0表⽰真,也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果是非0,则语句执⾏。
例:输⼊⼀个整数,判断是否为奇数

#include <stdio.h> 
int main() 
{     
    int num = 0;     //赋值
    scanf("%d", &num); 
    if(num % 2 == 1)  //用来判断num除以2的余数是不是等于1
         printf("%d 是奇数\n", num); //如果等于1则打印,不等于1就不打印
     return 0; 
}
2. else

如果⼀个数不是奇数,那就是偶数了,如果任意⼀个整数,我们要清楚的判断是奇数还是偶数怎么表⽰呢?
这⾥就需要if...else... 语句了,语法形式如下:

1  if ( 表达式 )
2  语句1 
3  else  //如果判断if表达式是假,则else输出为真,如果if是真,则else不起作用
4  语句2

例⼦:输⼊⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印数偶数。

#include <stdio.h> 
int main() 
{
    int num = 0; 
    scanf("%d", &num);
    if (num % 2 == 1)
        printf("%d 是奇数\n", num); //如果if判定为真则直接输出,如果为假则在下面再进行判定
    else
        printf("%d 是偶数\n", num); //如果if判定为假,则这里输出为真
    return 0; 
}
3. 分支中包含多条语句

默认在ifelse语句中都只控制一条语句,比如:

#include <stdio.h> 
int main() 
{     
    int age = 0;     
    scanf("%d", &age); 
    if(age >= 18)  //判定age是否大于等于18
        printf("成年了\n");  //if语句默认只控制这一条语句
        printf("可以谈恋爱了\n");  //这条不受if语句控制,可以直接打印
    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");    //如果 if 为真则这两条语句都打印
        printf("可以交⼥朋友了\n");    
      }    
      else    //else 后使⽤{}控制多条语句-这个块也叫:程序块,或者复合语句    
      {        
        printf("未成年\n");   //如果 if 为假则打印这两条语句
        printf("不可以早恋哦\n");    
    }    
         return 0; 
}
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代码后面的if就是嵌套在前⾯的 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语句的语法,有了嵌套if语句,就可以完成更多复杂逻辑的判断。

5. 悬空else问题

如果有多个if else ,可以记住这样⼀条规则,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;
}

很多人,上来就判断 a 是0,不等于1,那就执⾏ else ⼦句,打印haha 但是当你去运⾏代码时,结果为空白。
为什么呢?
这就是悬空 else 的问题,如果有多个 ifelse ,可以记住这样⼀条规则,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");    //第二个if语句和else语句被嵌套在第一个if语句里
         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;
}

只要带上适当的⼤括号,代码的逻辑就会更加的清晰,所以⼤家以后在写代码的时候要注意括号的使 ⽤,让代码的可读性更⾼。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九晴很帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值