国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

C語言:數組(及冒泡排序)

Tony_Zby / 2473人閱讀

摘要:代碼修正后修改后,我們可以排列無限個數字這樣,一個冒泡排序就完成了。,數組名表示整個數組。

首先感謝一位博主: 原來45 他寫的博客內容十分詳細,為我創造博客提供了莫大的幫助,也為我解決了很多困難。

先貼出2篇他的文章

C語言從入門到入土(入門篇)(數組p1)_原來45的博客-CSDN博客

C語言從入門到入土(入門篇)(數組p2以及對遞歸的補充)_原來45的博客-CSDN博客

目錄

1.數組的初始化

2.二維數組的創建、初始化、使用和儲存

3.?數組越界

4.冒泡排序(升序)實現

5.數組名


1.數組的初始化

 int arr1[10]={1,2,3};  //這里代表前三個數初始化為1,2,3,而后面剩下的數組全部初始化為0; int arr2[]={1,2,3,4};  //這里表示這個數組的4個數字被初始化成了1,2,3,4,總共4個元素char arr3[]={"a",98,"c"}; //這里的98實際上儲存著的是b的ASCII碼值char arr4[]="abcdef";   //這個數組儲存了7個元素,最后一個是/0

當用雙引號包括時,結尾會自動加一個/0。

sizeof 和 strlen 的區別:

1)strlen是一個庫函數,計算的是字符串的長度,并且只能針對字符串(無法針對整型的數),關注字符串中是否有/0,同時strlen計算的是/0之前的字符個數。即/0不會被strlen記錄大小。

2)sizeof是一個操作符(運算符),sizeof是用來計算變量所占空間內存大小的,任何類型都是可以使用的,只關注空間大小,不在乎內存中是否存在/0。即/0也會被sizeof記錄大小。

2.二維數組的創建、初始化、使用和儲存

創建的方式如下:?

int arr [3][4];char arr[3][5];double arr[2][4];

這里以 int arr[3][4] 為例,看看二維數組是怎么存放數據的

?3指的是有3行(行豎著)? 4指的是有4列(列橫著)

如何初始化呢?

int arr [ 3 ][ 4 ] = { 1 , 2 , 3 , 4 };int arr [ 3 ][ 4 ] = {{ 1 , 2 },{ 4 , 5 }};int arr [][ 4 ] = {{ 2 , 3 },{ 4 , 5 }}; //注意這里,行可以省略,列不能省略

那如果初始化沒有那么多數字呢?不夠的數字就會被初始化成0。

同時,也可以這樣子初始化

怎么使用二維數組呢?

?二維數組如何存儲呢?

?其實二維數組在內存中也是連續開辟空間的,每一個數字往后4個字節才是下一個數字。只不過為了方便理解,把二維數組畫成矩陣的形狀更加方便理解。

3.?數組越界

舉個例子:數組共有十個數,而你訪問了第十一個數,這就叫越界。

這里越界了但是沒有報錯:

?這里報錯了:

4.冒泡排序(升序)實現

什么事冒泡排序?

現有一個有10個數的數組,10個數字隨機排序,讓其有序排列,這就是冒泡排序。

首先我們先來了解如何求一個數組的長度:

int sz = sizeof(arr) / sizeof(arr[0]);

用這個數組的總占空間大小除以這個數組第一個元素所占空間大小,就得到了這個數組的長度。

?我們先寫主函數:

int main(){	int arr[] = { 3,6,4,5,8,0,7,9,1,2};//定義一個數組	bubble_sort(arr, sz);//調用函數	int i = 0;	for (i = 0; i < sz-1; i++)	{		printf("%d ", arr[i]);//打印數組的每一位	}	return 0;}

排序函數,核心思想:兩個數相比較,如果前一個數比后一個數大,兩個數字就交換位置

void bubble_sort(int arr[]){int sz = sizeof(arr) / sizeof(arr[0]);	int j = 0;	for (j = 0; j < sz - 1; j++)//我們比的時候只在同一個位置比,然后后面誰小我們就把誰換過來,一直到最后一個數我們就發現有sz個數,我們就要進行sz-1趟比較	{		int k = 0;		for (k = 0; k < sz - 1 - j; k++)每一趟比較的次數就是 sz-1 再 -j(因為前面的數已經排好了所以減去)		{			if (arr[k] >= arr[k + 1])			{				int tmp = arr[k];				arr[k] = arr[k + 1];				arr[k + 1] = tmp;			}		}	}}

代碼運行,發現代碼沒有達到我們想要的作用,我們可以打開調試看一下:

?為什么sz的值是1呢?哪里出問題了呢?

當我們傳遞arr時,傳遞的其實是首元素地址,形參接受的也是首元素地址,arr為指針,用sizeof算出來的大小是4,除以arr第一個元素的大小,4/4=1,所以我們要把sz放在主函數里面求,直接傳一個整形的sz的值給函數。

代碼修正后:

void bubble_sort(int arr[],int sz){	int j = 0;	for (j = 0; j < sz - 1; j++)	{		int k = 0;		for (k = 0; k < sz - 1 - j; k++)		{			if (arr[k] > arr[k + 1])			{				int tmp = arr[k];				arr[k] = arr[k + 1];				arr[k + 1] = tmp;			}		}	}}int main(){	int arr[] = {3,5,7,9,1,2,4,6,0};	int sz = sizeof(arr) / sizeof(arr[0]);	bubble_sort(arr, sz);	int i = 0;	for (i = 0; i < 10; i++)	{		printf("%d ", arr[i]);	}	return 0;}

修改后,我們可以排列無限個數字

void bubble_sort(int arr[],int sz){	int j = 0;	for (j = 0; j < sz - 1; j++)	{		int k = 0;		for (k = 0; k < sz - 1 - j; k++)		{			if (arr[k] >= arr[k + 1])			{				int tmp = arr[k];				arr[k] = arr[k + 1];				arr[k + 1] = tmp;			}		}	}}int main(){	int arr[] = { 3,2,6,666666,55555555,7777777,2572457,2472457,568458,59679,2,4,7,8,4,9,4,2,8,1,4};	int sz = sizeof(arr) / sizeof(arr[0]);	bubble_sort(arr, sz);	int i = 0;	for (i = 0; i < sz-1; i++)	{		printf("%d ", arr[i]);	}	return 0;}

這樣,一個冒泡排序就完成了。?

5.數組名

先說結論:數組名是數組首元素的地址。

printf ( "%p/n" , arr);printf ( "%p/n" , & arr[0]);//兩個表達式意思相等

但有兩個例外:(在此假設數組名字定為arr)

1. sizeof(arr)?,計算的是整個數組的大小。?sizeof?內部多帶帶放一個數組名,數組名表示整個數組。

2.? &arr,取出的是數組的地址。?&arr,數組名表示整個數組。

對于第二點,額外補充一下:

如果 &arr +1,即 數組+1 則會跳過這個數組所有的數字,會在內存中直接顯示到這個數組最后一個數字的后面。

在此,數組的基礎知識就講完了,消化去吧~下一篇就是恐怖的井字棋!

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/123498.html

相關文章

  • 怎么樣才能做到對多種數據類型排序C語言快速排序——qsort函數其模擬實現

    摘要:我們以冒泡排序為例,模擬實現函數。交換每單位字節對于的二進制序列這樣,冒泡排序就能排序多種數據類型,模擬實現了函數,當然也可以使用其他的排序方法模擬實現函數。 ??...

    alphahans 評論0 收藏0
  • 冒泡排序就這么簡單

    摘要:冒泡排序就這么簡單在我大一的時候自學語言和數據結構,我當時就接觸到了冒泡排序當時使用的是語言編寫的。我最開始接觸的就是冒泡排序,所以這篇博文主要講的是冒泡排序。 冒泡排序就這么簡單 在我大一的時候自學c語言和數據結構,我當時就接觸到了冒泡排序(當時使用的是C語言編寫的)。現在大三了,想要在暑假找到一份實習的工作,又要回顧一下數據結構與算法的知識點了。 排序對我們來說是一點也不陌生了,當...

    legendaryedu 評論0 收藏0
  • C語言進階:指針進階續

    摘要:故使用無具體類型,又稱通用類型,即可以接收任意類型的指針,但是無法進行指針運算解引用,整數等。求指針所占字節而不是解引用訪問權限大小。數組就是整個數組的大小,數組元素則是數組元素的大小,指針大小都為。 ...

    ingood 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<