?? 教學(xué)--第十二章 函數(shù)(一).htm
字號(hào):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0045)http://d2school.com/bcyl/bhcpp/newls/ls12.htm -->
<HTML><HEAD><TITLE>教學(xué)--第十二章 函數(shù)(一)</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>P {
MARGIN: 1px 2px; LINE-HEIGHT: 150%
}
.節(jié)標(biāo)題 {
FONT-WEIGHT: bold; FONT-SIZE: 12pt
}
TD {
FONT-SIZE: 9pt
}
.tdtitle {
FONT-SIZE: 20pt
}
.celltopline {
BORDER-TOP: #000000 1px solid
}
.menucell {
FONT-SIZE: 10pt
}
#glowtext {
FONT-SIZE: 10pt; FILTER: glow(color=red,strength=1); WIDTH: 100%
}
A:link {
FONT: 10pt 宋體; COLOR: blue; TEXT-DECORATION: none
}
A:visited {
FONT: 10pt 宋體; COLOR: purple; TEXT-DECORATION: none
}
A:active {
FONT: 10pt 宋體; COLOR: red; TEXT-DECORATION: underline
}
A:hover {
COLOR: blue; TEXT-DECORATION: underline
}
</STYLE>
<META content="MSHTML 6.00.2900.2180" name=GENERATOR></HEAD>
<BODY>
<CENTER>
<TABLE height=154 cellSpacing=4 cellPadding=4 width=760 border=0>
<TBODY>
<TR>
<TD
style="FONT-SIZE: 10pt; MARGIN-LEFT: 12px; TEXT-INDENT: 20px; LINE-HEIGHT: 150%; MARGIN-RIGHT: 12px; FONT-FAMILY: 宋體"
width="100%" height=148>
<H2>第十二章 函數(shù)(一)</H2>
<P><A href="http://d2school.com/bcyl/bhcpp/newls/ls12.htm#12.1">12.1
函數(shù)的引入</A>
<P><A
href="http://d2school.com/bcyl/bhcpp/newls/ls12.htm#12.2">12.2 學(xué)會(huì)調(diào)用函數(shù)</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls12.htm#12.2.1">12.2.1
哪些函數(shù)可調(diào)用?</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls12.htm#12.2.1.1">12.2.1.1
庫函數(shù)</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls12.htm#12.2.1.2">12.2.1.2
操作系統(tǒng)的 API 函數(shù)</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls12.htm#12.2.1.3">12.2.1.3 VCL
庫函數(shù)</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls12.htm#12.2.2">12.2.2
調(diào)用者必須能“找”得到被調(diào)用者</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls12.htm#12.2.3">12.2.3
調(diào)用者必須傳遞給被調(diào)用者正確的參數(shù)</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls12.htm#12.2.4">12.2.4
如何得到函數(shù)的運(yùn)行結(jié)果</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls12.htm#12.2.5">12.2.5
調(diào)用庫函數(shù)的實(shí)例</A>
<P><A href="http://d2school.com/bcyl/bhcpp/newls/ls12.htm#12.3">12.3
自定義函數(shù)</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls12.htm#12.3.1">12.3.1
函數(shù)的格式</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls12.htm#12.3.2">12.3.2
自定義函數(shù)實(shí)例</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls12.htm#12.3.2.1">12.3.2.1
小寫字母轉(zhuǎn)換為大寫字母的函數(shù)</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls12.htm#12.3.2.2">12.3.2.2
使用函數(shù)改寫“統(tǒng)計(jì)程序”</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls12.htm#12.3.2.3">12.3.2.3
求多種平面形狀的面積</A>
<P><A href="http://d2school.com/bcyl/bhcpp/newls/ls12.htm#12.4">12.4
主函數(shù)</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls12.htm#12.4.1">12.4.1
DOS程序的主函數(shù)</A>
<P> <A
href="http://d2school.com/bcyl/bhcpp/newls/ls12.htm#12.4.2">12.4.2
Windows程序的主函數(shù)</A>
<P><A href="http://d2school.com/bcyl/bhcpp/newls/ls12.htm#12.5">12.5
小結(jié)</A> </P>
<P> </P>
<P>函數(shù)是C語言的一個(gè)重點(diǎn)和難點(diǎn),我們此次將連續(xù)兩章進(jìn)行講解。本章重點(diǎn)在于徹底理解函數(shù)的作用,學(xué)會(huì)調(diào)用函數(shù),學(xué)會(huì)自已編寫函數(shù)。</P>
<P>秉承我們“以人為本:)”的學(xué)習(xí)方法,我們學(xué)習(xí)函數(shù)第一件事就是問話:干嘛讓我學(xué)習(xí)函數(shù)?反過來說就是:函數(shù)能為一個(gè)程序員做些什么?</P>
<H3><A name=12.1>12.1</A> 函數(shù)的引入</H3>
<P>家里地板臟了怎么辦?</P>
<P>拿起掃帚,自個(gè)兒掃唄。當(dāng)然,在掃之前要對(duì)地板上的各種“臟”東西定好數(shù)據(jù)類型,針對(duì)不同的“數(shù)據(jù)類型”,我們需要進(jìn)行不同的處理,比如是廢紙,則無情地掃到垃圾桶;但若是在地上發(fā)現(xiàn)一張百元大鈔,則應(yīng)該脈脈含情地?fù)炱鸱旁谛乜冢骸澳阕屛艺业煤每唷薄?lt;/P>
<P>在掃地的過程中,當(dāng)然也無處不在使用“流程控制”。比如家里有三間房子,則應(yīng)該是一個(gè)循環(huán)。而每一間房子的打掃過程也是一個(gè)循環(huán)過程:從某個(gè)角落的地板開始,向另一個(gè)角落前進(jìn),不斷地重復(fù)掃把的動(dòng)作。中間當(dāng)然還需進(jìn)行條件判斷:比如前面所說的對(duì)地面臟物的判斷,再如:if
(這一小塊地面不臟),則 continue 到下一塊地面……</P>
<P> </P>
<P>我們學(xué)了“數(shù)據(jù)類型、常量、變量”,所以我們有了表達(dá)問題中各種數(shù)據(jù)的能力;</P>
<P>我們還學(xué)了“流程控制”,所以我們還會(huì)針對(duì)各個(gè)問題,用正確的流程組合解決問題的步驟,從而形成解決問題的方法。</P>
<P> </P>
<P>看起來我們已經(jīng)擁有了從根本上解決任何問題的能力。但--</P>
<P>家里電視壞了怎么辦?</P>
<P>呃?這個(gè),我不是學(xué)電器專業(yè)的。我只會(huì)看電視,我不會(huì)修理電視。</P>
<P>這時(shí)候我們的辦法是:打一個(gè)電話請(qǐng)專業(yè)的修理師上門修理。</P>
<P>還有很多問題的解決辦法都是和修電視類似,即:我們自已沒有這個(gè)能力,但我們可以<B>調(diào)用</B>一個(gè)具備這一能力的人來進(jìn)行。</P>
<P>函數(shù)在程序中就相當(dāng)于:具備某些功能的一段相對(duì)獨(dú)立的,可以被調(diào)用的代碼。是的,函數(shù)也就是一段代碼,代碼也就是我們前面的學(xué)的“變量,常量,流程控制”等寫成的一行行語句。這些語句以一種約定形式存在著,等待我們?nèi)フ{(diào)用它。</P>
<P>其實(shí)我們已經(jīng)用過函數(shù)了:給你一個(gè)數(shù):2.678,能幫我們求出它的正弦值嗎?想起來了嗎?我們?cè)?lt;A
href="http://d2school.com/bcyl/bhcpp/newls/ls11.htm#11.4.4">上一章中學(xué)過sin()函數(shù)</A>。</P>
<P>一段用以被調(diào)用的代碼,這是函數(shù)的本質(zhì)。當(dāng)然,使用函數(shù)在程序中還有許多其它的作用,但我們將從這個(gè)最關(guān)鍵的地方講起:怎樣調(diào)用一個(gè)函數(shù)?</P>
<P> </P>
<H3><A name=12.2>12.2</A> 學(xué)會(huì)調(diào)用函數(shù)</H3>
<P> 這一節(jié)的任務(wù)是通過學(xué)會(huì)如何調(diào)用一個(gè)函數(shù),從使用者的角度來了解函數(shù)各個(gè)重要知識(shí)點(diǎn)。從而,也為下一節(jié)學(xué)習(xí)如何寫一個(gè)函數(shù)打下基礎(chǔ)。我們相信這樣的安排是科學(xué)的,因?yàn)樵谏钪校覀円餐窍仁且粋€(gè)“使用者”,然后才是一個(gè)“<BR>創(chuàng)造者”或“提供者”。</P>
<H4><A name=12.2.1>12.2.1</A> 哪些函數(shù)可調(diào)用?</H4>
<P>在學(xué)會(huì)如何調(diào)用函數(shù)之前,不妨先看看有哪些現(xiàn)成的函數(shù)可以調(diào)用。</P>
<H5><A name=12.2.1.1>12.2.1.1</A> 庫函數(shù)</H5>
<P>C++ Builder
提供了數(shù)百個(gè)庫函數(shù)。之所以稱為“庫”函數(shù),是因?yàn)檫@些函數(shù)被集中在一個(gè)或幾個(gè)文件里,這些文件就像存放函數(shù)倉庫,當(dāng)我們需要時(shí),程序就可以從“庫”中調(diào)用。</P>
<P>庫文件又分為兩種形式:</P>
<P>第一種是把不同的函數(shù)分門別類地放在不同的文件里。比如和數(shù)學(xué)計(jì)算有關(guān)的,放到一個(gè)文件,和I/O操作有關(guān)的,放到另一個(gè)文件。這樣做的結(jié)果是:文件很多,但每個(gè)文件都比較小。這種庫我們稱為“靜態(tài)庫”。</P>
<P>使用靜態(tài)庫的好處是:當(dāng)我們的程序調(diào)用到某一庫的函數(shù)是,C++ Builder
可以將這個(gè)庫文件直接和我們的程序“合并”到一起。這樣,我們提供給用戶程序時(shí),只需要提供一個(gè)可執(zhí)行文件(比如叫:A.exe)。用戶得到這個(gè)程序時(shí),不用安裝其它文件,就可以運(yùn)行了。</P>
<P>使用靜態(tài)庫的壞處是:假如你需要向用戶提供兩個(gè)可執(zhí)行文件,比如A.exe和B.exe,兩個(gè)文件可能都用到同一庫文件,所
以同一個(gè)庫函數(shù)既被“合并”入A.exe,也被合并入B.exe,造成了事實(shí)上的空間浪費(fèi)。另外,雖然說每人靜態(tài)庫的文件都比較小,但如果一個(gè)程序“合并”了不少庫文件,那么這個(gè)程序的可執(zhí)行文件體積仍然不可避免地變得比較大。</P>
<P> </P>
<P>和靜態(tài)庫相對(duì),另外一種庫稱為“動(dòng)態(tài)庫”。它的做法是:把所有函數(shù)不管三七二十一,都放在一個(gè)文件里。這樣做的結(jié)果:庫文件只有一個(gè),但體積很大。</P>
<P>使用動(dòng)態(tài)庫的壞處是:動(dòng)態(tài)庫不允許“合并”到你的程序中--顯然也不適于合并,因?yàn)閯?dòng)態(tài)庫太大了。所以若你使用動(dòng)態(tài)庫,在發(fā)布你的應(yīng)用程序時(shí),你必須向你的用戶提供動(dòng)態(tài)庫文件。</P>
<P>使用動(dòng)態(tài)庫的好處在于:如果你向用戶提供的是一套程序,比如有A.exe,B.exe,C.exe...,那么這些可執(zhí)行文件都可以使用同一個(gè)動(dòng)態(tài)庫,所以盡管你需額外提供一個(gè)很大的動(dòng)態(tài)庫,但你的各個(gè)應(yīng)用程序卻都很小。當(dāng)然,采用動(dòng)態(tài)庫發(fā)布程序時(shí),一般來說你還需要向用戶提供一個(gè)安裝程序,很多動(dòng)態(tài)庫要被安裝到Windows目錄的system或system32子目錄下。</P>
<P> </P>
<P>什么時(shí)候使用靜態(tài)庫,什么時(shí)候使用動(dòng)態(tài)庫?當(dāng)你只是寫一個(gè)小小應(yīng)用程序時(shí),顯然大多數(shù)人喜歡只提供一個(gè)單獨(dú).exe文件。比如情人節(jié)到了,你覺得通過網(wǎng)絡(luò)向你的girlfriend發(fā)一個(gè)電子賀卡太俗(前幾年還很風(fēng)雅呵:),同時(shí)也不能突顯你作為一個(gè)程序員的實(shí)力--風(fēng)水輪流轉(zhuǎn)啊,前年搞網(wǎng)絡(luò)的人還笑話程序員是“傳統(tǒng)工業(yè)”--所以你決定用C++
Builder寫一個(gè)電子賀卡,這時(shí)你可不能用動(dòng)態(tài)庫啊,否則擠爆了女友的信箱,嘿嘿,這個(gè)情人節(jié)就有你好受的了……</P>
<P>相反,一個(gè)稍大點(diǎn)軟件系統(tǒng),你就應(yīng)該采用動(dòng)態(tài)庫。大的如整個(gè)Windows操作系統(tǒng),就徹頭徹尾是使用動(dòng)態(tài)庫;再如一整套MS
Office,還有WPS,這些都是。一般地說(不絕對(duì)),那些提供了安裝程序的軟件,都是使用動(dòng)態(tài)庫的。總之,使用動(dòng)態(tài)庫是專業(yè)程序的做法。</P>
<P>(又有人舉手打斷我的課程,說我們什么時(shí)候才能自已寫個(gè)電子賀卡?回答是下一部教程《白話Windows編程》,順便說說,下部教程很貴很貴的--嚇你的:)</P>
<P> </P>
<P>不管使用動(dòng)態(tài)或靜態(tài)的庫,寫程序時(shí)都是一樣的。只有在最后要鏈接程序時(shí),我們通過CB設(shè)置不同的選項(xiàng)即可。嗯?我說到了“鏈接”(link)這個(gè)詞?對(duì)了,它就是我們一直加引號(hào)的“合并”一詞的專業(yè)說法。你可以把前面課程上所有的“合并”一詞替換為鏈接,并且不用加引號(hào)了。</P>
<P> </P>
<P>現(xiàn)在我們來看看CB主要提供哪些類別的庫函數(shù)(以下內(nèi)容僅供了解):</P>
<P> </P>
<P><B>1、分類判斷函數(shù):</B></P>
<P>這類函數(shù)主要用對(duì)判斷一個(gè)字符是什么類型的。就像我們上一章做的“<A
href="http://d2school.com/bcyl/bhcpp/newls/ls11.htm#11.4.2">判斷用戶輸入字符的類型</A>”的例子。不使用函數(shù),我們可以這樣的條件判斷一個(gè)字符是否為小寫字母:</P>
<P>if ( ch >= 'a' && ch <= 'z' )</P>
<P> cout << ch << "是一個(gè)小寫字母。" <<
endl;</P>
<P>我們也可以直接使用相關(guān)的庫函數(shù) islower:</P>
<P>if ( islower(ch) )</P>
<P> cout << ch << "是一個(gè)小寫字母。" <<
endl;</P>
<P> </P>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -