C语言中的if语句、关系操作符、条件操作符、逻辑操作符

一.if语句:

我们通常在C语言中使用if、switch实现分支结构。

if语句的基本知识:

1.if语句的语法形式如下:   1.if(表达式)

                                             2.      语句;

2.if语句只能控制一条语句并且if语句后面不能加;

二.else :

1.如果判断的不只是一种情况,那么此时我们就需要使用if……else语句,语法形式如下:

                             1.if(表达式)

                              2.       语句1;

                             3.else

                             4.         语句2;

举个例子帮助宝汁们理解一下:输入一个整数,判断是否为奇数,如果是奇数打印结果为奇数,否则打印结果是偶数。 

注:if和else语句中默认都只能控制一条语句。 

在该例子中,尽管年龄5岁,依然可以输出“可以学车了”,这是因为if语句只能控制一条语句,就是printf(“成年了\n“),if语句为真则打出成年了,if语句为假则不打出。对于printf(”可以学车了\n”)是独立存在的,不管if语句为真为假都会被执行。

如果我们使用大括号{}将其括起来,if可以控制多条语句,这个也叫做程序块或者复合语句。 

2.悬空else问题:

如果有多个if和else,可以记住,else总是跟最接近的if匹配。 

#include <stdio.h>
int main()
{
   int a=0;
   int b=2;
   if(a==1)
      if(b==2)
      printf("haha\n");
   else
      printf("hehe\n");
   return 0;
}
     

大家猜猜输出结果是什么呢?很多人会认为输出的结果是hehe,因为if(a==1)为假所以else,但其实else匹配的是if(b==2),这样形成的if……else语句嵌套在第一个if语句中,但是两者没有对齐,所以最后什么都不输出,可以将其代码做一下修改。

#include <stdio.h>
int main()
{
   int a=0;
   int b=2;
   if (a==1)
   {
     if b=2
        printf("haha\n");
    }
    else
    printf("hehe\n");
    return 0;
}

      

只要带上适当的大括号,代码的逻辑就会更加清晰。 

三.关系操作符: 

1.zhuyi关系表达式是C语言中比较常用的表达式,里面使用的运算符称为 “关系操作符”。

关系运算符包括:>、<、>=、<=、==、!=分别称为大于、小于、大于等于、小于等于、等于、不等于。

注:关系表达式通常返回值是0或者1,表示真假。在C语言中,0表示假,所有非零值表示真,但是一般默认值为1。

  相等运算符==与赋值运算符=是两个不一样的运算符,不能混淆。

在该例子中“age=3”表示把3赋给变量age,它的返回值是3,所以if的判断永远为真,无论输入什么值都会成功输出。为了防止这种错误,我们在写相等关系式的时候通常把变量放在等号右边,此时如果写成赋值运算符,编译器会自动报错。

注:多个关系运算符不能连用,例如:i<j<l,因为在此例子中,连续使用两个一样的关系运算符是没有错,但是通常有时不会得到自己想要的结果,因为关系运算符的计算是从左到右,所以执行时等同于(i<j)<l,如果i<j的返回值是0或1,所以最终该式子是0或1与l的比较。 

例子:我们输入一个年龄,如果年龄在18~36之间,我们输出青年。 

这个错误示范中,无论你输入任何值,最后都会输出青年,因为age先和18比较,返回值是0或1,最后与36比较,返回值都是1,所以输出青年。 

四.条件操作符:

条件操作符也叫三目操作符,需要接受三个操作数,形式例如:exp1?exp2:exp3

条件操作符的计算逻辑是,如果exp1为真,则计算exp2,而exp2的计算结果就是整个表达式的结果,如果exp1为假,那么计算exp3.exp3的计算结果就是整个表达式的计算结果。 

例子:使用条件表达式实现找出两个数中较大值或者较小值。

#include <stdio.h>
int main()
{
   int a=0;
   int b=0;
   scanf("%d %d",&a,&b);
   int m=a>b?a:b;
   printf("%d\n",m);
   return 0;
}

五.逻辑操作符: 

逻辑运算符提供逻辑判断功能,用于构建复杂的表达式,主要有下面三个运算符:!逻辑取反运算符、&&与运算符、||或运算符。 

1.逻辑取反运算符,主要用于改变单个表达式的真假。 

#include <stdio.h>
int main()
{
  int a=0;
  if(!a)
     printf("do it");
  return 0;
}

如果a为真,!a为假,如果a为假,!a为真,此代码的意思就是当a为假时,执行if语句中的代码。  

2.与运算符: 

&&就是与运算符,也是并且的意思,&&是一个双目操作符,只有两个操作数均为真时,表达式才为真,有一个为假,那么整个表达式的值均为假。 

例如;如果我们说三月到五月是春天,用代码如何表示呢? 

    

#include <stdio.h>
int main()
{
  int month=0;
  scanf("%d",&month);
  if(month>=3 &&month<=5)
     printf("spring");
  return 0;
}

3.或运算符:

||就是或运算符,也是一个双目操作符,两个操作数中有一个为真,表达式值为真,两个同时为假表达式值为假。 

比如:我们说月份是十二月或者一月或者二月是冬天,用代码如何表示呢?

#include <stdio.h>
int main()
{ 
  int month=0;
  scanf("%d",&month);
  if(month==12 || month==1||month==2)
    printf("winter");
  return 0;
}

 补充 :短路

C语言逻辑运算符还有一个特点,他总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是不变的。如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值,这种情况称为“短路”。像仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进行计算的运算称为短路求值。

例如:

 对于&&操作符来说,如果左边操作数的结果没有0时候,则继续向右操作计算,如果左边操作数有0,则右边操作数停止。

 

在||操作符中,如果month==12,则不再继续判断右边两个操作数,整个表达式的结果就是winter。 

 

例子:判断是否为闰年

 

 

 

 

 

 

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值