程式設計第三次總結——陣列
一、知識點總結
一維陣列
1、陣列定義:
型別識別符號 陣列名[常量表達式]
一組具有相同型別的變數的集合。
一個數組在記憶體中佔一片連續的儲存單元。
直接對a的訪問,就是訪問此陣列的首地址。
注意:在定義陣列長度所用的常量時注意要比所用長度大一點以防止溢位
2、陣列大小必須是值為正的常量,不能為變數。
3、陣列下標從0開始。
4、一維陣列初始化:
陣列定義在主函式之外,起初始值為0;定義在主函式之內,起初始值是隨機的。
#給陣列賦初值的方法:
(1)、直接初始化:int arr[3]={1,2,3};
(2)、遍歷訪問初始化:
for(i = 0;i< 3;i++)
arr[i]=i;
(3)、記憶體操作函式。
memset(arr,3,abs);//abs為另一個已知的陣列。
(4)、字串賦值函式,僅限於char型陣列。
strcpy(arr,abs) ;abs為一字串或者char型陣列。
5、使兩個陣列值相等的方法:
①列舉賦值:b[0]==a[0] b[1]==a[1]...②迴圈賦值
③陣列a複製k個元素到陣列b:mencpy(b,a,sizeof(int)*k)
陣列a全部複製到陣列b:mencpy(b,a,sizeof(a))
使用mencpy函式要包含標頭檔案cstring。
6、容錯處理:保證輸入在合法範圍之間
7、sort函式
標頭檔案為#include <algorithm>(其中,compare為排序規則)
預設的sort函式是按升序排。
sort(a,a+n); 兩個引數分別為待排序陣列的首地址和尾地址
8、陣列的排序:
①選擇排序:
for(j=0;j<n-1;j++)
{
l=j;
for(i=1;i<n;i++)
if(a[l]<a[i])
l=I;
if(l!=j) i=a[l],a[l]=a[j],a[j]=i;
}
②插入排序:
l= i-1;temp=a[i];
while(l>=0&&a[l]>temp)
{
a[l+1]=a[l];
l--;
}
a[l+1]=temp;
③氣泡排序:
for (int j=1; j<=n-1; ++j) //冒泡法排序
for (int i=1; i<=n-j; ++i) //兩兩相比較
if (a[i]<a[i+1]) //比較與交換
{t=a[i]; a[i]=a[i+1]; a[i+1]=t;}
9、折半查詢用於有序序列中查詢指定元素。
二維陣列
資料型別 陣列名[常量表達式1] [常量表達式2] ;
字元陣列和字串陣列
1、 [儲存型別] char 陣列名[常量表達式1]…
2.字元陣列的賦值
①用字元初始化陣列
例如:char chr1[5]={‘a’,‘b’,‘c’,‘d’,‘e’};
字元陣列中也可以存放若干個字元,也可以來存放字串。
兩者的區別是字串有一結束符(‘\0’)。
字串是一維陣列,但是一維字元陣列不等於字串。
②用字串初始化陣列
用一個字串初始化一個一維字元陣列,可以寫成char chr[5]=“abcd”;
③陣列元素賦值
3、字元常量和字串常量的區別
①兩者的定界符不同,字元常量由單引號括起來,字串常量由雙引號括起來。
②字元常量只能是單個字元,字串常量則可以是多個字元。
③可以把一個字元常量賦給一個字元變數,但不能把一個字串常量賦給一個字元變數。
④字元常量佔一個位元組,而字串常量佔用位元組數等於字串的位元組數加1。增加的一個位元組中存放字串結束標誌‘\0’。例如:字元常量‘a’佔一個位元組,字串常量“a”佔二個位元組。
4、字串的輸入
(1)scanf語句
格式:scanf(“%s”,字元陣列名);
說明:①系統會自動在輸入的字串常量後新增‘\0’標誌,因此輸入時,僅輸入字串的內容即可。
②輸入多個字串時,以空格分隔。
(2)gets語句
格式:gets(字元陣列名);
說明:使用gets只能輸入一個字串。讀入的是一整行,包括空格。
5、字串的輸出
(1)printf語句
格式:printf(“%s”,字元陣列名);
(2) puts語句
格式:puts(字串名稱);
說明:puts語句輸出一個字串和一個換行符。對於已經宣告過的字串a,printf(“%s\n”,a)和 puts(a)是等價的。
6、字串處理函式
strlen(字串名) 計算字串的長度,終止符’\0’不算在長度之內
strlwr(字串名) 將字串中大寫字母換成小寫字母
二、問題解決
1、約瑟夫問題
2、矩陣相關問題
三、總結
陣列的輸入與輸出結合迴圈語句的運用讓常常我感覺思路混亂,也許第一組陣列還未處理輸出,就被第二組數覆蓋了。在做題過程中經常出現執行結果錯誤,這時就需要從頭模擬執行,來找到出錯的地方。有些演算法的思路根本想不到,只能從網上查詢,學習理解別人的思路,然後再進行編寫。雖然現在我依然在演算法的思維邏輯方面有欠缺,但是我相信經過反覆練習做題,一定可以熟練掌握基礎知識,並能靈活運用,一定能形成C語言邏輯思維。