1. 程式人生 > >程式設計第三次總結——陣列

程式設計第三次總結——陣列

一、知識點總結

一維陣列

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語言邏輯思維。