重生之我在博客学C语言if语句

前言与概述:

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;
}

 笔者有话说

感谢你这么耐心看完这篇文章,你辛苦啦!笔者要给你点一个大大的赞👍,相信你也收获了不少知识,如果你感觉本文章对你有帮助,点个赞,再走吧!关注我,下期内容更精彩!

  • 36
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值