欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

引例:C語言實現求1到10的和(用for循環(huá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í)行語句①,執(zhí)行完語句①執(zhí)行語句②,如果語句②成立則執(zhí)行語句④,執(zhí)行完語句④執(zhí)行語句③,執(zhí)行完語句③標志著第一次循環(huán)結束;第二次循環(huán)先執(zhí)行語句②,如果語句②成立則執(zhí)行語句④,執(zhí)行完語句④執(zhí)行語句③,執(zhí)行完語句③標志著第二次循環(huán)執(zhí)行結束,隨后循環(huán)中語句的執(zhí)行順序與第二次循環(huán)一致。如果在循環(huán)過程中語句②不成立,則整個循環(huán)就結束了。直到整個循環(huán)結束后才會執(zhí)行語句⑤,因為,for語句與if語句所能控制的范圍相同,只能控制其接下來的第一條語句,言下之意是,語句⑤并不在for循環(huán)的內部。需要注意的是,語句①僅在第一次循環(huán)中執(zhí)行,在其它循環(huán)過程中不執(zhí)行。換句話說,語句①只會在整個循環(huán)過程中執(zhí)行一次。語句①的作用其實是給變量進行初始化,所以它僅參與了第一次循環(huán)。還有值得注意的是,初學時容易在for (①; ②; ③)后加分號,這個情況我已經在《C語言if語句中常見的問題》這篇文章中的空語句問題中詳細敘述了其中的道理,并且在for語句中依然適用,有興趣的話可以一看。

練習

C語言實現求1到10中奇數的和

#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語言實現求1+1/2+1/3+…+1/99+1/100

初學時的錯誤代碼:

#include <stdio.h>

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

	return 0;
}

錯誤原因:沒有考慮到1/i的數據類型。在C語言中,整型除以整型得到的結果只有整數位。例如,16/3 = 5。上述程序中i是整型變量,所以1/i也是整型,故從i大于等于2時,1/i的值永遠為0。

因此需要將1/i的值想辦法變?yōu)楦↑c數才可以實現想要的功能。C語言規(guī)定,只要被除數與除數其中的一個為浮點數,則商為浮點數。故解決的辦法有兩種,第一種是將1/i寫為1.0/i,第二種是將整型變量i強制類型轉化為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直接定義為浮點型變量?

答案是不能,因為浮點型數據是以IEEE754標準來存儲的,但IEEE754標準無法確保精確存儲每一個浮點數,例如,6.234在存儲過程中很可能存的不是6.234而是6.23399999,這是IEEE754標準的缺陷。所以即便在該程序中將i定義為浮點型變量后輸出的結果是正確的,也不能確保在其他程序中依然正確,因為i不一定是準確的數字。需要注意的是,我們一般不會把循環(huán)中不斷發(fā)生更新的變量定義為浮點型變量,因為浮點型數據存儲過程屬于非精確存儲。

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

引例:C語言實現求1到100之間所有可以被3整除的數字之和

#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;
}

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

#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;
}

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

編寫C語言程序求1到100之間的奇數之和

#include <stdio.h>

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

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

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

	return 0;
}

編寫C語言程序求1到100之間的奇數的個數

#include <stdio.h>

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

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

	printf("個數為%d\n", count);

	return 0;
}

編寫C語言程序求1到100之間的奇數的平均值

#include <stdio.h>

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

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

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

	return 0;
}

編寫C語言程序求1到100之間的奇數之和與1到100之間的偶數之和

#include <stdio.h>

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

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

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

	return 0;
}

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

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

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

換個方式:

因為for語句與if語句所能控制的范圍相同,只能控制其接下來的第一條語句,所以語句⑦屬于內部for循環(huán),而語句⑦與內部的for循環(huán)語句構成的語句整體是一個語句,也就是上圖中的綠色方框部分,這個整體語句又是外層for循環(huán)內部的第一個語句,所以,外層for循環(huán)所控制的語句就是綠色方框部分,而外層for循環(huán)完整的結構就是上圖中的橙色方框部分。所以按照for循環(huán)的大體執(zhí)行順序,首先會執(zhí)行語句①,執(zhí)行完語句①執(zhí)行語句②,如果語句②成立則會執(zhí)行綠色方框部分,綠色方框部分是單層for循環(huán),所以執(zhí)行過程按照單層for循環(huán)的執(zhí)行循序執(zhí)行,當內部的綠色方框部分執(zhí)行完畢后,則會執(zhí)行語句③,語句③執(zhí)行完標志著整體一次循環(huán)結束,下一次循環(huán)又從判斷語句②是否成立開始,如果成立,則執(zhí)行綠色方框部分;如果不成立,則整個循環(huán)結束。整個循環(huán)結束后才會執(zhí)行語句⑧,因為語句⑧并不屬于這兩層for循環(huán)中的任何一層。

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

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

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

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

#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:下面的程序輸出結果是什么?

#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:下面的程序輸出結果是什么?

#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語言實現求1到10的和(用while循環(huá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;
}

對比:C語言實現求1到10的和(用for循環(huá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)的相互轉換:

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

五、總結

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

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

相關文章

  • c語言打開文件函數使用方法

    c語言打開文件函數使用方法

    這篇文章主要介紹了c語言打開文件函數使用方法,需要的朋友可以參考下
    2014-02-02
  • C++實現二分法的一些細節(jié)(常用場景)

    C++實現二分法的一些細節(jié)(常用場景)

    二分法算法思想首先確定有根區(qū)間,將區(qū)間二等分,通過判斷f(x)的符號,逐步將有根區(qū)間縮小,直至有根區(qū)間足夠小,便可求出滿足精度要求的近似值
    2021-07-07
  • C語言從基礎到進階全面講解數組

    C語言從基礎到進階全面講解數組

    數組是一組有序的數據的集合,數組中元素類型相同,由數組名和下標唯一地確定,數組中數據不僅數據類型相同,而且在計算機內存里連續(xù)存放,地址編號最低的存儲單元存放數組的起始元素,地址編號最高的存儲單元存放數組的最后一個元素
    2022-05-05
  • Qt利用QJson實現解析數組的示例詳解

    Qt利用QJson實現解析數組的示例詳解

    這篇文章主要為大家詳細介紹了Qt如何利用QJson實現解析數組功能,文中的示例代碼講解詳細,對我們學習Qt有一定幫助,需要的小伙伴可以了解一下
    2022-10-10
  • 深入了解C++11中promise和future的使用

    深入了解C++11中promise和future的使用

    C++11中promise和future機制是用于并發(fā)編程的一種解決方案,用于在不同線程完成數據傳遞(異步操作)。Promise和Future提供了訪問異步操作結果的機制,可以在線程之間傳遞數據和異常消息。本文就來聊聊二者的使用,希望對大家有所幫助
    2022-11-11
  • C語言中結構體和共用體實例教程

    C語言中結構體和共用體實例教程

    這篇文章主要給大家介紹了關于C語言中結構體和共用體的相關資料,結構體是一種自定義的復合數據類型,共用體也叫聯合體,使幾個不同類型的變量共占一段內存(相互覆蓋),需要的朋友可以參考下
    2021-06-06
  • C++類型兼容規(guī)則詳情

    C++類型兼容規(guī)則詳情

    這篇文章主要介紹了C++類型兼容規(guī)則詳情,共有繼承時,任何需要父類對象的地方,都能使用子類對象“替代”,這就是類型兼容規(guī)則,下面一起來了解文章相關內容吧
    2022-03-03
  • C語言小程序 楊輝三角示例代碼

    C語言小程序 楊輝三角示例代碼

    輸入要顯示的楊輝三角的行數,會打印出金字塔型的楊輝三角,不過行數太多的話,效果不太好,可以再調整一下格式控制
    2013-07-07
  • C語言基礎知識分享續(xù)篇

    C語言基礎知識分享續(xù)篇

    這篇文章主要介紹了C語言基礎知識分享續(xù)篇的相關資料,需要的朋友可以參考下
    2023-01-01
  • C語言循環(huán)鏈表實現貪吃蛇游戲

    C語言循環(huán)鏈表實現貪吃蛇游戲

    這篇文章主要為大家詳細介紹了C語言循環(huán)鏈表實現貪吃蛇,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11

最新評論