前言与概述:
C语言是结构化程序设计语言,结构化通常分为三种:顺序结构、分支结构、循环结构。本文章主要介绍C语言分支结构中的if条件语句。笔者不才,如有错误,欢迎各位编程大佬在评论区批评指正,吾不胜感谢。
if条件语句:
在C语言中,if条件语句有三种语法结构,接下来笔者将逐个介绍。
语法结构:
单if结构
if(条件表达式)
语句;
示例代码:
//单if语法结构
#include <stdio.h>
int main()
{
int age = 0;
printf("please enter your age on the there :\n");
scanf("%d", &age);
if (age >= 18)
printf("你已成年");
return 0;
}
运行结果:
代码分析:
当运行代码时,终端会等待你输入一个数字,如果你输入的数字大于等于18,则条件成立,输出“你已成年”。如果输入的数字小于18,则条件不成立,不进行任何操作。
If - else组合结构
If (条件表达式)
语句;
else
语句;
示例代码:
//if - else组合结构
#include <stdio.h>
int main()
{
int tall = 0;
printf("欢迎光顾游乐园!\n");
printf("请输入你的身高单位cm:\n");
scanf("%d",&tall);
if (tall <= 120)
printf("欢迎您,小朋友!你可以免费游玩!");
else
printf("对不起,你的身高不符合要求,需要额外买票!");
return 0;
}
运行结果:
代码分析:
当运行代码时,终端会提示你输入身高。如果你输入的数字小于等于120,条件成立,就会进入if语句语句块中,输出"欢迎您,小朋友!你可以免费游玩!",如果你输入的数字大于120,则条件不成立,就会进入else语句,输出"对不起,你的身高不符合要求,需要额外买票!"。
总之:if后的括号里放的是条件,条件成立,就进入if语句,条件不成立,就进入else语句。
多分支条件语句
if (条件表达式)
语句;
else if(条件表达式)
语句;
else if(条件表达式)
语句;
……
else
语句;
示例代码:
//多分支选择语句
#include <stdio.h>
int main()
{
int score = 0;
printf("please enter your score on the there:\n");
scanf("%d", &score);
if (score == 100)
printf("unbelievable !");
else if (score < 100 && score >= 90)
printf("wonderful !");
else if (score < 90 && score >= 80)
printf("good !");
else if (score < 80 && score >= 70)
printf("not bad !");
else
printf("come on !");
return 0;
}
运行结果:
代码分析:
多分支语句,就是有多个条件的选择语句。运行代码时,控制台会等待你输入一个数字。如果你输入的是100,则满足第一个条件,输出“unbelievable!”。如果你输入的数小于100并且大于等于90,则满足第二个条件,输出“wonderful!”。如果你输入的数小于90并且大于等于80,则满足第三个条件,输出“good!”。如果你输入的数小于80并且大于等于70,则满足第四个条件,输出“not bad!”。如果你输入的数字小于70,以上四种条件都不满足,就只好进入else语句,输出“come on!”。
注意:在多分支语句中,if和else if 都是需要判断条件的,而else是不需要判断条件的。
拓展补充:
多输出语句if - else:
情景模拟:
未成年人不可以进入网吧!设计一个程序,通过用户输入的年龄,来判断用户是否能进入网吧。如果用户年龄小于18岁,就输出“抱歉,你不能进入网吧”。
错误示例:
错误原因:
当用户输入20,表明他已经成年,那按常理应该可以进入网吧呀!之所以输出“抱歉,你不能进入网吧”,是因为默认情况下,if和else默认最多只能管一条语句,那么printf("抱歉,你不能进入网吧!\n");这条语句就不属于else语句管,成为一条无论条件满足不满足都必须执行的语句。
修改建议:
我们可以在else后加入花括号{},将后面两条语句框起来,这样后面两条语句都属于else管啦!
示例代码:
//判断用户能否进入网吧
#include <stdio.h>
int main()
{
int age = 0;
printf("请输入你的年龄:\n");
scanf("%d", &age);
if (age >= 18) {
printf("你已成年!\n");
printf("欢迎光临本店!\n");
}
else {
printf("你未成年!\n");
printf("抱歉,你不能进入网吧!\n");
}
return 0;
}
运行结果:
悬空else:
试着推算下列代码运行的结果:
//悬空else
#include <stdio.h>
int main()
{
int age = 20;
if (age < 18)
if (age <= 12)
printf("小朋友,你可以享受半价买票!");
else
printf("抱歉,你需要全价买票!\n");
return 0;
}
A:小朋友,你可以享受半价买票!
B:抱歉,你需要全价买票!
C:无输出结果
D:代码错误,无法运行
答案:C,在本题中b选项是易错选项。因为else与if对齐,容易误以为else是第一个if条件不成立执行的语句,实际上在C语言中,else属于离它最近的if语句。所以这个else属于第二个if条件语句不成立执行的语句。因为第一个条件不成立,所以并不会执行语句块。故无输出结果。当然,我们可以通过使用花括号,确定else匹配哪个if语句。
示例代码:
//嵌套if-else语句
#include <stdio.h>
int main()
{
int age = 20;
if (age < 18)
{
if (age <= 12)
{
printf("你好,小朋友!你可以免费游玩!\n");
}
else
{
printf("你好,你可以享受学生专属优惠:八折购票!\n");
}
}
else
{
printf("你已经成年,需要全价购票.\n");
}
return 0;
}
花括号的使用,会让不同else与if的匹配关系一目了然,增强代码的可读性,也会让代码显得更加整洁、美观。当然,这也是很好的编程习惯。
return是函数结束的标志
判断这两串代码运行结果是否相同?
//代码一
#include <stdio.h>
int main()
{
int number = 6;
if (number > 5)
return number;
printf("good!");
return 0;
}
//代码二
#include <stdio.h>
int main()
{
int number = 6;
if (number > 5) {
return number;
}
else
{
printf("good!");
}
}
答案:运行结果相同,在C语言中,return是函数结束的标志,代码一和代码二:条件成立,返回变量number的值,main函数就结束了,不会执行其它语句.
运行结果:
等于比较时,常数放在前
让我们看一串代码:
由运行结果可以看出,这串代码无论你输入什么数字,最后输出结果都是”刚满18岁!“。这是为什么呢?究其原因,还得从if语句判断语句块是否执行的背后逻辑谈起:C语言中,0表示假,非零表示真。在if语句中,如果条件表达式计算的结果是0,则条件不成立。例如,如果将6<4作为条件表达式,那么计算的结果就是0,条件不成立,语句块不执行。反之,在if语句中,如果条件表达式计算的结果非零,则条件成立,执行语句块。在本例题中,笔者不小心少写一个“=”,将比较大小的相等运算符“==”写成赋值运算符“=”。故程序运行出现bug。并且由于编译器不会对该行代码报错,所以该bug藏得悄咪咪的,很难被发现。修改这行代码很简单,只需要在条件表达式里再加一个等号即可。但笔者有一妙计,还望君听我慢慢道来。
在条件表达式中,将常量放在前面,因为常量不可被修改,如果不小心少敲一个“=”。编译器就会报错,并强制要求你修改代码。这样就再也不用担心少加“=”导致bug出现啦!
废话不多说,上代码:
#include <stdio.h>
int main()
{
int age = 0;
printf("请输入你的年龄:\n");
scanf("%d", &age);
if (18 == age)
{
printf("刚满18岁!\n");
}
else if (age > 18)
{
printf("你已经成年!\n");
}
else
{
printf("宝宝,你还没成年!\n");
}
return 0;
}
笔者有话说
感谢你这么耐心看完这篇文章,你辛苦啦!笔者要给你点一个大大的赞👍,相信你也收获了不少知识,如果你感觉本文章对你有帮助,点个赞,再走吧!关注我,下期内容更精彩!