1. 程式人生 > >c語言陣列部分知識點總結

c語言陣列部分知識點總結

對於陣列部分知識點的學習,主要需要掌握:計算平均分、最高分、成績排序與查詢等等,主要向函式傳遞一維陣列和二維陣列的方法。還學習陣列型別、陣列的定義和初始化,以及對陣列名特殊含義的理解。
1.陣列元素定義初為a[0](一個代表下標個數為1)
2.c語言中陣列的下標都是從0開始的。
3.最好把幻數定義成巨集常量(或const常量),當需要修改常數時,只需要修改巨集定義(或const常量的定義)即可。例int score[5];改成int score[SIZE];標頭檔案加 #define SIZE 5
4.在定義陣列時不能使用變數定義陣列的大小。即不能這樣 int score[n];!可以為整形常量。

5.do{…}while(…)容錯基質(保證正確才進行)
6.說明、定義陣列時,元素個數一定為常量。
7.從陣列所有第一個所有所佔位元組清0:memsent(a,0,sizeof(a));標頭檔案要加#include
8.一維陣列:型別 陣列名[元素個數],二維陣列:型別 陣列名[第一維長度][第二維長度]
9.一維陣列在記憶體中佔用的位元組數為:陣列長度×sizeof(基型別),二維陣列佔用的位元組數為:第一維長度×第二維長度×sizeof(基型別)。在不同的編譯系統中,int型所佔的位元組數是不同的。用sizeof運算子來計算一個型別或者變數在記憶體中所佔的位元組數才是最準確可靠的方法,也有利於提高程式的可移植性。
10.陣列第二維的長度宣告永遠都不能省略,因為在連續儲存空間中是按行存放的。
11.若要把一個數組傳遞給一個函式,那麼只要使用不帶方括號的陣列名作為函式實參呼叫函式即可。例:ReadScore(score,n);
aver = Average(score,n);
12.由於陣列名代表陣列第一個元素的地址,因此用陣列名作函式實參實際上是將陣列的首地址傳給被調函式,
13.陣列做函式形參時,陣列的長度可以不出現在陣列名後面的方括號內,通常用另一個整型形參來指定陣列的長度。
14.當一個元素是未知,要求其所關聯元素,不妨以負值作為輸入結束的標記值。(標記控制的迴圈),這樣的話,當輸入值為負值,則結束輸入,返回上一行。
15.三種排序:
①交換排序:借鑑了求最大值,最小值的思想,按升序排列的基本過程為:先將第一個數分別與後面的數進行比較,若後面是的數小,則交換和第一個數的位置,否則不交換:這一輪結束之後,則求除了一個最小的放在第一個位置,然後進行第二輪比較,但這種交換效率低
package cho2;
public class changeSort {
public static void main(String[] args) {
// TODO 自動生成的方法存根
//對給定的陣列進行排序
int[] a={53,54,56,51};
int i;
int j;
int temp=0;
//注意不要陣列越界 如果i小於4或者j小於5都會有越界的
//現象
//注意交換中不能時時刻刻用i+1代替j;
for(i=0;i<3;i++){
for(j=i+1;j<4;j++){
if(a[i]>a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}}}
for(i=0;i<4;i++){
System.out.println(a[i]);
}}}
②氣泡排序:將相鄰兩個數進行交換,重複的過程,一般,如果有N個數進行排序,則需進行N-1起泡
package cho2;
public class maopao {
public static void main(String[] args) {
// TODO 自動生成的方法存根
int[] a={53,54,56,51};
int i;
int j;
int m=0;
int temp=0;
for(i=0;i<3;i++){
m=m-1;
//4+m主要為了減少執行的次數
for(j=0;j<4+m;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}}}
for(i=0;i<4;i++){
System.out.println(a[i]);
}}}
③選擇排序:在交換排序的基礎上,找出餘下的數中的最大值再與地I+1個數進行交換,這樣每一輪比較中最多隻有一次交換操作,這個演算法最多隻有N—1次交換操作
package cho2;
public class selectSort {
public static void main(String[] args) {
// TODO 自動生成的方法存根
int[] a={53,54,56,51};
int i;
int j;
int k;
int temp=0;
for(i=0;i<3;i++){
k=i;
for(j=i+1;j<4;j++){
if(a[i]>a[j]){
k=j;
}}
if(k!=i){
temp=a[k];
a[k]=a[i];
a[i]=temp;
}}
for(i=0;i<4;i++){
System.out.println(a[i]);
}}}
16.查詢
①線性查詢(順序查詢)
條件:不要求資料表已經排好序。
工作原理:
一. 從線性資料表中的第一個(或最後一個)記錄開始查詢;
二. 依次將記錄的關鍵字與查詢關鍵字進行比較 ;
(當某個記錄的關鍵字與查詢關鍵字相等時,即查詢成功 )
(反之,查完全部記錄都沒有與之相等的關鍵字,則查詢失敗 )
②折半查詢(二分查詢法)
條件:1:必須採用順序儲存結構,對於連結串列不適合:2:必須按照關鍵字大小有序排列.
具體的演算法思想:對於陣列進行比較的時候,比較陣列大小的中間值,當發現數據大於該中心資料,就在後面的一個區間進行比較,如果小於該中心資料,就在前面一個區間進行比較,在新的區間裡,再次使用之前的大小中間比較法,比較,直到最後找到該資料為止。
17.當形參為一維陣列時,形參列表中陣列的方括號內可以為空。為二維陣列時,可以省略陣列第一維的長度宣告,但不能省略陣列第二維的長度宣告。
針對自身情況,在本章學習中對一維陣列和二維陣列的定義與關係需要更好地去掌握好。