C语言中重要的分支与循环(if,switch,while,do while ,for)它他她来

前言

    大家好啊,小编又又又来啦,今天我们来聊聊分支与循环。分支与循环是什么呢?其实在我们日常生活中是随处可见的,可以说世界没有这个东西是多了几分不规范,少了几分效率。
    实现呢,C语言是一门结构化的程序设计语言,这里的结构化指的是:顺序结构,选择结构,循环结构。C语言是能够实现这三种结构的,仔细分析,日常生活中所见的事情都可以拆分为这三种结构或者是三种结构的组合。
    我们可以使⽤ if 、 switch 实现分⽀结构,使⽤ for 、 while 、 do while 实现循环结构。

分支语句

if语句

   首先我们来聊一聊if语句,可能大家看着有点奇怪,什么是if语句呢,其实很好理解的,if语句其实就是我们生活中的如果,那么,否则。在C语言中使用的频率还是蛮高的。
   我们来看一看if语句的语法吧

if (表达式)
{
	语句
}

if语句中,表达式成立为真,语句执行,表达式不成立为假,则语句不实行。在C语言中,0为假,非零为真,也就是说表达式的结构如果是0,则语句不执行,若表达式的结果不是0,这语句执行。在这里插入图片描述

   代码中num= 20;不等于0为真,则运行代码printf(“hahaha”),其中的printf(“hahaha”)就是语法中的语句。我们再看另外一个代码在这里插入图片描述
   代码中表达式是1 == 2;在C语言中两个等于号连用才是代表我们所说的等于,一个等于号代表赋予,表达式1 == 2 ,1等于2吗?答案是否定的,那就说明表达式不成立,就是为假,不执行printf(“hahaha”)。

   咱们用上面学的if来写个代码用于判断一个数字,是否为奇数
在这里插入图片描述
大家看看能不能理解。
在这里插入图片描述
   那大家来看看这个代码,1不等于2啊,为什么printf语句被执行了,可能有人会说:小编前面肯定是讲错了,小编没有学到位。哈哈哈当然不是这样的,小编可是有认真在学的,大家注意看代码和前面的代码有什么区别,大家会发现,前面的if()后面没有“;”但是后面的代码if语句后面有,难不成就是这个的原因?答案是正确的,问题就是出在这里。
   在C语言中if执行的是空语句,表达式为真语句执行,表达式为假语句不执行,但是if()后面加上“;”之后,if就没有办法控制后面的语句,加上“;”后,语句和语句之间就没有直接联系了。

else语句

   刚才我们写的代码用于判断一个数是否是奇数,但是一个数不是奇数就是偶数啊,那此时我们想写一个代码,判断一个数是奇数就输出是奇数,是偶数就输出偶数,这个代码应该怎么写呢?
   这个时候我们就要了解一个新的语句了。else,这个语句应该怎么用呢?我们来看看它的语法

if ()
	{
		语句
	}
else
	{
		语句
	}

   由语法我们可以看出else是于if连用的,那它的作用是什么?它其实相当于我们生活中的”否则“为什么这么说呢,我们来看看else应用于代码中的结果就会知道了。
在这里插入图片描述
在这里插入图片描述

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

   大家看到了吧,代码翻译一下就是,如果num是奇数,就输出奇数,否则输出偶数,大家可以那代码去运行看看。
   现在在来看看这个代码,输出的结果是什么呢?

int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
		printf("可以谈恋爱了\n");
		printf("成年了\n");
	else
		printf("不可以谈恋爱了\n");
		printf("没有成年\n");
	return 0;
}

   大家会不会认为当age等于或者大于18的时候,输出结果就是“可以谈恋爱了”,“成年了”,那是不是这样呢?我们来运行代码看看在这里插入图片描述
   哦豁,出错了,这是为什么呢?这就不得不说到if和else的作用范围了,一般默认情况下,if语句后面只能跟一条语句,else亦是如此。那可不可以加入多条语句呢?当然是可以的,我们只需要将if语句,else后面的语句用大括号括起来就好了。

int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
	{
		printf("可以谈恋爱了\n");
		printf("成年了\n");
	}
	else
	{
		printf("不可以谈恋爱了\n");
		printf("没有成年\n");
	}
	return 0;
}

在这里插入图片描述
   大家看,这不就实现了多条语句实现。

嵌套if

   在日常生活中可能会遇到不仅仅只有两种结果的情况,比如:星期一要考试,星期二要跑步,星期三要学习等等,C语言中的if也是可以实现的。怎么实现呢?我们需要先了解嵌套if,就是在C语言if语句中,else可以与另外一个if联用,并且连用的if次数没有限制。光说不练假把式,我们来上一个代码看看。

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

   在不就做到了,num == 0就输出0,大于0就输出正数,小于0就输出负数,是不是很方便啊哈哈,但是小编觉得这样写的代码好丑,大家有没有这样的感觉,那还能不能优化一下让它好看一点呢?那肯定是可以哒。小编无所不能的!!!

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

   嗯,小编觉得看顺眼多了哈哈哈不知道大家有没有这种感觉呢?

悬空else问题

   再给大家看一个代码,大家看看输出的是什么,是hehe呢,还是haha呢?

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

   大家思考一下哈。小编估计大多数人觉得输出haha,那输出结果是不是呢?我们运行代码拭目以待。
在这里插入图片描述
   哦豁,什么都没有捏,我们来解读一下代码,如果a == 1;执行if (b == 2),如果b == 2;执行printf(“hehe\n”),经过小编的解读大家有没有明悟的感觉哈哈哈,大家都觉得else是和第一个if配对的,但实际并非如此,小编优化一下代码大家就会发现了。

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

   现在是不是彻底理解了呢?哈哈哈
   这里我们就要总结一下了:如果有多个if和else,我们可以记住一条规则,就是else总是与距离最近的if匹配;还有就是,如果小编一开始就把代码写好,是不是就不会误导大家呢?小编想应该是这样的,所以代码写成什么样子很重要,一定程度上会影响判断结果。

switch语句

    除了if语句外,C语言还提供了switch语句来实现分支语句。
    大家有没有注意上面小编说的“连用的if次数没有限制”,可是大家想一想,如果真的一直用if写下去,我们还可以轻易的判断输出结果是什么吗?两三个嵌套还比较好判断,如果是六七个呢?甚至更多。这个时候switch出现了,switch就是为了解决多结果而存在的,
    switch可以翻译从开关,switch是一种特殊的if else结构,用于判断条件有多个结果的情况。它能把多重的else if改写成更易用,可读性更高的形式。但是并不是所有的if语句都可以转化为switch语句。
    我们一起来看看switch的语法吧

switch (表达式)
{
	case value1:
		语句;
		breakcase value2:
		语句;
		breakdefault:
		语句:
		break}

    value1,value2是表达式的值,执行表达式后,找到相应的value并执行后面的语句,如果找不到相应的value,则执行default后面的语句。case和break还有default具体的意义我们先按下不表,后面小编会进行讲解的。咱们来上一个代码来了解了解switch。我们来写一个代码:输入任意值,计算除后的余数。

int main()
{
	int n = 0; 
	scanf("%d",&n);
	if (n % 3 == 0)
	{
		printf("余数为0\n");
	}
	else if (n % 3 == 1)
	{
		printf("余数为1\n");
	}
	else if (n % 3 == 2)
	{
		printf("余数为2\n");
	}
return 0;
}

    这是在没有使用switch还是用if的情况下写的代码

int main()
{
	int n = 0;
	scanf("%d", &n);
	switch (n % 3)
	{
	case 0:
		printf("余数为0\n");
		break;
	case 1:
		printf("余数为1\n");
		break;
	case 2:
		printf("余数为2\n");
		break;
	}
	return 0;
}

    这是用switch写的,那个更加好大家最近评定哦,不过小编觉得switch好用,不过仅限于特定的场合。
    switch后面必须是整型表达式,case后的值必须是整型常量表达式。
    大家再来看看这个代码对不对呢?

int main()
{
	char ch = 0;
	scanf("%d",&ch);
	switch (ch)
	{
	case 'a':
		break;
	case 'b':
		break;
	}
	return 0;
}

    哈哈小编敢肯定大家都是觉得这个代码不对,但是实际上是正确的。为什么呢?在使用switch语句时,不仅可以使用int类型,也可以使用char类型,因为字符类型是归属于整型类型的,字符的本质是ASCII码,该值是整型类型的,字符是可以转换为整型的。

case和default的顺序

    在switch里面先写case再写default没有问题,先写default再写case也没有问题,两者没有顺序要求,满足逻辑即可。

结语

    今天就先到这里就结束了哦,咱们还有循环语句还没有讲,敬请期待下集分解,大家不要跑丢了喔,要及时回来看小编,小编会想你们的。

这里是引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值