




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
一、機器語言、匯編語言和高級語言
二、C語言的歷史與特點
三、從C語言到C++語言的進化
四、計算機結構的五個主要單元
五、C/C++程序的實現(xiàn)
六、C/C++源程序的基本形式第一章緒論1 一、機器語言、匯編語言和高級語言第一章緒論1一、機器語言、匯編語言和高級語言計算機系統(tǒng)包括硬件與軟件兩部分。軟件是維護計算機硬件系統(tǒng)進行多用途計算的各種程序的總和。硬件是計算機系統(tǒng)的軀干,軟件是計算機系統(tǒng)的靈魂。計算機語言是駕馭軟件開發(fā)的一套語法規(guī)則,這套語法規(guī)則的具體實現(xiàn)又是通過稱之為編譯器的軟件來完成的。因此硬件、軟件與計算機語言的歷史是交叉耦合地進化的過程。2一、機器語言、匯編語言和高級語言2計算機程序設計語言可以歸為如下三類:
a.機器語言:硬件系統(tǒng)可識別的的原始語言;開發(fā)軟件難度大、周期長;程序員記憶的困難。
b.匯編語言:直接處理所有硬件;是各種語言中最快又最有效的語言;容易理解、記憶。
c.高級語言:屏蔽低級語言硬件細節(jié)的語言,一個模塊對應匯編語言中一系列整體運行的指令。3計算機程序設計語言可以歸為如下三類:3FORTRANFORTRAN77FORTRAN90BASICANSI-BASICQBASICVISUAL-BASICDELPHIPASCALALGOLALGOL68SIMULA67SMALLTALKC++JAVAC#BCPLBC圖各種語言的發(fā)展演化進程4FORTRANFORTRAN77FORTRAN90BASI二、C語言的歷史與特點
C語言是從BCPL(BasicCombinedProgrammingLanguage)語言和B語言演化而來;集匯編語言處理硬件細節(jié)和高級語言模塊化高效編程長處于一身;
它介于低級的匯編語言與高級的FORTRAN語言之間;
C語言既有面向系統(tǒng)如匯編語言一樣直接訪問硬件的快捷功能,又同時具備高級語言面向用戶、容易記憶、清晰靈活的優(yōu)點,可稱之為高級的匯編語言。
5二、C語言的歷史與特點5三、從C語言到C++語言的進化首先C++是一個更好的C語言,是C的一個超集,C++保留了C語言的優(yōu)點同時也吸收其它面向對象編程語言的長處。Stroustroup博士早期(80年代初)通過一個名為cfront的轉換程序將C++源程序處理成C源程序,這保證轉換后的代碼能在任意支持C的編譯系統(tǒng)中運行。
C++語言的主要特點表現(xiàn)在:
一、是全面兼容C語言;
二、是支持面向對象的編程方法;C++是典型的混合編程語言.6三、從C語言到C++語言的進化6C語言不簡單(C語法是簡單的),C++語言本質(zhì)上也不更多復雜。但C++語言包容了許多面向對象的語法和概念,提高了該語言處理復雜問題的抽象層次;面向對象編程提供了進行駕馭大型軟件開發(fā)的有力手段,對于程序的重用和可維護性提供了新的理論支持。 最關鍵的是解決問題,語言僅是一種手段。C++語言至關重要的是它并不將面向對象編程的語法手段強制程序員使用,C/C++程序員可以將C++視為一個C語言的改良版本,充分利用C++語言子集的卓越性能進行游刃有余的編程,進行面向問題的軟件開發(fā)。積累了一定具體的經(jīng)驗之后再適當步入面向對象的動態(tài)世界。7C語言不簡單(C語法是簡單的),C++語言四、計算機結構的五個主要單元
軟件的開發(fā)必須與計算機的體系結構打交道,與程序設計相關的計算機結構是下面的五個主要單元:1.輸入單元:輸入單元是計算機接受信息的部分并且與計算機完成信息的交互。它從各種輸入設備讀取中斷信息,同時把這些信息放置在其它處理信息的單元中。有兩種常用的輸入信息的設備,一個是鍵盤,另一個是鼠標。標準輸入stdin常指設備鍵盤。8四、計算機結構的五個主要單元8
2.輸出單元:
輸出單元是計算機輸出信息的部分。它將計算機處理的信息或數(shù)據(jù)送入各種輸出設備中,從而這些信息能夠有效的閱讀。有兩種常用的輸出信息的設備,它們是屏幕顯示器與打印機。標準輸出stdout指顯示器,標準打印stdprn指打印機。92.輸出單元:9
3.中央處理單元:中央處理單元是計算機的核心硬件部分CPU,CPU本身由算術邏輯部件、控制邏輯部件和一組工作寄存器構成。算術邏輯部件ALU用來進行算術邏輯運算,控制邏輯部分負責對全機的管理,包括從存儲器取出指令,對總線及輸入輸出設備的數(shù)據(jù)轉送控制等。寄存器是CPU中的存儲單元,用來存放算術邏輯部件處理的中間結果,包括對存儲器的尋址等。存儲器是下面的內(nèi)存單元。103.中央處理單元:10
4.內(nèi)存單元:內(nèi)存單元由稱之為內(nèi)存條的硬件作為物理載體,是計算機中存取速度快的存儲信息的部分。程序的數(shù)據(jù)與代碼指令動態(tài)地保存在內(nèi)存中,內(nèi)存的記憶性能是瞬態(tài)穩(wěn)定的,關機則意味著內(nèi)存信息的徹底消失,內(nèi)存信息必須永久性地保存到外存上。
5.外存單元:外存單元是計算機用來長期保存數(shù)據(jù)信息的存儲部分,與計算機軟件相關的信息在關機狀態(tài)都必須有效地存放在外存中。常見外存設備是軟盤、硬盤、閃盤和光碟。114.內(nèi)存單元:11五、C/C++程序的實現(xiàn)
C/C++程序的實現(xiàn)是通過軟件開發(fā)工具進行的,目前流行的軟件開發(fā)工具以VisualC++6.0和C++Build5.0為代表。本書程序利用VisualC++6.0進行開發(fā),其本身是優(yōu)秀的可視化編程開發(fā)工具。VisualC++6.0開發(fā)的程序只能是32位應用程序,即內(nèi)存地址的尋址方式為32尋址。所有語言源程序的實現(xiàn)都必須經(jīng)歷下面四個步驟:1.編輯2.翻譯3.連接4.運行12五、C/C++程序的實現(xiàn)1.編輯2.翻譯3.連接4.運
1.編輯:編輯是根據(jù)計算機語言的語法規(guī)則將算法與相應的數(shù)據(jù)輸入到計算機中形成含原始代碼的文本文件的過程。這一文本文件或源文件對于C編程方式以擴展名即.c的文件保存,C++編程方式以擴展名即.cpp的磁盤文件保存。
通常C++源程序的文件為兩部分:接口文件(也稱為頭文件)和實現(xiàn)文件(或源文件),C++頭文件的標準擴展名為.h,C++實現(xiàn)文件的標準擴展名為.cpp,系統(tǒng)最終將頭文件插入到實現(xiàn)文件中即源文件.cpp中。文本是指由字母、數(shù)字、符號等組成的明白可讀的字符信息,文本編譯器可以用來建立、輸入或修改文本。131.編輯:13
2.翻譯:高級語言的翻譯程序有兩種方式:一種是編譯型的程序,另一種是解釋型的程序。低級的匯編語言翻譯程序對應一個匯編程序,匯編程序直接將匯編語言轉換成機器語言,然后加工處理成目標代碼,轉換的中間環(huán)節(jié)最少。編譯型的翻譯方式為先把高級語言翻譯成機器語言然后再將匯編語言翻譯成機器語言。如FORTRAN、C和C++是編譯型的程序。解釋型的翻譯方式是直接把高級語言在機器上運行,一邊解釋一邊執(zhí)行,如BASIC和JAVA是解釋型的程序。142.翻譯:14編譯型方式的優(yōu)點是運行效率快、執(zhí)行時間短;解釋型的長處是占用內(nèi)存少。
3.連接過程:連接過程是由連接程序進行的。連接程序用來把編譯階段分別編譯產(chǎn)生的目標文件、系統(tǒng)原先提供的庫文件或其它中間列表信息文件或二進制資源文件等連接在一起,形成一個整體運行的擴展名為.exe的執(zhí)行程序。連接過程可以進一步發(fā)現(xiàn)在編譯階段未能捕獲的錯誤,如某個函數(shù)模塊的遺漏,標識符的重復定義等。庫文件有靜態(tài)連接庫和動態(tài)連接庫,擴展名各自為.lib和.dll。15編譯型方式的優(yōu)點是運行效率快、執(zhí)行時間短;
4.加載運行:加載運行就是將執(zhí)行程序從外存如硬盤或光碟中的機器指令轉送到內(nèi)存儲器,以便機器執(zhí)行;程序在執(zhí)行之前必須先裝入內(nèi)存,對于大的程序操作系統(tǒng)根據(jù)系統(tǒng)的內(nèi)存資源可能只將高頻使用的部分代碼裝入內(nèi)存。預處理編譯過程常稱為編譯時,連接過程稱為連接時,加載運行過程稱為運行時。常用編譯器一詞籠統(tǒng)地指編譯、連接和運行三個過程,因為集成開發(fā)環(huán)境對這三個過程可以通過一個命令一次連續(xù)的執(zhí)行。164.加載運行:16六、C/C++源程序的基本形式
程序設計語言有各自編寫的形式。匯編語言具有指令加左操作數(shù)和右操作數(shù)的形式,表現(xiàn)了該語言與機器語言的直接貼近。C/C++源程序書寫格式非常靈活,一條語句可以分散在不同的行上也可以將許多語句壓縮在單行上。17六、C/C++源程序的基本形式17[例]程序的分散表示。程序輸出:Nothingishardintheworld#include<stdio.h>voidmain(void/*圓括號中的void明確表示無入口參數(shù)*/){ /*printf("/*世上無難事*///\t");*/printf("Nothingishard""intheworld\n");}//end"Nothingishard""intheworld\n"合并為"Nothingishardintheworld\n",程序輸出雙引號內(nèi)的字符串,printf是輸出庫函數(shù)。按回車鍵在源程序產(chǎn)生看不見的字符,簡稱換行符或硬回車,“\n”是換行符的轉義序列,表示在屏幕上產(chǎn)生一個回車換行動作。18[例]程序的分散表示。程序輸出:18[例]程序的壓縮表示。#include<stdio.h>voidmain(void){/*printf("世上無難事\t");*/printf("Nothingishardintheworld\n");}//end去掉斜杠星號/*------*/對,可以得到一個改進的程序。程序依然輸出結果:Nothingishardintheworld
19[例]程序的壓縮表示。19[例]程序改動一些注釋。輸出:/*世上無難事*///Nothingishardintheworld#include<stdio.h>voidmain(){printf("/*世上無難事*///\t");//"\t"是水平制表的轉義序列,表示水平跳過8個空格printf("Nothingishardintheworld\n");}從上面三個例子可以看出C/C++程序外在格式的靈活性,有展開的可讀性強的形式,也有濃縮的節(jié)省紙張的形式,可用回車鍵、空格鍵和刪除鍵在擴伸與壓縮之間變換。20[例]程序改動一些注釋。輸出:20一個空格可以擴展為多個空格,多個空格可以濃縮為一個空格。一條語句可分散在多行上,一行可以寫多個語句,語句由分號結束。但空格或空行的增刪不是任意的。變量名函數(shù)名關鍵字如if,int等名稱之間、帶參的宏名與圓括號之間、續(xù)行符\之間、轉義序列如\n之間、運算符如++,+=之間不能插入空格。字符串中的空格和換行符視為有效字符。作為名稱或運算符之間分隔的空格是不能刪除的。例如:x+++y不同于x+++y#definex3不同于#definex3除此之外的空格和空行一般是可以任意設置的。21一個空格可以擴展為多個空格,多個空格可以濃C/C++的程序內(nèi)在的格式由如下幾個方面構成:
1.#include預處理指令引入的頭文件
2.main()函數(shù)表示的dos或console模式下應程序的入口
3.花括號對“{}”表示程序的結構層次范圍
4.分號“;”結束的表達式語句或函數(shù)調(diào)用語句
5.多行注釋"/*------*/"或單行注釋"http://-----"
22C/C++的程序內(nèi)在的格式由如下幾個方面構成:22由井字號“#”引入的指令為預處理指令,對應的預處理語句不以分號“;”結尾,“#include”稱為文件包含預處理指令,通過該指令系統(tǒng)將其后程序段使用的名稱進行了預先的說明。#include<stdio.h>的作用是將stdio.h文件在預處理階段插入到程序.cpp中,作為程序源文件的一個有機部分?!?include”指令是代碼重用的有效手段。stdio.h是標準輸入輸出頭文件,其中包含了printf,scanf函數(shù)的原型說明。printf函數(shù)和scanf函數(shù)是C運行庫函數(shù)。 23由井字號“#”引入的指令為預處理指令,對應的當編譯器編譯某條printf語句時,編譯器根據(jù)#include<stdio.h>可以知道printf是一個函數(shù)名,這樣在目標程序里為該例程建立一個入口,但編譯器并不知道庫函數(shù)在哪里。連接程序會掃描庫函數(shù)并在目標程序中插入對這些庫函數(shù)的正確調(diào)用。如果在相應的子目錄中沒有掃描到由函數(shù)名printf指示的庫函數(shù),則連接程序會提示一個錯誤。24當編譯器編譯某條printf語句時,編譯main()是文本編程模式下的入口函數(shù),WindowsAPI編程模式下的入口函數(shù)為WinMain,main函數(shù)的前面void表示該函數(shù)沒有返回值,圓括號“()”中的void表示系統(tǒng)不從環(huán)境中讀取輸入值。main函數(shù)或其它函數(shù)必須存在匹配的花括號對"{}"。匹配按就近原則進行,右花括號"}"向前或向上或向右匹配距離最近的左花括號"{"?;ɡㄌ枌?{...}"之間是若干條語句。配對的花括號與其間的語句一起可視為一條語句,稱為程序塊。最外層的左花括號"{"標志函數(shù)體的開始,相應的右花括號"}"是該函數(shù)的結束,其后不再跟分號";"。25main()是文本編程模式下的入口函數(shù),W
C/C++程序最重要的一個語法現(xiàn)象就是分號“;”,一個單獨的分號“;”本身就是一個語句,語句是構成程序的基本單元。大量的語句由表達式加上分號構成,稱為表達式語句。其它語句如選擇語句、控制語句等大都與分號發(fā)生聯(lián)系,分號是語句的必要成分又是語句與語句之間的分隔標志。編譯器通過掃描分號對復雜的流程進行斷句處理。前面例子中的語句:printf("Nothingishardintheworld\n");該語句由兩部分組成,一是函數(shù)調(diào)用,另一個是分號";"。稱為函數(shù)調(diào)用語句,指示計算機執(zhí)行相應的動作,即將雙引號括起來的字符串打印到屏幕上。26C/C++程序最重要的一個語法現(xiàn)象就是分號“C++程序中注釋有兩種形式:
多行注釋即斜杠星形式"/*...*/"和C++語言新引進的單行注釋"http://..."形式。C++在預處理階段就將注釋所含蓋的字符化為空白。多行注釋即斜杠星形式"/*...*/"忽略始于"/*"之后所有文本內(nèi)容,直到發(fā)現(xiàn)"*/"為止。"/*"向后或向下匹配距離其最近的"*/",其間的內(nèi)容包括定界符/*...*/本身被處理為空白。"/*...*/"形式的注釋不嵌套使用,注釋字符"/*---*/"和"http://"在字符串或注釋內(nèi)部沒有任何特殊意義。
注釋不應插在標識符或名稱的中間,以避免一個名稱被分隔為兩個標識符。a.27C++程序中注釋有兩種形式:a.27單行注釋“//-----”形式忽略其后的內(nèi)容直到本行結束,即包括雙斜杠在內(nèi)的其后的文本被處理為空白。如下的注釋為兩個不同的單行注釋://******語句序列;//*/對語句序列不起作用即程序保留語句序列的執(zhí)行功能。如下的注釋屬于單獨的多行注釋:/******語句序列;//*/b.28單行注釋“//-----”形式忽略其后的內(nèi)容通過增刪上面的斜杠/可以對其間選定的程序段起到去留的切換作用。斜杠星形式"/*------*/"斜杠與星號必須緊貼在一起才起作用,利用這一性質(zhì)可以靈活控制程序段的去留。注釋是編譯器不予保留的文本,是關于軟件代碼的細節(jié)說明。注釋不是必須的編程部分,對于程序的運行沒有絲毫的關系。29通過增刪上面的斜杠/可以對其間選定的程序段七、函數(shù)初步
C/C++程序通過函數(shù)運轉,函數(shù)操作數(shù)據(jù)和變量。程序根據(jù)源代碼出現(xiàn)的先后次序一個一個語句地順序往后執(zhí)行,稱為順序流程結構。遇到函數(shù)調(diào)用則流程轉入被調(diào)用的函數(shù)體,然后從被調(diào)函數(shù)返回,執(zhí)行函數(shù)調(diào)用的下一條語句。在編輯輸入上面的代碼時請注意:新的集成開發(fā)環(huán)境支持漢字出現(xiàn)在字符串中,但漢字環(huán)境的標點符號與英文環(huán)境的標點符號其編碼是不一樣的,因此在字符串之外的標點符號一定要保證在英文環(huán)境中輸入,否則導致源代碼的語法錯誤。
30七、函數(shù)初步30[例]C流文件及函數(shù)調(diào)用實現(xiàn)順序流程#include<stdio.h>//void型函數(shù)vf的定義,放置于主控函數(shù)前voidvf(intx,inty,ints)//void表示函數(shù)沒有返回值,形參x,y,z是int型的變量{printf("%d,%d\n",x+y,s);}//花括號包含的語句表示函數(shù)體intAdd(int,int);
//Add函數(shù)原型說明,表示入口形參為2個int型數(shù)據(jù),返回int型數(shù)據(jù)voidShow()//圓括號中一無所有表示入口無參,voidShow()相當于voidShow(void){printf("輸入兩個整數(shù)\t");}31[例]C流文件及函數(shù)調(diào)用實現(xiàn)順序流程31intmain(void)
//圓括號中的void表示main函數(shù)此時沒有入口參數(shù),返回int型數(shù)據(jù)
{inti,j,sum;/*變量定義語句*/Show();/*提示輸入兩個整數(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))等價于vf(i,j,sum);return1;/*返回信息給操作系統(tǒng)是好的編程風格*/ }32intmain(void)32intAdd(intl,intm)/*定義Add函數(shù),函數(shù)的返回類型為整型*/{/*入口參數(shù)l,m是整型*/returnl+m;/*直接返回l,m數(shù)的和*/}//函數(shù)調(diào)用Add(i,j)根據(jù)返回類型確定為int型的表達式執(zhí)行程序得到:輸入兩個整數(shù)5,6Sumis1111,1133intAdd(intl,intm)在編輯輸入上面的代碼時請注意,新的集成開發(fā)環(huán)境支持漢字出現(xiàn)在字符串中,但漢字環(huán)境的標點符號與英文環(huán)境的標點符號其編碼是不一樣的,因此在字符串之外的標點符號一定要保證在英文環(huán)境中輸入,否則導致源代碼的語法錯誤。本程序包括用戶定義的函數(shù):主函數(shù)main()和普通的函數(shù)Add以及vf。另外借用了系統(tǒng)提供的庫函數(shù)。在"stdio.h"給出了標準輸入函數(shù)scanf標準輸出函數(shù)printf的原型說明。 Add函數(shù)的作用是求兩個整型變量的和,return關鍵字所引出的語句將整型變量l和m的和返回給主函數(shù)main,返回值是通過函數(shù)調(diào)用的方式進行的。34在編輯輸入上面的代碼時請注意,新的集成開發(fā)環(huán)程序主要包括如下6個步驟:
1.變量的定義
2.變量的初始化過程
3.用戶與計算機實時交互
4.算法的模塊化處理函數(shù)
5.函數(shù)調(diào)用的虛實結合匹配
6.控制權的帶信息返回35程序主要包括如下6個步驟:35
C/C++程序設計中變量必須明顯地定義才能使用,這一點區(qū)別于FORTRAN語言存在變量的隱含說明。語句"inti,j,sum;"稱為變量定義語句,"int"是系統(tǒng)保留的關鍵字,"i,j,sum"則是用戶引入的變量,變量定義語句通知編譯器為這些變量分配內(nèi)存空間。對引入的變量賦予初值,稱為變量的初始化。變量初始化的位置和時刻是靈活的,變量的初始值可以位于本程序段內(nèi)、硬盤上或動態(tài)交互輸入。函數(shù)調(diào)用的虛實結合匹配是指函數(shù)定義部分的形參與函數(shù)調(diào)用時的實參一對一的呼應和結合過程,這一過程涉及到語言隱含的函數(shù)調(diào)用機制。36C/C++程序設計中變量必須明顯地定義才能C語言中的函數(shù)調(diào)用機制為變量的數(shù)值傳遞,因此虛實結合匹配的時候采用了一個中轉站這就是變量的地址。通過中轉站間接的完成被調(diào)函數(shù)對變量的賦值或改變。輸入語句"scanf("%d,%d",&i,&j);"在屏幕上讀變量i和j的值,變量i和j之前分別加上了取地址運算符&。而輸出語句"printf("Sumis%d\n",sum);"的變量sum前則沒有取地址運算符&。 "%d,%d"是輸入輸出的格式化字符串,用來指示輸入輸出的數(shù)據(jù)類型和格式轉換,"%d"表示十進制整數(shù)類型,有了這種格式化轉換函數(shù),系統(tǒng)就把內(nèi)存中的二進制數(shù)據(jù)轉換成用戶可理解的數(shù)據(jù)類型。37C語言中的函數(shù)調(diào)用機制為變量的數(shù)值傳遞,因函數(shù)是重要的編程手段,其中包括三個相關的步驟:
1.函數(shù)具體定義intAdd(intl,intm){returnl+m;}//l,m是形參,2.函數(shù)原型說明intAdd(intl,intm);//形參的初始值在虛實結合時得到
3.函數(shù)調(diào)用虛實結合匹配sum=Add(i,j);//i,j是匹配形參l,m的實參38函數(shù)是重要的編程手段,其中包括三個相關的38函數(shù)定義對應函數(shù)的某種執(zhí)行動作,函數(shù)定義由標題頭和函數(shù)體構成,標題頭由返回類型、函數(shù)名和形參列表構成。例如:intAdd(intl,intm)是標題頭,{returnl+m;}是函數(shù)體函數(shù)原型表明函數(shù)的接口要求,虛實結合匹配在函數(shù)調(diào)用點進行,函數(shù)調(diào)用時將實參i,j的值賦值給相應形參l,m;相當于l=i,m=j。函數(shù)的返回類型int與return中的表達式匹配。一般地,C/C++程序是通過變量和函數(shù)來組織的。變量用于識別內(nèi)存的數(shù)據(jù),函數(shù)則對這些數(shù)據(jù)進行操作和轉換處理。39函數(shù)定義對應函數(shù)的某種執(zhí)行動作,函數(shù)定義由標
文本編輯器編譯器源文件1.cpp頭文件2.h頭文件1.h源文件2.cpp連接器庫文件.lib其它目標文件.obj目標文件1.obj目標文件2.obj編譯錯執(zhí)行程序.exe連接錯預處理器運行錯成功!!修改當前的源文件錯誤解決各文件名稱唯一性或遺漏排除邏輯錯誤或越界、內(nèi)存沖突等圖C/C++程序的開發(fā)過程40文本編輯器編譯器源文件1.cpp頭文件2.h頭文件1.一般地,C/C++程序是通過變量和函數(shù)來組織的。變量用于識別內(nèi)存的數(shù)據(jù),函數(shù)則對這些數(shù)據(jù)進行操作和轉換處理。函數(shù)根據(jù)返回類型是否有值分兩類,其定義格式分兩種:
1.不返回值的函數(shù),稱為void型的函數(shù)voidvf(類型1形參1,類型2形參2,.…,類型n形參n){語句序列;return;//函數(shù)體}例:voidvf(intx,inty,ints){printf("%d,%d\n",x+y,s);}41一般地,C/C++程序是通過變量和函數(shù)來組
2.返回確定類型值的函數(shù)typef(T1v1,T2v2,...,Tnvn){/*返回類型函數(shù)名(形參列表)*/語句序列;returnexpre;}
例:intAdd(intl,intm){intz=l+m;returnz;}type表函數(shù)的返回類型,T1,T2,Tn表示形參的類型名,它們可以是int,double以及結構名等;f,vf,Add是函數(shù)名。422.返回確定類型值的函數(shù)42"返回類型函數(shù)名(形參列表)"稱為函數(shù)定義的標題頭,標題頭圓括號中形參類型后的參數(shù)v1,v2,...,vn為形式參數(shù),簡稱形參。類型名、函數(shù)名和形參名遵循標識符的命名約定。將標題頭拷貝過來,末尾添一個分號得到函數(shù)原型,其中的形參v1,v2,....,vn可省略,格式為(左邊為抽象的原型描述,右邊為具體的舉例):
typef(T1v1,T2v2,...,Tnvn);intAdd(int,int); 函數(shù)的標題頭和函數(shù)體構成函數(shù)定義,緊接著右圓括號”)”的最外層花括號{}包含的部分為函數(shù)體。函數(shù)體由若干語句構成,也可以根本沒有語句,此時稱為空函數(shù)。43"返回類型函數(shù)名(形參列表)"稱為函數(shù)定函數(shù)定義時標題頭的形參可以省略而僅有類型,此時表示函數(shù)簡單的提供一個接口準備。也可以根本沒有入口參數(shù)。例如:voidShow(){printf("輸入兩個整數(shù)\t");}。expre是可以轉換為type類型的表達式。type如果是int,則函數(shù)運算的結果返回int型整數(shù)。形參是入口,可以是各種類型的變量,也可以是指向這些變量的指針。函數(shù)返回的數(shù)據(jù)為出口,函數(shù)可以返回變量,也可以返回指針,指針是特殊的變量。44函數(shù)定義時標題頭的形參可以省略而僅有類型,此如果return之后跟隨表達式語句,表示將表達式的值轉送給上層函數(shù),此時函數(shù)返回確定類型的數(shù)據(jù)。如果return語句之后緊貼一個分號或函數(shù)體中無return語句,這樣的函數(shù)的返回類型則寫為void,表示函數(shù)不返回值而僅執(zhí)行特定的運算或動作。 函數(shù)調(diào)用點實際代替形參的變量或表達式稱為實際參數(shù),簡稱實參。實參是調(diào)用段可以求值的表達式。函數(shù)調(diào)用由函數(shù)名、圓括號對和逗號依次分隔開的若干實參構成。函數(shù)名與圓括號對是必不可少的,在無參調(diào)用時沒有實參。例如:Show();45如果return之后跟隨表達式語句,表示將表函數(shù)調(diào)用就是用具體的實參代替形參的過程,實參x1,x2,…,xn應與形參列表的形參v1,v2,....,vn在位置、類型和個數(shù)上一一匹配。實參是形參的數(shù)據(jù)來源,是形參的初值。 在函數(shù)調(diào)用點相當于執(zhí)行了v1=x1,v2=x2,....,vn=xn的初始化賦值運算。不返回值的函數(shù)vf單獨調(diào)用:vf(x1,x2,....,xn);
例:vf(i,j,sum);vf(i,j,Add(i,j)); void類型的函數(shù)一般僅獨立調(diào)用,由此構成函數(shù)調(diào)用語句。46函數(shù)調(diào)用就是用具體的實參代替形參的過程,實參返回值的函數(shù)調(diào)用是表達式,簡稱函數(shù)調(diào)用是表達式。返回值的函數(shù)調(diào)用歸屬于表達式,可以說C/C++語言是一種構筑于表達式之上的語言。表達式是求值的基本單位,變量和常數(shù)是最簡單的表達式。變量和常數(shù)與運算符的組合可構成復雜的表達式。例如:l+m,sum=Add(i,j),7+m/2*3是表達式。表達式之后加一個分號形成表達式語句,例如:
sum=Add(i,j);是表達式語句??啥啻卧谫x值運算符=左邊出現(xiàn)的表達式是左值表達式,否則是右值表達式。變量是左值,常數(shù)是右值。Add(i,j)是右值。47返回值的函數(shù)調(diào)用是表達式,簡稱函數(shù)調(diào)用是表達返回值的函數(shù)調(diào)用f(x1,x2,.…,xn)攜帶"returnexpre;"返回的值。表達式expre能夠出現(xiàn)的地方,f(x1,x2,….,xn)幾乎可以等價的出現(xiàn)。但C語言返回算術表達式或返回指針表達式的函數(shù)調(diào)用構成右值。C++增添了返回左值的函數(shù)調(diào)用,這才是全部等價的映射。 出現(xiàn)在函數(shù)體中函數(shù)調(diào)用里的函數(shù)名視為被調(diào)函數(shù),函數(shù)體所隸屬的函數(shù)名則稱為主控函數(shù)。如函數(shù)名Add出現(xiàn)在main函數(shù)體中,因此Add函數(shù)是main函數(shù)的被調(diào)函數(shù),main函數(shù)是Add函數(shù)的主控函數(shù)。如果Add函數(shù)體中調(diào)用其它的函數(shù)如add1,則Add函數(shù)是add1函數(shù)的主控函數(shù)。48返回值的函數(shù)調(diào)用f(x1,x2,.…,C++中函數(shù)調(diào)用可以出現(xiàn)在main函數(shù)體之外的初始化語句,此時函數(shù)被系統(tǒng)直接調(diào)用。主控函數(shù)也稱為主調(diào)函數(shù)。函數(shù)定義或函數(shù)原型引入或說明函數(shù)名稱。函數(shù)定義提供函數(shù)體中的執(zhí)行代碼。C/C++中函數(shù)名具有全局作用范圍。函數(shù)體中不能定義函數(shù),僅在函數(shù)體外定義函數(shù)。每一個函數(shù)定義是獨立的,函數(shù)的定義次序不影響函數(shù)調(diào)用。函數(shù)可以調(diào)用任何函數(shù)包括自身。函數(shù)調(diào)用索引函數(shù)名稱。
名稱先說明后索引。C++中每個函數(shù)調(diào)用都必須有一個函數(shù)原型,除非函數(shù)定義直接放置于主控函數(shù)前。49C++中函數(shù)調(diào)用可以出現(xiàn)在main函數(shù)體之外八、C/C++程序上機步驟簡介本節(jié)簡單介紹用MicrosoftVisualC++提供的開發(fā)工具生成console即字符方式的應用程序,如果使用其它廠商的編譯器,細節(jié)會略有不同,但編輯、編譯、連接和運行的四個步驟是必不可少的??梢砸粴夂浅傻貓?zhí)行整套動作,也可以選擇性地實施其中一個環(huán)節(jié)下面簡要地說明程序產(chǎn)生的步驟(以微軟的DeveloperStudio集成應用程序為例):
1.啟動MicrosoftVisualC++編譯系統(tǒng)2.從菜單上選擇File->New,或按Ctrl+N打開New對話框50八、C/C++程序上機步驟簡介50
3.選取或激活New對話框的Projects工程項目,以便.生成.dsw(DeveloperStudioworkspace)文件。
4.進一步鼠標點擊程序類型Win32ConsoleApplication,在Projectname下鍵入工程名如:dosApp1,將該工程文件置于一合適的磁盤路徑Location下,如:c:\mydoc\dosApp,最后單擊New對話框的OK按鈕。此時彈出一個對話框。
5.在四個選項中單選Anemptyproject,然后點取Finish按鈕,在彈出的信息對話框中,鼠標點擊OK按鈕。到此系統(tǒng)生成并打開一個新項目工作區(qū)。513.選取或激活New對話框的Project
6.從菜單上選擇File->New,或按Ctrl+N打開New對話框。
7.激活New對話框的Files標簽,選擇C++SourceFile,在Filename下的空白處鍵入源文件名如:example1,鼠標點擊OK按鈕。此時進入全屏幕編輯環(huán)境,用戶可輸入源程序。
8.從菜單上選擇Build->compile即可編譯源程序,或Build->Build直接生成執(zhí)行程序。
9.調(diào)試程序直到?jīng)]有編譯或連接錯誤。
10.直接在集成環(huán)境按Ctrl+F5執(zhí)行該程序且按任意鍵通常方便的是空格鍵結束程序。526.從菜單上選擇File->New,或按Ct請打開“第2章(1).ppt”53請打開“第2章(1).ppt”53
一、機器語言、匯編語言和高級語言
二、C語言的歷史與特點
三、從C語言到C++語言的進化
四、計算機結構的五個主要單元
五、C/C++程序的實現(xiàn)
六、C/C++源程序的基本形式第一章緒論54 一、機器語言、匯編語言和高級語言第一章緒論1一、機器語言、匯編語言和高級語言計算機系統(tǒng)包括硬件與軟件兩部分。軟件是維護計算機硬件系統(tǒng)進行多用途計算的各種程序的總和。硬件是計算機系統(tǒng)的軀干,軟件是計算機系統(tǒng)的靈魂。計算機語言是駕馭軟件開發(fā)的一套語法規(guī)則,這套語法規(guī)則的具體實現(xiàn)又是通過稱之為編譯器的軟件來完成的。因此硬件、軟件與計算機語言的歷史是交叉耦合地進化的過程。55一、機器語言、匯編語言和高級語言2計算機程序設計語言可以歸為如下三類:
a.機器語言:硬件系統(tǒng)可識別的的原始語言;開發(fā)軟件難度大、周期長;程序員記憶的困難。
b.匯編語言:直接處理所有硬件;是各種語言中最快又最有效的語言;容易理解、記憶。
c.高級語言:屏蔽低級語言硬件細節(jié)的語言,一個模塊對應匯編語言中一系列整體運行的指令。56計算機程序設計語言可以歸為如下三類:3FORTRANFORTRAN77FORTRAN90BASICANSI-BASICQBASICVISUAL-BASICDELPHIPASCALALGOLALGOL68SIMULA67SMALLTALKC++JAVAC#BCPLBC圖各種語言的發(fā)展演化進程57FORTRANFORTRAN77FORTRAN90BASI二、C語言的歷史與特點
C語言是從BCPL(BasicCombinedProgrammingLanguage)語言和B語言演化而來;集匯編語言處理硬件細節(jié)和高級語言模塊化高效編程長處于一身;
它介于低級的匯編語言與高級的FORTRAN語言之間;
C語言既有面向系統(tǒng)如匯編語言一樣直接訪問硬件的快捷功能,又同時具備高級語言面向用戶、容易記憶、清晰靈活的優(yōu)點,可稱之為高級的匯編語言。
58二、C語言的歷史與特點5三、從C語言到C++語言的進化首先C++是一個更好的C語言,是C的一個超集,C++保留了C語言的優(yōu)點同時也吸收其它面向對象編程語言的長處。Stroustroup博士早期(80年代初)通過一個名為cfront的轉換程序將C++源程序處理成C源程序,這保證轉換后的代碼能在任意支持C的編譯系統(tǒng)中運行。
C++語言的主要特點表現(xiàn)在:
一、是全面兼容C語言;
二、是支持面向對象的編程方法;C++是典型的混合編程語言.59三、從C語言到C++語言的進化6C語言不簡單(C語法是簡單的),C++語言本質(zhì)上也不更多復雜。但C++語言包容了許多面向對象的語法和概念,提高了該語言處理復雜問題的抽象層次;面向對象編程提供了進行駕馭大型軟件開發(fā)的有力手段,對于程序的重用和可維護性提供了新的理論支持。 最關鍵的是解決問題,語言僅是一種手段。C++語言至關重要的是它并不將面向對象編程的語法手段強制程序員使用,C/C++程序員可以將C++視為一個C語言的改良版本,充分利用C++語言子集的卓越性能進行游刃有余的編程,進行面向問題的軟件開發(fā)。積累了一定具體的經(jīng)驗之后再適當步入面向對象的動態(tài)世界。60C語言不簡單(C語法是簡單的),C++語言四、計算機結構的五個主要單元
軟件的開發(fā)必須與計算機的體系結構打交道,與程序設計相關的計算機結構是下面的五個主要單元:1.輸入單元:輸入單元是計算機接受信息的部分并且與計算機完成信息的交互。它從各種輸入設備讀取中斷信息,同時把這些信息放置在其它處理信息的單元中。有兩種常用的輸入信息的設備,一個是鍵盤,另一個是鼠標。標準輸入stdin常指設備鍵盤。61四、計算機結構的五個主要單元8
2.輸出單元:
輸出單元是計算機輸出信息的部分。它將計算機處理的信息或數(shù)據(jù)送入各種輸出設備中,從而這些信息能夠有效的閱讀。有兩種常用的輸出信息的設備,它們是屏幕顯示器與打印機。標準輸出stdout指顯示器,標準打印stdprn指打印機。622.輸出單元:9
3.中央處理單元:中央處理單元是計算機的核心硬件部分CPU,CPU本身由算術邏輯部件、控制邏輯部件和一組工作寄存器構成。算術邏輯部件ALU用來進行算術邏輯運算,控制邏輯部分負責對全機的管理,包括從存儲器取出指令,對總線及輸入輸出設備的數(shù)據(jù)轉送控制等。寄存器是CPU中的存儲單元,用來存放算術邏輯部件處理的中間結果,包括對存儲器的尋址等。存儲器是下面的內(nèi)存單元。633.中央處理單元:10
4.內(nèi)存單元:內(nèi)存單元由稱之為內(nèi)存條的硬件作為物理載體,是計算機中存取速度快的存儲信息的部分。程序的數(shù)據(jù)與代碼指令動態(tài)地保存在內(nèi)存中,內(nèi)存的記憶性能是瞬態(tài)穩(wěn)定的,關機則意味著內(nèi)存信息的徹底消失,內(nèi)存信息必須永久性地保存到外存上。
5.外存單元:外存單元是計算機用來長期保存數(shù)據(jù)信息的存儲部分,與計算機軟件相關的信息在關機狀態(tài)都必須有效地存放在外存中。常見外存設備是軟盤、硬盤、閃盤和光碟。644.內(nèi)存單元:11五、C/C++程序的實現(xiàn)
C/C++程序的實現(xiàn)是通過軟件開發(fā)工具進行的,目前流行的軟件開發(fā)工具以VisualC++6.0和C++Build5.0為代表。本書程序利用VisualC++6.0進行開發(fā),其本身是優(yōu)秀的可視化編程開發(fā)工具。VisualC++6.0開發(fā)的程序只能是32位應用程序,即內(nèi)存地址的尋址方式為32尋址。所有語言源程序的實現(xiàn)都必須經(jīng)歷下面四個步驟:1.編輯2.翻譯3.連接4.運行65五、C/C++程序的實現(xiàn)1.編輯2.翻譯3.連接4.運
1.編輯:編輯是根據(jù)計算機語言的語法規(guī)則將算法與相應的數(shù)據(jù)輸入到計算機中形成含原始代碼的文本文件的過程。這一文本文件或源文件對于C編程方式以擴展名即.c的文件保存,C++編程方式以擴展名即.cpp的磁盤文件保存。
通常C++源程序的文件為兩部分:接口文件(也稱為頭文件)和實現(xiàn)文件(或源文件),C++頭文件的標準擴展名為.h,C++實現(xiàn)文件的標準擴展名為.cpp,系統(tǒng)最終將頭文件插入到實現(xiàn)文件中即源文件.cpp中。文本是指由字母、數(shù)字、符號等組成的明白可讀的字符信息,文本編譯器可以用來建立、輸入或修改文本。661.編輯:13
2.翻譯:高級語言的翻譯程序有兩種方式:一種是編譯型的程序,另一種是解釋型的程序。低級的匯編語言翻譯程序對應一個匯編程序,匯編程序直接將匯編語言轉換成機器語言,然后加工處理成目標代碼,轉換的中間環(huán)節(jié)最少。編譯型的翻譯方式為先把高級語言翻譯成機器語言然后再將匯編語言翻譯成機器語言。如FORTRAN、C和C++是編譯型的程序。解釋型的翻譯方式是直接把高級語言在機器上運行,一邊解釋一邊執(zhí)行,如BASIC和JAVA是解釋型的程序。672.翻譯:14編譯型方式的優(yōu)點是運行效率快、執(zhí)行時間短;解釋型的長處是占用內(nèi)存少。
3.連接過程:連接過程是由連接程序進行的。連接程序用來把編譯階段分別編譯產(chǎn)生的目標文件、系統(tǒng)原先提供的庫文件或其它中間列表信息文件或二進制資源文件等連接在一起,形成一個整體運行的擴展名為.exe的執(zhí)行程序。連接過程可以進一步發(fā)現(xiàn)在編譯階段未能捕獲的錯誤,如某個函數(shù)模塊的遺漏,標識符的重復定義等。庫文件有靜態(tài)連接庫和動態(tài)連接庫,擴展名各自為.lib和.dll。68編譯型方式的優(yōu)點是運行效率快、執(zhí)行時間短;
4.加載運行:加載運行就是將執(zhí)行程序從外存如硬盤或光碟中的機器指令轉送到內(nèi)存儲器,以便機器執(zhí)行;程序在執(zhí)行之前必須先裝入內(nèi)存,對于大的程序操作系統(tǒng)根據(jù)系統(tǒng)的內(nèi)存資源可能只將高頻使用的部分代碼裝入內(nèi)存。預處理編譯過程常稱為編譯時,連接過程稱為連接時,加載運行過程稱為運行時。常用編譯器一詞籠統(tǒng)地指編譯、連接和運行三個過程,因為集成開發(fā)環(huán)境對這三個過程可以通過一個命令一次連續(xù)的執(zhí)行。694.加載運行:16六、C/C++源程序的基本形式
程序設計語言有各自編寫的形式。匯編語言具有指令加左操作數(shù)和右操作數(shù)的形式,表現(xiàn)了該語言與機器語言的直接貼近。C/C++源程序書寫格式非常靈活,一條語句可以分散在不同的行上也可以將許多語句壓縮在單行上。70六、C/C++源程序的基本形式17[例]程序的分散表示。程序輸出:Nothingishardintheworld#include<stdio.h>voidmain(void/*圓括號中的void明確表示無入口參數(shù)*/){ /*printf("/*世上無難事*///\t");*/printf("Nothingishard""intheworld\n");}//end"Nothingishard""intheworld\n"合并為"Nothingishardintheworld\n",程序輸出雙引號內(nèi)的字符串,printf是輸出庫函數(shù)。按回車鍵在源程序產(chǎn)生看不見的字符,簡稱換行符或硬回車,“\n”是換行符的轉義序列,表示在屏幕上產(chǎn)生一個回車換行動作。71[例]程序的分散表示。程序輸出:18[例]程序的壓縮表示。#include<stdio.h>voidmain(void){/*printf("世上無難事\t");*/printf("Nothingishardintheworld\n");}//end去掉斜杠星號/*------*/對,可以得到一個改進的程序。程序依然輸出結果:Nothingishardintheworld
72[例]程序的壓縮表示。19[例]程序改動一些注釋。輸出:/*世上無難事*///Nothingishardintheworld#include<stdio.h>voidmain(){printf("/*世上無難事*///\t");//"\t"是水平制表的轉義序列,表示水平跳過8個空格printf("Nothingishardintheworld\n");}從上面三個例子可以看出C/C++程序外在格式的靈活性,有展開的可讀性強的形式,也有濃縮的節(jié)省紙張的形式,可用回車鍵、空格鍵和刪除鍵在擴伸與壓縮之間變換。73[例]程序改動一些注釋。輸出:20一個空格可以擴展為多個空格,多個空格可以濃縮為一個空格。一條語句可分散在多行上,一行可以寫多個語句,語句由分號結束。但空格或空行的增刪不是任意的。變量名函數(shù)名關鍵字如if,int等名稱之間、帶參的宏名與圓括號之間、續(xù)行符\之間、轉義序列如\n之間、運算符如++,+=之間不能插入空格。字符串中的空格和換行符視為有效字符。作為名稱或運算符之間分隔的空格是不能刪除的。例如:x+++y不同于x+++y#definex3不同于#definex3除此之外的空格和空行一般是可以任意設置的。74一個空格可以擴展為多個空格,多個空格可以濃C/C++的程序內(nèi)在的格式由如下幾個方面構成:
1.#include預處理指令引入的頭文件
2.main()函數(shù)表示的dos或console模式下應程序的入口
3.花括號對“{}”表示程序的結構層次范圍
4.分號“;”結束的表達式語句或函數(shù)調(diào)用語句
5.多行注釋"/*------*/"或單行注釋"http://-----"
75C/C++的程序內(nèi)在的格式由如下幾個方面構成:22由井字號“#”引入的指令為預處理指令,對應的預處理語句不以分號“;”結尾,“#include”稱為文件包含預處理指令,通過該指令系統(tǒng)將其后程序段使用的名稱進行了預先的說明。#include<stdio.h>的作用是將stdio.h文件在預處理階段插入到程序.cpp中,作為程序源文件的一個有機部分?!?include”指令是代碼重用的有效手段。stdio.h是標準輸入輸出頭文件,其中包含了printf,scanf函數(shù)的原型說明。printf函數(shù)和scanf函數(shù)是C運行庫函數(shù)。 76由井字號“#”引入的指令為預處理指令,對應的當編譯器編譯某條printf語句時,編譯器根據(jù)#include<stdio.h>可以知道printf是一個函數(shù)名,這樣在目標程序里為該例程建立一個入口,但編譯器并不知道庫函數(shù)在哪里。連接程序會掃描庫函數(shù)并在目標程序中插入對這些庫函數(shù)的正確調(diào)用。如果在相應的子目錄中沒有掃描到由函數(shù)名printf指示的庫函數(shù),則連接程序會提示一個錯誤。77當編譯器編譯某條printf語句時,編譯main()是文本編程模式下的入口函數(shù),WindowsAPI編程模式下的入口函數(shù)為WinMain,main函數(shù)的前面void表示該函數(shù)沒有返回值,圓括號“()”中的void表示系統(tǒng)不從環(huán)境中讀取輸入值。main函數(shù)或其它函數(shù)必須存在匹配的花括號對"{}"。匹配按就近原則進行,右花括號"}"向前或向上或向右匹配距離最近的左花括號"{"?;ɡㄌ枌?{...}"之間是若干條語句。配對的花括號與其間的語句一起可視為一條語句,稱為程序塊。最外層的左花括號"{"標志函數(shù)體的開始,相應的右花括號"}"是該函數(shù)的結束,其后不再跟分號";"。78main()是文本編程模式下的入口函數(shù),W
C/C++程序最重要的一個語法現(xiàn)象就是分號“;”,一個單獨的分號“;”本身就是一個語句,語句是構成程序的基本單元。大量的語句由表達式加上分號構成,稱為表達式語句。其它語句如選擇語句、控制語句等大都與分號發(fā)生聯(lián)系,分號是語句的必要成分又是語句與語句之間的分隔標志。編譯器通過掃描分號對復雜的流程進行斷句處理。前面例子中的語句:printf("Nothingishardintheworld\n");該語句由兩部分組成,一是函數(shù)調(diào)用,另一個是分號";"。稱為函數(shù)調(diào)用語句,指示計算機執(zhí)行相應的動作,即將雙引號括起來的字符串打印到屏幕上。79C/C++程序最重要的一個語法現(xiàn)象就是分號“C++程序中注釋有兩種形式:
多行注釋即斜杠星形式"/*...*/"和C++語言新引進的單行注釋"http://..."形式。C++在預處理階段就將注釋所含蓋的字符化為空白。多行注釋即斜杠星形式"/*...*/"忽略始于"/*"之后所有文本內(nèi)容,直到發(fā)現(xiàn)"*/"為止。"/*"向后或向下匹配距離其最近的"*/",其間的內(nèi)容包括定界符/*...*/本身被處理為空白。"/*...*/"形式的注釋不嵌套使用,注釋字符"/*---*/"和"http://"在字符串或注釋內(nèi)部沒有任何特殊意義。
注釋不應插在標識符或名稱的中間,以避免一個名稱被分隔為兩個標識符。a.80C++程序中注釋有兩種形式:a.27單行注釋“//-----”形式忽略其后的內(nèi)容直到本行結束,即包括雙斜杠在內(nèi)的其后的文本被處理為空白。如下的注釋為兩個不同的單行注釋://******語句序列;//*/對語句序列不起作用即程序保留語句序列的執(zhí)行功能。如下的注釋屬于單獨的多行注釋:/******語句序列;//*/b.81單行注釋“//-----”形式忽略其后的內(nèi)容通過增刪上面的斜杠/可以對其間選定的程序段起到去留的切換作用。斜杠星形式"/*------*/"斜杠與星號必須緊貼在一起才起作用,利用這一性質(zhì)可以靈活控制程序段的去留。注釋是編譯器不予保留的文本,是關于軟件代碼的細節(jié)說明。注釋不是必須的編程部分,對于程序的運行沒有絲毫的關系。82通過增刪上面的斜杠/可以對其間選定的程序段七、函數(shù)初步
C/C++程序通過函數(shù)運轉,函數(shù)操作數(shù)據(jù)和變量。程序根據(jù)源代碼出現(xiàn)的先后次序一個一個語句地順序往后執(zhí)行,稱為順序流程結構。遇到函數(shù)調(diào)用則流程轉入被調(diào)用的函數(shù)體,然后從被調(diào)函數(shù)返回,執(zhí)行函數(shù)調(diào)用的下一條語句。在編輯輸入上面的代碼時請注意:新的集成開發(fā)環(huán)境支持漢字出現(xiàn)在字符串中,但漢字環(huán)境的標點符號與英文環(huán)境的標點符號其編碼是不一樣的,因此在字符串之外的標點符號一定要保證在英文環(huán)境中輸入,否則導致源代碼的語法錯誤。
83七、函數(shù)初步30[例]C流文件及函數(shù)調(diào)用實現(xiàn)順序流程#include<stdio.h>//void型函數(shù)vf的定義,放置于主控函數(shù)前voidvf(intx,inty,ints)//void表示函數(shù)沒有返回值,形參x,y,z是int型的變量{printf("%d,%d\n",x+y,s);}//花括號包含的語句表示函數(shù)體intAdd(int,int);
//Add函數(shù)原型說明,表示入口形參為2個int型數(shù)據(jù),返回int型數(shù)據(jù)voidShow()//圓括號中一無所有表示入口無參,voidShow()相當于voidShow(void){printf("輸入兩個整數(shù)\t");}84[例]C流文件及函數(shù)調(diào)用實現(xiàn)順序流程31intmain(void)
//圓括號中的void表示main函數(shù)此時沒有入口參數(shù),返回int型數(shù)據(jù)
{inti,j,sum;/*變量定義語句*/Show();/*提示輸入兩個整數(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))等價于vf(i,j,sum);return1;/*返回信息給操作系統(tǒng)是好的編程風格*/ }85intmain(void)32intAdd(intl,intm)/*定義Add函數(shù),函數(shù)的返回類型為整型*/{/*入口參數(shù)l,m是整型*/returnl+m;/*直接返回l,m數(shù)的和*/}//函數(shù)調(diào)用Add(i,j)根據(jù)返回類型確定為int型的表達式執(zhí)行程序得到:輸入兩個整數(shù)5,6Sumis1111,1186intAdd(intl,intm)在編輯輸入上面的代碼時請注意,新的集成開發(fā)環(huán)境支持漢字出現(xiàn)在字符串中,但漢字環(huán)境的標點符號與英文環(huán)境的標點符號其編碼是不一樣的,因此在字符串之外的標點符號一定要保證在英文環(huán)境中輸入,否則導致源代碼的語法錯誤。本程序包括用戶定義的函數(shù):主函數(shù)main()和普通的函數(shù)Add以及vf。另外借用了系統(tǒng)提供的庫函數(shù)。在"stdio.h"給出了標準輸入函數(shù)scanf標準輸出函數(shù)printf的原型說明。 Add函數(shù)的作用是求兩個整型變量的和,return關鍵字所引出的語句將整型變量l和m的和返回給主函數(shù)main,返回值是通過函數(shù)調(diào)用的方式進行的。87在編輯輸入上面的代碼時請注意,新的集成開發(fā)環(huán)程序主要包括如下6個步驟:
1.變量的定義
2.變量的初始化過程
3.用戶與計算機實時交互
4.算法的模塊化處理函數(shù)
5.函數(shù)調(diào)用的虛實結合匹配
6.控制權的帶信息返回88程序主要包括如下6個步驟:35
C/C++程序設計中變量必須明顯地定義才能使用,這一點區(qū)別于FORTRAN語言存在變量的隱含說明。語句"inti,j,sum;"稱為變量定義語句,"int"是系統(tǒng)保留的關鍵字,"i,j,sum"則是用戶引入的變量,變量定義語句通知編譯器為這些變量分配內(nèi)存空間。對引入的變量賦予初值,稱為變量的初始化。變量初始化的位置和時刻是靈活的,變量的初始值可以位于本程序段內(nèi)、硬盤上或動態(tài)交互輸入。函數(shù)調(diào)用的虛實結合匹配是指函數(shù)定義部分的形參與函數(shù)調(diào)用時的實參一對一的呼應和結合過程,這一過程涉及到語言隱含的函數(shù)調(diào)用機制。89C/C++程序設計中變量必須明顯地定義才能C語言中的函數(shù)調(diào)用機制為變量的數(shù)值傳遞,因此虛實結合匹配的時候采用了一個中轉站這就是變量的地址。通過中轉站間接的完成被調(diào)函數(shù)對變量的賦值或改變。輸入語句"scanf("%d,%d",&i,&j);"在屏幕上讀變量i和j的值,變量i和j之前分別加上了取地址運算符&。而輸出語句"printf("Sumis%d\n",sum);"的變量sum前則沒有取地址運算符&。 "%d,%d"是輸入輸出的格式化字符串,用來指示輸入輸出的數(shù)據(jù)類型和格式轉換
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村別墅維修合同范本
- 小學語文教學中國學經(jīng)典融入研究
- 關于贊助合同范本
- 單位資產(chǎn)收購合同范例
- 2025年上海市安全員B證(項目經(jīng)理)考試題庫
- 卡車貨車出售合同范本
- 賣房墊資合同范本
- 公司營銷人員合同范本
- 農(nóng)田承包中介合同范本
- 單位崗前培訓合同范本
- 剪紙藝術-認識剪紙
- 駕駛員違規(guī)違章學習記錄表
- PID烙鐵恒溫控制器設計與制作_圖文
- wincc全套腳本總結
- 簡易瞬態(tài)工況法1
- 中國鐵路總公司環(huán)境保護管理辦法(鐵總計統(tǒng)〔2015〕260號)
- 醫(yī)療器械全生命周期風險管理
- 技術分析介紹教程課件
- 環(huán)境與健康第六講居室環(huán)境與健康
- 國家計委、建設部計價格[2002]10號工程勘察設計收費管理規(guī)定
- 故事小羊過橋PPT課件
評論
0/150
提交評論