一:C语言中的语句分类
C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实 现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种 结构的组合。
我们可以使⽤
if
、
switch
实现分⽀结构,使⽤
for
、
while
、
do while
实现循环结构。
二:if语句初识
if语句的语法如下:
1 if(表达式)
2 语句
表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行。
在C语言中,0为假,非0表示真,也就是表达式的结果如果是0,则语句不执行,表达式的结果如果是不是0,则语句执行。
例如:输入⼀个整数,判断是否为奇数
三:else语句
如果⼀个数不是奇数,那就是偶数了,如果任意⼀个整数,我们要清楚的判断是奇数还是偶数怎么表示呢?
这⾥就需要
if...else...
语句了,语法形式如下:
if
(
表达式
)
语句
1
else
例如
:
输⼊⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印数偶数。
注:在了解到if....else...语句后,我们要有两点要注意
1.有的时候我们不要else,也可以达到想要的效果,但是这种代码容易形成误解。
在上述代码,a等于三时,是指输出一个语句,还是两个语句都会输出呢?(在if语句中,如果没有大括号,它只能控制一条语句)
其实这两个代码意思是一样的,而没有else,易让人形成误解。
2.并不是所有的if后面都要有else
上述代码,初学者也许看不懂,没事,后续文章会有介绍,在这里是用来举例if可以单用。
实例练习:
输入一个年龄,>= 18岁就输出:成年,否则就输出:未成年
四:分支中包含多条语句
默认在 if 和 else 语句中默认都只控制⼀条语句,比如:
上⾯的代码,你会发现输⼊的值不管是>=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");
printf("可以交⼥朋友了\n");
}
else //else 后使⽤{}控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("未成年\n");
printf("不可以早恋哦\n");
}
return 0;
}
五:嵌套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 相当于嵌套在els语句中,形成了嵌套结构
printf("输⼊的数字是正数\n");
else
printf("输⼊的数字是负数\n");
return 0;
}
上图中else后面代码就是嵌套在前⾯的
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语句,就可以完成更多复杂逻辑的判断。
练习:
输⼊一
个⼈的年龄
1.如果年龄
<
18
岁,打印
"
少年
"
2.如果年龄在
18
岁⾄
44
岁打印
"
⻘年
"
3.如果年龄在
45
岁⾄
59
岁打印
"
中⽼年
"
4.如果年龄在
60
岁⾄
89
岁打印
"
⽼年
"
5.如果
90
岁以上打印
"
⽼寿星
"
//该方法看起来更简练
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
printf("少年\n");
else if(age<=44);//else后面的都是大于18的,所以不用再单独作为条件打出来
printf("⻘年\n");
else if(age<=59)
printf("中⽼年\n");
else if(age<=90)
printf("⽼年\n");
else
printf("⽼寿星\n");
return 0;
}
//带上大括号逻辑更清晰,不容易出错,但是看起来冗长
//对于初学者最好都带上大括号,即使只有一个语句,也加上,这样避免逻辑出错
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
{
printf("少年\n");
}
else
{
if(age<=44)
{
printf("⻘年\n");
}
else
{
if(age<=59)
{
printf("中⽼年\n");
}
else
{
if(age<=90)
printf("⽼年\n");
else
printf("⽼寿星\n");
}
}
}
return 0;
}
六:悬空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
的问题,如果有多个
if
和
else
,可以记住这样⼀条规则,
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");
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;
}
只要带上适当的大括号,代码的逻辑就会更加的清晰,所以大家以后在写代码的时候要注意括号的使用,让代码的可读性更高。
还有一个敲代码
容易犯错的地方
:
#include <stdio.h>
int main()
{
int a = 10;
if(a > 5);
printf("hehe\n");
else
printf("haha\n");
return 0;
}
大家觉得这个代码的结果是呵呵吗?
此时这个代码在vs中是无法执行的,这是为什么呢?哪里有错误码?
而将printf的语句注释以后,代码反而正确了?
这是因为if后面加了一个分号,虽然我们平时写语句后面不能忘加分号,但是在if后面加上分号,这个分号表示一个空语句,if在没大括号的情况下,只能控制那个空语句。
所以,在if else后面,如果没有空语句的需求,千万不要加分号。
对应if语句的介绍,就到这里了,如果友友们发现什么错误,或者还有什么疑问可以在评论区里发出来,下一篇文章将if语句中经常用到的一些逻辑操作符。