4.【數組】

【數組】
	爲什麼需要數組
		爲了解決大量同類型數據的的存儲和使用問題
		爲了模擬現實世界
		-------------------------
		#include <stdio.h>
		int main()
		{
			int a[5] = {1,2,3,4,5};  //a是數組的名字,5表示數組元素的個數,並且這個5個元素分別用a[0] a[1] a[2] a[3] a[4] 表示
			int i;
			for(i=0; i<5; ++i)
				printf("%d\n",a[i]);  //將會依次輸出a[5]裏面的5個元素的值1 2 3 4 5
			printf("%d\n",a[100]);   //因爲a[100]沒有在a[5]裏面所以,會是輸出一個其他的值
			return 0;
		}
		-----------------------------------
	數組的分類
		一維數組
			怎樣定義一維數組
				爲那個變量連續分配存儲空間
				所有的變量數據類型必須相同
				所有變量所佔字節大小必須相等
				列子:
					int a[5];  
					一維數組名不代表數組中所有的元素
					一維數組名代表數組第一個元素的地址
					有關一維數組的操作
						初始化
							完全初始化
								int a[5] = {1,2,3,4,5};
							不完全初始化,未進行初始化的元素自動爲零
								int a[5] = {1,2,3};
							不初始化,所有元素是垃圾值
								int a[5];
							清零,裏面的每個元素初始值都爲零
								int a[5] = {0};
							錯誤寫法:
								int a[5];
								a[5] = {1,2,3,4,5};  //錯誤
								只有在定義數組的同時纔可以整體賦值,其他情況下整體賦值都是錯誤的
								只有在定義數組的時候,中括號裏面的數字才表示元素的個數,其他時候都表示爲裏面元素的下標,即元素的位置
								int a[5] = {1,2,3,4,5};
								a[5] = 100;  //錯誤,因爲沒有a[5]這個元素,內裏元素最大隻到到a[4]

								int a[5] = {1,2,3,4,5};
								int b[5];
								如果要把a數組中的值全部複製給b數組,怎麼寫呢?
									錯誤的寫法:
										b = a;// error,因爲這裏的a代表的是a[5]這個數組裏面的第一個元素的地址
									正確的寫法:
										for(i=0;i<5;++i)
											b[i] = a[i];
						賦值------------------------------------
							#include <stdio.h>
							int main()
							{
								int a[5];
								int i;

								scanf("%d",a[0]);
								printf("a[0]=%d\n",a[0]);

								scanf("%d",a[3]);
								printf("a[3]=%d\n",a[3]);

								for (i=0; i<5; ++i)
									printf("%d",a[i]);

								return 0;
							}
							----如果輸入1和2,則輸出結果爲:-----
							a[0]=1
							a[3]=2
							1,數值,數值,2,數值
						排序
						求最大/最小值
						倒置
						查找
						插入
						刪除
					-------------------------------------
					#include <stdio.h>
						int main()
						{
							int a[7] = {1,2,3,4,5,6,7};
							int i=0,j=6,t;
							while(i<j)
							{
								t=a[i];
								a[i] = a[j];
								a[j] = t;

								i++;  //這樣效果會不一樣
								--j;
							}
							for(i=0;i<7;++i)            //最後輸出結果可以查看
								printf("%d\n",a[i]);
						}
					----------輸出的結果爲:7 6 5 4 3 2 1--------------------	
		二維數組
			int a[3][4];
				總共是12個元素,可以當做3行4列看待,這12個元素的名字依次是:
						a[0][0] a[0][1] a[0][2] a[0][3]
						a[1][0] a[1][1] a[1][2] a[1][3]
						a[2][0] a[2][1] a[2][2] a[2][3]
						a[i][j] 表示第i+1行第j+1列元素
						int a[m][n]; 該二維數組右下角最大位置的元素只能是a[m-1][n-1]
			初始化
				int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
				int a[3][4] = {
						{1, 2, 3, 4},
						{5, 6, 7, 8},
						{9,10,11,12},
				};
			輸出二維數組內容:
			---------------------------------
				#include<stdio.h>
				int main()
				{	
					int a[3][4] = {
						{1, 2, 3, 4},
						{5, 6, 7, 8},
						{9,10,11,12},
					};
					int i,j;
					for (i=0; i<3; ++i)
					{
						for (j=0; j<4; ++j)
							printf("%-5d",a[i][j]);   //這裏的-5表示格式左對齊5位一格
						printf("\n");
					}
					return 0;
				}
				----------------------------------------------------------
			操作
				對二維數組排序
				求每一行的最大值
				判斷矩陣是否對稱
				矩陣的相乘
		多維數組
			是否存在多維數組
				不存在
				因爲內存是線性一維的
				N維數組可以當做每個元素是n-1維數組的一維數組
					比如:
						int a[3][4];
							該數組是含有3個元素的一維數組
							只不過每個元素都可以再分成4個小元素
						int a[3][4][5];
							該數組是含有3個元素的一維數組
							只不過每個元素都是4行5列的二維數組

發佈了113 篇原創文章 · 獲贊 119 · 訪問量 50萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章