【分支与循坏 (二)】

一、关系操作符

>大于运算符
< 小于运算符
>=大于等于运算符
<= 小于等于运算符
== 相等运算符
!= 不相等运算符

关系表达式通常返回 0 或 1 ,表示真假,0是假,1是真。

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

错误的写法,会让程序有错误的输出:

if(x = 4

表达式本意是x==4但是写成x=4就是把4赋值给了x,所以if判断总是真的。

当然,有些程序员为了防止这样的错误,常常这样写:

if (4 == x)

上面的写法,如果只写一个等号,即if (4 = x)就会报错。

多个关系运算符不宜连用

下面的写法,虽然可以,不会报错,但是通常不会出现我们想要的结果:

x>y>z

我们可以这样写(x>y)>z 关系运算符是从左到右计算

来个例子,我们规定10~20岁输出青年:

# include
int main()
{
  int a;
  scanf("%d",&a);
  if(10<=a<=20)
    {
      printf("青年\n");
     }
}

此时,我们输入9,输出的结果依然是青年,出现这个现象的原因是,10<=a,a=9,所以这个是假,即为0,0<=20是真,所以打印出了青年,即使是9,也可以打印出,这个存在逻辑上是有问题的。

正确写法:

# include
int main()
{
  int a;
  scanf("%d",&a);
  if(10<=a&&a<=20)
    {
      printf("青年\n");
     }
}

此时输出的结果才是正确的,输入9,不会再输出青年

二、条件操作符(三目操作符)

需要接受三个操作数的。

例子:

xx1 ? xx2 : xx3

如果xx1为真,xx2计算;如果xx1为假,xx3计算,计算的结果是整个表达式的结果。

例如,可以用条件表达式,找两个数中的最大值

正常写法:

#include
int main()
{
	int a = 0, b = 0;
	scanf("%d%d", &a, &b);
	if (a > b)
		printf("%d", a);
	else
		printf("%d", b);
	return 0;
}

用条件表达式:

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

输入:2 3
输出的结果都是3。(两个程序)

三、 逻辑操作符:&& , || , !

! :逻辑取反运算符(改变单个表达式的真假)。

【分支与循坏 (二)】_第1张图片
例子:
比如现在有一个变量arr,arr是假的

# include
int main()
{
	int arr = 0;
	if (!arr)
		printf("hello mom\n");
	return 0;
}

! arr为真,所以执行下面的语句,所以输出hello mom

&& :与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。

【分支与循坏 (二)】_第2张图片
&& 两边的表达式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假。

例如我们说18~20岁是青年:

#include
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age>=18&&age<=20)
		printf("青年\n");
	return 0;
}

这里是指必须同时满足age大于等于18,小于等于20岁,才会输出 青年。

|| :或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。
注:C语言中,非0表示真,0表示假

【分支与循坏 (二)】_第3张图片

||两边的表达式只要有⼀个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。

比如,我们说58,59或60岁步入老年

# include
int main()
{
	int age;
	scanf("%d", &age);
	if (age == 58 || age == 59 || age == 60)
		printf("步入老年\n");
	return 0;
}

四、短路

C语言有一个特定的顺序:先对左侧的表达式求值,再对右边的表达式求值。

如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为 “短路”。

例如:
对于 &&:
age>=18&&age<=20,左操作符是age>=18,右操作符是age<=20,如果做操作符是0,即使不去判断右操作符,结果也是 0。

对于||:

if (age == 58 || age == 59 || age == 60)

如果输入age=58就无须判断后面的,整个表达式的结果就是 1(步入老年)

所以, || 操作符的左操作数的结果不为0时,就⽆需执行右操作数。

你可能感兴趣的:(c语言)