C语言(7)------------>if语句

C语言有三大结构,选择结构是其中的一种,实现选择结构通常需要使用到if语句和else语句,这篇文章将对if语句和else语句的使用进行介绍。并介绍一些编程习惯和if语句的一些细节问题。

1.if语句的初阶使用

最简单的if语句就是使用if(表达式),表达式的值为0时不执行if后面的语句;如果为非0值则执行语句。

参考代码:

#include <stdio.h>

int main()
{
	int a = 3;
	if (a)
	{
		printf("优快云\n");
	}
	return 0;
}

在VS2019的运行结果:

参考代码:

#include <stdio.h>

int main()
{
	int a = 0;
	if (a)
	{
		printf("优快云\n");
	}
	return 0;
}

在VS2019的运行结果:

 那如果学会了,那我们来一个练习:

实现使用键盘输入一个数字,判断它是否为偶数。

参考代码:

//练习:输入一个数字,判断它是否为偶数
#include <stdio.h>

int main()
{
	int num = 0;
	scanf("%d",&num);
	if (num % 2 == 0)
	{
		printf("%d是偶数\n",num);
	}
	return 0;
}

在VS2019的运行结果:

1.2if与else语句的结合

从1.1中的练习我们提及到,使用scanf函数输入一个数字后,判断它是否为偶数。但是我们知道如果不是偶数,程序也没有显示xx不为偶数,也就是偶数。那我们怎么实现这个呢?这里就要用到else语句。即if语句和else语句相结合。

例子:输入一个数字,区分它是偶数还是奇数。

参考代码:

#include <stdio.h>

int main()
{
	int num = 0;
	scanf("%d",&num);
	if (num % 2 == 0)
	{
		printf("%d是偶数\n",num);
	}
	else
	{
		printf("%d是奇数\n",num);
	}
	return 0;
}

在VS2019的运行结果:

在使用if与else结合的语句中,我们可能会有时候遇到以下这种情况:

#include <stdio.h>

int main()
{
	int a = 10;
	if (a > 5)
		printf("hehe\n");
	else
		printf("haha\n");
	return 0;
}

这一段代码的作用是一个数如果大于5就打印hehe,如果小于5就打印haha。很明显,上述代码的运行结果应该是hehe.

 在VS2019的运行结果:

这个代码这么简单,那为什么要讲这个代码呢?原因是初学者会出现一些小问题:

比如这样:

此处错误代码:

#include <stdio.h>

int main()
{
	int a = 10;
	if (a > 5);
		printf("hehe\n");
	else
		printf("haha\n");
	return 0;
}

 在VS2019的运行结果:

原因是:我们在if(a>5)后面加上了一个分号后。初学者很容易在此处后面加上一个分号。此时如果加上分号,相当于这样:

相当于if后面有了一个空语句,然而它的后面还有一个printf函数,else无法与之匹配对应,所以出现了错误。加上分号后,if语句控制的就是这一个空语句。

那如果看明白了,那我们来一个练习:

练习:输入一个年龄,如果大于等于18岁,在屏幕输出成年;如果小于18岁,在屏幕上输出未成年。

参考代码:

#include <stdio.h>

int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
	{
		printf("成年\n");
	}
	else
	{
		printf("未成年\n");
	}
	return 0;
}

在VS2019的运行结果:

1.3如何输出分支中的多条语句 

在C语言中,if语句和else语句都是默认控制1条语句。那如果我们要控制多条语句呢?什么意思?

我们来看看生活中的一些例子和情况:

我们知道成年是18岁,成年后可以报考驾驶证;小于18岁,那就是未成年也就是不可以报考驾驶证。(至少现在大部分地区是这样)对于这个例子,如果大于等于18岁,在屏幕的第一行打印成年,第二行打印未成年,之前的博客中提到了\n换行符可以在printf函数第一个参数格式化字符串中可以使用:这个方法可以参考我之前写的博客:C语言(5)--------->printf函数 优快云

那这个怎么实现呢?

参考代码:

#include <stdio.h>

int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
	{
		printf("成年\n可以考驾照\n");
	}
	else
	{
		printf("未成年\n不可以考驾照\n");
	}
	return 0;
}

在VS2019的运行结果:

那如果我不想使用两个换行符呢?因为两个换行符可能让一些人看上去不太美观?而是使用两个printf函数呢?那是直接第一个printf函数的下面再使用一个printf函数吗? 

为了简单化,我们先只输出成年的部分:也就是使用两个printf函数,分别在屏幕上的第一行打印:成年,屏幕上的第二行打印:可以考驾照。如何做呢?

下面这一段代码可以吗?

参考代码:

#include <stdio.h>

int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
		printf("成年\n");
	    printf("可以考驾照\n");
	return 0;
}

在VS2019的运行结果:

这个的运行结果好像不对诶,难道是编译器的结果是错的?有怀疑精神很好,但是这里的编译器没有出错。而是我们想错了。实际上,在不加上{}之前,if语句和else语句只能控制一条语句,想要控制多条语句需要使用{}。

当我们在if语句后两个printf函数的时候, 在VS2019中的代码是这样的:

其实VS2019这个IDE已经给我们处理好了编程的格式。在这里我想给大家一个建议,在学习C语言的时候,我们的IDE选择是非常重要的,如果此代码放在DevC++中不一定会有这个提示,在某些情况下我们的代码运行结果和我们想的是一样的时候,实际的代码逻辑并非我们想的那样。一个好的IDE会让我们降低部分学习障碍。

那正确的写法相信聪明的你应该知道了:就是把这两条语句放进一个{}中

参考代码:

#include <stdio.h>

int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
	{
		printf("成年\n");
		printf("可以考驾照\n");
	}
	return 0;
}

在VS2019的运行结果:

那我们现在回到本节最开始的问题:

 成年是18岁,成年后可以报考驾驶证;小于18岁,那就是未成年也就是不可以报考驾驶证。

参考代码:

#include <stdio.h>

int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
	{
		printf("成年\n");
		printf("可以考驾照\n");
	}
	else
	{
		printf("未成年\n");
		printf("不可以考驾照哦\n");
	}
	return 0;
}

在VS2019的运行结果:

1.4if语句的嵌入

在读七年级的时候,我们学习了正数和负数的区分,我们知道0既不是正数也不是负数。那如果在C语言中我们输入一个数后,它大于0,我们返回正数;小于0返回负数;等于0返回0。怎么实现呢?

前面提到的if-else语句只能解决两个,是与不是。这个问题明显有三个分支,那怎么去做呢?这里就要用到if-else if-else这种语句:

参考代码:

#include <stdio.h>

int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num == 0)
	{
		printf("%d\n",num);
	}
	else if(num>0)
	{
		printf("正数\n");
	}
	else
	{
		printf("负数\n");
	}
	return 0;
}

在VS2019的运行结果:

在我们国家,成年是18岁,男性的法定结婚年龄是22岁。那现在我们要求输入一个年龄:

若大于等于18岁小于22岁,打印:成年但是不能结婚

若大于等于22岁,打印:成年可以结婚

若小于18岁,打印:未成年不可以结婚

我们可以这样写:

参考代码:

#include <stdio.h>

int main()
{
	int Male_age = 0;
	scanf("%d", &Male_age);
	if (Male_age >= 18)
	{
		if (Male_age >= 22)
			printf("成年可以结婚\n");
		else
			printf("成年但是不能结婚\n");
	}
	else
	{
		printf("未成年不可以结婚\n");
	}
	return 0;
}

在VS2019的运行结果:

上面这种if语句的大括号里面又嵌入了if-else语句就是if语句的嵌入 。

我们还可以写成:

使用if-else if-else的语句结果

参考代码:

#include <stdio.h>

int main()
{
	int Male_age = 0;
	scanf("%d", &Male_age);
	if (Male_age >= 18&& Male_age < 22)
	{
		printf("成年但是不能结婚\n");
	}
	else if (Male_age >= 22)
	{
		printf("成年可以结婚\n");
	}
	else
	{
		printf("未成年不可以结婚\n");
	}
	return 0;
}

在VS2019的运行结果:

有了if嵌套语句后,我们可以实现更加复杂的结构。 

练习: 

输入一个人的年龄,如果:

小于18岁,屏幕打印的内容是:少年

年龄大于等于18岁并且小于等于44岁,屏幕打印的内容是:青年

年龄大于等于45岁并且小于等于59岁,屏幕打印的内容是:中老年

年龄大于等于60岁并且小于等于89岁,屏幕打印的内容是:老年

年龄大于等于90岁,屏幕打印的内容是:老寿星

参考代码:

#include <stdio.h>

int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
		printf("少年\n");
	else if (age >= 18 && age <= 44)
		printf("青年\n");
	else if (age >= 45 && age <= 59)
		printf("中老年\n");
	else if (age >= 60 && age <= 89)
		printf("老年\n");
	else
		printf("老寿星\n");
	return 0;
}

在VS2019的运行结果:

除了用多个的else if语句之外,我们还可以使用if语句的嵌套。

参考代码:

#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 <= 89)
					printf("老年\n");
				else
					printf("老寿星\n");
	return 0;
}

在VS2019的运行结果:

在这里我们就要提到一种编程习惯了,编程其实也是一种艺术,给人观看时应该是赏心悦目的感觉。在这里我们为了代码更加方便阅读,可以加上{},加上{}后更能方便人们的阅读。 那修改后的代码应该是这样的。

参考代码:

#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 <= 89)
				{
					printf("老年\n");
				}
				else
				{
					printf("老寿星\n");
				}
					
			}
		}
	}
	return 0;
}

在VS2019的运行结果:

1.5悬空else的问题

 悬空else的问题是学习C语言的过程中一个非常经典的问题,它是什么意思呢?

若多个if和else共同使用时,else总是与最近的if相匹配。

参考代码:

请问下面的代码的输出结果是什么呢?会是no吗?

#include <stdio.h>

int main()
{
	int a = 2;
	int b = 3;
	if (a == 1)
		if (b == 3)
			printf("yes\n");
	else
		printf("no\n");
	return 0;
}

在VS2019的运行结果:

为什么运行结果是什么都没有呢?

原因是:在输入上述代码之后,其实是这样的:

VS2019这个开发工具很聪明,else自动和它最近的if进行匹配了。那第一个if其实是控制了第二个if一直到第一个printf函数分号的位置(原因C语言是一个分号为一句话,而if在不加括号的情况下只能控制一条语句也就是一句话)。

那为了方便理解,我们应该如何修改代码呢?

参考代码:

#include <stdio.h>

int main()
{
	int a = 2;
	int b = 3;
	if (a == 1)
	{
		if (b == 3)
			printf("yes\n");
		else
			printf("no\n");
	}
	return 0;
}

在VS2019的运行结果:

如果我们要else与第一个if进行匹配,应该怎么做呢?加上大括号{}即可。 

参考代码:

#include <stdio.h>

int main()
{
	int a = 2;
	int b = 3;
	if (a == 1)
	{
		if (b == 3)
			printf("yes\n");
	}
	else
	{
		printf("no\n");
	}
	return 0;
}

在VS2019的运行结果:

在一些初学者刚开始学习编程时会出现下面的情况:

 对于大多数人来说,上面的的代码给人的感觉时是非常不好的。我们应当避免这种编程代码的书写。

这个地方给了我们什么提示呢?

1.在编程时,我们适当使用大括号会使得我们的代码的逻辑更加清晰。

2.代码的可读性是非常重要的。

3.选择一个好的开发工具是很重要的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值