【C语言】分支与循环(下)

本期博客,接着给大家讲讲,循环语句中的while, for, do while用法

一、while循环

C语言提供了3种循环语句, while 就是其中⼀种,接下来就介绍⼀下 while 语句。

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

1. if 和 while的对比

if(表达式)
    语句;
while(表达式)
    语句;//如果循环体想包含更多的语句,可以加上⼤括号

通过代码,也能直观地看出来

cpp 复制代码
//代码1
#include <stdio.h>

int main()
{
    if(1)
        printf("hehe\n"); //if后边条件满⾜,打印⼀次hehe
    return 0;
}
cpp 复制代码
//代码2
#include <stdio.h>

int main()
{
    while(1)
        printf("hehe\n"); //while后边的条件满⾜,死循环的打印hehe
    return 0;
}

所以,while语句是可以实现循环效果的。

2. while语句的执行流程

⾸先上来就是执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语句,语句执行完后再继续判断,是否进行下⼀次判断。

3. while循环的实践

练习:在屏幕上打印1~10的值

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

我们就实现出来了

  1. 练习

输⼊⼀个正的整数,逆序打印这个整数的每⼀位。

例如:

输⼊:1234,输出:4 3 2 1

输⼊:521,输出:1 2 5

✅分析:

1. 首先输入一个数字n

2. 要想得到n的最低位,可以使⽤n%10的运算,得到的余数就是最低位,如:1234%10得到4

3. 要想去掉n的最低位,找出倒数第⼆位,则使⽤ n=n/10 操作就可以去掉最低位的,

**如:**n=1234/10得到123,123相较于1234就去掉了最低位,123%10就得到倒数第⼆位3。

4. 循环1和2两个步骤,在n变成0之前,就能到所有的位。

根据以上的思路,我们就可以写出这样的代码

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

二、for循环

1. 语法形式:

for 循环是三种循环中使⽤最多的, for 循环的语法形式如下:

cpp 复制代码
for (表达式1; 表达式2; 表达式3)
		语句;//如果循环体想包含更多的语句,可以加上⼤括号

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

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

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

2. for循环的执行流程

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

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

3. for循环的实践

练习:在屏幕上打印1~10的值

cpp 复制代码
#include <stdio.h>

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		printf("%d ", i);
	}
	return 0;
}

运行结果:

4. while循环和for循环的对比

for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,

但是 for 循环的三个部分⾮常集中,便于代码的维护,

⽽如果代码较多的时候 while 循环的三个部分就⽐较分散,

所以从形式上 for 循环要更优⼀些。

5. 练习

练习1:计算1~100之间3的倍数的数字之和

我们可以这样实现代码:

cpp 复制代码
#include <stdio.h>

int main()
{
    int i = 0;
    int sum = 0;
    for(i=1; i<=100; i++)
    {
        if(i % 3 == 0)//判断3的倍数
        sum += i;
    }
    printf("%d\n", sum);
    return 0;
}

三、do-while循环

1、 语法形式

在循环语句中 do while 语句的使⽤最少,它的语法如下:

cpp 复制代码
do
    语句;
while(表达式);

while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳出循环

而 do while 循环则是先直接进⼊循环体,执⾏循环语句 ,然后再执⾏ while 后的判断表达式,表达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环

2、do while循环的执行流程

在 do while 循环中先执行图上的"语句",执⾏完语句,再去执行"判断表达式",

判断表达式的结果为真,则继续循环,执⾏循环语句;判断表达式的结果为假,则循环结束。

所以在 do while 语句中循环体是⾄少执⾏⼀次的。

3、 do while循环的实践

练习:在屏幕上打印1~10的值

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

4. 练习

输⼊⼀个正整数,计算这个整数是⼏位数?

例如:

输⼊:1234 输出:4

输⼊:12 输出:2

cpp 复制代码
#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int count = 0;
	do
	{
		count++;
		n = n / 10;
	} while (n);
	printf("%d\n", count);
	return 0;
}

四、break和continue语句

在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是⾮常常⻅的现象。

C语⾔中提供了breakcontinue 两个关键字,就是应该到循环中的。

• break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执

⾏。

• continue 的作⽤是跳过本次循环 continue 后边的代码,在 for 循环和 while 循环中有所

差异的。

1、 while循环中的break和continue

(1) break举例

cpp 复制代码
#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			break;//当i等于5后,就执⾏break,循环就终⽌了
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

打印了1,2,3,4后,当i等于5的时候,循环遇到 break 的地⽅终⽌,不再打印,不再循环。

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

(2) continue举例

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

我们运行一看,发现打出1 2 3 4 后面光标一直闪烁 说明当前的程序死循环了

这是为什么呢?

是因为 当i==5后,就执⾏continue,直接跳过continue的代码,去循环的判断的地⽅

因为这⾥跳过了i++,所以i⼀直为5,判断条件恒为真,程序陷⼊死循环。

所以,continue 可以帮助我们跳过某⼀次循环后边的代码,直接到循环的判断部分,进⾏下⼀次循环的判断,如果循环的调整是在 continue 后边的话,可能会造成死循环。

2. for循环中的break和continue

(1)break举例

其实和 while 循环中的 break ⼀样, for 循环中的 break 也是⽤于终⽌循环的,不管循环还需要循环多少次,只要执⾏到了 break ,循环就彻底终⽌。

我们看一个代码

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

运⾏结果:

故,break 的作⽤是永久的终⽌循环

(2)continue举例

如果上⾯的代码 换成 continue 又是什么结果呢?

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

我们发现,i==1, 2, 3, 4, !=5,直接打印,当i==5,遇到continue,跳过了后边的打印,来到了i++的调整部分,i++ 变为6,!=5, 继续打印 6, 以此类推打印7,8,9,10 程序结束。

所以屏幕上打印 1 2 3 4 6 7 8 9 10

所以在 for 循环中 continue 的作⽤是跳过本次循环中 continue 后的代码,直接去到循环的调

整部分。

(3)do while循环中的break和continue

do while 语句中的 break 和 continue 的作⽤和 while 循环中⼏乎⼀模⼀样,

同学们可以自行测试体会一下。

五、循环的嵌套

我们已经学习了三种循环 while , do while , for ,这三种循环往往会嵌套在⼀起才能更好的解决

问题,也就是:循环嵌套,

这⾥我们看⼀个例⼦。

练习:找出100~200之间的素数,并打印在屏幕上。

这里我们要知道什么是素数

素数,也叫做质数,即只能被1和本⾝整除的数字。

我们怎么想这个问题呢?

  1. 要从100~200之间找出素数,⾸先得有100~200之间的数,这⾥可以使⽤循环产生100~200的数字

  2. 怎么判断i是否为素数呢?我们可以使用试除法,也就是可以用 2 ~ i-1 之间的数字去试除i,

那首先需要产⽣2~i-1之间的数字,也可以使⽤循环解决。

  1. 如果2~i-1之间有数字能整除i,则i不是素数,如果都不能整除,则i是素数。

那我们的代码就可以实现为:

cpp 复制代码
#include <stdio.h>
int main()
{
	int i = 0;
	//循环产⽣100~200的数字
	for (i = 100; i <= 200; i++)
	{
		//判断i是否为素数
		//循环产⽣2~i-1之间的数字
		int j = 0;
		int flag = 1;//假设i是素数
		for (j = 2; j < i; j++)
		{
			if (i % j == 0)
			{
				flag = 0;
				break;
			}
		}
		if (flag == 1)
			printf("%d ", i);
	}
	return 0;
}

那么,以上就是所有循环的用法了,至此,分支和循环语句这个知识点都讲解完了。

希望对大家的C语言学习有帮助~


相关推荐
吱吱鼠叔1 分钟前
MATLAB方程求解:1.线性方程组
开发语言·matlab·php
Antonio9156 分钟前
【CMake】使用CMake在Visual Studio内构建多文件夹工程
开发语言·c++·visual studio
LyaJpunov20 分钟前
C++中move和forword的区别
开发语言·c++
程序猿练习生24 分钟前
C++速通LeetCode中等第9题-合并区间
开发语言·c++·leetcode
一名路过的小码农34 分钟前
C/C++动态库函数导出 windows
c语言·开发语言·c++
m0_6312704037 分钟前
标准c语言(一)
c语言·开发语言·算法
万河归海42837 分钟前
C语言——二分法搜索数组中特定元素并返回下标
c语言·开发语言·数据结构·经验分享·笔记·算法·visualstudio
小周的C语言学习笔记41 分钟前
鹏哥C语言36-37---循环/分支语句练习(折半查找算法)
c语言·算法·visual studio
Messiah___43 分钟前
【论文阅读】Slim Fly: A Cost Effective Low-Diameter Network Topology 一种经济高效的小直径网络拓扑
开发语言·php
农民小飞侠1 小时前
python AutoGen接入开源模型xLAM-7b-fc-r,测试function calling的功能
开发语言·python