最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解C語(yǔ)言中for循環(huán)與while循環(huán)的用法

 更新時(shí)間:2022年07月08日 11:09:04   作者:南森森  
這篇文章主要通過(guò)幾個(gè)示例為大家介紹一下C語(yǔ)言中for循環(huán)與while循環(huán)的用法以及二者的區(qū)別,文中的代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C語(yǔ)言有一定幫助,需要的可以參考一下

一、單層for循環(huán)

引例:C語(yǔ)言實(shí)現(xiàn)求1到10的和(用for循環(huán)實(shí)現(xiàn))

#include <stdio.h>

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

單層for循環(huán)執(zhí)行的順序:

第一次循環(huán)先執(zhí)行語(yǔ)句①,執(zhí)行完語(yǔ)句①執(zhí)行語(yǔ)句②,如果語(yǔ)句②成立則執(zhí)行語(yǔ)句④,執(zhí)行完語(yǔ)句④執(zhí)行語(yǔ)句③,執(zhí)行完語(yǔ)句③標(biāo)志著第一次循環(huán)結(jié)束;第二次循環(huán)先執(zhí)行語(yǔ)句②,如果語(yǔ)句②成立則執(zhí)行語(yǔ)句④,執(zhí)行完語(yǔ)句④執(zhí)行語(yǔ)句③,執(zhí)行完語(yǔ)句③標(biāo)志著第二次循環(huán)執(zhí)行結(jié)束,隨后循環(huán)中語(yǔ)句的執(zhí)行順序與第二次循環(huán)一致。如果在循環(huán)過(guò)程中語(yǔ)句②不成立,則整個(gè)循環(huán)就結(jié)束了。直到整個(gè)循環(huán)結(jié)束后才會(huì)執(zhí)行語(yǔ)句⑤,因?yàn)?,for語(yǔ)句與if語(yǔ)句所能控制的范圍相同,只能控制其接下來(lái)的第一條語(yǔ)句,言下之意是,語(yǔ)句⑤并不在for循環(huán)的內(nèi)部。需要注意的是,語(yǔ)句①僅在第一次循環(huán)中執(zhí)行,在其它循環(huán)過(guò)程中不執(zhí)行。換句話說(shuō),語(yǔ)句①只會(huì)在整個(gè)循環(huán)過(guò)程中執(zhí)行一次。語(yǔ)句①的作用其實(shí)是給變量進(jìn)行初始化,所以它僅參與了第一次循環(huán)。還有值得注意的是,初學(xué)時(shí)容易在for (①; ②; ③)后加分號(hào),這個(gè)情況我已經(jīng)在《C語(yǔ)言if語(yǔ)句中常見(jiàn)的問(wèn)題》這篇文章中的空語(yǔ)句問(wèn)題中詳細(xì)敘述了其中的道理,并且在for語(yǔ)句中依然適用,有興趣的話可以一看。

練習(xí)

C語(yǔ)言實(shí)現(xiàn)求1到10中奇數(shù)的和

#include <stdio.h>

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

C語(yǔ)言實(shí)現(xiàn)求1+1/2+1/3+…+1/99+1/100

初學(xué)時(shí)的錯(cuò)誤代碼:

#include <stdio.h>

int main()
{	
	int i;
	float sum = 0; // 考慮到和是小數(shù),所以定義sum為float類型
	
	for (i = 1; i <= 100; i++)
		sum = sum + 1/i;
	
	printf("sum = %f\n", sum); // float類型的變量用%f輸出

	return 0;
}

錯(cuò)誤原因:沒(méi)有考慮到1/i的數(shù)據(jù)類型。在C語(yǔ)言中,整型除以整型得到的結(jié)果只有整數(shù)位。例如,16/3 = 5。上述程序中i是整型變量,所以1/i也是整型,故從i大于等于2時(shí),1/i的值永遠(yuǎn)為0。

因此需要將1/i的值想辦法變?yōu)楦↑c(diǎn)數(shù)才可以實(shí)現(xiàn)想要的功能。C語(yǔ)言規(guī)定,只要被除數(shù)與除數(shù)其中的一個(gè)為浮點(diǎn)數(shù),則商為浮點(diǎn)數(shù)。故解決的辦法有兩種,第一種是將1/i寫為1.0/i,第二種是將整型變量i強(qiáng)制類型轉(zhuǎn)化為float類型,正確的代碼如下:

#include <stdio.h>

int main()
{	
	int i;
	float sum = 0;
	
	for (i = 1; i <= 100; i++)
		sum = sum + 1.0/i;// 或 sum = sum + 1/(float)(i);
	
	printf("sum = %f\n", sum);

	return 0;
}

思考1:如果將上述代碼中的sum = sum + 1/(float)(i);改為sum = sum + (float)(1/i);后能否正確輸出sum的值?

思考2:能否將i直接定義為浮點(diǎn)型變量?

答案是不能,因?yàn)楦↑c(diǎn)型數(shù)據(jù)是以IEEE754標(biāo)準(zhǔn)來(lái)存儲(chǔ)的,但I(xiàn)EEE754標(biāo)準(zhǔn)無(wú)法確保精確存儲(chǔ)每一個(gè)浮點(diǎn)數(shù),例如,6.234在存儲(chǔ)過(guò)程中很可能存的不是6.234而是6.23399999,這是IEEE754標(biāo)準(zhǔn)的缺陷。所以即便在該程序中將i定義為浮點(diǎn)型變量后輸出的結(jié)果是正確的,也不能確保在其他程序中依然正確,因?yàn)閕不一定是準(zhǔn)確的數(shù)字。需要注意的是,我們一般不會(huì)把循環(huán)中不斷發(fā)生更新的變量定義為浮點(diǎn)型變量,因?yàn)楦↑c(diǎn)型數(shù)據(jù)存儲(chǔ)過(guò)程屬于非精確存儲(chǔ)。

二、for循環(huán)與if選擇的嵌套

引例:C語(yǔ)言實(shí)現(xiàn)求1到100之間所有可以被3整除的數(shù)字之和

#include <stdio.h>

int main()
{
	int i, sum = 0;

	for (i = 1; i <= 100; i++)
	{
		if (i % 3 == 0)
			sum = sum + i;
	}

	printf("sum = %d\n", sum);

	return 0;
}

思考:下面的程序輸出結(jié)果是什么?

#include <stdio.h>

int main()
{
	int i, sum = 0;

	for (i = 1; i <= 12; i++)
	{
		if (i % 3 == 0)
			sum = sum + i;
		printf("sum = %d\n", sum);
	}

	return 0;
}

練習(xí)(以下題目均要求使用for循環(huán)和if選擇的嵌套來(lái)完成)

編寫C語(yǔ)言程序求1到100之間的奇數(shù)之和

#include <stdio.h>

int main()
{
	int i;
	int sum = 0;

	for (i = 1; i <= 100; i++)
	{
		if (i % 2 == 1)
			sum += i;
	}

	printf("奇數(shù)之和為%d\n", sum);

	return 0;
}

編寫C語(yǔ)言程序求1到100之間的奇數(shù)的個(gè)數(shù)

#include <stdio.h>

int main()
{
	int i;
	int count = 0;

	for (i = 1; i <= 100; i++)
	{
		if (i % 2 == 1)
			count++;
	}

	printf("個(gè)數(shù)為%d\n", count);

	return 0;
}

編寫C語(yǔ)言程序求1到100之間的奇數(shù)的平均值

#include <stdio.h>

int main()
{
	int i;
	int count = 0;
	int sum = 0;
	float average; // 考慮到平均值可能帶有小數(shù)位,所以將平均值定義為float類型

	for (i = 1; i <= 100; i++)
	{
		if (i % 2 == 1)
		{
			count++;
			sum += i;
		}
	}

	average = 1.0 * sum / count; //也可以運(yùn)用強(qiáng)制類型轉(zhuǎn)換寫成average = (float)(sum)/count;
	printf("平均數(shù)為%f\n", average);

	return 0;
}

編寫C語(yǔ)言程序求1到100之間的奇數(shù)之和與1到100之間的偶數(shù)之和

#include <stdio.h>

int main()
{
	int i;
	int sum1 = 0; // 奇數(shù)和
	int sum2 = 0; // 偶數(shù)和

	for (i = 1; i <= 100; i++)
	{
		if (i % 2 == 1)
			sum1 += i;
		else
			sum2 += i;
	}

	printf("奇數(shù)之和為%d,偶數(shù)之和為%d\n", sum1, sum2);

	return 0;
}

三、多層for循環(huán)的嵌套

多層for循環(huán)執(zhí)行的順序:

第一次循環(huán)先執(zhí)行語(yǔ)句①,執(zhí)行完語(yǔ)句①執(zhí)行語(yǔ)句②,如果語(yǔ)句②成立則跳入內(nèi)部循環(huán)執(zhí)行語(yǔ)句④,執(zhí)行完語(yǔ)句④執(zhí)行語(yǔ)句⑤,如果語(yǔ)句⑤成立則執(zhí)行語(yǔ)句⑦,執(zhí)行完語(yǔ)句⑦執(zhí)行語(yǔ)句⑥,執(zhí)行完語(yǔ)句⑥執(zhí)行語(yǔ)句⑤,如果如果語(yǔ)句⑤不成立,則標(biāo)志著內(nèi)部循環(huán)執(zhí)行完畢,接下來(lái)跳出內(nèi)部循環(huán)執(zhí)行語(yǔ)句③,執(zhí)行完語(yǔ)句③標(biāo)志著第一次整個(gè)循環(huán)結(jié)束;第二次循環(huán)先執(zhí)行語(yǔ)句②,如果語(yǔ)句②成立,則再次跳入內(nèi)部循環(huán)執(zhí)行語(yǔ)句④,以此類推;如果語(yǔ)句②不成立,整個(gè)循環(huán)就結(jié)束了。由于⑧不屬于任何一個(gè)for循環(huán)內(nèi)部的語(yǔ)句,所以要在整個(gè)循環(huán)執(zhí)行完畢后才會(huì)執(zhí)行語(yǔ)句⑧。

換個(gè)方式:

因?yàn)閒or語(yǔ)句與if語(yǔ)句所能控制的范圍相同,只能控制其接下來(lái)的第一條語(yǔ)句,所以語(yǔ)句⑦屬于內(nèi)部for循環(huán),而語(yǔ)句⑦與內(nèi)部的for循環(huán)語(yǔ)句構(gòu)成的語(yǔ)句整體是一個(gè)語(yǔ)句,也就是上圖中的綠色方框部分,這個(gè)整體語(yǔ)句又是外層for循環(huán)內(nèi)部的第一個(gè)語(yǔ)句,所以,外層for循環(huán)所控制的語(yǔ)句就是綠色方框部分,而外層for循環(huán)完整的結(jié)構(gòu)就是上圖中的橙色方框部分。所以按照f(shuō)or循環(huán)的大體執(zhí)行順序,首先會(huì)執(zhí)行語(yǔ)句①,執(zhí)行完語(yǔ)句①執(zhí)行語(yǔ)句②,如果語(yǔ)句②成立則會(huì)執(zhí)行綠色方框部分,綠色方框部分是單層for循環(huán),所以執(zhí)行過(guò)程按照單層for循環(huán)的執(zhí)行循序執(zhí)行,當(dāng)內(nèi)部的綠色方框部分執(zhí)行完畢后,則會(huì)執(zhí)行語(yǔ)句③,語(yǔ)句③執(zhí)行完標(biāo)志著整體一次循環(huán)結(jié)束,下一次循環(huán)又從判斷語(yǔ)句②是否成立開(kāi)始,如果成立,則執(zhí)行綠色方框部分;如果不成立,則整個(gè)循環(huán)結(jié)束。整個(gè)循環(huán)結(jié)束后才會(huì)執(zhí)行語(yǔ)句⑧,因?yàn)檎Z(yǔ)句⑧并不屬于這兩層for循環(huán)中的任何一層。

思考1:下面的for循環(huán)的執(zhí)行順序是什么樣的?

思考2:下面的for循環(huán)的執(zhí)行順序是什么樣的?

思考3:下面的for循環(huán)的執(zhí)行順序是什么樣的?

思考4:下面的程序輸出結(jié)果是什么?

#include <stdio.h>

int main()
{	
	int i, j;
	
	for (i = 0; i <3; i++)
		for (j = 2; j < 5; j++)
			printf("AAAA\n");
		printf("BBBB\n");

	return 0;
}

思考5:下面的程序輸出結(jié)果是什么?

#include <stdio.h>

int main()
{	
	int i, j;
	
	for (i = 0; i <3; i++)
		printf("AAAA\n");
		for (j = 2; j < 5; j++)
			printf("BBBB\n");
		printf("CCCC\n");

	return 0;
}

思考6:下面的程序輸出結(jié)果是什么?

#include <stdio.h>

int main()
{	
	int i, j;
	
	for (i = 0; i <3; i++)
	{
		printf("AAAA\n");
		for (j = 2; j < 5; j++)
			printf("BBBB\n");
		printf("CCCC\n");
	}

	return 0;
}

四、while循環(huán)

引例:C語(yǔ)言實(shí)現(xiàn)求1到10的和(用while循環(huán)實(shí)現(xiàn))

#include <stdio.h>

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

對(duì)比:C語(yǔ)言實(shí)現(xiàn)求1到10的和(用for循環(huán)實(shí)現(xiàn))

#include <stdio.h>

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

while循環(huán)與for循環(huán)的相互轉(zhuǎn)換:

從上述兩個(gè)程序可知,while循環(huán)和for循環(huán)可以進(jìn)行互相轉(zhuǎn)換,言下之意是,所有能用for循環(huán)實(shí)現(xiàn)的功能,就可以用while循環(huán)實(shí)現(xiàn),反之同理。但是,while循環(huán)和for循環(huán)在寫法上有一定的差別。

五、總結(jié)

循環(huán)結(jié)構(gòu)在學(xué)習(xí)編程中起到至關(guān)重要的作用,幾乎每個(gè)有用的程序中都有循環(huán)結(jié)構(gòu)的身影,循環(huán)結(jié)構(gòu)是我們以后編程中的重中之重,掌握其執(zhí)行順序是理解程序的不二法門.

以上就是詳解C語(yǔ)言中for循環(huán)與while循環(huán)的用法的詳細(xì)內(nèi)容,更多關(guān)于C語(yǔ)言 for while循環(huán)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

无棣县| 兴隆县| 宿迁市| 林芝县| 金川县| 区。| 陵川县| 镶黄旗| 镇宁| 衡山县| 桦川县| 溧阳市| 昔阳县| 东丰县| 涞源县| 漯河市| 北票市| 沈丘县| 包头市| 德惠市| 乳山市| 顺义区| 齐齐哈尔市| 涟水县| 伊金霍洛旗| 砀山县| 阳西县| 钟祥市| 鸡西市| 广汉市| 郴州市| 津南区| 休宁县| 宜州市| 定襄县| 郑州市| 邹平县| 志丹县| 宾川县| 五峰| 镇康县|