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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章