語言教程講義2001年2月17日_第1頁
語言教程講義2001年2月17日_第2頁
語言教程講義2001年2月17日_第3頁
語言教程講義2001年2月17日_第4頁
語言教程講義2001年2月17日_第5頁
免費預(yù)覽已結(jié)束,剩余214頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

C語言概 C語言的發(fā)展過 當(dāng)代最優(yōu)秀的程序設(shè)計語 C語言版 C語言的特 面向?qū)ο蟮某绦蛟O(shè)計語 C和 簡單的C程序介 輸入和輸出函 C源程序的結(jié)構(gòu)特 書寫程序時應(yīng)遵循的規(guī) C語言的字符 C語言詞 TurboC2.0集成開發(fā)環(huán)境的使 TurboC2.0簡介和啟 TurboC2.0集成開發(fā)環(huán) File菜 Project菜 Options菜 Debug菜 Break/watch菜 TurboC2.0的配置文 CC語言C語言的發(fā)展過C語言是在70年代初問世的。一九七八年由電報公司(AT&T)貝爾正式了C語言。同時由B.W.Kernighan和D.M.Ritchit合著了著名的“THECNationalStandardsInstitute)在此基礎(chǔ)上制定了一個C語言標(biāo)準(zhǔn),于一九八三年。通常稱之為ANSIC。當(dāng)代最優(yōu)秀的程序設(shè)計語CUNIX系統(tǒng)。由于C語言的強大功能和各方面的優(yōu)點逐漸為C語言版·C或稱MS·BorlandTurboCTurbo·AT&TC語言的特1·C語言簡潔、緊湊,使用方便、靈活。ANSIC32個關(guān)鍵字 hugeinterruptnear 2·34種。CC的運6·C語言允許直接物理地址,能進(jìn)行位(bit)操作,能實現(xiàn)匯編語言的大部分功能,但是,CC寫程序會感到限制少、靈活性大,功能強,但較其他高級語言在學(xué)習(xí)上要一些。面向?qū)ο蟮某绦蛟O(shè)計語在C的基礎(chǔ)上,一九八三年又由貝爾的BjarneStrou-strup推出了C++。C++進(jìn)BorlandC++,SymantecC++和VisualC++。C和再進(jìn)一步學(xué)習(xí)C++就能以一種熟悉的語法來學(xué)習(xí)面向?qū)ο蟮恼Z言,從而達(dá)到事半功倍的目簡單的C程序介一個C源程序的基本部分和書寫格式。{printf("世界,您}【例1.2】{doubleprintf("sineof%lfis}main程序的功能是從鍵盤輸入一個數(shù)x,求x的正弦值,然后輸出結(jié)果。在main()之前的兩行稱為預(yù)處理命令(詳見后面)include稱為文件包含命令,含該函數(shù)原型所在的頭文件。在本例中,使用了三個庫函數(shù):輸入函數(shù)scanf,正弦函數(shù)sin,輸出函數(shù)printf。sin函數(shù)是數(shù)學(xué)函數(shù),其頭文件為math.h文件,因此在程序的主函數(shù)前用include命令包含了math.h。scanf和printf是標(biāo)準(zhǔn)輸入輸出函數(shù),其頭文件為stdio.h,在主函數(shù)前也用include命令包含了stdio.h文件。需要說明的是,Cscanfprintf這兩個函數(shù)可以省去對其頭文件的包含命1BAIC語言是不同的。說明部分是C源程序結(jié)構(gòu)中很重要的組成部分。本例中使用了兩個變量xs,用來表示輸入的自變量和sin函數(shù)值。由于sin函數(shù)double語句,printf函數(shù)在顯示器上輸出提示字符串,請操作人員輸入自變量xcanfxsinsfsx輸入和輸出函scanfprintf這兩個函數(shù)分別稱為格式輸入函數(shù)和格式輸出函數(shù)。其意義是按指定的printf("sineof%lfisintmax(inta,int {int intmax(inta,intb); printf("inputtwonumbers:\n"); /*輸入x,y值*/ }intmax(inta,int {if(a>b)returna;elsereturn }max函數(shù)。函數(shù)之間是并列關(guān)系??蓮闹骱瘮?shù)中調(diào)用其它函數(shù)。max函數(shù)的功能是比較兩個數(shù),然后把較大的數(shù)返回給主函數(shù)。max函數(shù)是一個用戶自定函數(shù)的參a,bmax函數(shù)中比a,b的大小,把大者返回給主函數(shù)的z,最后在屏幕上輸出z的值。C源程序的結(jié)構(gòu)特書寫程序時應(yīng)遵循的規(guī)用括起來的部分,通常表示了程序的某一層次結(jié)構(gòu)。{}一般與該結(jié)構(gòu)語句的第一C語言的字符a~z26個0~910C語言詞外,其余都由用戶自定義。C規(guī)定,標(biāo)識符只能是字母(A~Z,a~z)、數(shù)字(0~9)、下劃線a,x, 以下標(biāo)識符是的: 出現(xiàn)字符- 以減號開bowy- 標(biāo)準(zhǔn)CC語言編譯系統(tǒng)限制,同時也受到BOOKbook類型說明語句定義預(yù)處理命令inta;inta;CintaC語言中使用的常量可分為數(shù)字常量、字符常量、字符串常量、符號常量、轉(zhuǎn)義字符C語言的注釋符是以“/*”開頭并以“*/”結(jié)尾的串。在“/*”和“*/”之間的即為注TurboC2.0集成開發(fā)環(huán)境的TurboC2.0簡介和統(tǒng)支持下的軟件,在windows98環(huán)境下,可以在DOS窗口下運行。D盤根下建立一個TCTurboC2.0TC下還建立了兩個了LIBINCLUDELIB子中存放庫文件,INCLUDE子中存放所DOS環(huán)境下或在windows98DOS窗口下運行運行TurboC2.0時,只要在TC子目錄下鍵入TC并回車TurboC2.0集成開發(fā)環(huán)境。windows98環(huán)境下,也可以選運行菜單,然后鍵入d:\tc\tc即可,也可以在tc文件夾tc.exe文件,然后用鼠標(biāo)雙擊該文件名也可進(jìn)入TurboC2.0集成開發(fā)環(huán)境。TurboC是Borland公司的產(chǎn)品,Borland公司是一家專門從事軟件開發(fā)、研制的大Turbo系列軟件如TurboBASIC,TurboPascal,TurboProlog,這些軟件很受用戶歡迎。該公司在1987TurboC1.0產(chǎn)品,其中使用了全然一新的集成開發(fā)環(huán)境,即使用了一系列下拉式菜單,將文本編輯、程序編譯、連接以及程序運行一體化,大大方便了程序的開發(fā)。1988年BorlandTurboC1.5版本,增加了圖形庫和文本窗口函數(shù)庫等,而TurboC2.0則是該公司1989年的。TurboC2.0在原來集成開發(fā)環(huán)境的基礎(chǔ)上增加了查錯功能,并可以在Tiny模式下直接生成.COM數(shù)據(jù)、代碼、堆棧64K內(nèi)存中)(8087/80287/80387等)進(jìn)行仿真。BorlandTurboC++,TurboC2.0的集成開發(fā)環(huán)境,并包含了面向?qū)ο蟮幕舅枷牒驮O(shè)計方法。1991年為了適用公Windows3.0版本,BorlandTurboC++作了更新,TurboC的新一代產(chǎn)品BorlandcC++也已經(jīng)問世了。TurboC2.0集成開發(fā)環(huán)TurboC2.0集成開發(fā)環(huán)境中后,屏幕上顯示其中頂上一行為TurboC2.0主菜單,中間窗口為編輯區(qū),接下來是信息窗口,最TurboC2.0的主屏幕,TurboC2.0主屏幕頂上一行,顯示下列內(nèi)容FileEditRunCompileProjectOptionsDebugEdit外,其它各項均有子菜單,Alt加上某項中第一個字母,就可進(jìn)入該項的File菜Alt+FFile菜單,如圖Load:裝入一個文件,DOS的通配符(如*.C)進(jìn)入該項,而不需要先進(jìn)入File菜單再選此項。Pick8個文件列成一個表讓用戶選擇,選擇后將該程序裝入編輯區(qū),并將光標(biāo)置在上次修改過的地方。其熱健為Alt-F3。,Save:將編輯區(qū)中的文件存盤,NONAME.C時,將詢問是否更改文件名,其F2。Writeto:可由用戶給出文件名將編輯區(qū)中的文件存盤,若該文件已存在,則詢問要不要覆蓋。 中的文件,并可由用戶選擇Changedir:顯示當(dāng)前默 ,用戶可以改變默 Oss TurboC2.0DOS提示符下,DOS命令,若想回TurboC2.0中,DOSEXIT即可。,以上各項可用光標(biāo)鍵移動色棒進(jìn)行選擇回車則執(zhí)行。也可用每一項的第一個大寫字母Esc鍵TurboC2.0所有菜單均采用這種方法進(jìn)行操作,以下不再說明。Edit菜按Alt+E可進(jìn)入編輯菜單,若再回車,則光標(biāo)出現(xiàn)在編輯窗口,編輯。編輯方法基本與wordstar相同,可用F1鍵獲得有關(guān)編輯方法的幫助信息。與編輯有關(guān)的功能鍵如下 刪除光標(biāo)所在的一行 TurboC2.0庫函數(shù), TurboC2.0雙界符的后匹配 TurboC2.0的雙界符包括以下幾種符號 花括 尖括 圓括(和 方括[和 注釋 雙引" 單引'TurboC2.0在編輯文件時還有一種功能,就是能夠自動縮進(jìn),即光標(biāo)定位和上一個非空字符對齊。在編輯窗口中,Ctrl+OL為自動縮進(jìn)開關(guān)的控制鍵。Run菜Alt+RRun菜單,RunProject/Projectname項指定的文件名或當(dāng)前編輯區(qū)的文件。如果對上次編譯后的源代碼未做過修改,則直接運行到下一個斷點(沒有斷點則運行到結(jié)束)。否則先進(jìn)行編譯、連接后才運行,其熱鍵為Ctrl+F9。Programreset:中止當(dāng)前的調(diào)試,釋放分給程序的空間,Ctrl+F2Gotocursor::調(diào)試程序時使用選擇該項可使程序運行到光標(biāo)所在行。光標(biāo)所在行必須為一條可執(zhí)行語句,否則提示錯誤。其熱鍵為F4。Traceinto:在執(zhí)行一條調(diào)用其它用戶定義的子函數(shù)時Traceinto項則執(zhí)行長條將到該子函數(shù)內(nèi)部去執(zhí)行,其熱鍵為F7。Stepover:執(zhí)行當(dāng)前函數(shù)的下一條語句,即使用戶函數(shù)調(diào)用,執(zhí)行長條也不會進(jìn),Compile,CompiletoOBJ:將一個C源文件編譯生成.OBJ目標(biāo)文件,同時顯示生成的文件名。其Alt+F9。MakeEXEfile:此命令生成一個.EXE的文件并顯示生成的.EXE文件名。其中.EXE文Project/Projectname說明的項目文件名若沒有項目文件名,PrimaryCfile若以上兩項都沒有文件名 則為當(dāng)前窗口的文件名LinkEXEfile:把當(dāng)前.OBJ文件及庫文件連接在一起生成.EXEBuildall:重新編譯項目里的所有文件,并進(jìn)行裝配生成.EXE文件。該命令不作過時檢(上面的幾條命令要作過時檢查,即如果目前項目里源文件的日期和時間與目標(biāo)文件相同或更早,則對源文件進(jìn)行編譯)。PrimaryCfile:當(dāng)在該項中指定了主文件后,在以后的編譯中,C文件,C

如果編譯中有錯誤,則將此文件調(diào)入編輯窗口 Project,Projectname:項目名具有.PRJ的擴(kuò)展名,其中包括將要編譯、連接的文件名。例一file1.c,file2.c,file3.c組成,3file.exe的執(zhí)行文件,可以先建立一個file.prj的項目文件,其內(nèi)容如下:file.prjProjectname項中,以后進(jìn)行編譯時將自動對項目文件中規(guī)定的三個file.exe文件。如果其中有些文件已經(jīng)編譯成.OBJ,,,當(dāng)項目文件中的每個文件無擴(kuò)展名時,均按源文件對待,另外,其中的文件也可以是庫文件,但必須寫上擴(kuò)展名.LIB。Make編譯,否則不進(jìn)行檢查。OptionsAlt+OOptions菜單,該菜單對初學(xué)者來說要謹(jǐn)慎使用,該菜單有以下幾個內(nèi) Define:打開一個宏定義框,同戶可輸入宏定義。多重定義可同分號,賦值可用等Codegeneration:它又有許多任選項,這些任選項告訴編譯器產(chǎn)生什么樣的目標(biāo)代CallingconventionCPascalInstruction Floating Defaultchar Mergeduplicatestrings作優(yōu)化用,將重復(fù)的字符串合并在一起StandardstackframeTeststackoverflowLine OBJdebuginformation在.OBJOptimization:它又有許多任選項UseregistervariableJumpoptimization通過去除多余的跳轉(zhuǎn)和調(diào)整循環(huán)與開關(guān)語句的辦法,壓縮代Source:它又有許多任選Indentifierlength說明標(biāo)識符有效字符的個數(shù),32 Errorstopafter多少個錯誤時停止編譯,25Warningstopafter多少個警告錯誤時停止編譯,100DisplayPortabilitywarningANSIViolations了ANSI關(guān)鍵字的警告錯誤LesscommonerrorLinker:本菜單設(shè)置有關(guān)連接的選擇項,Map 選擇是否產(chǎn)生.MAPDevaultlibraries是否在連接其它編譯程序產(chǎn)生的目標(biāo)文件時去尋找其缺省Warnduplicatesymbols當(dāng)有重復(fù)符號時產(chǎn)生警告信MessageCurrentfile在編輯窗口中的文件錯誤Allfiles所有文件錯誤Off不Configautosave:選on時,在Run,S或退出集成開發(fā)環(huán)境之前,如果TurboC的配置被改過,offEditautosave:是否在Run或S之前,自動編輯的源文件Backupfile:是否在源文件存盤時產(chǎn)生后備文件(.BAK文件),,Directories:規(guī)定編譯、連接所需文件的路徑,Includedirectories:包含文件的路徑,多個 用";"分開Librarydirectories:庫文件路徑,多個 用";"分開Outputdirectoried:輸出文件(.OBJ,.EXE,.MAP文件) TurboCdirectoried:TurboC所在 Pickfilenamepick文件名,currentpickfileArguments:允許用戶使用命令行參數(shù)Saveoptions:保存所有選擇的編譯、連接、調(diào)試和項目到配置文件中缺省的配置文件TCCONFIG.TC。DebugAlt+DDebug菜單,該菜單主要用于查錯,Expression要計算結(jié)果的表達(dá)式Result顯示表達(dá)式的計算結(jié)果CallstackTurboCdebugerBreak/watch菜Alt+BBreak/watch菜單,Removeall:watchesViewnextbreakpointTurboC2.0的配置TurboC2.0有關(guān)信息的文件其中存有編譯、連接的選擇和路徑等信息。可以用下述方法建立TurboC2.0的配置:OptionsOptions/Saveoptions命令,將TC時只要在DOS下鍵入:若設(shè)置Options/Environment/Configautosave為on,則退出集成開發(fā)環(huán)境時,當(dāng)前的設(shè)置TurboC2.0TCCONFIG.TC中。TurboC在啟動時會自動尋找這TCINSTTurboC的有關(guān)配置TC.EXE中。TurboC在啟動時,若沒有找到配置文件,則取TC.EXE中的缺省值。程序的—算 算法的概 簡單算法舉 算法的特 怎樣表示一個算 用自然語言表示算 用流程圖表示算 三種基本結(jié)構(gòu)和改進(jìn)的流程 用N-S流程圖表示算 用偽代碼表示算 用計算機(jī)語言表示算 結(jié)構(gòu)化程序設(shè)計方 程序的—算對數(shù)據(jù)的描述。在程序中要指定數(shù)據(jù)的類型和數(shù)據(jù)的組織形式,即數(shù)據(jù)結(jié)構(gòu)(datastructure(algorithmNikiklausWirth公式

C程序,進(jìn)行編寫程序的初步訓(xùn)練,因此,算法的概簡單算法舉步驟3:將6再乘以4,得24。S1:使t=1S2:使S3:使t×itt×i→tS4:使i的值+1,即i+1→iS5:如果i≤5,S3S4S5如果計算100!只需將S5:若i≤5改成i≤100即可。 如果該求1×3×5×7×9×11,算法也只需做很少的改動:S1:1→tS2:3→iS3:t×i→tS4:S5寫成:S5:i<11,S3;S1:S2:如果gi≥80,則打印ni和giS3:2.320002500年中的每一年是否閏年,將結(jié)果輸出。4整除,但不能被100整除的年份設(shè)y為被檢測的年份,則算法可表示如下:S1:然后轉(zhuǎn)到S6S7:y≤2500時,S21111...1 100S1:sigh=1S2:sum=1S3:S4:sigh=(-S5:term=sigh×(1/deno)S6:term=sum+termS7:deno=denoS8:若deno≤100,返回S4;否則,結(jié)束S1:輸入nS2:S5:i+1→inS6:如果 ,返回S3;否則打印n“是素數(shù)”;然后算法結(jié)束n算法的特怎樣表示一個算用自然語言表示算用流程圖表示算

1111...1 100三種基本結(jié)構(gòu)和改進(jìn)的流程N-S流程圖表示算1973年學(xué)者提出了一種新型流程圖:N-S流程圖。用偽代碼表示算用計算機(jī)語言表示算}}{int{sigh=-sigh;}}結(jié)構(gòu)化程序設(shè)計方數(shù)據(jù)類型、運算符與表達(dá) C語言的數(shù)據(jù)類 常量與變 常量和符號常 變 整型數(shù) 整型常量的表示方 整型變 實型數(shù) 實型常量的表示方 實型變 實型常數(shù)的類 字符型數(shù) 字符常 轉(zhuǎn)義字 字符變 字符數(shù)據(jù)在內(nèi)存中的形式及使用方 字符串常 符號常 錯誤!未定義書簽變量賦初 各類數(shù)值型數(shù)據(jù)之間的混合運 算術(shù)運算符和算術(shù)表達(dá) C運算符簡 算術(shù)運算符和算術(shù)表達(dá) 賦值運算符和賦值表達(dá) 逗號運算符和逗號表達(dá) 小 C的數(shù)據(jù)類 基本類型的分類及特 常量后 常量類 數(shù)據(jù)類型轉(zhuǎn) 運算符優(yōu)先級和結(jié)合 表達(dá) 數(shù)據(jù)類型、運算符與表達(dá)C語言的數(shù)據(jù)類·類實型(浮點型共空類一定的數(shù)據(jù)類型的,應(yīng)在函數(shù)定義及函數(shù)說明中給以說明,例如在例題中給出的max函數(shù)定義中,函數(shù)頭為:intmax(inta,intb);其中“int”類型說明符即表示該函數(shù)的返sin,由于系統(tǒng)規(guī)定其函數(shù)返回值為雙精s=sinx);中,ssin函數(shù)的常量與變舉變量。在程序中,常量是可以不經(jīng)說明而直接的,而變量則必須先定義后使用。整常量和符號常#define#definePRICE30{intnum,total;}變 33單元整型數(shù)整型常量的表示方值為0~7。八進(jìn)制數(shù)通常是無符號數(shù)。015(十進(jìn)制為13)、0101(十進(jìn)制為65)、 256(無前綴0)、03A2(包含了非八進(jìn)制數(shù)碼)、-0127(出現(xiàn)了負(fù)號)十六進(jìn)制整常數(shù):十六進(jìn)制整常數(shù)的前0X0x。其數(shù)碼取0~9,A~Fa~f(整型常數(shù)的后綴:在16位字長的機(jī)器上,基本整型的長度也為16位,因此表示的數(shù)的范圍也是有限定的。十進(jìn)制無符號整常數(shù)的范圍為0~65535,有符號數(shù)為-32768~。八進(jìn)制無符號數(shù)的表示范圍為0~。十六進(jìn)制無符號數(shù)的表示范圍為0X0~0XFFFF0x0~0xFFFF。如果使用的數(shù)超過了上述范圍,就必012L(十進(jìn)制為10)、077L(十進(jìn)制為63)、 0XA5Lu表示十六進(jìn)制無符號長整數(shù)A5,其十進(jìn)制為165。整型變i:inti; 0000000000001010000000000000000000101011111111111101011111111111110110整型變量的分基本型:類型說明符為int,在內(nèi)存中占2個字節(jié)短整量:類型說明符為shortint或short。所占字節(jié)和取值范圍均與基本型相長整型:類型說明符為longintlong,在內(nèi)存4個字節(jié)無符號型:類型說明符為unsignedunsignedint或unsigned01111111111111111111111111111111-即-215~(215-2unsigned0~(216-2short-即-215~(215-2unsignedshort0~(216-2long 即-231~(231-4unsigned0~(232-413int00unsignedshortintunsignedlongint整型變量的定類型說明符變量名標(biāo)識符,變量名標(biāo)識符,...;inta,b,c;(a,b,c為整型變量)longx,y;x,y為長整型變量unsignedp,q;(p,q為無符號整型變量){inta,b,c,d;unsignedu;}整型數(shù)據(jù)的溢{inta,b;}0111111111111111-1000000000000000longx,y;}運算結(jié)果為長整型。但c,d被定義為基本整型,因此最后結(jié)果為基本整型。本例說明,不實型數(shù)實型常量的表示方aEn(a為十進(jìn)制數(shù),n為十進(jìn)制整數(shù))其值為a*10n。-2.8E-2(等于-2.8*10-345無小數(shù)點-5(無階碼標(biāo)志53.-E3負(fù)號位置不對 printf("%f\nprintf("%f\n",356);}實型變+1數(shù) 指實型變量的分實型變量分為:單精度(float型、雙精度(double型)和長雙精度(longdouble型)1.7E+30816比特數(shù)(字節(jié)數(shù)longfloatx,y;(x,y為單精度實型量){floata,b;}{floata;}bTurboC規(guī)定小數(shù)后最多保留六位,其余部實型常數(shù)的類字符型數(shù)字符常'a'、'b'、'='、'+'、字符常量只能用單引號括起來,不能引號或其它括號字符常量只能是單個字符,不能是字符字符可以是字符集中任意字符。但數(shù)字被定義為字符型之后就不能參與數(shù)值運如'5'5是不同的。'5'轉(zhuǎn)義字常用的轉(zhuǎn)義字符及其ASCII代98反斜線符7廣義地講,C語言字符集中的任何一個字符均可用轉(zhuǎn)義字符來表示。表中的\ddd和\xhh{inta=5;b=6; }字符變charchar字符數(shù)據(jù)在內(nèi)存中的形式及使用方0111100111100001111001{}{}本例中,a,b被說明為字符變量并賦予字符值,C語言允許字符變量參與數(shù)值運算,字符串常字符串常量是由一對雙引號括起的字符序列。例如:"CHINA",“Cprogram”"$12.5"字符常量由單引號括起來,字符串常量由雙引號括起字符常量只能是單個字符,字符串常量則可以含一個或多個字符BASIC語言不同的。但是可以用1。增加的一個字節(jié)中存放字符"\0"(ASCII0)。這是字符串結(jié)束的標(biāo)志。"Cprogram"Cprogram字符常量'a'和字符串常量"a"雖然都只有一個字符,但在內(nèi)存中的情況是不同aa"a"在內(nèi)存中占二個字節(jié),可表示aa變量賦初在程序中常常需要對變量賦初值,以便使用變量。語言程序中可有多種方法為變量提1=12=2,……;inta=3;intcharch1='K',ch2='P';{}各類數(shù)值型數(shù)據(jù)之間的混合運若參與運算量的類型不同,則先轉(zhuǎn)換成同一類型,然后進(jìn)行運int型和long型運算時,先把int量轉(zhuǎn)成long型后再進(jìn)行運算。要先轉(zhuǎn)換成double型,再作運算。charshort型參與運算時,必須先轉(zhuǎn)換成int ints,r=5;}doubles為整型,故賦值結(jié)果仍為整型,舍去了小數(shù)部分。(類型說明符 (表達(dá)式(float) a轉(zhuǎn)換為實 類型說明符和表達(dá)式都必須加括號(單個變量可以不加括號),如把(int)(x+y)floatf=5.75;}改變。因此,(int)f的值為5(刪去了小數(shù))f的值仍為5.75。算術(shù)運算符和算術(shù)表達(dá)C運算符邏輯運算符:用于邏輯運算。包括與(&&)、或(||)、非(!)三種求字節(jié)數(shù)運算符:用于計算數(shù)據(jù)類型所占的字節(jié)數(shù)(sizeof)算術(shù)運算符和算術(shù)表達(dá)算,如-x,-5等具有左結(jié)合性。}本例中,20/7,-20/720.0/7和-20.0/7由于有實數(shù)}算術(shù)表達(dá)式:用算術(shù)運算符和括號將運算對象(也稱操作數(shù))C語(x+r)*8-合性(自右至左)。例如算術(shù)運算符的結(jié)合性是自左至右,即先左后右。表達(dá)式x-y+z則y應(yīng)先與“-”號結(jié)合,執(zhí)行x-y運算,然后再執(zhí)行+z的運算。這種自左至右的結(jié)合算符是賦值運算符。如x=y=z,由于“=”的右結(jié)合性,應(yīng)先執(zhí)行y=z再執(zhí)行x=(y=z)運算。(類型說明符)表達(dá)式(float) a轉(zhuǎn)換為實 x+y的結(jié)果轉(zhuǎn)換為整1運算符記為“--1。 i自減1后再參與其它運算。 i參與運算后,i的值再自減1main(){inti=8;printf("%d\n",--printf("%d\n",i--printf("%d\n",-printf("%d\n",-i--}i的初值為82i1后輸出故931后輸出故為84行輸i為8之后再加1(9)5行輸i9之后再減1(8)6行輸出-8之后再加1(9),第7行輸出-9之后再減1(為8)。inti=5,j=5,p,q;}這個程序中P=(i++)+(i++)+(i++)應(yīng)理解為三個i相加,故P15。然后i再自13i8q的值則不然,q=(++j)+(++j)+(++j)q先自1,再參與運算q1三次8,三8相加的和為24,j的最后值仍8。賦值運算符和賦值表達(dá)賦值運算=

C中,把“=類型轉(zhuǎn)實型賦予整型,舍去小數(shù)部分。前面的例子已經(jīng)說明了這種情0)。inta,b=322;charc1='k',c2;}bc2后取其低八位成為字符型(b的低八位為66ASCII碼對應(yīng)于字符B)。在賦值符“”之前加上其它二目運算符可構(gòu)成復(fù)合賦值符。如+=,-=,*=,%=,<<=,>>=,&=,^=,|=變量雙目運算符=表達(dá)式 等價于a=a+5 等價于r=r%p逗號運算符和逗號表達(dá)起來組成一個表達(dá)式,稱為逗號表達(dá)式。}12也可以又是逗號表達(dá)式。表達(dá)式1,表達(dá)式2,…表達(dá)式n小C的數(shù)據(jù)類基本類型的分類及特1C2-short2-long4 2unsigned448常量后L或l U或u F或f 常量類數(shù)據(jù)類型轉(zhuǎn)運算符優(yōu)先級和結(jié)合表達(dá)最簡單的C程序設(shè)計—順序程序設(shè) C語句概 賦值語 數(shù)據(jù)輸入輸出的概念及在C語言中的實 字符數(shù)據(jù)的輸入輸 putchar函數(shù)(字符輸出函數(shù) 格式輸入與輸 scanf函數(shù)(格式輸入函數(shù) 順序結(jié)構(gòu)程序設(shè)計舉 最簡單C程序設(shè)計—順序程序設(shè)認(rèn)識,為后面各章的學(xué)習(xí)打下基礎(chǔ)。C語句概源源程序文件源程序文件源程序文件C程x=y+z;賦值語句; 1,i1被調(diào)函數(shù)體中的語句,求取函數(shù)值(在后面函數(shù)中再詳細(xì)介紹)。printf("CProgram");的語句定義符組成。C語言有九種控制語句??煞殖梢韵氯悾簕x=y+z;}復(fù)合語句內(nèi)的各條語句都必須以分號“;”結(jié)尾,在括號“}”外不能加分號;賦值語變量=變量=…=表達(dá)式intintintif((x=y+5)>0)下述語句是的:if((x=y+5;)>0)數(shù)據(jù)輸入輸出的概念及在C所謂輸入輸出是以計算機(jī)為主體而言#include<stdio.h或#include#include<stdio.h或#include字符數(shù)據(jù)的輸入輸putchar函數(shù)(字符輸出函數(shù) (輸出大寫字母A) putchar(‘\101’);(也是輸出字符A) 或#includechara='B',b='o',c='k';} 函數(shù)(鍵盤輸入函數(shù)charc;main(){charprintf("inputacharacter\n");}使用本函數(shù)前必須包含文件“stdio.h”完畢再返回TC屏幕。格式輸入與輸 函數(shù)(格式輸出函數(shù)printf函數(shù)稱為格式輸出函數(shù),其關(guān)鍵字最末一個字母f即為“格式”(format)之意。其要求在使用printf函數(shù)之前必須包含stdio.h文件。printf(“格式控制字符串”,輸出表列{inta=88,b=89;printf("%d}本例中四次輸出了a,b值,但由于格式控制串不同,輸出的結(jié)果也不相同。第四行的輸出語句格式控制串中,兩格式串%da,b間有一個空格。第五行的printf語句格式控制串中加入的是非格式字符逗號,因此輸出的在TurboC doufcs -+#則按實際位數(shù)輸出,若實際位數(shù)少于定義的寬度則補以空格或0。{intfloatb=123. doublec= chard='p';}a“%5d”5,a值為15只有兩位故補三個空格。第八行中以四種格式輸出實型量b的值。其中“%f”和“%lf”格式的輸出相同,說明“l(fā)”符對“f”類型無影響?!?5.4lf”5,精度輸出雙精度實數(shù),“%8.4lf”由于指定精度為4位故截去了超過4位的部分。第十行輸出字符d,其中“%8c”8p74.5】inti=8;}4.6】inti=8;}printfprintf7。最后才求輸出表列中的第一項“++i”i18。 函數(shù)(格式輸入函數(shù)scanf同,C語言也允許在使用scanf函數(shù)之前不必包含stdio.h文件。scanf(“格式控制字符串”,地址表列&a,ab變量的地址是C編譯系統(tǒng)分配的,用戶不必關(guān)心具體的地址是多少。inta,b,c;}在本例中,由于scanf函數(shù)本身不能顯示提示串,故先用printf語句在屏幕上輸出提示,請用戶輸入a、b、c的值。執(zhí)行scanf語句,則退出TC屏幕進(jìn)入用戶屏幕等待用戶輸78或789格式字符doxufcsscanf("%d%*d當(dāng)輸入為 3時,把1賦予a,2被跳過,3賦予b句輸入小數(shù)為2位的實數(shù)。scanfscanf("%d",a);是的,應(yīng)改為scnaf("%d",&a);才是合法的。用空格,TAB或回車作間隔。C編譯在碰到空格,TAB,回車或數(shù)據(jù)(如對“%d”輸入“12A”時,A即為數(shù)據(jù))時即認(rèn)為該數(shù)據(jù)結(jié)束。 則把'd'賦予a,b,'ec。時,才能把'd'賦于a,'eb,'f'c。scanf("%c%ccharprintf("inputcharactera,b\n");}可輸出MN兩字符。charprintf("inputcharactera,b\n");scanf("%c%c",&a,&b);} intprintf("inputanumber\n");}longprintf("inputalonginteger\n");}inputalongcharprintf("inputcharactera,b,c\n");scanf("%c%c%c",&a,&b,&c);}main(){inta;longb;floatf;doubled;charc;}順序結(jié)構(gòu)程序設(shè)計舉s(ss(sa)(sb)(s{floata,b,c,s,area;}

b b2b b2 2b2qb2 2a {float}分支結(jié)構(gòu)程 關(guān)系運算符和表達(dá) 關(guān)系運算符及其優(yōu)先次 關(guān)系表達(dá) 邏輯運算符和表達(dá) 邏輯運算符極其優(yōu)先次 邏輯運算的 邏輯表達(dá) 條件運算符和條件表達(dá) switch語 程序舉 分支結(jié)構(gòu)程關(guān)系運算符和表達(dá)關(guān)系運算符及其優(yōu)先次 <=小于或等于 >=大于或等于5)==等于6)!=符,高于賦值運算符。在六個關(guān)系運算符中,<,<=,>,>=的優(yōu)先級相同,高于==和!=,==關(guān)系表達(dá)5>0的值為“真”,即1charinti=1,j=2,k=3;}在本例中求出了各種關(guān)系運算符的值。字符變量是以它對應(yīng)的ASCII碼參與運算的。對于含多個關(guān)系運算符的表達(dá)式,如k==j==i+5,根據(jù)運算符的左結(jié)合性,先計算k==j,該式不成立,其值為0,再計算0==i+5,也不成立,故表達(dá)式值為0。邏輯運算符和表達(dá)邏輯運算符極其優(yōu)先次&&與運算||或運算 ((&&“&&”和“||”低于關(guān)系運算符,“!”高于算術(shù)運算a>b&&邏輯運算的5>0&&或運算||雖然C編譯在給出邏輯運算值時,以“1”代表“真”,“0”代表“假”5||0的值為“真”,即1邏輯表達(dá)表達(dá)式邏輯運算符表達(dá)式邏輯表達(dá)式的值是式中各種邏輯運算的最后值,以“1”和“0”分別代表“真”和“假”charinti=1,j=2,k=3;}本例中!xy分別0,!x*!y0,故其輸出0x0,故!!!x的邏x||i&&j-3邏輯值為1i<j&&x<yi<j的值1x<y0故表達(dá)式的值為1,0相與,最后為0i==5&&c&&(j=8)式,由i==5為假,即值0,該表達(dá)式由兩個與運算組成,所以整個表達(dá)式的值為0。對于式x+y||i+j+k由于x+y的值為非0,故整個或表達(dá)式的值為1。ifC語言的if語句有三種基本形式。if語句的三種形if(intprintf("\ninputtwonumbers: if(max<b)max=b;}maxb,bmaxmaxmaxinta,printf("inputtwonumbers: }ifelseif(語句elseif(語句…elseif(表達(dá)式語句后續(xù)程序。if-else-if語句的執(zhí)行過程如圖3—3所示?!纠?.5】charprintf("inputacharacter: printf("Thisisacontrolcharacter\n");elseif(c>='0'&&c<='9')printf("Thisisadigit\n");elseif(c>='A'&&c<='Z')printf("Thisisacapitalletter\n");elseif(c>='a'&&c<='z')printf("Thisisasmallletter\n");printf("Thisisanother}本例要求判別鍵盤輸入字符的類可以根據(jù)輸入字符的ASCII碼來判別類ASCII碼表可知ASCII值小32的為控制字符。在“0”和“9”之間的為數(shù)字,在“A”和“Z”之間為大寫字母,在“a”和“z”之間為小寫字母,其余則為其它字符。這是一個多分支選擇的問題,用if-else-if語句編程,判斷輸入字符ASCII碼所在的范圍,分別給出不在三種形式的if語句中,在if關(guān)鍵字之后均為表達(dá)式。該表達(dá)式通常是邏輯表達(dá)式或關(guān)系表達(dá)式,但也可以是其它表達(dá)式,如賦值表達(dá)式等,甚至也可以是一個變量。if(a=5)if(b)在if語句的三種形式中,所有的語句應(yīng)為單個語句,如果要想在滿足條件時執(zhí)行一組if語句的if語句;況,這時要特別注意ifelse的配對問題。intprintf("pleaseinputA,B: if(a>b)printf("A>B\n"); }三種選擇即A>B、A<BA=B。這種問if-else-if語句也可以完成。而且程序更加清晰。intprintf("pleaseinputA,B: if(a==b)printf("A=B\n");elseif(a>b)printf("A>B\n");elseprintf("A<B\n");}條件運算符和條件表達(dá) 表達(dá)式1?表達(dá)式2:表達(dá)式 12if(a>b)max=a;elsemax=b;intprintf("\ninputtwonumbers: }語句語句}:語句語句case后的語句。如表達(dá)式的值與所有case后的常量表達(dá)式均不相同時,則執(zhí)行defaultintprintf("inputintegernumber: switchcase1:printf("Monday\n");case2:printf("Tuesday\n");case4:printf("Thursday\n");case5:printf("Friday\n");case6:printf("Saturday\n");case7:printf("Sunday\n");}}本程序是要求輸入一個數(shù)字,輸出一個英文單詞。但是當(dāng)輸入3之后,卻執(zhí)行了case3以及以后的所有語句,輸出了Wednesday及以后的所有單詞。這當(dāng)然是不希望的。為什么會達(dá)式”只相當(dāng)于一個語句標(biāo)號,表達(dá)式的值和某標(biāo)號相等則轉(zhuǎn)向該標(biāo)號執(zhí)行,但不能在執(zhí)switchcase還提供了一種break語句,于跳出switch語句,break語句只有關(guān)鍵字break,沒有參數(shù)。在后面還將詳細(xì)介紹。修改例題的程序,在每一case語句之后增break語句,使每一次執(zhí)行之后均可跳出switch語句,從而避免輸出不應(yīng)有的結(jié)果。intprintf("inputintegernumber: switchcase1:printf("Monday\n");break;case2:printf("Tuesday\n");break;case4:printf("Thursday\n");break;case5:printf("Friday\n");break;case6:printf("Saturday\n");break;case7:printf("Sunday\n");break;}}程序舉intprintf("inputthreenumbers: }本程序中,首先比較輸入的a,b的大小,并把大數(shù)max,小數(shù)裝min中,然后再與c比較,若maxc,則cmaxcmin,則把cminmax內(nèi)總是最大數(shù),而minmax和min的值即可?!纠?.12】計算器程序。用戶輸入運算數(shù)和四則運算符,輸出計算結(jié)果。charc;printf("inputexpression:a+(-,*,/)b\n");case'+':case'-':printf("%f\n",a-case'*':case'/':printf("%f\n",a/b);break;default:printf("inputerror\n");}}循環(huán)控 概 do-while語 循環(huán)的嵌 幾種循環(huán)的比 continue語 程序舉 循環(huán)控概gotogoto語句構(gòu)成循goto語句標(biāo)號;其中標(biāo)號是一個有效的標(biāo)識符,這個標(biāo)識符加上一個“:”一起出現(xiàn)在函數(shù)內(nèi)某處,執(zhí)行個函數(shù)中,但可以不在一個循環(huán)層中。通常goto語句與if條件語句連用,當(dāng)滿足某一條件時,程序跳到標(biāo)號處運行。goton { gotoloop;}}while語n {{}}#include<stdio.h>intprintf("inputastring:\n");while(getchar()!='\n')n++;}intprintf("\ninputn: while(n--printf("%d}do-whilewhilen {{}}{intsum=0,i;}}{intsum=0,i;}}forfor(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句3)步;若其值為假(0),則結(jié)束循環(huán),轉(zhuǎn)到第5)步。for關(guān)系表達(dá)式,它決定什么時候退出循環(huán);循環(huán)變量增量,定義循環(huán)控制變量每循環(huán)一次后按什么方式變化。這三個部分之間用;分開。for(i=1;i<=100;}1;1;}for循環(huán)中的“表達(dá)式1(循環(huán)變量賦初值)”、“表達(dá)式2(循環(huán)條件)”和“表達(dá)式3(循環(huán)的嵌{inti,j,k;printf("ijk\n");for(i=0;i<2;for(j=0;j<2;j++)for(k=0;k<2;k++)printf(“%d%d%d\n",i,j,}幾種循環(huán)的比goto型循whiledo-whilewhiledo-while語句之前完成,而for語句可以在表達(dá)式1中實現(xiàn)循環(huán)變量的初始化。break語break語句通常用在循環(huán)語句和開關(guān)語句中。當(dāng)break用于開關(guān)語句switch中時,可使程序跳switch而執(zhí)switch以后的語句;如果沒有break語句,則將成為一個死循環(huán)而無法退出。break在switch中的用法已面介紹開關(guān)語句時的例子中碰到,這里不再舉例。breakif{charc; { {} printf("TheNo.is%d\n",}printf("The}breakcontinue{}{} {char {printf("%c\n",c);}}程序舉1111 公式求π

{intfloatn,t,pi;}}N-S流程圖:{intm,i,k;printf(“%disaprimenumber\n”,m);printf(“%disnotaprime}{intm,i,k,n=0;{}}數(shù) 一維數(shù)組的定義和...........................................................................................一維數(shù)組的定義方 一維數(shù)組元素的.......................................................................................一維數(shù)組的初始 一維數(shù)組程序舉 二維數(shù)組的定義和...........................................................................................二維數(shù)組的定 二維數(shù)組元素的.......................................................................................二維數(shù)組的初始 二維數(shù)組程序舉 字符數(shù) 字符數(shù)組的定 字符數(shù)組的初始 字符數(shù)組的.............................................................................................字符串和字符串結(jié)束標(biāo) 字符數(shù)組的輸入輸 字符串處理函 程序舉 本章小 數(shù)一維數(shù)組的定義和一維數(shù)組的定義方int float charch[20]; ch,20{inta;}05a[0],a[1],a[2],a[3],a[4]。#defineFD5{int}{intn=5;int}int一維數(shù)組元素的能逐個地使用下標(biāo)變量,而不能一次整個數(shù)組。for(i=0;i<10;i++){inti,a[10];printf("%d}{inti,a[10];}{inti,a[10];printf("%dprintf("\n%d}量。當(dāng)然第二個for語句也可以這樣作,C語言允許用表達(dá)式表示下標(biāo)。程序中最后一個printfa[5]的值,可以看出當(dāng)下標(biāo)不為整數(shù)時將自動取整。一維數(shù)組的初始inta[10]={0,1,2,3,4,5,6,7,8,9intintintintint一維數(shù)組程序舉{inti,max,a[10];printf("input10numbers:\n");}本例程序中第一個for語句逐個輸10個數(shù)到數(shù)組aa[0]max中。在第二個for語句中,從a[1]到a[9]逐個max中的內(nèi)容比較,若比max的值大,則把該maxmaxmax的值。{intprintf("\ninput10numbers:\n");if(q<a[j]){p=j;q=a[j];}a[p]=s;}}}forfor句。第一個for語句用于輸入10個元素的初值。第二個for語句用于排序。本程序的排序采用逐個比較的方法進(jìn)行。在i次循環(huán)時,把第一個元素的下標(biāo)i賦于p,而把該下標(biāo)變量值a[i]賦于q。然后進(jìn)入小循環(huán),從a[i+1]起到最后一個元素止逐個與a[i]作比較,有比a[i]大者則將其下標(biāo)送p,元素值送q。一次循環(huán)結(jié)束后,p即為最大元素的下標(biāo),q則為該元素值。若此時i≠p,說明p,q值均已不是進(jìn)入小循環(huán)之前所賦之值,則交換a[i]和a[p]之值。a[i]i+1二維數(shù)組的定義和二維數(shù)組的定或造。下,組int量共有3×4個,即:二維數(shù)組元素的【例7.6】一個學(xué)組有5個人,每個人有三門課的考試成績。求全組分科的平均成績和張王李趙周C得各分科平均成績,設(shè)變量average為全組各科總平均成績。編程如下:{printf("inputscore\n");{}averageprintf("total:%d\n",average);}5v[i]之中,這就是該門課v[0],v[1],v[2]3二維數(shù)組的初始inta[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}inta[5][3]={{inti,j,s=0,int}printf("total:%d\n",average);}int102030a0100030intint如二維數(shù)組a[3][4],可分解為三個一維數(shù)組,其數(shù)組名分別為:一維數(shù)組a[0]的元素為a[0][0],a[0][1],a[0][2],a[0][3]。二維數(shù)組程序舉字符數(shù)字符數(shù)組的定charchar字符數(shù)組的初始charc[10]={‘c’, ’,‘p’,‘r’,‘o’,‘g’,‘r’,數(shù)組 c[1]的值為charc[]={`c`,`C9字符數(shù)組的{intchar{}}字符串和字符串結(jié)束標(biāo)charc[]={'c','charc[]={"Ccharc[]="C上面的數(shù)組c在內(nèi)存中的實際存放情況為:Cprogram般無須指定數(shù)組的長度,而由系統(tǒng)自行處理。字符數(shù)組的輸入輸{}{charst[15];}inputthisisa{charst1[6],st2[6],st3[6],st4[6];printf("inputstring:\n");printf("%s%s%s%s\n",st1,st2,st3,st4);}設(shè)數(shù)c首地址為2000,也就是說c[0]單元地址為2000。則數(shù)組c代表這個首地址。因此在c前面不能再加地址運算符&。如寫作scanf("%s",&c);則是錯誤的。在執(zhí)行函數(shù)printf("%s",c)時,按數(shù)組名c找到首地址,然后逐個輸出數(shù)組中各個字符直到遇到字符字符串處理函比較、轉(zhuǎn)換、、搜索幾類。使用這些函數(shù)可大大減輕編程的負(fù)擔(dān)。用于輸入輸出的字符串函數(shù),在使用前應(yīng)包含頭文件"stdio.h",使用其它字符串函數(shù)則應(yīng)包含頭文件字符串輸出函數(shù)格式:puts【例7.12】{}printfprintf格式: 【例7.13】{char}scanf格式:strcat11后的串標(biāo)志“\0”。本函數(shù)返回值是字符數(shù)組1的首地【例7.14】{staticcharst1[30]="Mynameis";intst2[10];printf("inputyourname:\n");}格式:strcpy1字符數(shù)名【例7.15】{charst1[15],st2[]="CLanguage";}格式:strcmp(1,字符串1=字符串2,返回值=0;【例7.16】{intstaticcharst1[15],st2[]="CLanguage";printf("inputastring:\n");if(k>0)printf("st1>st2\n");if(k<0)printf("st1<st2\n");}本程序中把輸入的字符串和數(shù)組st2的串比較,比較結(jié)果返回到k根k值再輸dbaseASCII“dBASE”大于“CLanguage”k〉0,格式:strlen(【例7.17】{intstaticcharst[]="Clanguage";printf("Thelenthofthestringis}程序舉【例個比插入數(shù)小的元素i時,該元前即為插入位置。然后從數(shù)組最后一個元素開始到該元素{int{p=i;q=a[i];{}printf("%d}}本程序首先對數(shù)組a10個數(shù)從大到小排序并輸出排序結(jié)果。然后輸入要插入的整數(shù)n。再for語句n和數(shù)組元素逐個比較,如果發(fā)n>a[i]時,則由一個內(nèi)循環(huán)把i以下各元素值順次后移一個單元。后移應(yīng)從后向前進(jìn)行(從a[9]開始到a[i]為止)。后移結(jié)束跳出外循環(huán)。插入點為i,把n賦予a[i]即可。如所有的元素均大于入數(shù),則并未進(jìn)行過后移工作。此時i=10,結(jié)果是把n賦于a[10]。最后一個循環(huán)輸出插入數(shù)后的數(shù)組各元素a=(3102512b=(87108{intintb[3],i,j,l;{printf("\narraya:\n");{for(j=0;j<=3;j++)}baforab?!纠齵inti,j,p;printf("inputcountry'sname:\n");{}}cs[5][20]為二維字符數(shù)組,可分為五cs[i]sti賦本章小稱為下標(biāo)變量。數(shù)組的類型是指下標(biāo)變量取值的類型。函 概 函數(shù)定義的一般形 函數(shù)的參數(shù)和函數(shù)的 形式參數(shù)和實際參 函數(shù)的返回 函數(shù)的調(diào) 函數(shù)調(diào)用的一般形 函數(shù)調(diào)用的方 被調(diào)用函數(shù)的和函數(shù)原 函數(shù)的嵌套調(diào) 函數(shù)的遞歸調(diào) 數(shù)組作為函數(shù)參 局部變量和全局變 局部變 全局變 變量的類 動態(tài)方式與靜態(tài)動態(tài)方 用static局部變 register變 概main(),但實用程序往往由多個函數(shù)組成。函數(shù)是C源程序的基本模塊,通過對函提供了極為豐富的庫函數(shù)TurboC,MSC都提供了三百多個庫函數(shù)),還允許用戶建立自己printf、scanf、getchar、putchar、gets、puts、strcat等函數(shù)均屬此類。“void”。 執(zhí)行總是從main函數(shù)開始,完成對其它函數(shù)的調(diào)用后再返回到main函數(shù),最后由main函數(shù)結(jié)束整個程序。一個C源程序必須有,也只能有一個主函數(shù)main。函數(shù)定義的一般形 }void{printf("o,world}被其它函數(shù)調(diào)用時,輸出oworld字符串。形式參數(shù)表列 形式參數(shù)表列 }intmax(inta,int{if(a>b)returna;elsereturnb;}值作為函數(shù)的值返回給主調(diào)函數(shù)。有返回值函數(shù)中至少應(yīng)有一個return在C程序中,一個函數(shù)的定義可以放在任意位置,既可放在主函數(shù)main之前,也可放mainintmax(inta,int{elsereturnb;}{intmax(inta,intb);intx,y,z;printf("inputtwonumbers:\n");}程序15max函數(shù)定義。進(jìn)入主函數(shù)后,因為準(zhǔn)備max函數(shù),故先對max函數(shù)進(jìn)行說明(程序第8行)。函數(shù)定義和函數(shù)說明并不是一回事,在后面還要專門討max函數(shù),并把x,y中的值傳送給maxa,b。max函數(shù)執(zhí)行的結(jié)果(ab)將返回給變量z。最后由主函數(shù)輸出z的值。函數(shù)的參數(shù)和函數(shù)的形式參數(shù)和實際參{int}ints(int{int}為實參,在調(diào)用時傳送給s函數(shù)的形參量n(注意,本例的形參變量和實參變量的標(biāo)識符都的初值也為100,在執(zhí)行函數(shù)過程中,形參n的值變?yōu)?050。返回主函數(shù)之后,輸出實參n的值仍為100??梢妼崊⒌闹挡浑S形參的變化而變化。函數(shù)的返回如調(diào)用正弦函數(shù)取得正弦值,調(diào)用例8.1的max函數(shù)取得的最大數(shù)等。對函數(shù)的值(或稱函函數(shù)的值只能通過returnreturnreturn表達(dá)式 return(表達(dá)式); 該語句的功能是計算表達(dá)式的值并返回給主調(diào)函數(shù)在函數(shù)中允許有多個return不返回函數(shù)值的函數(shù),可以明確定義為“空類型”,類型說明符為“void”。如voids(int{}例如,在定義s為空類型后,在主函數(shù)中寫下述語句函數(shù)的調(diào)函數(shù)調(diào)用的一般形 函數(shù)調(diào)用的方算。這種方式要求函數(shù)是有返回值的。例如:z=max(x,y)是一個賦值表達(dá)式,把max的返回值賦予變量z。函數(shù)語句:函數(shù)調(diào)用的一般形式加上分號即構(gòu)成函數(shù)語句。例如:printf("%d",a);scanf("%d",&b);都是以函數(shù)語句的方式調(diào)用函數(shù)。為實參進(jìn)行傳送,因此要求該函數(shù)必須是有返回值的。例如: 介紹printf函數(shù)時已提到過,這里從函數(shù)調(diào)用的角度再強調(diào)一下。{int}877898898,7,7,8。上述問題如還不理解,上機(jī)一試就明白了。被調(diào)用函數(shù)的和函數(shù)原在主調(diào)函數(shù)中調(diào)用某函數(shù)之前應(yīng)對該被調(diào)函數(shù)進(jìn)行說明(,這與使用變量之前要 類型說明符被調(diào)函數(shù)名(類型形參,類型形參…); 類型說明符被調(diào)函數(shù)名(類型,類型…); intmax(inta,int mainmaxintmax(inta,intb)。charstr(inta);floatf(floatb);{}charstr(int{}floatf(float{}strf函數(shù)的嵌套調(diào)圖表示了兩層嵌套的情形。其執(zhí)行過程是:執(zhí)行main函數(shù)中調(diào)用a函數(shù)的語句時,即轉(zhuǎn)去執(zhí)行a函數(shù),在a函數(shù)中調(diào)用b函數(shù)時,又轉(zhuǎn)去執(zhí)行b函數(shù),b函數(shù)執(zhí)行完畢返回a函數(shù)的斷點繼續(xù)執(zhí)行,a函數(shù)執(zhí)行完畢返回main函數(shù)的斷點繼續(xù)執(zhí)行。 f1,另一個是用來計算階乘值的然后返回f1,再返回主函數(shù),在循環(huán)程序中計算累加和。longf1(int{intk;longreturnr;}longf2(int{inti;return}{inti;}f2i值作為實參調(diào)用函數(shù)f1i值。在f1中又發(fā)生對函數(shù)f2i的值作為實參去調(diào)f2,在f2中完成求i的計算。22 22 函數(shù)的遞歸調(diào)intf(int{inty;}用遞歸法計算n!可用下述公式表示:n!=1(n=0,1)n×(n-1)!longff(int{longif(n<0)printf("n<0,inputerror");elseif(n==0||n==1)f=1;}{intn;longprintf("\ninputainteagernumber:\n");}程序中給出的函數(shù)ff是一個遞歸函數(shù)。主函數(shù)調(diào)用ff后即進(jìn)入函數(shù)ff執(zhí)行,如果n<0,n==0n=1ff函數(shù)自身。由于每次遞歸調(diào)用語句即為y=ff(5)ff函數(shù)n=5,不等于01f=ff(n-1)*n,即f=ff(5-1)*5。該語句對ff作遞歸調(diào)用即ff(4)。回主調(diào)函數(shù)。ff(1)的函數(shù)返回值為1,ff(2)的返回值為1*2=2,ff(3)的返回值為2*3=6,ff(4)的返回值為6*4=24,最后返回值ff(5)為24*5=120

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論