




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1
一、機(jī)器語(yǔ)言、匯編語(yǔ)言和高級(jí)語(yǔ)言
二、C語(yǔ)言的歷史與特點(diǎn)
三、從C語(yǔ)言到C++語(yǔ)言的進(jìn)化
四、計(jì)算機(jī)結(jié)構(gòu)的五個(gè)主要單元
五、C/C++程序的實(shí)現(xiàn)
六、C/C++源程序的基本形式第一章緒論C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第1頁(yè)。2一、機(jī)器語(yǔ)言、匯編語(yǔ)言和高級(jí)語(yǔ)言計(jì)算機(jī)系統(tǒng)包括硬件與軟件兩部分。軟件是維護(hù)計(jì)算機(jī)硬件系統(tǒng)進(jìn)行多用途計(jì)算的各種程序的總和。硬件是計(jì)算機(jī)系統(tǒng)的軀干,軟件是計(jì)算機(jī)系統(tǒng)的靈魂。計(jì)算機(jī)語(yǔ)言是駕馭軟件開(kāi)發(fā)的一套語(yǔ)法規(guī)則,這套語(yǔ)法規(guī)則的具體實(shí)現(xiàn)又是通過(guò)稱之為編譯器的軟件來(lái)完成的。因此硬件、軟件與計(jì)算機(jī)語(yǔ)言的歷史是交叉耦合地進(jìn)化的過(guò)程。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第2頁(yè)。3計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言可以歸為如下三類:
a.機(jī)器語(yǔ)言:硬件系統(tǒng)可識(shí)別的的原始語(yǔ)言;開(kāi)發(fā)軟件難度大、周期長(zhǎng);程序員記憶的困難。
b.匯編語(yǔ)言:直接處理所有硬件;是各種語(yǔ)言中最快又最有效的語(yǔ)言;容易理解、記憶。
c.高級(jí)語(yǔ)言:屏蔽低級(jí)語(yǔ)言硬件細(xì)節(jié)的語(yǔ)言,一個(gè)模塊對(duì)應(yīng)匯編語(yǔ)言中一系列整體運(yùn)行的指令。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第3頁(yè)。4FORTRANFORTRAN77FORTRAN90BASICANSI-BASICQBASICVISUAL-BASICDELPHIPASCALALGOLALGOL68SIMULA67SMALLTALKC++JAVAC#BCPLBC
圖各種語(yǔ)言的發(fā)展演化進(jìn)程C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第4頁(yè)。5二、C語(yǔ)言的歷史與特點(diǎn)
C語(yǔ)言是從BCPL(BasicCombinedProgrammingLanguage)語(yǔ)言和B語(yǔ)言演化而來(lái);集匯編語(yǔ)言處理硬件細(xì)節(jié)和高級(jí)語(yǔ)言模塊化高效編程長(zhǎng)處于一身;
它介于低級(jí)的匯編語(yǔ)言與高級(jí)的FORTRAN語(yǔ)言之間;
C語(yǔ)言既有面向系統(tǒng)如匯編語(yǔ)言一樣直接訪問(wèn)硬件的快捷功能,又同時(shí)具備高級(jí)語(yǔ)言面向用戶、容易記憶、清晰靈活的優(yōu)點(diǎn),可稱之為高級(jí)的匯編語(yǔ)言。
C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第5頁(yè)。6三、從C語(yǔ)言到C++語(yǔ)言的進(jìn)化首先C++是一個(gè)更好的C語(yǔ)言,是C的一個(gè)超集,C++保留了C語(yǔ)言的優(yōu)點(diǎn)同時(shí)也吸收其它面向?qū)ο缶幊陶Z(yǔ)言的長(zhǎng)處。Stroustroup博士早期(80年代初)通過(guò)一個(gè)名為cfront的轉(zhuǎn)換程序?qū)++源程序處理成C源程序,這保證轉(zhuǎn)換后的代碼能在任意支持C的編譯系統(tǒng)中運(yùn)行。
C++語(yǔ)言的主要特點(diǎn)表現(xiàn)在:
一、是全面兼容C語(yǔ)言;
二、是支持面向?qū)ο蟮木幊谭椒?C++是典型的混合編程語(yǔ)言.C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第6頁(yè)。7C語(yǔ)言不簡(jiǎn)單(C語(yǔ)法是簡(jiǎn)單的),C++語(yǔ)言本質(zhì)上也不更多復(fù)雜。但C++語(yǔ)言包容了許多面向?qū)ο蟮恼Z(yǔ)法和概念,提高了該語(yǔ)言處理復(fù)雜問(wèn)題的抽象層次;面向?qū)ο缶幊烫峁┝诉M(jìn)行駕馭大型軟件開(kāi)發(fā)的有力手段,對(duì)于程序的重用和可維護(hù)性提供了新的理論支持。 最關(guān)鍵的是解決問(wèn)題,語(yǔ)言僅是一種手段。
C++語(yǔ)言至關(guān)重要的是它并不將面向?qū)ο缶幊痰恼Z(yǔ)法手段強(qiáng)制程序員使用,C/C++程序員可以將C++視為一個(gè)C語(yǔ)言的改良版本,充分利用C++語(yǔ)言子集的卓越性能進(jìn)行游刃有余的編程,進(jìn)行面向問(wèn)題的軟件開(kāi)發(fā)。積累了一定具體的經(jīng)驗(yàn)之后再適當(dāng)步入面向?qū)ο蟮膭?dòng)態(tài)世界。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第7頁(yè)。8四、計(jì)算機(jī)結(jié)構(gòu)的五個(gè)主要單元
軟件的開(kāi)發(fā)必須與計(jì)算機(jī)的體系結(jié)構(gòu)打交道,與程序設(shè)計(jì)相關(guān)的計(jì)算機(jī)結(jié)構(gòu)是下面的五個(gè)主要單元:
1.
輸入單元:輸入單元是計(jì)算機(jī)接受信息的部分并且與計(jì)算機(jī)完成信息的交互。它從各種輸入設(shè)備讀取中斷信息,同時(shí)把這些信息放置在其它處理信息的單元中。有兩種常用的輸入信息的設(shè)備,一個(gè)是鍵盤,另一個(gè)是鼠標(biāo)。標(biāo)準(zhǔn)輸入stdin常指設(shè)備鍵盤。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第8頁(yè)。9
2.
輸出單元:
輸出單元是計(jì)算機(jī)輸出信息的部分。它將計(jì)算機(jī)處理的信息或數(shù)據(jù)送入各種輸出設(shè)備中,從而這些信息能夠有效的閱讀。有兩種常用的輸出信息的設(shè)備,它們是屏幕顯示器與打印機(jī)。標(biāo)準(zhǔn)輸出stdout指顯示器,標(biāo)準(zhǔn)打印stdprn指打印機(jī)。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第9頁(yè)。10
3.
中央處理單元:
中央處理單元是計(jì)算機(jī)的核心硬件部分CPU,CPU本身由算術(shù)邏輯部件、控制邏輯部件和一組工作寄存器構(gòu)成。算術(shù)邏輯部件ALU用來(lái)進(jìn)行算術(shù)邏輯運(yùn)算,控制邏輯部分負(fù)責(zé)對(duì)全機(jī)的管理,包括從存儲(chǔ)器取出指令,對(duì)總線及輸入輸出設(shè)備的數(shù)據(jù)轉(zhuǎn)送控制等。寄存器是CPU中的存儲(chǔ)單元,用來(lái)存放算術(shù)邏輯部件處理的中間結(jié)果,包括對(duì)存儲(chǔ)器的尋址等。存儲(chǔ)器是下面的內(nèi)存單元。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第10頁(yè)。11
4.
內(nèi)存單元:
內(nèi)存單元由稱之為內(nèi)存條的硬件作為物理載體,是計(jì)算機(jī)中存取速度快的存儲(chǔ)信息的部分。程序的數(shù)據(jù)與代碼指令動(dòng)態(tài)地保存在內(nèi)存中,內(nèi)存的記憶性能是瞬態(tài)穩(wěn)定的,關(guān)機(jī)則意味著內(nèi)存信息的徹底消失,內(nèi)存信息必須永久性地保存到外存上。
5.
外存單元:
外存單元是計(jì)算機(jī)用來(lái)長(zhǎng)期保存數(shù)據(jù)信息的存儲(chǔ)部分,與計(jì)算機(jī)軟件相關(guān)的信息在關(guān)機(jī)狀態(tài)都必須有效地存放在外存中。常見(jiàn)外存設(shè)備是軟盤、硬盤、閃盤和光碟。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第11頁(yè)。12五、C/C++程序的實(shí)現(xiàn)
C/C++程序的實(shí)現(xiàn)是通過(guò)軟件開(kāi)發(fā)工具進(jìn)行的,目前流行的軟件開(kāi)發(fā)工具以VisualC++6.0和C++Build5.0為代表。本書程序利用VisualC++6.0進(jìn)行開(kāi)發(fā),其本身是優(yōu)秀的可視化編程開(kāi)發(fā)工具。
VisualC++6.0開(kāi)發(fā)的程序只能是32位應(yīng)用程序,即內(nèi)存地址的尋址方式為32尋址。所有語(yǔ)言源程序的實(shí)現(xiàn)都必須經(jīng)歷下面四個(gè)步驟:1.編輯2.翻譯3.連接4.運(yùn)行C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第12頁(yè)。13
1.編輯:
編輯是根據(jù)計(jì)算機(jī)語(yǔ)言的語(yǔ)法規(guī)則將算法與相應(yīng)的數(shù)據(jù)輸入到計(jì)算機(jī)中形成含原始代碼的文本文件的過(guò)程。這一文本文件或源文件對(duì)于C編程方式以擴(kuò)展名即.c的文件保存,C++編程方式以擴(kuò)展名即.cpp的磁盤文件保存。
通常C++源程序的文件為兩部分:接口文件(也稱為頭文件)和實(shí)現(xiàn)文件(或源文件),C++頭文件的標(biāo)準(zhǔn)擴(kuò)展名為.h,C++實(shí)現(xiàn)文件的標(biāo)準(zhǔn)擴(kuò)展名為.cpp,系統(tǒng)最終將頭文件插入到實(shí)現(xiàn)文件中即源文件.cpp中。文本是指由字母、數(shù)字、符號(hào)等組成的明白可讀的字符信息,文本編譯器可以用來(lái)建立、輸入或修改文本。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第13頁(yè)。14
2.翻譯:
高級(jí)語(yǔ)言的翻譯程序有兩種方式:一種是編譯型的程序,另一種是解釋型的程序。低級(jí)的匯編語(yǔ)言翻譯程序?qū)?yīng)一個(gè)匯編程序,匯編程序直接將匯編語(yǔ)言轉(zhuǎn)換成機(jī)器語(yǔ)言,然后加工處理成目標(biāo)代碼,轉(zhuǎn)換的中間環(huán)節(jié)最少。編譯型的翻譯方式為先把高級(jí)語(yǔ)言翻譯成機(jī)器語(yǔ)言然后再將匯編語(yǔ)言翻譯成機(jī)器語(yǔ)言。如FORTRAN、C和C++是編譯型的程序。解釋型的翻譯方式是直接把高級(jí)語(yǔ)言在機(jī)器上運(yùn)行,一邊解釋一邊執(zhí)行,如BASIC和JAVA是解釋型的程序。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第14頁(yè)。15
編譯型方式的優(yōu)點(diǎn)是運(yùn)行效率快、執(zhí)行時(shí)間短;解釋型的長(zhǎng)處是占用內(nèi)存少。
3.
連接過(guò)程:
連接過(guò)程是由連接程序進(jìn)行的。連接程序用來(lái)把編譯階段分別編譯產(chǎn)生的目標(biāo)文件、系統(tǒng)原先提供的庫(kù)文件或其它中間列表信息文件或二進(jìn)制資源文件等連接在一起,形成一個(gè)整體運(yùn)行的擴(kuò)展名為.exe的執(zhí)行程序。連接過(guò)程可以進(jìn)一步發(fā)現(xiàn)在編譯階段未能捕獲的錯(cuò)誤,如某個(gè)函數(shù)模塊的遺漏,標(biāo)識(shí)符的重復(fù)定義等。庫(kù)文件有靜態(tài)連接庫(kù)和動(dòng)態(tài)連接庫(kù),擴(kuò)展名各自為.lib和.dll。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第15頁(yè)。16
4.
加載運(yùn)行:
加載運(yùn)行就是將執(zhí)行程序從外存如硬盤或光碟中的機(jī)器指令轉(zhuǎn)送到內(nèi)存儲(chǔ)器,以便機(jī)器執(zhí)行;程序在執(zhí)行之前必須先裝入內(nèi)存,對(duì)于大的程序操作系統(tǒng)根據(jù)系統(tǒng)的內(nèi)存資源可能只將高頻使用的部分代碼裝入內(nèi)存。預(yù)處理編譯過(guò)程常稱為編譯時(shí),連接過(guò)程稱為連接時(shí),加載運(yùn)行過(guò)程稱為運(yùn)行時(shí)。常用編譯器一詞籠統(tǒng)地指編譯、連接和運(yùn)行三個(gè)過(guò)程,因?yàn)榧砷_(kāi)發(fā)環(huán)境對(duì)這三個(gè)過(guò)程可以通過(guò)一個(gè)命令一次連續(xù)的執(zhí)行。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第16頁(yè)。17六、C/C++源程序的基本形式
程序設(shè)計(jì)語(yǔ)言有各自編寫的形式。匯編語(yǔ)言具有指令加左操作數(shù)和右操作數(shù)的形式,表現(xiàn)了該語(yǔ)言與機(jī)器語(yǔ)言的直接貼近。
C/C++源程序書寫格式非常靈活,一條語(yǔ)句可以分散在不同的行上也可以將許多語(yǔ)句壓縮在單行上。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第17頁(yè)。18[例]程序的分散表示。程序輸出:Nothingishardintheworld#include<stdio.h>voidmain(void/*圓括號(hào)中的void明確表示無(wú)入口參數(shù)*/){ /*printf("/*世上無(wú)難事*///\t");*/printf("Nothingishard""intheworld\n");}//end"Nothingishard""intheworld\n"合并為"Nothingishardintheworld\n",程序輸出雙引號(hào)內(nèi)的字符串,
printf是輸出庫(kù)函數(shù)。按回車鍵在源程序產(chǎn)生看不見(jiàn)的字符,簡(jiǎn)稱換行符或硬回車,“\n”是換行符的轉(zhuǎn)義序列,表示在屏幕上產(chǎn)生一個(gè)回車換行動(dòng)作。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第18頁(yè)。19[例]程序的壓縮表示。
#include<stdio.h>voidmain(void){/*printf("世上無(wú)難事\t");*/printf("Nothingishardintheworld\n");}//end去掉斜杠星號(hào)/*------*/對(duì),可以得到一個(gè)改進(jìn)的程序。程序依然輸出結(jié)果:
Nothingishardintheworld
C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第19頁(yè)。20[例]程序改動(dòng)一些注釋。輸出:
/*世上無(wú)難事*///Nothingishardintheworld#include<stdio.h>voidmain(){printf("/*世上無(wú)難事*///\t");//"\t"是水平制表的轉(zhuǎn)義序列,表示水平跳過(guò)8個(gè)空格
printf("Nothingishardintheworld\n");}
從上面三個(gè)例子可以看出C/C++程序外在格式的靈活性,有展開(kāi)的可讀性強(qiáng)的形式,也有濃縮的節(jié)省紙張的形式,可用回車鍵、空格鍵和刪除鍵在擴(kuò)伸與壓縮之間變換。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第20頁(yè)。21
一個(gè)空格可以擴(kuò)展為多個(gè)空格,多個(gè)空格可以濃縮為一個(gè)空格。一條語(yǔ)句可分散在多行上,一行可以寫多個(gè)語(yǔ)句,語(yǔ)句由分號(hào)結(jié)束。但空格或空行的增刪不是任意的。變量名函數(shù)名關(guān)鍵字如if,int等名稱之間、帶參的宏名與圓括號(hào)之間、續(xù)行符\之間、轉(zhuǎn)義序列如\n之間、運(yùn)算符如++,+=之間不能插入空格。字符串中的空格和換行符視為有效字符。作為名稱或運(yùn)算符之間分隔的空格是不能刪除的。例如:
x+++y不同于x+++y#definex3不同于#definex3
除此之外的空格和空行一般是可以任意設(shè)置的。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第21頁(yè)。22C/C++的程序內(nèi)在的格式由如下幾個(gè)方面構(gòu)成:
1.#include預(yù)處理指令引入的頭文件
2.main()函數(shù)表示的dos或console模式下應(yīng)程序的入口
3.
花括號(hào)對(duì)“{}”表示程序的結(jié)構(gòu)層次范圍
4.
分號(hào)“;”結(jié)束的表達(dá)式語(yǔ)句或函數(shù)調(diào)用語(yǔ)句
5.
多行注釋"/*------*/"或單行注釋"http://-----"
C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第22頁(yè)。23
由井字號(hào)“#”引入的指令為預(yù)處理指令,對(duì)應(yīng)的預(yù)處理語(yǔ)句不以分號(hào)“;”結(jié)尾,“#include”稱為文件包含預(yù)處理指令,通過(guò)該指令系統(tǒng)將其后程序段使用的名稱進(jìn)行了預(yù)先的說(shuō)明。
#include<stdio.h>的作用是將stdio.h文件在預(yù)處理階段插入到程序.cpp中,作為程序源文件的一個(gè)有機(jī)部分?!?include”指令是代碼重用的有效手段。stdio.h是標(biāo)準(zhǔn)輸入輸出頭文件,其中包含了printf,scanf函數(shù)的原型說(shuō)明。
printf函數(shù)和scanf函數(shù)是C運(yùn)行庫(kù)函數(shù)。 C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第23頁(yè)。24
當(dāng)編譯器編譯某條printf語(yǔ)句時(shí),編譯器根據(jù)#include<stdio.h>可以知道printf是一個(gè)函數(shù)名,這樣在目標(biāo)程序里為該例程建立一個(gè)入口,但編譯器并不知道庫(kù)函數(shù)在哪里。連接程序會(huì)掃描庫(kù)函數(shù)并在目標(biāo)程序中插入對(duì)這些庫(kù)函數(shù)的正確調(diào)用。如果在相應(yīng)的子目錄中沒(méi)有掃描到由函數(shù)名printf指示的庫(kù)函數(shù),則連接程序會(huì)提示一個(gè)錯(cuò)誤。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第24頁(yè)。25main()是文本編程模式下的入口函數(shù),WindowsAPI編程模式下的入口函數(shù)為WinMain,main函數(shù)的前面void表示該函數(shù)沒(méi)有返回值,圓括號(hào)“()”中的void表示系統(tǒng)不從環(huán)境中讀取輸入值。
main函數(shù)或其它函數(shù)必須存在匹配的花括號(hào)對(duì)"{}"。匹配按就近原則進(jìn)行,右花括號(hào)"}"向前或向上或向右匹配距離最近的左花括號(hào)"{"?;ɡㄌ?hào)對(duì)"{...}"之間是若干條語(yǔ)句。配對(duì)的花括號(hào)與其間的語(yǔ)句一起可視為一條語(yǔ)句,稱為程序塊。最外層的左花括號(hào)"{"標(biāo)志函數(shù)體的開(kāi)始,相應(yīng)的右花括號(hào)"}"是該函數(shù)的結(jié)束,其后不再跟分號(hào)";"。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第25頁(yè)。26
C/C++程序最重要的一個(gè)語(yǔ)法現(xiàn)象就是分號(hào)“;”,一個(gè)單獨(dú)的分號(hào)“;”本身就是一個(gè)語(yǔ)句,語(yǔ)句是構(gòu)成程序的基本單元。大量的語(yǔ)句由表達(dá)式加上分號(hào)構(gòu)成,稱為表達(dá)式語(yǔ)句。其它語(yǔ)句如選擇語(yǔ)句、控制語(yǔ)句等大都與分號(hào)發(fā)生聯(lián)系,分號(hào)是語(yǔ)句的必要成分又是語(yǔ)句與語(yǔ)句之間的分隔標(biāo)志。編譯器通過(guò)掃描分號(hào)對(duì)復(fù)雜的流程進(jìn)行斷句處理。前面例子中的語(yǔ)句:
printf("Nothingishardintheworld\n");
該語(yǔ)句由兩部分組成,一是函數(shù)調(diào)用,另一個(gè)是分號(hào)";"。稱為函數(shù)調(diào)用語(yǔ)句,指示計(jì)算機(jī)執(zhí)行相應(yīng)的動(dòng)作,即將雙引號(hào)括起來(lái)的字符串打印到屏幕上。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第26頁(yè)。27C++程序中注釋有兩種形式:
多行注釋即斜杠星形式"/*...*/"和C++語(yǔ)言新引進(jìn)的單行注釋"http://..."形式。
C++在預(yù)處理階段就將注釋所含蓋的字符化為空白。多行注釋即斜杠星形式"/*...*/"忽略始于"/*"之后所有文本內(nèi)容,直到發(fā)現(xiàn)"*/"為止。"/*"向后或向下匹配距離其最近的"*/",其間的內(nèi)容包括定界符/*...*/本身被處理為空白。
"/*...*/"形式的注釋不嵌套使用,注釋字符"/*---*/"和"http://"在字符串或注釋內(nèi)部沒(méi)有任何特殊意義。
注釋不應(yīng)插在標(biāo)識(shí)符或名稱的中間,以避免一個(gè)名稱被分隔為兩個(gè)標(biāo)識(shí)符。a.C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第27頁(yè)。28
單行注釋“//-----”形式忽略其后的內(nèi)容直到本行結(jié)束,即包括雙斜杠在內(nèi)的其后的文本被處理為空白。如下的注釋為兩個(gè)不同的單行注釋://******
語(yǔ)句序列;//*/對(duì)語(yǔ)句序列不起作用即程序保留語(yǔ)句序列的執(zhí)行功能。如下的注釋屬于單獨(dú)的多行注釋:/******
語(yǔ)句序列;//*/b.C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第28頁(yè)。29
通過(guò)增刪上面的斜杠/可以對(duì)其間選定的程序段起到去留的切換作用。斜杠星形式"/*------*/"斜杠與星號(hào)必須緊貼在一起才起作用,利用這一性質(zhì)可以靈活控制程序段的去留。注釋是編譯器不予保留的文本,是關(guān)于軟件代碼的細(xì)節(jié)說(shuō)明。注釋不是必須的編程部分,對(duì)于程序的運(yùn)行沒(méi)有絲毫的關(guān)系。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第29頁(yè)。30七、函數(shù)初步
C/C++程序通過(guò)函數(shù)運(yùn)轉(zhuǎn),函數(shù)操作數(shù)據(jù)和變量。程序根據(jù)源代碼出現(xiàn)的先后次序一個(gè)一個(gè)語(yǔ)句地順序往后執(zhí)行,稱為順序流程結(jié)構(gòu)。遇到函數(shù)調(diào)用則流程轉(zhuǎn)入被調(diào)用的函數(shù)體,然后從被調(diào)函數(shù)返回,執(zhí)行函數(shù)調(diào)用的下一條語(yǔ)句。在編輯輸入上面的代碼時(shí)請(qǐng)注意:新的集成開(kāi)發(fā)環(huán)境支持漢字出現(xiàn)在字符串中,但漢字環(huán)境的標(biāo)點(diǎn)符號(hào)與英文環(huán)境的標(biāo)點(diǎn)符號(hào)其編碼是不一樣的,因此在字符串之外的標(biāo)點(diǎn)符號(hào)一定要保證在英文環(huán)境中輸入,否則導(dǎo)致源代碼的語(yǔ)法錯(cuò)誤。
C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第30頁(yè)。31[例]C流文件及函數(shù)調(diào)用實(shí)現(xiàn)順序流程
#include<stdio.h>//void型函數(shù)vf的定義,放置于主控函數(shù)前
voidvf(intx,inty,ints)//void表示函數(shù)沒(méi)有返回值,形參x,y,z是int型的變量
{printf("%d,%d\n",x+y,s);}//花括號(hào)包含的語(yǔ)句表示函數(shù)體
intAdd(int,int);
//Add函數(shù)原型說(shuō)明,表示入口形參為2個(gè)int型數(shù)據(jù),返回int型數(shù)據(jù)
voidShow()//圓括號(hào)中一無(wú)所有表示入口無(wú)參,voidShow()相當(dāng)于voidShow(void){printf("輸入兩個(gè)整數(shù)\t");}C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第31頁(yè)。32intmain(void)
//圓括號(hào)中的void表示main函數(shù)此時(shí)沒(méi)有入口參數(shù),返回int型數(shù)據(jù)
{inti,j,sum;/*變量定義語(yǔ)句*/Show();/*提示輸入兩個(gè)整數(shù)*/scanf("%d,%d",&i,&j);/*讀入整數(shù)分別給變量j,k*/sum=Add(i,j);/*函數(shù)調(diào)用求和*/printf("Sumis%d\t",sum);/*屏幕上顯示出和*/vf(i,j,Add(i,j));//vf(i,j,Add(i,j))等價(jià)于vf(i,j,sum);return1;/*返回信息給操作系統(tǒng)是好的編程風(fēng)格*/ }C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第32頁(yè)。33intAdd(intl,intm)/*定義Add函數(shù),函數(shù)的返回類型為整型*/{/*入口參數(shù)l,m是整型*/returnl+m;/*直接返回l,m數(shù)的和*/}//函數(shù)調(diào)用Add(i,j)根據(jù)返回類型確定為int型的表達(dá)式執(zhí)行程序得到:輸入兩個(gè)整數(shù)5,6Sumis1111,11C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第33頁(yè)。34
在編輯輸入上面的代碼時(shí)請(qǐng)注意,新的集成開(kāi)發(fā)環(huán)境支持漢字出現(xiàn)在字符串中,但漢字環(huán)境的標(biāo)點(diǎn)符號(hào)與英文環(huán)境的標(biāo)點(diǎn)符號(hào)其編碼是不一樣的,因此在字符串之外的標(biāo)點(diǎn)符號(hào)一定要保證在英文環(huán)境中輸入,否則導(dǎo)致源代碼的語(yǔ)法錯(cuò)誤。本程序包括用戶定義的函數(shù):主函數(shù)main()和普通的函數(shù)Add以及vf。另外借用了系統(tǒng)提供的庫(kù)函數(shù)。在"stdio.h"給出了標(biāo)準(zhǔn)輸入函數(shù)scanf標(biāo)準(zhǔn)輸出函數(shù)printf的原型說(shuō)明。
Add函數(shù)的作用是求兩個(gè)整型變量的和,return關(guān)鍵字所引出的語(yǔ)句將整型變量l和m的和返回給主函數(shù)main,返回值是通過(guò)函數(shù)調(diào)用的方式進(jìn)行的。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第34頁(yè)。35程序主要包括如下6個(gè)步驟:
1.
變量的定義
2.
變量的初始化過(guò)程
3.
用戶與計(jì)算機(jī)實(shí)時(shí)交互
4.
算法的模塊化處理函數(shù)
5.
函數(shù)調(diào)用的虛實(shí)結(jié)合匹配
6.
控制權(quán)的帶信息返回C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第35頁(yè)。36
C/C++程序設(shè)計(jì)中變量必須明顯地定義才能使用,這一點(diǎn)區(qū)別于FORTRAN語(yǔ)言存在變量的隱含說(shuō)明。語(yǔ)句"inti,j,sum;"稱為變量定義語(yǔ)句,"int"是系統(tǒng)保留的關(guān)鍵字,"i,j,sum"則是用戶引入的變量,變量定義語(yǔ)句通知編譯器為這些變量分配內(nèi)存空間。對(duì)引入的變量賦予初值,稱為變量的初始化。變量初始化的位置和時(shí)刻是靈活的,變量的初始值可以位于本程序段內(nèi)、硬盤上或動(dòng)態(tài)交互輸入。函數(shù)調(diào)用的虛實(shí)結(jié)合匹配是指函數(shù)定義部分的形參與函數(shù)調(diào)用時(shí)的實(shí)參一對(duì)一的呼應(yīng)和結(jié)合過(guò)程,這一過(guò)程涉及到語(yǔ)言隱含的函數(shù)調(diào)用機(jī)制。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第36頁(yè)。37C語(yǔ)言中的函數(shù)調(diào)用機(jī)制為變量的數(shù)值傳遞,因此虛實(shí)結(jié)合匹配的時(shí)候采用了一個(gè)中轉(zhuǎn)站這就是變量的地址。通過(guò)中轉(zhuǎn)站間接的完成被調(diào)函數(shù)對(duì)變量的賦值或改變。輸入語(yǔ)句"scanf("%d,%d",&i,&j);"在屏幕上讀變量i和j的值,變量i和j之前分別加上了取地址運(yùn)算符&。而輸出語(yǔ)句"printf("Sumis%d\n",sum);"的變量sum前則沒(méi)有取地址運(yùn)算符&。
"%d,%d"是輸入輸出的格式化字符串,用來(lái)指示輸入輸出的數(shù)據(jù)類型和格式轉(zhuǎn)換,"%d"表示十進(jìn)制整數(shù)類型,有了這種格式化轉(zhuǎn)換函數(shù),系統(tǒng)就把內(nèi)存中的二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成用戶可理解的數(shù)據(jù)類型。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第37頁(yè)。38
函數(shù)是重要的編程手段,其中包括三個(gè)相關(guān)的步驟:
1.
函數(shù)具體定義
intAdd(intl,intm){returnl+m;}//l,m是形參,
2.
函數(shù)原型說(shuō)明
intAdd(intl,intm);//形參的初始值在虛實(shí)結(jié)合時(shí)得到
3.
函數(shù)調(diào)用虛實(shí)結(jié)合匹配
sum=Add(i,j);//i,j是匹配形參l,m的實(shí)參C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第38頁(yè)。39
函數(shù)定義對(duì)應(yīng)函數(shù)的某種執(zhí)行動(dòng)作,函數(shù)定義由標(biāo)題頭和函數(shù)體構(gòu)成,標(biāo)題頭由返回類型、函數(shù)名和形參列表構(gòu)成。例如:
intAdd(intl,intm)是標(biāo)題頭,{returnl+m;}是函數(shù)體函數(shù)原型表明函數(shù)的接口要求,虛實(shí)結(jié)合匹配在函數(shù)調(diào)用點(diǎn)進(jìn)行,函數(shù)調(diào)用時(shí)將實(shí)參i,j的值賦值給相應(yīng)形參l,m;相當(dāng)于l=i,m=j。函數(shù)的返回類型int與return中的表達(dá)式匹配。一般地,C/C++程序是通過(guò)變量和函數(shù)來(lái)組織的。變量用于識(shí)別內(nèi)存的數(shù)據(jù),函數(shù)則對(duì)這些數(shù)據(jù)進(jìn)行操作和轉(zhuǎn)換處理。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第39頁(yè)。40
文本編輯器
編譯器源文件1.cpp頭文件2.h頭文件1.h源文件2.cpp
連接器
庫(kù)文件.lib其它目標(biāo)文件.obj目標(biāo)文件1.obj目標(biāo)文件2.obj編譯錯(cuò)
執(zhí)行程序.exe連接錯(cuò)
預(yù)處理器運(yùn)行錯(cuò)
成功!!
修改當(dāng)前的源文件錯(cuò)誤解決各文件名稱唯一性或遺漏排除邏輯錯(cuò)誤或越界、內(nèi)存沖突等圖C/C++程序的開(kāi)發(fā)過(guò)程C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第40頁(yè)。41
一般地,C/C++程序是通過(guò)變量和函數(shù)來(lái)組織的。變量用于識(shí)別內(nèi)存的數(shù)據(jù),函數(shù)則對(duì)這些數(shù)據(jù)進(jìn)行操作和轉(zhuǎn)換處理。函數(shù)根據(jù)返回類型是否有值分兩類,其定義格式分兩種:
1.
不返回值的函數(shù),稱為void型的函數(shù)
voidvf(類型1形參1,類型2形參2,.…,類型n形參n){語(yǔ)句序列;
return;//函數(shù)體
}例:
voidvf(intx,inty,ints){printf("%d,%d\n",x+y,s);}C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第41頁(yè)。42
2.
返回確定類型值的函數(shù)
typef(T1v1,T2v2,...,Tnvn){/*返回類型函數(shù)名(形參列表)*/
語(yǔ)句序列;
returnexpre;}
例:
intAdd(intl,intm){intz=l+m;returnz;}type表函數(shù)的返回類型,T1,T2,Tn表示形參的類型名,它們可以是int,double以及結(jié)構(gòu)名等;f,vf,Add是函數(shù)名。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第42頁(yè)。43"返回類型函數(shù)名(形參列表)"稱為函數(shù)定義的標(biāo)題頭,標(biāo)題頭圓括號(hào)中形參類型后的參數(shù)v1,v2,...,vn為形式參數(shù),簡(jiǎn)稱形參。類型名、函數(shù)名和形參名遵循標(biāo)識(shí)符的命名約定。將標(biāo)題頭拷貝過(guò)來(lái),末尾添一個(gè)分號(hào)得到函數(shù)原型,其中的形參v1,v2,....,vn可省略,格式為(左邊為抽象的原型描述,右邊為具體的舉例):
typef(T1v1,T2v2,...,Tnvn);intAdd(int,int);
函數(shù)的標(biāo)題頭和函數(shù)體構(gòu)成函數(shù)定義,緊接著右圓括號(hào)”)”的最外層花括號(hào){}包含的部分為函數(shù)體。函數(shù)體由若干語(yǔ)句構(gòu)成,也可以根本沒(méi)有語(yǔ)句,此時(shí)稱為空函數(shù)。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第43頁(yè)。44
函數(shù)定義時(shí)標(biāo)題頭的形參可以省略而僅有類型,此時(shí)表示函數(shù)簡(jiǎn)單的提供一個(gè)接口準(zhǔn)備。也可以根本沒(méi)有入口參數(shù)。例如:
voidShow(){printf("輸入兩個(gè)整數(shù)\t");}。
expre是可以轉(zhuǎn)換為type類型的表達(dá)式。type如果是int,則函數(shù)運(yùn)算的結(jié)果返回int型整數(shù)。形參是入口,可以是各種類型的變量,也可以是指向這些變量的指針。函數(shù)返回的數(shù)據(jù)為出口,函數(shù)可以返回變量,也可以返回指針,指針是特殊的變量。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第44頁(yè)。45
如果return之后跟隨表達(dá)式語(yǔ)句,表示將表達(dá)式的值轉(zhuǎn)送給上層函數(shù),此時(shí)函數(shù)返回確定類型的數(shù)據(jù)。如果return語(yǔ)句之后緊貼一個(gè)分號(hào)或函數(shù)體中無(wú)return語(yǔ)句,這樣的函數(shù)的返回類型則寫為void,表示函數(shù)不返回值而僅執(zhí)行特定的運(yùn)算或動(dòng)作。 函數(shù)調(diào)用點(diǎn)實(shí)際代替形參的變量或表達(dá)式稱為實(shí)際參數(shù),簡(jiǎn)稱實(shí)參。實(shí)參是調(diào)用段可以求值的表達(dá)式。函數(shù)調(diào)用由函數(shù)名、圓括號(hào)對(duì)和逗號(hào)依次分隔開(kāi)的若干實(shí)參構(gòu)成。函數(shù)名與圓括號(hào)對(duì)是必不可少的,在無(wú)參調(diào)用時(shí)沒(méi)有實(shí)參。例如:
Show();C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第45頁(yè)。46
函數(shù)調(diào)用就是用具體的實(shí)參代替形參的過(guò)程,實(shí)參x1,x2,…,xn應(yīng)與形參列表的形參v1,v2,....,vn在位置、類型和個(gè)數(shù)上一一匹配。實(shí)參是形參的數(shù)據(jù)來(lái)源,是形參的初值。 在函數(shù)調(diào)用點(diǎn)相當(dāng)于執(zhí)行了v1=x1,v2=x2,....,vn=xn的初始化賦值運(yùn)算。不返回值的函數(shù)vf單獨(dú)調(diào)用:vf(x1,x2,....,xn);
例:
vf(i,j,sum);vf(i,j,Add(i,j)); void類型的函數(shù)一般僅獨(dú)立調(diào)用,由此構(gòu)成函數(shù)調(diào)用語(yǔ)句。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第46頁(yè)。47
返回值的函數(shù)調(diào)用是表達(dá)式,簡(jiǎn)稱函數(shù)調(diào)用是表達(dá)式。返回值的函數(shù)調(diào)用歸屬于表達(dá)式,可以說(shuō)C/C++語(yǔ)言是一種構(gòu)筑于表達(dá)式之上的語(yǔ)言。表達(dá)式是求值的基本單位,變量和常數(shù)是最簡(jiǎn)單的表達(dá)式。變量和常數(shù)與運(yùn)算符的組合可構(gòu)成復(fù)雜的表達(dá)式。例如:
l+m,sum=Add(i,j),7+m/2*3是表達(dá)式。表達(dá)式之后加一個(gè)分號(hào)形成表達(dá)式語(yǔ)句,例如:
sum=Add(i,j);是表達(dá)式語(yǔ)句。可多次在賦值運(yùn)算符=左邊出現(xiàn)的表達(dá)式是左值表達(dá)式,否則是右值表達(dá)式。變量是左值,常數(shù)是右值。Add(i,j)是右值。C-C++程序設(shè)計(jì)教程課件全文共53頁(yè),當(dāng)前為第47頁(yè)。48
返回值的函數(shù)調(diào)用f(x1,x2,.…,xn)攜帶"returnexpre;"返回的值。表達(dá)式expre能夠出現(xiàn)的地方,f(x1,x2,….,xn)幾乎可以等價(jià)的出現(xiàn)。但C語(yǔ)言返回算術(shù)表達(dá)式或返回指針表達(dá)式的函數(shù)調(diào)用構(gòu)成右值。C++增添了返回左值的函數(shù)調(diào)用,這才是全部等價(jià)的映
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑工程項(xiàng)目委托管理合同
- 工作流程標(biāo)準(zhǔn)化操作指南說(shuō)明
- 中介業(yè)務(wù)合作協(xié)議合同
- 夫妻離婚協(xié)議書年
- 醫(yī)院治療流程規(guī)范
- 混凝土運(yùn)輸承包合同
- 2025年武漢貨運(yùn)資格證考試答題20題
- 三農(nóng)品牌塑造與推廣策略手冊(cè)
- 2025年哈爾濱貨運(yùn)從業(yè)資格證模擬考試
- 2025年自貢貨運(yùn)從業(yè)資格證考試模擬考試題庫(kù)下載
- 部編版《道德與法治》六年級(jí)下冊(cè)第6課《探訪古代文明》精美課件(第1課時(shí))
- (正式版)CB∕T 4548-2024 船舶行業(yè)企業(yè)相關(guān)方安全管理要求
- 部編版八年級(jí)物理(上冊(cè))期末試卷(帶答案)
- 《衡水內(nèi)畫》課程標(biāo)準(zhǔn)
- DB32T 4400-2022《飲用水次氯酸鈉消毒技術(shù)規(guī)程》
- 化學(xué)品(氬氣+二氧化碳混合氣)安全技術(shù)使用說(shuō)明書
- 煤層氣開(kāi)發(fā)-第2章-煤層氣地質(zhì)
- 美羅華(利妥昔單抗)課件
- 稅務(wù)簡(jiǎn)易注銷課件
- 人教版五年級(jí)數(shù)學(xué)下冊(cè)第六單元分層作業(yè)設(shè)計(jì)
- 肺葉切除術(shù)和全肺切除術(shù)的麻醉課件
評(píng)論
0/150
提交評(píng)論