首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >##C语言——学习攻略:分支和循环语句的学习【主要对三种循环语句的学习】(续章~)

##C语言——学习攻略:分支和循环语句的学习【主要对三种循环语句的学习】(续章~)

作者头像
晨非辰Tong
发布2025-12-23 13:14:40
发布2025-12-23 13:14:40
1140
举报
文章被收录于专栏:C++C++

前言:本文章承接上一篇作者学习c语言分支和循环语句的笔记 ,在本文将会相互学习剩下的三种循环——while、for、do-while以及两种在循环语句中常用到的语句等;欢迎大家留下评论,发表自己的学习看法,也请大家多多指教,让我们一起来学习C语言吧。

6. while循环

C语言提供了3种循环语句,包含 while循环语句;

while循环语句的语法结构和if语句非常相似。

6.1 if 和 while 对比

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

while(表达式)
    语句;

通过一个简单的例子来更直观的对比二者的区别:

代码语言:javascript
复制
int main()
{
	if(1)
		printf("hello");
	return 0;
}

代码语言:javascript
复制
int main()
{
	while (1)
		printf("hello\n");//从字面意思就可以知道,while语句是循环进行打印
	return 0;
}

通过以上对比可知:if 语句在条件复合时只打印一次,而 while循环语句则是无限循环打印;

6.2 while语句具体实现

执行流程:首先执行判断表达式,表达式为0,循环结束;表达式不为0,执行循环语句,然后再进行判断......

下面让我们通过一个简单的例子了解 while语句的运行:

例题9——在屏幕上输出1~10的值

代码语言:javascript
复制
int main()
{
	//创建变量
	int a = 1;
	while (a <= 10)//表达式,条件不满足a<=10后,停止打印;
	{
		printf("%d ", a);
		a++;//在这里a++和++a得效果是一样的,因为都是先执行打印a,即都是从1开始
	}
	return 0;
}

6.3 利用 while语句实现打印输入数值的逆序

例题9——

解题思路:

  1. 想要得到输入数值的最低位数,可以通过 %10 求余数来获得;比如:12 % 10 =2,这样我们就得到了数值的最低位数;
  2. 同样,为了得到最低位数的上一位数,也可以通过 %10 求余数来获得;但是在此之前,需要将数值的最低位数去掉,可以用 /10 得方式得到(因为 / 只会得到结果的整数);比如:12 / 10 =1;
  3. 这样就可以重复(即进行循环操作)上述两个步骤完成操作;
代码语言:javascript
复制
int main()
{
	int a = 0;
	scanf("%d", &a);
	while (a)
	{
		int b = a % 10;//创建变量b,将a除以10求余的结果赋给b
		printf("%d", b);
		a = a / 10;
	}
	return 0;
}

7. for循环

代码语言:javascript
复制
//形式:
for(exp1; exp2; exp3)
	语句;
//exp1:循环变量的初始化
//exp2:一轮循环结束后条件的判断
//exp3:循环变量的调整操作

7.1 for循环语句具体实现

执行流程:首先exp1初始化变量,接下来执行exp2进行条件判断,如果判断的结果 ==0 则循环结束;反之为 !=0则进行循环语句,结束后执行exp3变量调整,然后再次执行exp2......;

注意:exp1只会执行一次,其余则是exp2和exp3的循环执行;

下面,也是通过一个简单的例题来体会 for语句的执行:

例题10——在屏幕上输出1~10

代码语言:javascript
复制
int main()
{
	int a = 0;
	for (a = 1; a <= 10; a++)
	{
		printf("%d ", a);
	}
	return 0;
}
//结果输出1 2 3 4 5 6 7 8 9 10

7.2 for循环相较于 while循环的优点

for循环 和 while循环 都有着变量初始化、条件判断、变量调整三个部分,但由于 for循环 在形式上将这三个部分集起来,这样就有利于代码执行的理解;而 while循环 中这三个部分处于不同位置,当代码比较复杂时就导致不容易理解。

总结:for循环 和 while循环 二者实现的

7.3 利用 for循环实现1~100之间3的倍数的数字求和

例题11——

解题思路:

  1. 从简单思路入手,已知题目要求实现1~100之间3的倍数的数字求和,那我们可以直接利用 for循环只输出3的倍数;
  2. 当利用 for循环输出全部符合条件的数值后,就要进行求和,这时创建变量sum;但要注意,求和也要在循环体中进行;
代码语言:javascript
复制
int main()
{
	int a = 0;
	int sum = 0;
	for (a = 3; a <= 100; a += 3)//先利用for循环找到符合条件的数值
	{
		printf("%d ", a);
		sum += a;//sum随着循环体将输出的数值逐个相加
	}
	printf("\n %d\n", sum);

	return 0;
}

8. do-while循环

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

通过上面的学习可以知道,while 和 for 这两种循环都是先判断,条件满足就进入循环,反之推出;

do-while循环则是先进入循环体,在执行while后的判断表达式,为真则继续,反之结束;

8.1 do-while循环具体实现

执行流程:先执行语句部分,执行完语句后,去执行判断表达式,表达式结果 != 0 则继续循环;结果 == 0,循环结束;

可知:在 do-while循环中,循环体至少执行一次

下面,再次通过一个简单的例题来体会 do-while语句的执行:

例题12——

代码语言:javascript
复制
int main()
{
	int a = 1;
	do
	{

		printf("%d ", a);
		a++;
	} while (a <= 10);
	return 0;
}
//屏幕输出1~10

8.2 利用 do-while循环实现计算一个正整数的位数

例题13——

解题思路:

  1. 整体看,我们可以借鉴 6.3 用while循环实现数值逆序得思路;
  2. 先创建变量a和变量dig,再循环体中将a = a /10 这样就消掉了最低位数,然后再dig++,当循环结束后,dig打印出的数值就是a的位数;
代码语言:javascript
复制
int main()
{
	//先创建一个变量,用于存放我们输入的数值
	int a = 0;
	//创建dig变量,到时候用来存放数值的位数
	int dig = 0;
	//输入
	printf("请输入一个正整数:");
	scanf("%d", &a);
	do
	{
		a = a / 10;
		dig++;
	} while (a != 0);
	printf("正整数的位数是 % d\n", dig);
	return 0;
}

这个例题实际上非常适用于 do-while循环,因为是先执行循环体再判断,所以即使输入的是0也会正确打印出位数;

9. break 和 continue语句

  • break——永久的停止循环,执行break后就会跳出循环(有多个循环嵌套的话,则是跳出本循环),向下执行;
  • continue——跳过本次循环中continue后面的代码;

在下面,介绍了 break 和 continue 在 while循环 、 for循环 和 do-while 中的应用;(continue 在 while循环和 for循环中存在差异,在 while循环中操作不当会导致死循环)

9.1 while循环中 break 和 continue 的应用

  • break

通过一个简单的代码运行来了解 break 在 while循环中的作用:

代码语言:javascript
复制
int main()
{
	int a = 0;
	while (a <= 10)
	{
		a++;
		printf("%d ", a);
		if (a == 4)
			break;//当a运行到4时,break-跳出循环,即结束
	}
	return 0;
}

  • continue

通过一个简单的代码运行来了解 continue在 while循环中的作用:

代码语言:javascript
复制
int main()
{
	int a = 0;
	while (a < 10)
	{
		a++;
		if (a == 4)
			continue;//当a == 4时,continue跳过后面的代码,继续运行,即不打印4
		printf("%d ", a);
		
	}
	return 0;
}

9.2 for循环中 break 和 continue 的应用

以下操作均继续使用9.1部分中所使用的代码思路,这样方便我们进行对比;

  • break
代码语言:javascript
复制
int main()
{
	int a = 0;
	for (a = 1; a <= 10; a++)
	{
		
		if (a == 4)
		{
			break;//当a运行到4时,break-跳出循环,不再打印4~10
		}
		printf("%d ", a);
	}
	return 0;
}

  • continue
代码语言:javascript
复制
int main()
{
	int a = 0;
	for (a = 1; a <= 10; a++)
	{
		
		if (a == 4)
		{
			continue;//当a运行到4时,跳过后面的代码(不再打印4),继续执行
		}
		printf("%d ", a);
	}
	return 0;
}

9.3 do-while循环中 break 和 continue 的应用

  • break
代码语言:javascript
复制
int main()
{
	int a = 0;
	do
	{
		++a;
		if (a == 4)
			break;//当a运行到4时,break-跳出循环,不再打印4~10
		printf("%d ", a);
	} while (a < 10);
	return 0;
}

  • continue
代码语言:javascript
复制
int main()
{
	int a = 0;
	do
	{
		++a;
		if (a == 4)
			continue;//当a运行到4时,跳过后面的代码(不再打印4),继续执行
		printf("%d ", a);
	} while (a < 10);
	return 0;
}

10. 循环嵌套

10.1 利用上面学到的三种循环语句进行可能的循环嵌套实现打印100~200间的素数

例题14——

解题思路:

素数又称质数(大于1并且只能被1和本身整除);

  1. 首先要生成100~200之间的数字以便我们进行判断是否是素数,这里我们使用for循环进行生成;
  2. 在第一步生成数字后就要进行素数的判断,由素数定义可知—要求数字i(这里我们将生成的数字定义为i)不能被除1和本身以外的数整除,在这里我们注意是整除,则除数分为应该是2~i-1;
  3. 为了方便后续代码书写,在这里我们定义 flag = 1(假设 i 是素数,具体使用请在代码区理解);接下来就要着手生成除数,这里我们也可以用for循环来解决;然后用 i 去除 j ,这里我们使用一个 if语句 来判断,如果有一个 j 被 i 整除,则说明 i 不是素数(flag = 0),随之break跳出本层循环(break的原因是—因为只需要有一个j 被整除就可以判断 i ,就不需要再往下生成 j 来试验了 );
  4. 当 flag ==1时,即表明 i 没有整除任何一个 j ,即 i 为素数 打印 i,这里我们再次使用 if语句来判断 ;

下面请根据具体代码来理解——

代码语言:javascript
复制
int main()
{
	//定义被除数为i
	int i = 0;
	//用第一个for循环来生成所需要的100~200之间的数字
	for (i = 100; i <= 200; i++)
	{
		int flag = 1;//假设i是素数
		//定义除数为j,用来试验i是否是素数
		int j = 0;
		//在这里用第二个for循环来生成j,范围是:2~i-1
		for (j = 2; j < i - 1; j++)
		{
			//这里我们使用if语句来判断i能否整除j
			if (i % j == 0)//整除代表取余数为0
			{
				flag = 0;
				break;//判断i不是素数,跳出
			}
		}
		//接下来就是flag == 1的情况,再次使用if语句
		if (flag == 1)
		{
			printf("%d ", i);
		}
	}
	return  0;
}

11. goto语句

C语言提供了 goto语句和跳转标号,使得 goto语句可以实现在同一个函数内进行跳转到标号处;

代码语言:javascript
复制
int main()
{
	printf("我是男的\n");
	goto next;
	printf("我真丑...");

	next:
//由于goto语句,跳过打印"我真丑...",转而打印"我真帅!!";
	printf("我真帅!!");
	return 0;
}

当然,goto语句也有着一定的弊端, 使用不会导致在函数中随意跳转,进而程序无法按照预期运行;

合理利用 goto语句可以帮助我们在多层循环代码中实现跳转;

总结:在这里,关于分支和循环语句的学习就结束了,在初次接触时,看到分支和循环语句的语法结构,觉得它们挺难搞的,没啥信心。但通过这段时间的学习和实践,我感觉其实懂得了它们的使用场景和方法也就会用了(虽然写一段有时候都要想半天(´-﹏-`;)...); 最后,期待下次的相遇(✧ω✧)

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 6. while循环
    • 6.1 if 和 while 对比
    • 6.2 while语句具体实现
    • 6.3 利用 while语句实现打印输入数值的逆序
  • 7. for循环
    • 7.1 for循环语句具体实现
    • 7.2 for循环相较于 while循环的优点
    • 7.3 利用 for循环实现1~100之间3的倍数的数字求和
  • 8. do-while循环
    • 8.1 do-while循环具体实现
    • 8.2 利用 do-while循环实现计算一个正整数的位数
  • 9. break 和 continue语句
    • 9.1 while循环中 break 和 continue 的应用
    • 9.2 for循环中 break 和 continue 的应用
    • 9.3 do-while循环中 break 和 continue 的应用
  • 10. 循环嵌套
    • 10.1 利用上面学到的三种循环语句进行可能的循环嵌套实现打印100~200间的素数
  • 11. goto语句
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档