函式是一段**塊,由 返回型別 函式名(函式引數)構成。
定義函式有兩種方式。一種是宣告與函式體放在一起,另一種是在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...