分支语句和循环语句


C语言是结构化的程序设计语言,什么叫做结构化呢?解释一下。
C语言中有3种结构:
1.顺序结构
2.选择结构
3.循环结构
顾名思义,顺序结构就是按照顺序执行代码,选择语句就是分支语句,会让我们进行选择,而循环语句就是重复做同一件事知道满足某个条件,跳出循环,否则一直进行。


分支语句(选择语句)

if语句

单分支语句

单分支语句表示只有一个分支,看个例子:

#include <stdio.h>
int main()
{
	int age = 20;
	if (age >= 18)
	{
		printf("成年\n");
	}
}

这段代码就是单分支语句,只有一个条件(age>=18),需要注意的是,判断条件是否为真(非0),如果为真(非0),则执行语句;否则不执行。

双分支语句

双分支有两个分支,还是这个例子:

#include <stdio.h>
int main()
{
	int age = 20;
	if (age >= 18)
	{
		printf("成年\n");
	}
	else
	{
		printf("未成年\n");
	}
	return 0;
}

满足if条件语句时,则执行if条件语句的内容,否则执行else语句中的内容,二者只能选择其一。

多分支语句——if

在遇到不知一到两种情况时,就会发生多种情况,这是就需要用到多分支语句,类似的例子:

#include <stdio.h>
int main()
{
	int age = 10;
	if (age < 18)
	{
		printf("青少年\n");
	}
	else if (age >= 18 && age < 30)
	{
		printf("青年\n");
	}
	else if (age >= 30 && age < 50)
	{
		printf("中年\n");
	}
	else
	{
		printf("老年\n");
	}
	return 0;
}

这就是多分支语句,用来处理有许多选择,需注意的时else if中的if是不能去掉的,而最后一个的else不需要加上if。可以这样理解if后面需要加上条件,而else不需要加条件。
我们在看一个悬空else的问题,简单来说就是else匹配的问题,看例子:

#include <stdio.h>

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

在这段代码中,会如何执行呢?
有的同学可能会说打印haha,有的同学会说什么也不打印,结果是什么呢?其实是不会打印任何东西的,打印haha的同学会认为else会跟第一个if匹配,而a=0所以跳转到else上打印haha,其实并不是,else会跟离自己最近的if进行匹配,那么我们如何像那些同学以为的那样打印haha呢?加上大括号就可以了,至于如何加,加在哪里,同学们可以自己试试。

多分支语句——switch

在大量的分支时用if语句写代码往往会很繁琐,这是我们可以用switch语句解决。举个例子:输入1—7分别输出星期一—星期日。我们用if语句完成:

#include <stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	if (1 == day)
	{
		printf("星期一\n");
	}
	else if (2 == day)
	{
		printf("星期二\n");
	}
	else if (3 == day)
	{
		printf("星期三\n");
	}
	else if (4 == day)
	{
		printf("星期四\n");
	}
	else if (5 == day)
	{
		printf("星期五\n");
	}
	else if (6 == day)
	{
		printf("星期六\n");
	}
	else if (7 == day)
	{
		printf("星期七\n");
	}
	return 0;
}

如果我们用switch语句解决:

#include <stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
		printf("星期一\n");
		break;
	case 2:
		printf("星期二\n");
		break;
	case 3:
		printf("星期三\n");
		break;
	case 4:
		printf("星期四\n");
		break;
	case 5:
		printf("星期五\n");
		break;
	case 6:
		printf("星期六\n");
		break;
	case 7:
		printf("星期日\n");
		break;
	default:
	printf("输入有误!\n");
	break;
	}
	return 0;
}

虽然看起来没有太大的区别,但是给人的感觉是不太一样的,switch有几点需要注意:1、switch语句中“day”必须是整型,也就是说定义day时不能定义为float类型。2、case后面跟着的“数字”必须是整型常量,变量是不可以的。3、break是跳出的意思,当我们输入为4时,是以case 4为入口,一直往下,如果没有break,就会打印星期四,星期五,星期六,星期日。有了break,也就会在case 4中跳出switch语句,从而实现只打印星期四。4、default 用法如果没有入口进入,那么执行default语句。

循环语句

while循环

while循环是最简单的循环语句,看个例子:

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		printf("%d ", i);
		i++;
	}
	return 0;
}

在这个例子中,先判断i≤10,满足条件,则执行代码块中的语句(i++是用来调整的),在进行循环直到不满足条件,跳出循环。有时我们还会遇到break和continue。我们来看看这两者的区别。
还是这个例子:

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (5 == i)
		{
			break;
		}
		printf("%d ", i);
		i++;
	}
	return 0;
}

在这段代码中,打印1,2,3,4没有问题,当i=5时,进行判断,此时i=5满足条件,永久跳出循环,所以结果为只打印1,2,3,4。我们再看看continue。

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (5 == i)
		{
			continue;
		}
		printf("%d ", i);
		i++;
	}
	return 0;
}

这段代码的运行结果是什么呢?有的同学会说打印1—10没有5,结果是不是呢?并不是,结果是打印1,2,3,4然后进入死循环,为什么呢?我们看,continue的作用是跳过本次循环,也就是说满足条件时,执行continue,则后面语句不执行,直接进行判断,所以在遇到i=5时,并没有i++,所以此时i仍然等于5,然后一直进行死循环。那么如何打印同学们说的1—10没有5呢?其实这就要调整语句的位置。同学们可以课后试一试。

for循环

for循环的语法是:

for(表达式1;表达式2;表达式3)
{
      循环语句;
}

表达式1是初始化部分,表达式2是条件判断部分,表达式3是调整部分。我们可以看到相对于while循环,for循环的优势就是将这三个表达式写在一起相对好修改和调整。看个例子:

#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		printf("%d ",i);
	}
	return 0;
}

在这段代码中,还是打印1—10,相比较while循环,将三个部分都用for语句整合,对于后期维护更改有很大帮助。

do……while循环

do……while循环相对于while循环来说没有什么区别,不同点就在于do……while是先执行语句,在进行判断,判断成立继续执行,看个例子:

#include <stdio.h>
int main()
{
	int i = 1;
	do
	{
		printf("%d ", i);
		i++; 
	}while (i <= 10);
	return 0;
}

在这段代码中,目的还是一样,打印1—10,我们可以看到,是先进行循环语句,在进行while判断。所以调整部分还是需要再循环语句中写出才可以,否则不是执行一次,就是死循环。
好了,这就是一些常见的分支和循环语句的分享,希望能给大家一些启发和帮助,感谢大家认真看完。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Solitudefire

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值