c语言是一门具有结构化的语言,其中“结构”指的是顺序结构、选择结构、循环结构。今天让我来总结分支与循环结构,我们可以用if、switch实现分支结构,使用for、while、do-while实现循环结构。
if语句
1.1 if
1 if(表达式)
2 {
3 }
其中表达式是用来判断if下面语句能否执行。表达式成立(为真),则语句执行;表达式不成立(为假),则语句不执行。
对于真假的判断,0为真,非0为假。
下面我们给出一个简单的例子:
1#include <stdio.h>
2int main()
3{
4 int a = 0,b = 1;
5 if(a == 0)
6 {
7 b++;
8 }
9 printf("%d",b);
10 return 0;
11 }
该代码的运行结果是2,其中a初始化为0,满足if语句,执行b++,则b = 2,于是打印写出来2。
1.2 else
如果上述例子a不等于0呢?我们如果想要进行a不为0的其他操作,这就需要与if相配对的else来解决。即使用下列语句
1 if(表达式)
2 语句
3 else
4 语句
例子:输入一个年龄,>=18岁就输出:成年,否则就输出:未成年。
1#include <stdio.h>
2int main()
3{
4 int age = 0;
5 scanf("%d", &age);
6 if (age >= 18)
7 {
8 printf("成年\n");
9 }
10 else
11 {
12 printf("未成年\n");
13 }
14 return 0;
15}
需要注意的是:如果if下面需要执行的语句有两条即以上,则需要用大括号{}括起来,一条语句的时候不需要。
如果分支情况大于2种,则需要用到
if(表达式)
语句
else if(表达式)
语句
else
表达式
1.3 悬空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;
}
许多新手看到下面的else与第一个if对其,就认为else与第一个if配对,就要输出haha,实则什么也不输出。
操作符
2.1 关系操作符
c语言中用于比较的表达式,称为“关系表达式”,里面使用的运算符就称为“关系运算符”,主要有下面6个:
*<小于运算符
>=大于等于运算符
<=小于等于运算符
==等于运算符
!=不相等运算符
值得注意的是在c语言中的等于是“==”,赋值时“=”,这与我们平时用的不同。
这是新手常犯错误。
关系表达式通常返回 0 或 1 ,表示真假。返回表示真假通常用于上面所说的if语句或while语句。
另一个需要避免的错误是:多个关系运算符不宜连用
1 i<j<k
上述例子中,连续用两个小于运算符,不会报错,但是通常达不到想要的结果。
因为关系运算符是从左到右进行计算,所以实际执行下面的表达式:
1 (i<j) < k
上述式子中,i < j 返回0或1,所以最终是0 或 1与k比较,达不到理想的效果。如果想要判断 j 的值是否在 i 和 k 之间,可以用下面写法:
1 i < j && j < k
//&&是并且的意思。
以上便是关系操作符,只需按照字面意思使用即可。
2.2 逻辑操作符
逻辑操作符提供逻辑判断能力,用于构建更复杂的表达式,主要有下面三个运算符:
!:逻辑取反运算符(改变单个表达式的真假)*
&&:与运算符,就是并且的意思(两侧的表达式都为真才为真,否则为假)*
||:或运算符,就是或者的意思
练习:闰年的判断:
闰年的判断规则:
1.能被4整除并且不能被100整除是闰年
2.能被400整除是闰年
#include <stdio.h>
//代码1
int main()
{
int year = 0;
scanf("%d", &year);
if (year % 4 == 0 && year % 100 != 0)
printf("是闰年\n");
else if (year % 400 == 0)
printf("是闰年\n");
return 0;
}
//代码2
int main
{
int year = 0;
scanf("%d",&year);
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
printf("是闰年\n");
return 0;
}
2.3 短路
c语言逻辑运算符还有一个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个情况称为“短路”
例如:
1 if(month>=3 && month<=5)
当&&左操作数返回值为0时,右操作数就不会执行。
像这种仅仅根据左操作数就能知道整个表达式的结果,不再对右操作值进行计算的运算称为短路求值。
谢谢观看!