一.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。
例子:判断是否为闰年