首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >分支与循环2

分支与循环2

作者头像
用户12004530
发布2026-01-23 14:46:54
发布2026-01-23 14:46:54
730
举报

while循环

c语言提供了三种循环方式“while”“for”“do……while”

我们先来讲解一下while循环,while循环和if分支有一些相似之处

格式:

代码语言:javascript
复制
while(表达式)
    语句;

当我们表达式的返回值为“true”时候就进入循环体,若为“false”就不进入循环

代码语言:javascript
复制
#include <stdio.h>
int main()
{
	while (1)
		printf("hehe\n");
	return 0;
}

此时表达式为“1”,那表达式的返回值为”true“,就进入循环,循环进入一次后就会跳出循环,跳到循环开头,然后又进入表达式,又输出,这样会反复进入再输出,可以在电脑上试一下

那如果这样写

代码语言:javascript
复制
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	while (1)
		printf("hehe\n");
	    printf("haha\n");
	return 0;
}

也只会死循环打印”hehe“,不会打印"haha",这是因为while循环也只会匹配单个语句,弱项匹配多个语句就要用到大括号,

代码语言:javascript
复制
#include <stdio.h>
int main()
{
	while (1)
	{
		printf("hehe\n");
		printf("haha\n");
	}
	return 0;
}

那我们来做一道题以便理解记忆”打印1到10的数字“

你是不是要让代码执行到能够打印完数字的次数,所以表达式就要执行到比打印的次数多一次

代码语言:javascript
复制
#include <stdio.h>
int main()
{
	int num1=1;
	while (num1<=10)
	{
		printf("%d ",num1);
		num1++;
	}
	return 0;
}

因为要打印1到10的数字就要让表达式的值从1变成10,当表达式的值为10的时候满条件就进入循环打印最后一个数字10,然后后置++并跳出循环又会跳回到循环开头,num1执行后置++后会变成11(后置++和前置++在我前面的分支与循环1中的单目运算符中讲到),再进入表达式,此时表达式返回值为”false“,不进入循环,循环结束,所以表达式才会比打印的次数多执行一次

for循环

for循环是c语言中使用循环频率相对较高的

格式:

代码语言:javascript
复制
for(表达式1;表达式2;表达式3;)
      语句;      //和while一样,若要多条语句就要加大括号

表达式1:用于循环变量的初始化                                                                                                      表达式2:用于循环结束的条件判断                                                                                                    表达式3:用于循环变量的调整       

代码语言:javascript
复制
#include <stdio.h>
int main()
{
	int num1 = 1;
	for (num1; num1 <= 10; ++num1)  //1.num1  2.num1<=10  3.printf("%d ",num1);  4.++num1
		printf("%d ",num1);         
	return 0;
}

一行注释就代表for循环的执行顺序,

在这里”num1++“和”++num1“效果是一样的(可以在电脑上运行一下)

那这里也做一道题吧”打印1到100之间的3的倍数之和“

代码语言:javascript
复制
#include <stdio.h>
int main()
{
	int sum=0;
	for (int i = 0; i <= 100; i+=3)
	{
		sum = sum + i;
	}
	printf("%d",sum);
	return 0;
}

首先看for循环前面两个表达式,这两个表达式决定了值的范围为0到100,第三个表达式“i+=3”相当于“i=i+3”,这样就生成了以3的倍数的数字了,然后进入循环体相加,等加完之后执行打印输出总和

do……while循环

格式:

代码语言:javascript
复制
do
  语句
while(表达式);

看到格式的时候就表明这个循环它最少执行语句为一次,当执行到表达式的时候,为“true”就再上去继续循环,直到表达式返回值为“false”就停下来,while循环和for循环都是先判断表达式为“true”后再执行循环体语句,为“false”就停下来,而do……while循环则是先进入循环体执行语句后在进入表达式判断真假,所以do……while循环至少执行一次循环体语句

那再用do……while做一下打印出1到10的数字

代码语言:javascript
复制
#include <stdio.h>
int main()
{
	int num1 = 1;
	do
	{
		printf("%d ", num1);
		num1++;
	} while (num1<=10);
	return 0;
}

break和continue应用

break:执行到break时就跳出循环,不再执行任何循环体语句并执行循环下的其他语句

continue:跳过本次循环continue后的代码,在while和for中有所不同

while中的break和continue

代码语言:javascript
复制
#include <stdio.h>
int main()
{
	int num1 = 1;
	while (num1<=10)
	{
		if (num1 == 5)
		{
			break;
		}
		printf("%d ",num1);
		num1++;
	}
	return 0;
}

原本的代码若没有break就会执行打印1到10的数字,但是现在加了一个if条件分支,当num1的值等于5的时候就进入分支语句,break就跳出本次循环,5也不会打印出来,执行while循环后面的代码

那我们现在换成continue

代码语言:javascript
复制
#include <stdio.h>
int main()
{
	int num1 = 1;
	while (num1<=10)
	{
		if (num1 == 5)
		{
			continue;
		}
		printf("%d ",num1);
		num1++;
	}
	return 0;
}

此时可以看到打印出的数字,当num1的值为5的时候进入IF分支语句,执行continue后返回到循环开头,num1为5(因为num1++在if语句下面,就执行不了num1++了)小于等于表达式的10,所以进入循环后又遇到了if语句,再执行continue后回到循环开头,一直重复,虽然打印出了四个数字,但程序没有结束

那如果把num1++语句放在if语句之前会怎么样?

代码语言:javascript
复制
#include <stdio.h>
int main()
{
	int num1 = 1;
	while (num1<=10)
	{
		num1++;
		if (num1 == 5)
		{
			continue;
		}
		printf("%d ",num1);
	}
	return 0;
}

因为我们先执行了num1++,所以num1就变成了2,再打印输出第一个循环就为“2”,所以当num1的值为4的时候执行num1++后变成5,再执行IF分支语句就返回循环开头,再进入循环后执行num1++变成6,就输出打印,当num1的值为10的时候就进入循环执行num1++变成11后打印输出,所以最后的答案没有5

for循环中的break和continue

代码语言:javascript
复制
#include <stdio.h>
int main()
{
	int num1 = 1;
		for (num1; num1 <= 10; ++num1)
		{
			if (num1 == 5)
			{
				break;
			}
			printf("%d ",num1);
		}
	return 0;
}

num1的范围为1到10,当num1的值为5的时候小于等于10,进入循环再进入IF分支执行break跳出循环执行for循环后面的代码

再换成continue

代码语言:javascript
复制
#include <stdio.h>
int main()
{
	int num1 = 1;
	for (num1; num1 <= 10; ++num1)
	{
		if (num1 == 5)
		{
			continue;
		}
		printf("%d ", num1);
		
	}
	return 0;
}

num1的范围为1到10,当num1的值为5的时候小于等于10,进入循环再进入IF分支执行continue后返回for循环的第三个表达式++num1之后num1的值变为6再次进入循环执行打印输出,所以最后答案没有输出5

我们把if分支放在打印输出的后面

代码语言:javascript
复制
#include <stdio.h>
int main()
{
	int num1 = 1;
	for (num1; num1 <= 10; ++num1)
	{
		printf("%d ", num1);
		if (num1 == 5)
		{
			continue;
		}
	}
	return 0;
}

当年num1的值为5的时候就先打印输出后再执行IF分支语句中的continue并返回for循环的第三个表达式++num1,所以num1从以前的5变成6在进入循环,直到num1的值为10之后打印输出,再执行++num1,不满足表达式就跳出循环

do……while中的break和continue

代码语言:javascript
复制
#include <stdio.h>
int main()
{
	int num1 = 1;
	do
	{
		printf("%d ", num1);
		num1++;
		if (num1 == 5)
		{
			break;
	   }
	} while (num1 <= 10);
	return 0;
}

打印输出再if语句的前面,所以当num1为4的时候打印输出后执行num1++变成5就进入IF语句后跳出循环

代码语言:javascript
复制
#include <stdio.h>
int main()
{
	int num1 = 1;
	do
	{
		printf("%d ", num1);
		num1++;
		if (num1 == 5)
		{
			continue;
	   }
	} while (num1 <= 10);
	return 0;
}

当num1为4的时候打印输出后执行num1++变成5就进入IF语句后返回循环开头输出打印5后再执行num1++变成6就不执行IF语句了,所以最后的答案都会打印(要根据if语句和后置++在不同的位置而定)

goto语句

goto语句和跳转标号是c语言中最特别的语法,goto语句可以实现再同一个函数内跳转到设置好的标号处,但如果goto语句使用不当会导致再函数内部随意跳转,但也可实现再多层循环中快速跳出循环

代码语言:javascript
复制
#include <stdio.h>
int main()
{
again:
	printf("hehe\n");
	goto again;
	return 0;
}

代码中我让goto返回到again,而again在打印输出前面,所以会持续打印输出

代码语言:javascript
复制
#include <stdio.h>
int main()
{
	printf("hehe\n");
	goto again;
	printf("haha\n");
 again:
	printf("enen\n");
	return 0;
}

如果没有goto语句的话原本打印输出hehe和haha,但现在使用了goto语句就会执行到该语句时跳到goto对应的语句,就会跳过haha的打印直接打印enen

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • while循环
  • for循环
  • do……while循环
  • break和continue应用
    • while中的break和continue
    • for循环中的break和continue
    • do……while中的break和continue
  • goto语句
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档