C语言零基础学习笔记10——分支和循环(四)

本节大纲


一、if 语句

二、关系操作符

三、条件操作符

四、逻辑操作符:&&、||、!

五、switch语句

六、while循环

七、for循环

八、do-while循环

九、break和continue语句


 七、for循环

(一)、for循环语法形式
for (表达式1; 表达式2; 表达式3)
	语句;	//如果循环体想包含更多的语句,可以加上大括号

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

        表达式2用于循环结束条件的判断。

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

(二)、for循环的执行流程

        首先执行表达式1 初始化循环变量,接下来就是执行表达式2 的判断部分, 表达式2 的结果如果 == 0,则循环结束; 表达式2 的结果如果!=0则执行循环语句,循环语句执行完后,再去执行表达式 3 ,调整循环变量,然后再去表达式2的地方执行判断,表达式2 的结果是否为0,决定循环是否继续。

        整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3在循环。

(三)、for循环的实践

        下面我们可以使用for循环写一个简单的代码,来观察for循环的使用。

        实现“在屏幕上打印1~10的值”的功能,代码如下:

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

         这段代码就可以实现“在屏幕上打印1~10的值”的功能了,在使用上是比while语句更简单的。

(四)、while循环和for循环的对比

        for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部分非常集中,便于代码的维护,而如果代码较多的时候 while 循环的三个部分就比较分散,所以从形式上 for 循环要更优一些。

(五)、 for循环的练习

        通过上面的学习,接下来我们可以实现一个比较复杂的功能了——“计算1~100之间3的倍数的数字之和”为了完成这个功能,我们可以自行练习一下,下面是我解决这个问题所编写的代码:

#include <stdio.h>
int main()
{
	int num = 0;
	int sum = 0;
	for (num = 1; num <= 100; ++num)
	{
		if (0 == num % 3)
			sum = sum + num;
	}
	printf("1到100之间3的倍数的数字之和为:%d", sum);
	return 0;
}

        当然解决这个问题的办法不止一种,上面的解决方法是最正规按照题目要求的逻辑完成,如果我们换一种算法,也可以直接产生3的倍数,省去了很多次的循环和判断,使代码的效率更高,这是优化后的代码: 

#include <stdio.h>
int main()
{
	int num = 0;
	int sum = 0;
	for (num = 3; num <= 100; num += 3)
	{
		sum = sum + num;
	}
	printf("1到100之间3的倍数的数字之和为:%d", sum);
	return 0;
}

 八、do-while循环

(一)、do-while循环语法形式

        在循环语句中do-while语句的使用频率最低,它的语法形式如下:

do
	语句;
while(表达式);

        while 和 for 这两种循环都是先判断,条件如果满足就进入循环,执行循环语句,如果不满足就跳出循环;而 do while 循环则是先直接进入循环体,执行循环语句,然后再执行 while 后的判断表达式,表达式为真,就会进行下一次,表达式为假,则不再继续循环。

(二)、do while循环的执行流程

        在 do while 循环中先执行“语句”,执行完语句,再去执行“判断表达式”,判断表达式的结果是!=0,则继续循环,执行循环语句;判断表达式的结果==0,则循环结束。

        所以在 do while 语句中循环体是至少执行一次的,这是 do while 循环比较特殊的地方。下面这张流程图就可以非常清晰的展现出do while循环的执行流程:

(三)、do while循环的实践

        下面我们可以使用do while循环写一个简单的代码,来观察do while循环的使用。

        实现“在屏幕上打印1~10的值”的功能,代码如下:

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

        我们应该注意,do while循环的while子句的末尾是有一个分号的,但是单纯的while循环中是没有的。一般do while 循环使用在循环体至少被使用一次的情况下,使用在平时的使用中会比较少见,不过我们也应该掌握。

(四)、 do while循环的练习

        通过上面的学习,接下来我们可以实现一个比较复杂的功能了——“输入一个正整数,计算这个整数是几位数”,为了完成这个功能,我们可以自行练习一下,下面是我解决这个问题所编写的代码:

#include <stdio.h>
int main()
{
	int num = 0;
	printf("请输入一个整数:");
	scanf("%d", &num);
	int sum = 0;
	do
	{
		sum += 1;
		num = num / 10;
	}
	while (0 != num);
	printf("您输入的整数有%d位", sum);
	return 0;	
}

         这里并非必须使用 do while 语句,但是这个代码就比较适合使用 do while 循环,因为n即使是 0,也是1位数,要统计位数的。


九、break和continue语句

        在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,这是非常常见的现象。C语言中提供了 break 和 continue 两个关键字,就是应用到循环中的。

· break 的作用是用于永久的终止循环,只要 break 被执行,直接就会跳出循环,继续往后执行。

· continue 的作用是跳过本次循环 continue 后边的代码,在 for 循环和 while 循环中的应用是有所差异的。

(一)、while循环中的break和continue

1、while循环中的break语句

#include <stdio.h>
int main()
{
	int num = 1;
	while (num <= 10)
	{
		printf("%d ", num);
		num += 1;
		if (num == 5)
			break;	//当num等于5时,就执行了break,直接终止了循环
	}
	return 0;
}

        打印了1,2,3,4后,当num等于5的时候,循环在 break 的地方终止,不再打印,不再循环。

        所以 break 的作用就是永久的终止循环,只要 break 被执行, break 外的第一层循环就终止了。那以后我们在循环中,想在某种条件下终止循环,则可以使用 break 来完成我们想要的效果。

        另外break语句的位置是不重要的,无论放在循环的那个位置,都是终止循环,比如下面这段代码,和上面的示例代码其实完全相同,输出的结果都是“1 2 3 4”:

#include <stdio.h>
int main()
{
	int num = 1;
	while (num <= 10)
	{
		if (num == 5)
			break;	//当num等于5时,就执行了break,直接终止了循环
		printf("%d ", num);
		num += 1;
	}
	return 0;
}

2、while循环中的continue语句

        continue 是继续的意思,在循环中的作用就是跳过本次循环中 continue 后边的代码,继续进下一次循环的判断。我们来看下面这段代码:

#include <stdio.h>
int main()
{
	int num = 1;
	while (num <= 10)
	{
		if (num == 5)
			continue;	
		//当num等于5后,就执行continue,直接跳过continue的代码,去循环的判断的地方
		//因为这里跳过了num += 1,所以num一直为5,程序陷入死循环
		printf("%d ", num);
		num += 1;
	}
	return 0;
}

        到这里我们就能分析出来, continue 可以帮助我们跳过某一次循环 continue 后边的代码,直接到循环的判断部分,进行下一次循环的判断,如果循环的调整是在 continue 后边的话,可能会造成死循环。所以说对于continue语句,放在不同的位置上,输出的结果很可能是不一样的,比如我们看下面这段代码:

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

        这段代码的运行结果为:

        这就是因为当num等于5时,continue跳出的循环后面并没有语句,所以在这段代码中,continue语句其实是没有意义的。

(二)、for循环中的break和continue

1、for循环中的break语句

        其实和 while 循环中的 break ⼀样, for 循环中的 break 也是用于终止循环的,不管循环还需要循环多少次,只要执行到了 break ,循环就彻底终止,我们来看这段代码:

#include <stdio.h>
int main()
{
	int num = 0;
	for (num = 1; num <= 10; ++num)
	{
		if (num == 5)
			break;	//当num等于5时,就执行了break,直接终止了循环
		printf("%d ", num);
	}
	return 0;
}

        这段代码的运行结果就是“1 2 3 4 ”,这是因为break 的作用是永久的终止循环,未来我们在某个条件发生的时候,不想再继续循环的时候,就可以使用 break 来完成。

2、for循环中的continue语句

        下面我们将上面的代码中的break改为continue,结果会和while循环中continue示例的运行结果不一样:

#include <stdio.h>
int main()
{
	int num = 0;
	for (num = 1; num <= 10; ++num)
	{
		if (num == 5)
			continue;	//这里continue跳过了后边的打印,但是执行了++num的调整部分
		printf("%d ", num);
	}
	return 0;
}

        这段代码的运行结果为:

        所以在 for 循环中 continue 的作用是跳过本次循环中 continue 后的代码,直接去到循环的调整部分。未来当某个条件发生的时候,本次循环无需再执行后续某些操作的时候,就可以使用 continue 来实现。

(三)、do while循环中的break和continue

        最后我们来学习do while循环中的break语句和continue语句,其实在do while语句中的作用基本和while循环中一摸一样,我在这里列出两段代码,大家可以自行测试并体会。

1、do while循环中的break语句

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

 2、do while循环中的continue语句

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

        其实上面这段代码也会因为当num等于5之后就没有办法再执行调整部分导致进入死循环中。所以综合来看,在while循环和do while循环中不恰当的使用continue语句非常容易陷入死循环当中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值