實驗5 陣列和指標

2022-06-04 17:15:13 字數 4117 閱讀 4370

實現方式1:形參是陣列,實參是陣列名,使用陣列元素直接訪問方式實現 程式原始碼檔案ex1_1.cpp

以下是補全程式ex1_1.cpp之後的程式原始碼↓

//

練習:使用二分查詢,在一組有序元素中查詢資料項

//形參是陣列,實參是陣列名

#include const

int n=5

;int binarysearch(int x, int n, int

item);

intmain() ;

inti,index, key;

printf(

"陣列a中的資料:\n");

for(i=0;i)

printf(

"%d

",a[i]);

printf("\n

");printf(

"輸入待查詢的資料項: ");

scanf("%d

", &key);

//呼叫函式binarysearch()在陣列a中查詢指定資料項item,並返回查詢結果給index

//補足**①

index =binarysearch( a, n, key) ;

if(index>=0

) printf(

"%d在陣列中,下標為%d\n

", key, index);

else

printf(

"%d不在陣列中\n

", key);

return0;

}//函式功能描述:

//使用二分查詢演算法在陣列x中查詢特定值item,陣列x大小為n

//如果找到,返回其下標

//如果沒找到,返回-1

int binarysearch(int x, int n, int

item)

return -1;}

執行結果截圖↓

實現方式2:形參是指標變數,實參是陣列名,使用指標變數間接訪問方式實現 程式原始碼檔案ex1_2.cpp

以下是補全程式ex1_2.cpp之後的程式原始碼↓

//

練習:使用二分查詢,在一組有序元素中查詢資料項

//形參是指標變數,實參是陣列名

#include const

int n=5

;int binarysearch(int *x, int n, int

item);

intmain() ;

inti,index, key;

printf(

"陣列a中的資料:\n");

for(i=0;i)

printf(

"%d

",a[i]);

printf("\n

");printf(

"輸入待查詢的資料項: ");

scanf("%d

", &key);

//呼叫函式binarysearch()在陣列a中查詢指定資料項item,並返回查詢結果

//補足**①

index =binarysearch( a,n,key) ;

if(index>=0

) printf(

"%d在陣列中,下標為%d\n

", key, index);

else

printf(

"%d不在陣列中\n

", key);

return0;

}//函式功能描述:

//使用二分查詢演算法在x指向的資料項開始的n個資料中,查詢item

//如果找到,返回其位置

//如果沒找到,返回-1

int binarysearch(int *x, int n, int

item)

return -1;}

執行結果截圖↓ 

ο這裡比較有趣的是當陣列a中的資料報含0時,輸入其他資料結果會不同(●°u°●)​ 」↓

用選擇法排序對一組資料由小到大排序。

補足程式原始碼檔案ex2_2.cpp,使用選擇法對字串按字典序排序。

以下是補全程式ex2_2.cpp之後的程式原始碼↓

//

練習:使用選擇法對字串按字典序排序

#include #include

void selectsort(char str[20], int n ); //

函式宣告,形參str是二維陣列名

intmain() ;

inti;

printf(

"輸出初始名單:\n");

for(i=0; i<5; i++)

printf(

"%s\n

", name[i]);

selectsort(name,

5); //

呼叫選擇法對name陣列中的字串排序

printf(

"按字典序輸出名單:\n");

for(i=0; i<5; i++)

printf(

"%s\n

", name[i]);

return0;

}//函式定義

//函式功能描述:使用選擇法對二維陣列str中的n個字串按字典序排序

void selectsort(char str[20], int

n) }}

執行結果截圖↓

♦ 陣列名作為引數 vs. 指標變數作為引數,在形參、實參寫法,以及函式實現中陣列元素表示的差異

(以存放整形資料一維陣列為例)

(1)陣列名:形參 int a ,實參 int a[i],陣列元素 a[1]

(2)指標變數:形參 int *p,實參 int a[i], *p,p = a,陣列元素 *(a+1)、*(p+1)、p[1]

♦注意:修改陣列元素值時,要確保陣列元素值是有序的,這樣才能使用二分查詢演算法

♦使用選擇法對字串排序時注意事項

選擇排序是不斷的記錄下標,保留最小數或者最大數的下標,在裡層迴圈結束後再進行交換,故需要注意裡層和外層迴圈的臨界條件不同 

♦注意事項總結:

(1)字串的比較和賦值,不能直接使用關係運算子和賦值運算子,要借助字串處理函式。

¹字串長度   size_t strlen(char *s); 求出s指向的字串的長度

²字串比較    char *strcmp(char *s1,char *s2); 比較s1指向的字串和s2指向的字串的大小關係。

³字串複製    char *strcpy(char *s1,char *s2); 將s2指向的字串複製到s1指向的陣列中。

(2)指針對字串複製操作時,關注結尾的「\0」是否已經複製,若沒有則需要新增。

讀懂一段程式明白他的意思和作用應該是最基本的了,只有在明白了整個大程式框架的思路,才可進行後來的改錯填空和補充。

現在對程式填空和程式改錯的這類感覺還可以,因為都是比較簡短而且明確了位置整個程式的思路演算法基本都是很明了的,

填空改錯其實就是在考察對細節對臨界條件這種易錯點的考察,而補充一段程式就需要自己構建好思路演算法,同時還要把握細節

但補充一段程式相較於構建整個程式而言是更容易的,所以c語言的學習任重而道遠,每乙個環節都需要認真對待。

...結束 @ 'ェ' @ ...

實驗5 陣列和指標

1.二分查詢 實現方式1 形參是陣列,實參是陣列名,使用陣列元素直接訪問方式實現。include const int n 5 int binarysearch int x,int n,int item intmain inti,index,key printf 陣列a中的資料 n for i 0 i...

5 陣列指標和指標陣列

陣列指標,從字面意思來看就是 指向陣列的指標 定義 int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣賦值 int a 3 4 int p 4 該語句...

實驗5 陣列和函式

實驗任務1 include const int n 3 int main inti printf 通過陣列名及下標直接訪問陣列元素 n for i 0 i printf d d n a i a i printf 通過位址間接訪問陣列元素 n for i 0 i printf d d n a i,a ...