陣列學習總結
陣列學習總結
在前面學習中瞭解了順序結構,條件結構,迴圈結構,可以使用這些來編寫程式解決複雜問題,但當資料多時用前面的知識來處理就不夠用了,例如處理全班學生成績的問題,就比較難了。這時學習了C語言中的陣列,陣列就好像數學中的數列一樣,把幾個數字儲存到陣列中,需要用的時候呼叫,實現了處理多資料的情況。當陣列中每個元素只帶一個下標時,稱一維陣列;當兩個下標時,稱二維陣列,就是一維陣列的型別也是一維陣列即陣列的陣列。
陣列結構的定義為:
一維:型別識別符號 陣列名[常量表達式],例如int a[10];
二維:資料型別 陣列名[常量表達式1][常量表達式2],例如int a[2][3];
定義陣列時要注意:常量表達式表示陣列元素的個數,可以是常量和符號常量,但不能是變數。
二維陣列a[2][3]表示:
a[0][0] a[0][1] a[0][2]
a[1][0] a[1][1] a[1][2]
注:1、所有元素都是整型變數,a[10]最小下標為0,最大下標為9。
2、陣列在程式中絕對不能越界,下標越界是大忌!因為編譯程式不檢查是否越界下標越界,將訪問陣列以外的空間,那裡的資料是未知的,不受掌控,可能帶來嚴重後果。
3、下標必須為正數。
一維陣列初始化:int a[10]={1,2,3,4,5} 對前5個元素初始化其餘為0;全部元素初始化可以簡寫 a[10]={0}。
下面程式解釋:
int a[5]; int main() { for(int i=0;i<5;i++) cout<<a[i]<<” ”; return 0; } 結果:0 0 0 0 0 int main() { int a[5]; for(int i=0;i<5;i++) cout<<a[i]<<” ”; return 0; } 結果:1543 131 13 66 45 int main() { int a[5]={1,2} for(int i=0;i<5;i++) cout<<a[i]<<” ”; return 0; } 結果:1 2 0 0 0
利用陣列排序有選擇排序、插入排序、氣泡排序,也可以進行模擬操作,二分查詢,約瑟夫問題,驗證哥德巴赫猜想,列印楊輝三角,迴文數等等
約瑟夫問題:n人 報到m出圈 s計數器 bool a[101] for(int i=1;i<=n;i++) a[i]=false; int f=0,t=0,s=0; do { t++; if(t==n+1) t=1; if(a[t]==false) s++; if(s==m) { s=0; cout<<t<<” ”; a[t]=ture; ++f; } }while(f!=n);
二分查詢:
low=0,high=n-1,mid=0;
while(low<=high)
{
mid=(low+high)/2;
if(a[mid]>temp)
high=mid-1;
else if(a[mid]<temp)
low=mid+1;
else
cout<<a[mid]<<endl;
}
cout<<"Not Found!"<<endl;
老師告訴我們排序還有一個簡單函式:#include sort(a,a+n) 括號內為排序的首地址和尾地址 a+n無效 好比區間[a,a+n) sort預設按升序排列,要按降序可以自己定義函式bool complare(int a,int b) {return a>b;}
學習了陣列使得程式更加優化,解決問題方便了許多,程式記憶體也縮短,效率更高,但自我感覺還沒完全掌握,做題的時候有些吃力,基礎不好,想好久都想不出來,課後複習才知道課上講過的當時聽懂了,但自己看的時候就有的地方沒印象,以後要多做筆記,多看程式碼,多上機練習,努力總會有結果的。