C語言 使用函式時遇到的問題

2021-10-01 05:51:37 字數 2980 閱讀 7109

函式是一段**塊,由 返回型別 函式名(函式引數)構成。

定義函式有兩種方式。一種是宣告與函式體放在一起,另一種是在main函式之前進行宣告,把函式塊放在**最後。我們通常使用後者(如下所示)。

#include

intfunction

(int a,

int b)

;int

main()

intfunction

(int a,

int b)

函式,或者說功能。字面上似乎很好理解,就是你傳給它你想要實現某種功能所需要的變數,函式返回結果(或者實現像判斷,交換之類的功能)。

但事實上,一到函式互相呼叫,或者你想用函式實現乙個功能時,使用函式就會變得異常困難。

例如:產生四個不同的隨機數(前面的內容已經列過**了,在此不再贅述)。

1.出發點

立足於之前對函式的理解,我們會發現,實現乙個大功能,需要很多小功能的累計。比如,產生四個不同的隨機數,我們可以把這個「大」步驟分為四個「小」步驟實現

1.產生隨機數

2.判斷是否與陣列中的其他值重複

3.不重複則傳入陣列,重複則重新生成,直到它不重複才存進陣列

4.遍歷列印陣列

你可以把每個步驟當成乙個函式功能來實現,或者你可以繼續拆分(或合併)功能。但當你開始在main前定義陣列時,問題很快就出現了:你的函式返回型別是什麼?你的函式名該怎樣起?最重要的是:你的引數究竟是什麼?

嗯,這些是很大的問題。解決起來需要一定的時間,還有符合邏輯的思路。

2.相互呼叫

假如你解決了1,那麼恭喜你,問題2離你不遠了。

如同很多人一樣,你也許可能想,我做了四個函式,那麼在main中我應該四個都用到。然後我只要找到他們之間…但事實卻不是這樣,如果你足夠敏銳的話,也許可以發現,其實1,2,3應該是緊密關聯的,你不得不在3中就提前呼叫你的1,2,因為只有這樣,你才能順利實現3的功能。

3.邏輯與關聯

千辛萬苦,你以為你寫好了**,在你終於記住你的各個變數名,修改過無數警告之後,你覺得你的任務完成了…

#include

#include

#include

#include

intgeneratenum

(int max,

int min)

;//產生固定範圍的隨機數

void

putintoarray

(int num,

int a)

;//把它們放進陣列裡(但是要先判斷相不相同)

bool key

(int a,

int temp,

int num)

;//判斷新產生的隨機數是否相同

void

display

(int a,

int num)

;//列印四個不同的隨機數

intmain()

;putintoarray(4

,array)

;display

(array,4)

;return0;

}int

generatenum

(int max,

int min)

bool key

(int a,

int temp,

int num)

else

return false;}}

void

putintoarray

(int num,

int a)

else}}

void

display

(int a,

int num)

}

但執行起來,卻發現前面的工作都是浮雲,因為程式編譯成功了,卻無法正確執行。

對比一下正確的:

#include

#include

#include

#include

intgeneratenumber

(int min,

int max)

;//產生4個在指定範圍的隨機數

void

initarray

(int array,

int count)

;//將4個不同的隨機數儲存到陣列中

bool isnumberexist

(int array,

int temp,

int num)

;//判斷陣列中是否包含乙個數字

void

show

(int array,

int num)

;//輸出陣列

intmain()

;initarray

(org,4)

;show

(org,4)

;return0;

}分 / 割 // 線 //

intgeneratenumber

(int min,

int max)

void

initarray

(int array,

int count)

else}}

bool isnumberexist

(int array,

int temp,

int num)

}return false;

}void

show

(int array,

int num)

printf

("\n");

}

你會發現上面函式的問題在於你的return false放錯了位置。有答案的情況下,一步步對比,比較容易看出。

但如果在沒有答案的情況下,這種錯誤可能要消耗很多時間。

所以設計函式時,一定要提前打個草稿,要不然還不知道乙個錯誤要修改多久…真的很久…很久…

C語言程式設計時遇到的若干問題

還是基礎不夠紮實,有一些基本的問題都不是很清楚,這裡記錄一下,以備遺忘。1.關於sizeof與strlen 如果變數是陣列,那麼呼叫sizeof的結果就是陣列的大小,但是如果只是乙個指標,那麼他只是返回乙個sizeof 型別 的值。而strlen是判斷字串的長度,所以乙個陣列的最後一位是strlen...

使用QT Creator 時遇到的問題

使用qt在windows下進行開發的環境有兩種 一種使用nokia提供的qtcreator,另外一種是eclipse cdt qt外掛程式 可以在官網上找到 其實兩種ide的執行環境都是一樣的 都是mingw qtsdk 現在說下進行程式設計時常遇見的問題,估計大家都會遇到 最常見的就是qt4.6的...

c語言遇到的問題

getchar 是處理螢幕上輸入的字元或整數 每次只讀取乙個 如果輸出用 c 則輸出其原始資料,若用 d 輸出對應的ascii碼。char a 50 t 0 a t getchar printf c a t 上面是將單個字元賦值給 a接下來舉個整數的例子 int a 50 t 0 a t getch...