C语言中的循环语句(while、dowhile、for)

goto语句

如果我们想要实现从0输出到n,如果要写0~100的话那我们就要写100个printf,这样非常麻烦,也
不现实,在汇编中当程序print完了我们可以用一个jmp让它回去继续输出,在C语言中一样可以实现,
我们可以用goto语句。

例子:

#include <stdio.h>			//头文件
#include <windows.h>


void function(int x)		//定义函数
{
	int i = 0;				//定义变量
B:							//设置返回点
	printf("%d \n",i);		//输出i的值
	i++;					//在i的基础上进行自加
	if(i<=x)				//进行判断
		goto B;				//返回到B

	return;					//函数结束
}

void main()					//程序入口
{
	function(10000);		//调用函数并传参
	
		return;				//程序结束
}

运行结果:
在这里插入图片描述
我们可以去看一下反汇编,这里的goto对应的就是jmp:
在这里插入图片描述

循环语句的类型

在C语言中循环语句的类型有以下三种:

while语句

do..while语句

for语句

while语句

while语句格式

while(表达式)
{	
	语句;
}

刚才的例子在这里用while来实现也很简单:

#include <stdio.h>			//头文件
#include <windows.h>


void function(int x)		//定义函数
{
	int i = 0;				//定义变量
A:	while(i<=x)				//开始循环
	{
		printf("%d\n",i);	//若循环判断成立则输出i的值
		i++;				//i自加,并跳回到A,直至判断不成立跳出while语句
	}
	
	return;					//函数结束
}

void main()					//程序入口
{
	function(10000);		//调用函数并传参
	
		return;				//程序结束
}

这里写A纯属是为了方便理解,正常写完保存是会报警告的,看一下运行结果:
在这里插入图片描述

死循环

while判断是否进入循环就两个结果,0和1,如果是0就跳出去,如果是1就跳进去,那么死循环就不难理解了,while(1)就行了,程序就会无限输出,直至死机。

例子:

#include <stdio.h>			//头文件
#include <windows.h>


void function(int x)		//定义函数
{
	int i = 0;				//定义变量
	while(1)				//开始循环(无限循环)
	{
		printf("%d\n",i);	//若循环判断成立则输出i的值
		i++;				//i自加,并跳回到A,直至判断不成立跳出while语句
	}
	
	return;					//函数结束
}

void main()					//程序入口
{
	function(10000);		//调用函数并传参
	
		return;				//程序结束
}

运行结果:
在这里插入图片描述

语句的嵌套
格式

while(表达式)
{
	其他语句
}

现在我们把例子改一下,要求输出1~100内所有的偶数:

#include <stdio.h>			//头文件
#include <windows.h>


void function(int x)		//定义函数
{
	int i = 0;				//定义变量
	while(i<=x)				//开始循环
	{
		if(i%2 == 0)		//i的值对2取余,若为零则进行输出
		{
			printf("%d\n",i);	//若循环判断成立则输出i的值
		}
		i++;					//i自加,并跳回到A,直至判断不成立跳出while语句	

}
	return;					//函数结束
}

void main()					//程序入口
{
	function(100);			//调用函数并传参
	
		return;				//程序结束
}

运行结果:
在这里插入图片描述

do…while语句

do..while语句格式

do
{
		语句
}while(表达式);

当程序运行到while时判断若为零则跳回继续执行,反之跳出,即使判断不成立,也会执行一次。

例子:

#include <stdio.h>				//头文件
#include <windows.h>

void main()						//程序入口
{
	int day = 1;				//定义局部变量
	do							//开始循环
	{
		printf("%d\n", day);	//输出参数
		day++;					//参数自加
	}while (day <= 31);			//判断是否大于31,大于跳出循环
return;							//程序结束
}

运行结果:

在这里插入图片描述

在汇编中,do…while与while的区别是,while先进行判断,在进行输出,而do…while则是,先输出一次,在进行判断,若符合则输出,不符合则跳出循环。

for语句

格式
for(表达式1;表达式2;表达式3)
{
		需要执行的代码4
}

这里表达式1与表达式3没有什么特定的要求,但是表达式2必须要有返回值。

执行顺序:
第一次:1243
第二次:243
第三次:243
...
若表达式2不成立则跳出循环,执行后面的语句。

例子:

#include <stdio.h>			//头文件
#include <windows.h>

void Q1()					//定义函数Q1
{
	printf("Q1 \n");
}
int Q2()					//定义函数Q2
{
	printf("Q2 \n");
	return -1;
}
void Q3()					//定义函数Q3
{
	printf("Q3 \n");
}
void testfor()				//定义函数testfor
{
	for(Q1();Q2();Q3())		//开始for循环,调用前面的三个函数
	{
		printf("Q4 \n");	//执行完Q1执行Q2,条件符合执行Q4,在执行Q3
	}
	return;					//循环结束
}

void mian()					//程序入口
{
	testfor();				//调用testfor()函数

	return;					//程序结束
}

这里可以看到,程序的运行顺序是1、2、4、3、2、4、3、2、4、3…:
在这里插入图片描述

现在我们可以用for语句来输出1~100的值了:

#include <stdio.h>				//头文件
#include <windows.h>


void testfor()					//定义函数
{
	for(int i = 0;i>100;i++)	//定义for循环的三个表达式
	{
		printf("%d \n");		//输出结果
	}
	return;						//循环结束
}

void mian()						//程序入口
{
	testfor();					//调用testfor()函数

	return;						//程序结束
}

这里有两点需要说明:

第一、for循环的三个表达式可以省略,但是分号不可以省略。

例如:

for(;;)
{
	printf("默认成立 \n");
}
for(;-1;)
{
	printf("第二个表达式非零就成立");
}
for(;0;)
{
	printf("不成立 \n");
}

第二、for循环的第一三表达式可以使用逗号。

例如:

int x;
int y;
int z;

for(x = 0,y = 0,z = 0:x<10;x++,y++,z++)
{
	printf("%d %d %d \n",x,y,z);
}
发布了60 篇原创文章 · 获赞 68 · 访问量 8404

猜你喜欢

转载自blog.csdn.net/qq_43573676/article/details/105029168