計算機程式設計實訓記錄(6)

2022-08-26 04:03:10 字數 3642 閱讀 7690

要求完成 4 個函式的設計,包括函式原型設計、函式定義、測試**中函式呼叫。請思考 swap1 函式

和 swap2(或 swap3)函式應用場合能否互換,其原因是什麼。要求函式原型設計時盡量做到精準。

雖然這麼說但是要求在**啊(っ °д °;)っ

在翻了翻檔案後,還是找到了。

char array1[10]="tom", array2[10]="jerry";
傳入的是兩個字元陣列的指標,那就直接遍歷一遍就好了

void swap1(char*a,char*b)

}

char array1="tom", array2="jerry";

char *p1=array1, *p2=array2;

不難看出,傳入的兩個指標是分別指向字元陣列array1和array2的,用乙個二重指標交換他們的值就好了。

void swap2(char** a,char** b)

這裡有乙個問題,就是傳參的時候得用swap2(&p1, &p2);來取位址,我曾試過用void swap2(char** &a,char** &b),但好像不通過。

不管了不管了,在課程檔案的test.c裡面並沒有規定呼叫方式

char *p1="tom", *p2="jerry";
這裡是字串指標。

他們是指向靜態儲存區的字串的指標,按理說同樣交換一下就好了。

void swap3(char** a,char** b)

真的這麼簡單嗎(心虛)

******************************=== in test4() ******************************====

p1: "tom", p2: "jerry"

指標所記錄的位址值 p1: 672f18, p2: 670c60

--- 呼叫自定義函式 strcat,用" & "連線兩個字串 ---

指標所記錄的位址值 p1: 670c70, p2: 670c60

--- 請注意觀察指標 p1 前後兩次所指向的位址值是否改變 ---

p1: "tom & jerry", p2: "jerry"

*************************==== return from test4() *************************====

char* strcat(char *dst, const char *src)

但是這樣的話位址根本沒有變啊,和題目要求的不一樣。

這個時候我們就要想,為什麼,要求改換位址。

你聽說過,字串破壞的故事嗎?

****************************** in test4() ******************************====

p1: "tom", p2: "jerry"

指標所記錄的位址值 p1: c142b008, p2: c142b010

--- 呼叫自定義函式 strcat,用" & "連線兩個字串 ---

指標所記錄的位址值 p1: c142b008, p2: c142b010

--- 請注意觀察指標 p1 前後兩次所指向的位址值是否改變 ---

p1: "tom & jerry", p2: "rry"

*************************==== return from test4() *************************====

當然,實際上溫柔的gcc是會守護這些字串的

那麼我們就得另尋他法,李代桃僵。為合成的字串尋找新的記憶體空間。

char* strcat(char **dest, const char *source)

for(;*p;p++,temp++)

for(;*source;source++,temp++)

*dest=temp-n;//最後傳值要回到陣列頭部

return *dest;

}

有趣的是,我這裡想故技重施使用while((*temp++ = *p++) != '\0'),卻出現了一些意料之外的情況╮(╯-╰)╭

做完了這個,就是最後的排序函式了(。・∀・)ノ

一系列字串的集合稱為字串陣列。字串陣列有兩種不同的儲存形式:①二維陣列;②字元指標陣列。

已經設計了兩個不同的函式 show1 和 show2 分別用於輸出兩種形式的字串陣列個元素的值。

對於這兩種形式,請分別設計函式對它們進行排序。要求任意選擇一種排序演算法(例如氣泡排序),編寫如下 4個排序函式。

字典序長度序

二維陣列

sort1a

sort1l

字元指標陣列

sort2a

sort2l

目標效果

原始資料1

enter, number, size, begin, of, cat, case, program, certain, a, cake, side

排序結果(字典序)

a, begin, cake, case, cat, certain, enter, number, of, program, side, size

排序結果(字串長度序)

a, of, cat, cake, case, side, size, begin, enter, number, certain, program

原始資料2

enter, number, size, begin, of, cat, case, program, certain, a, cake, side

排序結果(字典序)

a, begin, cake, case, cat, certain, enter, number, of, program, side, size

排序結果(字串長度序)

a, of, cat, cake, case, side, size, begin, enter, number, certain, program

測試程式

char str1[8]=;

char *str2 = ;

str1和str2分別對應二維陣列和字元指標陣列。

至於兩個show函式,我們不難發現他們都是直接展示交換後的陣列的,至此,勝利的法則已經確定了。

說到排序,那想必就是氣泡排序了——但是,我拒絕,我要用選擇排序!

void sort1a(char(*str)[8],int size){ //ascii

int i,j,k=0;

char temp[114514];

for(i=1;i至此,我們就都寫完了,好耶!(o゜▽゜)o☆

計算機程式設計實訓記錄(3)

解決完了例題後,就是10道oj題,挑一些我認為值得研究的題目記錄一下吧 8 乘方計算 問題描述 給定乙個unsigned long long型資料 x 計算 x 2,x 3,cdots 直到 x 5 或溢位為止。輸入 輸入資料有若干行。每行上有乙個unsigned long long型整數,對應一種...

計算機程式設計實訓記錄(2)

終於把題做完了,結果發現事情還是不少,但還是抽點時間記錄一下。問題描述給定若干個 大於0且不超過1024 實數,計算其中資料的個數 n 最小值 最大值,以及 平均值 此處的 平均值 定義為,若n 2,則需去掉乙個最大值 乙個最小值,剩下的n 2個資料的算術平均值 若n為1或2,則為普通的算術平均值。...

計算機程式設計C MOOC(第6周程式設計作業)

本部落格內容為中國大學生mooc國家精品課程 計算機程式設計c 作業記錄,僅供參考,觀者忌照搬照抄,歡迎交流批評指正!第6周程式設計作業 本週作業內容為遞迴函式,內聯函式與過載函式 遞迴猴子摘桃 k是最後一天剩下的桃子個數,此例取1,n是天數 intmain 編寫內聯函式求矩形的面積和周長 編寫過載...