浅谈分支与循环(下)

哈喽小伙伴们好久不见,今天我们继续探讨分支与循环中的循环部分~~

目录(上)

操作符

分支语句

目录(下)

循环语句

练习


一、循环语句

在我们C语言中,一共提供了三种循环语句,分别是while循环、do-while循环和for循环,我们今天就来分别探讨一下这三种循环结构

(一)while循环

在这之前,我们先来复习一下分支结构中的if语句。对于if语句,语法结构是这样的:

if(表达式)
    语句;

只要满足表达式的条件,就执行下面的语句。那同样的,while循环也是如此。下面我们来看while循环的语法结构:

while(表达式)
    语句;

那既然if和while的用法相似,那如果我们用while和if写同一段代码,会发生什么呢?我们先来看if语句写的代码:

#include<stdio.h>

int main()
{
    if(1)
        printf("hehe\n");
    return 0;
}

运行的结果显而易见,就是一个“hehe”,那while语句会是什么呢?

#include<stdio.h>

int main()
{
    while(1)
        printf("hehe\n");
    return 0;
}

我们可以看到,只要while后面的条件满足,语句就会一直执行下去。也就是说会一直不停的打印“hehe”,那么这时候我们就会需要跳出循环,这个我们讲完循环之后再说。

(二)do-while循环

我们都知道,在while循环中,程序会先判断条件是否满足,来判断是否执行语句。然而在do-while循环中,是先通过“do”,再来“while”。也就是说,先执行语句,然后根据执行后的结果来判断while后的条件,如果满足则继续执行“do”,不满足则跳出循环。do-while语句的语法结构如下:

do
    语句;
while(表达式);

(三)for循环

for循环和while循环一样,是个很重要的循环结构,相比之下,do-while循环用的很少,for循环使用最多。for循环的语法结构如下:

for(表达式1,表达式2,表达式3)
    语句;

我们把循环中的三个语句拆开来看:

表达式1:用于循环变量的初始化;

表达式2:用于循环条件的判断;

表达式3:用于循环变量的调整;

我们来分析一下for循环是如何执行的。首先对变量进行初始化,也就是给变量赋最初始的值;随后进入表达式2,也就是判断部分,如果满足条件则执行语句3,如果不满足则跳出循环。表达式3调整变量后,再继续进入表达式2,直到不满足条件跳出循环为止。

那while循环和for循环哪个更方便呢?我们来看一下二者的对比:

看得出来二者的区别,由于不同场景需要不同,这里便不再探讨二者方便性比较了。

(四)continue和break语句

在上面我们讲到,如果没有语句能让程序跳出循环,那么程序就会一直执行下去,违背了算法的有穷性。那么怎么样才能跳出循环呢?C语言中提供了continue和break两个关键字。

  • break的作用是用于永久终止循环,只要break被执行,就会直接跳出循环,执行下面的语句。
  • continue的作用是跳过本次循环中continue后面的代码。
1.while循环中的break和continue

break举例:

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

前面1234打印时正常打印。当i等于5时,if语句的条件满足,执行break,结束循环。大家要注意,break只能终止其外的第一层循环,也就是说,如果while循环中嵌套一个while循环,我们设为循环一和循环二,那么循环二中的break只能终止循环二,而循环一继续运行,如果想让循环一终止,则需要另外一个break。

continue举例:

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

我们来看执行结果:

代码永远没有执行结束,陷入了死循环,因为continue后的语句一直不执行,i一直等于5,继而一直满足continue的条件,陷入了死循环。

2.for循环中的break和continue

for循环中的break和while循环中的break类似,都是用来终止循环的,我们直接看代码:

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

但是for循环中的continue和while循环就不太一样了,我们还是先上代码再分析:

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

我们再执行一下看看,输出结果是“1 2 3 4 6 7 8 9 10”,为什么会出现这种情况呢?大家可以看到,continue后的语句只有打印语句,也就是说,当i=5时,只跳过了打印语句,其余的正常执行。当i++执行后i变成了6,便不再满足if语句的条件,直到循环自然终止。

3.do-while语句中的break和continue

do-while循环中的break和continue与while循环中的作用几乎一模一样。我们直接上代码,同学们自行体会一下:

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

 (五)goto语句

goto语句是一个比较特殊的语句,上文提到,一个break只能跳出一个循环,如果想要跳出多层循环就需要多个break,非常繁琐。那么goto语句就是将程序跳转到某个地方继续执行。例如:

#include <stdio.h>
int main()
{
	printf("hehe\n");
	goto next;
	printf("haha\n");
next:
	printf("跳过了haha的打印\n");
	return 0;
}

 在这里就跳过了打印“haha”,直接继续执行了next部分。


二、练习

(一)while语句练习

//输⼊⼀个正的整数,逆序打印这个整数的每⼀位
//例如:
//输⼊:1234,输出:4 3 2 1
//输⼊:521,输出:1 2 5
  • 想要得到最后一位,可以用取余(模)
  • 想要得到倒数第二位,可以先整除,再取余

参考代码:

#include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d ", &n);
		while (n)
			printf("%d \n", n % 10);
		n = n / 10;
	return 0;
}

(二)for语句练习

//计算1-100之间3的倍数之和

在这里我们提供两种思路:

  • 依次找出3的倍数,然后相加
  • 直接产生3的倍数。然后想加
//第一种
#include<stdio.h>
int main()
{
	int a = 0;
	int sum = 0;
	for (a = 1;a < 100;a++)
	{
		if (a % 3 == 0)
			sum += a;
	}
	printf("%d ", sum);
	return 0;
}
//第二种
#include<stdio.h>
int main()
{
	int a = 0;
	int sum = 0;
	for (a = 3;a < 100;a+=3)
	{
		sum += a;
	}
	printf("%d ", sum);
	return 0;
}

(三)do-while练习

//输⼊⼀个正整数,计算这个整数是⼏位数?
//例如:
//输⼊:1234,输出:4
//输⼊:12,输出:2

代码参考:

#include<stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	int cnt = 0;
	do
	{
		cnt++;
		a = a / 10;
	} while (a);
	return 0;
}

好了,今天就先说到这里,我们下期再见!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值