1. 程式人生 > >陣列學習總結

陣列學習總結

陣列學習總結
  在前面學習中瞭解了順序結構,條件結構,迴圈結構,可以使用這些來編寫程式解決複雜問題,但當資料多時用前面的知識來處理就不夠用了,例如處理全班學生成績的問題,就比較難了。這時學習了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;}
  學習了陣列使得程式更加優化,解決問題方便了許多,程式記憶體也縮短,效率更高,但自我感覺還沒完全掌握,做題的時候有些吃力,基礎不好,想好久都想不出來,課後複習才知道課上講過的當時聽懂了,但自己看的時候就有的地方沒印象,以後要多做筆記,多看程式碼,多上機練習,努力總會有結果的。