全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C程序基礎(chǔ)培訓(xùn)課件
單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級(jí),第三級(jí),第四級(jí),第五級(jí),,,0,,,01 十一月 2024,1,全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C程序基礎(chǔ)培訓(xùn),二級(jí)C語(yǔ)言考試介紹,考核內(nèi)容:二級(jí)定位為程序員,考核內(nèi)容包括公共基礎(chǔ)知識(shí)和程序設(shè)計(jì)。所有科目對(duì)基礎(chǔ)知識(shí)作統(tǒng)一要求,使用統(tǒng)一的公共基礎(chǔ)知識(shí)考試大綱和教程。二級(jí)公共基礎(chǔ)知識(shí)在各科筆試中的分值比重為30%(30分)。程序設(shè)計(jì)部分的比重為70%(70分),主要考查考生對(duì)程序設(shè)計(jì)語(yǔ)言使用和編程調(diào)試等基本能力。,二級(jí)C語(yǔ)言考試介紹,考試形式:二級(jí)所有科目的考試包括筆試和上機(jī)考試兩部分。二級(jí),C,筆試時(shí)間為90分鐘,上機(jī)時(shí)間改為90分鐘。,,二級(jí),C,上機(jī)應(yīng)用軟件為,Visual C++6.0,二級(jí)C語(yǔ)言考試介紹,考試成績(jī)劃分為優(yōu)秀、良好、及格和不及格四個(gè)等第成績(jī),筆試或上機(jī)考試成績(jī)只有一門(mén)及格的,下次考試及格的一門(mén)可以免考,兩部分考試均及格者,由教育部考試中心頒發(fā)統(tǒng)一印制的合格證書(shū)。,二級(jí)C語(yǔ)言培訓(xùn)介紹,,實(shí)實(shí)在在學(xué)知識(shí),順順利利過(guò)考試,如何學(xué)二級(jí)C語(yǔ)言,多看書(shū),多實(shí)踐驗(yàn)證,多讀(背)程序,,第一章 程序設(shè)計(jì)基本概念,什么是,C,程序?,高級(jí)語(yǔ)言 機(jī)器語(yǔ)言,源程序 目標(biāo)程序,編譯程序,第一章 程序設(shè)計(jì)基本概念,,C,語(yǔ)言編譯“三部曲”,,C,源程序 目標(biāo)文件 可執(zhí)行文件,.,C .obj .exe,編譯,連接,第一章 程序設(shè)計(jì)基本概念,程序設(shè)計(jì)過(guò)程,確定數(shù)據(jù)結(jié)構(gòu)(輸入輸出),確定算法(解決問(wèn)題的方法和步驟),編碼。(算法代碼化),調(diào)試程序。(改錯(cuò)和修正),整理和寫(xiě)文檔。,,第一章 程序設(shè)計(jì)基本概念,結(jié)構(gòu)化程序的三種結(jié)構(gòu),順序結(jié)構(gòu)(先后順序執(zhí)行),選擇結(jié)構(gòu)(執(zhí)行不同分支的語(yǔ)句),循環(huán)結(jié)構(gòu)(重復(fù)執(zhí)行多次或一次不執(zhí)行,),,,,第一章 程序設(shè)計(jì)基本概念,模塊化結(jié)構(gòu),由一個(gè)個(gè)功能模塊構(gòu)成的程序結(jié)構(gòu)為模塊化結(jié)構(gòu)。,,,第二章 C程序設(shè)計(jì)的初步知識(shí),,C,語(yǔ)言示例一,輸出一行信息:,Wellcome to Sinree!,程序名為,sinree_c1.c。,#include /*,命令行,表示文件包含*/,main() /*,主函數(shù)*/,{,printf(“Wellcome to Sinree!\n"); /*,輸出信息*/,},程序輸出結(jié)果,,,第二章 C程序設(shè)計(jì)的初步知識(shí),,C,語(yǔ)言示例二,輸入兩個(gè)整數(shù),輸出它們的和,。,程序名為,sinree_c2.c。,#include /*,文件包含*/,main() /*,主函數(shù)*/,{,int a,b,c; /*,聲明定義變量,a,b,和,c*/,scanf("%d%d", /*,輸入變量,a,和,b,的值*/,,c=a+b; /*,計(jì)算,c,等于,a,與,b,的和值*/,,printf("c=%d\n",c); /*,輸出變量,c,的值*/,},運(yùn)行程序輸入:,90,<,CR>,7,,程序結(jié)果:,第二章 C程序設(shè)計(jì)的初步知識(shí),C,語(yǔ)言示例三,輸入兩個(gè)整數(shù),通過(guò)調(diào)用函數(shù)計(jì)算它們的和,然后輸出和值,。,程序名為,sinree_c3.c。,#include "stdio.h" /*,文件包含*/,int sum(int x,int y) /*,定義,sum,函數(shù)*/,{,int z; /*,聲明定義變量,z*/,z=x+y; /*,計(jì)算,z,等于,x,與,y,的和值*/,,return (z); /*,將,z,的值返回,通過(guò),sum,帶回調(diào)用處*/,},main() /*,主函數(shù)*/,{,int a,b,c; /*,聲明定義變量,a,b,和,c*/,scanf("%d%d", /*,輸入變量,a,和,b,的值*/,,c=sum(a,b); /*,調(diào)用,sum,函數(shù),將得到的值賦給,c*/,printf("c=%d\n",c); /*,輸出變量,c,的值*/,},運(yùn)行程序輸入:,90 7,<,CR>,程序結(jié)果,C=97,第二章 C程序設(shè)計(jì)的初步知識(shí),VC++ 6.0,編輯環(huán)境,,,編輯區(qū),第二章 C程序設(shè)計(jì)的初步知識(shí),VC++ 6.0,編輯環(huán)境,啟動(dòng),Visual C++ 6.0,環(huán)境,編輯源程序文件,編譯,連接,執(zhí)行,第二章 C程序設(shè)計(jì)的初步知識(shí),VC++ 6.0,編輯環(huán)境,,,,,編譯,Ctrl+F7,連接,F7,運(yùn)行,Ctrl+F5,第二章 C程序設(shè)計(jì)的初步知識(shí),C,程序的構(gòu)成和格式,,,,任何函數(shù)(包括主函數(shù),main()),都是由函數(shù)說(shuō)明和函數(shù)體兩部分組成。其一般結(jié)構(gòu)如下:,[函數(shù)類(lèi)型] 函數(shù)名(函數(shù)參數(shù)表),,/*函數(shù)說(shuō)明部分*/,,{ 說(shuō)明語(yǔ)句部分;,,/*函數(shù)體部分*/,,執(zhí)行語(yǔ)句部分;,},,第二章 C程序設(shè)計(jì)的初步知識(shí),C,程序的構(gòu)成和格式,,C,語(yǔ)言是由函數(shù)組成的,一個(gè),C,源程序可由一個(gè),main,函數(shù)和若干個(gè)其他函數(shù)組成,其中必須,有一個(gè)且只能有一個(gè),main,函數(shù),。,,C,程序總是從,main,函數(shù)開(kāi)始執(zhí)行。,,,,,第二章 C程序設(shè)計(jì)的初步知識(shí),C,程序的構(gòu)成和格式,,C,程序語(yǔ)句和數(shù)據(jù)定義必須以,分號(hào)“;”結(jié)束,。,,C,語(yǔ)言中,分號(hào)是程序語(yǔ)句的結(jié)束標(biāo)志,也是,C,語(yǔ)句的必要組成部分。,,,第二章 C程序設(shè)計(jì)的初步知識(shí),C,程序的構(gòu)成和格式,C,語(yǔ)言嚴(yán)格區(qū)分大小寫(xiě)。,如變量,a,和變量,A,系統(tǒng)認(rèn)定為兩個(gè)不同的變量。,,,第二章 C程序設(shè)計(jì)的初步知識(shí),C,程序的構(gòu)成和格式,C,語(yǔ)言數(shù)據(jù)輸入和輸出是由,庫(kù)函數(shù),實(shí)現(xiàn)的。,,C,語(yǔ)言本身沒(méi)有輸入輸出語(yǔ)句。輸入和輸入操作是由庫(kù)函數(shù),scanf,和,printf,等函數(shù)來(lái)實(shí)現(xiàn)的。,所以一般,C,程序都要使用命令行語(yǔ)句 #,include ,,注意:命令行以#開(kāi)頭,行尾不能加 ; 號(hào),,第二章 C程序設(shè)計(jì)的初步知識(shí),C,程序的構(gòu)成和格式,C,語(yǔ)言用,/*注釋內(nèi)容*/,形式進(jìn)行程序注釋,在“,/*,”和“,*/,”之間的所有字符都為注釋符,,C,系統(tǒng)不對(duì)注釋符進(jìn)行編譯。(另外可以用,//,用于單行注釋?zhuān)?注意:注釋不能嵌套使用。如/* /*…*/*/,,,第二章 C程序設(shè)計(jì)的初步知識(shí),C,程序書(shū)寫(xiě)格式建議,1.,C,程序書(shū)寫(xiě)格式自由。,,對(duì)于短語(yǔ)句可以多條語(yǔ)句書(shū)寫(xiě)在同一行,也可以將長(zhǎng)語(yǔ)句分寫(xiě)在多行。但需要注意,分行時(shí)不能將一個(gè)單詞分開(kāi),也不能將雙引號(hào)引起來(lái)的字符串分開(kāi)。我們提倡,一行一條語(yǔ)句,的風(fēng)格。,2.,C,程序書(shū)寫(xiě)采用縮進(jìn)格式。,根據(jù)語(yǔ)句的從屬關(guān)系,程序書(shū)寫(xiě)時(shí)采用縮進(jìn)格式,使程序語(yǔ)句的層次結(jié)構(gòu)清晰,提高程序的可讀性。同一層次語(yǔ)句要左對(duì)齊,不同層次的語(yǔ)句要縮進(jìn)若干個(gè)字符,這樣程序?qū)哟吻宄阌陂喿x和理解。,,3.程序中適當(dāng)使用注釋信息。,在書(shū)寫(xiě)程序時(shí),適當(dāng)?shù)丶尤胱⑨屚瑯涌稍黾映绦虻目勺x性。,,,,第二章 C程序設(shè)計(jì)的初步知識(shí),C,程序標(biāo)識(shí)符,,C,語(yǔ)言中 ,符號(hào)的命名必須遵守一定的規(guī)則,按此規(guī)則命名的符號(hào)稱(chēng)為標(biāo)識(shí)符。合法的標(biāo)識(shí)符命名規(guī)則為:,標(biāo)識(shí)符可以由字母、數(shù)字和下劃線組成,并且第一個(gè)字符必須為字母或下劃線。,[提醒:,c,語(yǔ)言標(biāo)識(shí)符中大寫(xiě)字母和小寫(xiě)字母被認(rèn)為是兩個(gè),不同,的字符],第二章 C程序設(shè)計(jì)的初步知識(shí),C,程序,標(biāo)識(shí)符分類(lèi),,,關(guān)鍵字,(由,C,語(yǔ)言預(yù)先規(guī)定的,見(jiàn)附錄4),如:,int,double,,預(yù)定義標(biāo)識(shí)符,(預(yù)先定義且具有特殊含義),如,printf,define,,用戶(hù)標(biāo)識(shí)符,(見(jiàn)名知義),用來(lái)給變量、函數(shù)、數(shù)組等命名。,,,第二章 C程序設(shè)計(jì)的初步知識(shí),C,程序常量和變量,,關(guān)于常量、變量及數(shù)據(jù)類(lèi)型說(shuō)明的程序?qū)嵗?程序名為,sinree_c3.c。,#include ,main(),{ int a=3; /*,定義整型變量,a,并賦予常量值3 */,,short r=6; /*,定義短整型變量,r,并賦予常量值6*/,,char c='a'; /*,定義字符變量,c,并賦予字符常量值',a' */,float pi=3.14; /*,定義單精度實(shí)型變量,pi,并賦予實(shí)型常量值3.14 */,,double s; /*,定義雙精度實(shí)型變量,s */,s=pi*r*r; /*,將,pi*r*r,值賦給,s */,printf("int:%d,short:%d,char:%d,float:%d,double:%d\n",sizeof(a),,sizeof(r),sizeof(c),sizeof(pi),sizeof(s));,/*,輸出各變量占內(nèi)存的字節(jié)數(shù) */,,printf("a=%d,r=%d,c=%c,pi=%f,s=%lf\n",a,r,c,pi,s);,/*,輸出各變量的值 */,},第二章 C程序設(shè)計(jì)的初步知識(shí),常量 :在程序運(yùn)行過(guò)程中,其值不能改變的量。,根據(jù)數(shù)據(jù)類(lèi)型可以分為,數(shù)值型,(有正、負(fù)之分),【,整型常量,(不帶小數(shù)點(diǎn))、,實(shí)型常量,(必須用小數(shù)點(diǎn))】、,字符常量,(如‘,a’、’d’,)和,字符串,(“,ncre”、”beijing”),常量。,,第二章 C程序設(shè)計(jì)的初步知識(shí),符號(hào)常量,#,include ,main(),{,double r,s,l;,r=5.0;,s=,3.14,*r*r;,l=2*,3.14,*r;,printf("s=%f,l=%f\n",s,l);,},,符號(hào)常量,,#include ,#define,PI 3.14,main(),{,double r,s,l;,r=5.0;,s=,PI,*r*r;,l=2*,PI,*r;,printf("s=%f,l=%f\n",s,l);,,},第二章 C程序設(shè)計(jì)的初步知識(shí),符號(hào)常量,用#,define,命令行(,不是語(yǔ)句,,所以后面不能加分號(hào))定義一個(gè)字符(通常用大寫(xiě)字母)代表一個(gè)常量 。,#define,PI 3.14,,第二章 C程序設(shè)計(jì)的初步知識(shí),變量: 在程序運(yùn)行過(guò)程中,值可以改變的量,。,變量實(shí)質(zhì)上代表了內(nèi)存中的某個(gè)存儲(chǔ)單元。,變量必須先定義后使用。,,,,第二章 C程序設(shè)計(jì)的初步知識(shí),整型數(shù),十進(jìn)制: 0 1 2 3 4 5 6 7 8 9,八進(jìn)制: 0 1 2 3 4 5 6 7,,c,程序中八進(jìn)制開(kāi)頭,加0,十六進(jìn)制:0 1 2 3 4 5 6 7 8 9,a b c d e f,c,程序中十六進(jìn)制開(kāi)頭,加 0,x,,,,第二章 C程序設(shè)計(jì)的初步知識(shí),整型常量,#include ,main (),{,int a=12;,printf("a=,%d,,a=,%o,,a=,%#o,,a=,%x,,a=,%#x,\n",a,a,a,a,a);,},,,,第二章 C程序設(shè)計(jì)的初步知識(shí),整型變量,,基本型: 用,int,關(guān)鍵字進(jìn)行定義,,int k;,,一個(gè)定義語(yǔ)句用一個(gè);結(jié)束,多個(gè)變量用,隔開(kāi),,int k,m,n;,(,僅開(kāi)辟存儲(chǔ)單元,不存放初值,此時(shí)變量值無(wú)意義),變量初始化:,int m=1,n=2,k=3;,,,,第二章 C程序設(shè)計(jì)的初步知識(shí),整型數(shù)據(jù)分類(lèi),,,短整型:,short [int],,長(zhǎng)整型:,int,或,long [int],,無(wú)符號(hào)型:,unsigned,,在,vc,6.0中整型常量后面加一個(gè)字母,l,或,L,,在無(wú)符號(hào)整數(shù)常量后加,u,或,U,,若長(zhǎng)整型無(wú)符號(hào)可以加,lu,或,LU,數(shù)據(jù)類(lèi)型名,,說(shuō)明,,Visual C++ 6.0,環(huán)境,,Turbo C2.0,環(huán)境,,字節(jié),,取值范圍,,字節(jié),,取值范圍,,short [int],,短整型,,2,,-32768~32767,,2,,-32768~32767,,signed short [int],,帶符號(hào)短整型,,2,,-32768~32767,,2,,-32768~32767,,unsigned short [int],,無(wú)符號(hào)短整型,,2,,0~65535,,2,,0~65535,,int,整型,4,,-2147483648~2147483647,2,,-32768~32767,signed [int],,帶符號(hào)整型,,4,,-2147483648~2147483647,,2,,-32768~32767,,unsigned [int],,無(wú)符號(hào)整型,,4,,0~4294967295,,2,,0~65535,,long [int],,長(zhǎng)整型,,4,,-2147483648~2147483647,,4,,-2147483648~2147483647,,signed long [int],,帶符號(hào)長(zhǎng)整型,,4,,-2147483648~2147483647,,4,,-2147483648~2147483647,,unsigned long [int],,無(wú)符號(hào)長(zhǎng)整型,,4,,0~4294967295,,4,,0~4294967295,,,,,第二章 C程序設(shè)計(jì)的初步知識(shí),整數(shù)在內(nèi)存中的存儲(chǔ)形式,,一個(gè)字節(jié)中的最右邊一位稱(chēng)為最低位;,一個(gè)字節(jié)中的最左邊一位稱(chēng)為最高位;,對(duì)于一個(gè)有符號(hào)整數(shù),最高位用來(lái)存放整數(shù)的符號(hào),稱(chēng)為符號(hào)位。若是正整數(shù),最高位放置0,若是負(fù)整數(shù),最高位放置1。,,第二章 C程序設(shè)計(jì)的初步知識(shí),整數(shù)在內(nèi)存中的存儲(chǔ)形式,,正整數(shù): 原碼表示。,負(fù)整數(shù): 補(bǔ)碼表示。(取反加1),二進(jìn)制轉(zhuǎn)十進(jìn)制 為 取反減1,正整數(shù),5,在內(nèi)存中的二進(jìn)制碼為:,,0000000000000101,(原碼),最大正整數(shù),0111111111111111,-,5,的二進(jìn)制,10000101,,其反,碼:,11111010,,補(bǔ)碼:,11111011,,第二章 C程序設(shè)計(jì)的初步知識(shí),實(shí)型數(shù)據(jù),小數(shù)形式:由數(shù)字和小數(shù)點(diǎn)組成的一種實(shí)數(shù)表示形式。(必須有小數(shù)點(diǎn)),指數(shù)形式:以“,e”,或“,E”,跟一個(gè)整數(shù)來(lái)表示以10為底的冪, “,e”,或“,E”,之前必須有數(shù)字,且“,e”,或“,E”,后面的指數(shù)必須為整數(shù)。( “,e”,或“,E”,的前后以及數(shù)字之間無(wú)空格),,,,第二章 C程序設(shè)計(jì)的初步知識(shí),實(shí)型數(shù)據(jù),單精度,float 4,個(gè)字節(jié),,雙精度,double 8,個(gè)字節(jié),,,,,第二章 C程序設(shè)計(jì)的初步知識(shí),,算術(shù)表達(dá)式,,基本算術(shù)表達(dá)式:,,+、-、*、/、%,(%運(yùn)算對(duì)象為整型),注意:,+、-可以看做單目,也可看做雙目運(yùn)算符號(hào)。,雙目運(yùn)算符兩邊運(yùn)算數(shù)的類(lèi)型一致,則所得結(jié)果的類(lèi)型與運(yùn)算數(shù)的類(lèi)型一致。如:1.0/2.0=0.5 ½=0;,若不一致,自動(dòng)進(jìn)行類(lèi)型轉(zhuǎn)換,轉(zhuǎn)換的原則為“就大”,所有實(shí)型數(shù)運(yùn)算都以雙精度方式進(jìn)行。,,第二章 C程序設(shè)計(jì)的初步知識(shí),運(yùn)算符的優(yōu)先級(jí),,單目運(yùn)算符“+”和“-”的結(jié)合性是從右到左。,在算術(shù)表達(dá)式中,可以使用多層圓括號(hào),但左右括號(hào)必須配對(duì)。,若包含不同優(yōu)先級(jí)的運(yùn)算符,則按運(yùn)算符的優(yōu)先級(jí)由高到低進(jìn)行,若相同,則按結(jié)合方向進(jìn)行。,,第二章 C程序設(shè)計(jì)的初步知識(shí),強(qiáng)制類(lèi)型轉(zhuǎn)換表達(dá)式,(類(lèi)型名)(表達(dá)式),如 (,int)3.234,,,第二章 C程序設(shè)計(jì)的初步知識(shí),賦值表達(dá)式,“=”,賦值運(yùn)算符,賦值運(yùn)算的功能是先求出右邊表達(dá)式的值,然后把此值賦給 賦值號(hào)左邊的變量。,注意: 賦值運(yùn)算符優(yōu)先級(jí)別僅高于逗號(hào)運(yùn)算符;且結(jié)合性為自右向左;賦值表達(dá)式的值為最左邊變量所得的新值。,第二章 C程序設(shè)計(jì)的初步知識(shí),復(fù)合賦值表達(dá)式,+=,n+=2 n=n+2,-=,n-=2 n=n-2,*=,n*=2 n=n*2,/=,n/=2 n=n/2,%=,n%=2 n=n%2,,第二章 C程序設(shè)計(jì)的初步知識(shí),復(fù)合運(yùn)算中的類(lèi)型轉(zhuǎn)換,,兩側(cè)不一致 ,把右側(cè)數(shù)值按左側(cè)變量類(lèi)型進(jìn)行轉(zhuǎn)換。也可用強(qiáng)類(lèi)型轉(zhuǎn)換的方式人為的轉(zhuǎn)換。,,第二章 C程序設(shè)計(jì)的初步知識(shí),自加、自減、逗號(hào)運(yùn)算符,自加 ++ 使運(yùn)算對(duì)象值加1,自減 -- 使運(yùn)算對(duì)象值減1,++,i,,i,++,++,i,;,i,++ ;,,i,的 值都加1 前綴加1,后綴不加1,,--,i,,i --,--,i,;,i,,--,;,,i,的 值都減1 前綴減1,后綴不減1,,第二章 C程序設(shè)計(jì)的初步知識(shí),#include ,main(),{,int i=1,j=1,m=1,n=1,k=1;,printf("i=%d\n",i);,m=i++;,printf("i=%d,m=%d\n",i,m);,printf("j=%d\n",j);,m=++j;,printf("j=%d,m=%d\n",j,m);,printf("n=%d\n",n);,m=n--;,printf("n=%d,m=%d\n",n,m);,printf("k=%d\n",k);,m=--k;,printf("k=%d,m=%d\n",k,m);,,},第二章 C程序設(shè)計(jì)的初步知識(shí),逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式,,表達(dá)式1,表達(dá)式2,…… 表達(dá)式,n,結(jié)合性:從左到右,最后一個(gè)表達(dá)式的值就是此逗號(hào)表達(dá)式的值。逗號(hào)運(yùn)算符的優(yōu)先級(jí)最低。,,第三章 順序結(jié)構(gòu),順序結(jié)構(gòu):在程序中按語(yǔ)句出現(xiàn)的順序逐條執(zhí)行。,賦值語(yǔ)句:在賦值表達(dá)式的尾部加上一個(gè)“;”號(hào)。應(yīng)出現(xiàn)在函數(shù)的可執(zhí)行部分。,,第三章 順序結(jié)構(gòu),數(shù)據(jù)輸出:把數(shù)據(jù)從計(jì)算機(jī)內(nèi)部送到計(jì)算機(jī)外部設(shè)備上的操作。,在,VC 6.0,環(huán)境下,在調(diào)用輸入和輸出的庫(kù)函數(shù)之前要求在源程序中出現(xiàn)包含頭文件,stdio.h,的命令行。,,第三章 順序結(jié)構(gòu),,printf,函數(shù),,printf(,格式控制,輸出項(xiàng)1,輸出項(xiàng)2,…),格式控制是字符串形式,作用是將要輸出的數(shù)據(jù)按照指定的格式輸出和提供需要原樣輸出的文字或字符。,如:,d%、f%、e%,,第三章 順序結(jié)構(gòu),格式字符,,%c %d %o (%#o) %x (%#x),%u %f %e %s %p %%,,長(zhǎng)度修飾符,在 %和格式字符之間,可以加入長(zhǎng)度修飾符,以保證數(shù)據(jù)輸出格式的正確和對(duì)齊。長(zhǎng)整%,ld,短整 %,hd,第三章 順序結(jié)構(gòu),寬度說(shuō)明:,%和格式字符之間插入一個(gè)整數(shù)常數(shù)來(lái)指定輸出的寬度,n,,對(duì)于,float,和,double,的實(shí)數(shù),可以用,n1.n2,的形式來(lái)輸出,或者用.,n2,輸出。,在 %,d,和寬度之間加“-”實(shí)現(xiàn)數(shù)據(jù)左對(duì)齊,加“+”在每一個(gè)數(shù)字前面帶正負(fù)號(hào)。,,,第三章 順序結(jié)構(gòu),注意事項(xiàng),一般在多個(gè)輸出數(shù)之間留逗號(hào)、空格或者回車(chē)。,要輸出%符號(hào),在格式控制符中用%%,,printf,函數(shù)有返回值,返回值是本次調(diào)用輸出字符的個(gè)數(shù),包括回車(chē)等控制符。,,,第三章 順序結(jié)構(gòu),,scanf,函數(shù),scanf(,格式控制,輸入項(xiàng)1,輸入項(xiàng)2,…),主要作用是指定輸入時(shí)的數(shù)據(jù)轉(zhuǎn)換格式 ,輸入項(xiàng)之間用逗號(hào)隔開(kāi),對(duì)于,int,float,double,類(lèi)型變量,在變量之前必須加&符號(hào)作為輸入項(xiàng)。,,,第三章 順序結(jié)構(gòu),格式字符,%,c %d %i,%o %x %u %f %e %s,,,,第三章 順序結(jié)構(gòu),輸入整數(shù)或者實(shí)數(shù)這類(lèi)數(shù)值型數(shù)據(jù)時(shí),輸入的數(shù)據(jù)之間必須用空格、回車(chē)符號(hào)等間隔符號(hào)隔開(kāi)。,可以指定輸入數(shù)據(jù)所指定的寬度,一般在使用輸入函數(shù)前使用輸出函數(shù)對(duì)輸入數(shù)據(jù)進(jìn)行說(shuō)明,且盡量不要使用通配符。,,,,第三章 順序結(jié)構(gòu),復(fù)合語(yǔ)句和空語(yǔ)句,{,語(yǔ)句1;,,語(yǔ)句2;,……,語(yǔ)句,n;,},第三章 順序結(jié)構(gòu),空語(yǔ)句,,只有一個(gè)分號(hào)的語(yǔ)句。,,第三章 順序結(jié)構(gòu),例題3.1,,,,A B,提問(wèn):,若,A,和,B,桶都裝了水(不一定是裝滿(mǎn)),請(qǐng)問(wèn)如何將,A,和,B,桶中的水調(diào)換?(,A,B,的容積不受限制),第三章 順序結(jié)構(gòu),例題3.2,注意:,十進(jìn)制小數(shù)點(diǎn)移位是通過(guò)10的,n,次方的乘除來(lái)實(shí)現(xiàn).,四舍五入在,c,語(yǔ)言中的操作:可以通過(guò)將小數(shù)點(diǎn)移動(dòng)到舍入數(shù)位前,加0.5,然后取整來(lái)實(shí)現(xiàn),最后再將小數(shù)點(diǎn)移回.,強(qiáng)類(lèi)型轉(zhuǎn)換前要加括號(hào).,,double,類(lèi)型在使用,scanf,輸入變量時(shí),使用%,lf,格式控制符.,,,第四章 選擇結(jié)構(gòu),選擇結(jié)構(gòu):根據(jù)判斷的結(jié)果(邏輯值)決定程序的不同流程.,邏輯值:關(guān)系運(yùn)算和邏輯運(yùn)算都會(huì)得到一個(gè)邏輯值,,C,語(yǔ)言中,0代表邏輯值“假”,非0(正數(shù)或者負(fù)數(shù))代表“真”.,,,第四章 選擇結(jié)構(gòu),關(guān)系運(yùn)算:比較運(yùn)算,進(jìn)行兩個(gè)數(shù)的比較,判斷比較的結(jié)果是否符合指定的條件.,關(guān)系運(yùn)算符:, >= == !=,小于 小與等于 大于 大于等于 等于 不等于,,,第四章 選擇結(jié)構(gòu),注意:,兩個(gè)字符之間不允許有空格.,關(guān)系運(yùn)算符是雙目運(yùn)算符,具有從左至右的結(jié)合性.,、>=優(yōu)先級(jí)相同,但高于 優(yōu)先級(jí)相同的==、!= 如,a==b<c,算術(shù)運(yùn)算符優(yōu)先級(jí)>關(guān)系運(yùn)算符優(yōu)先級(jí)>賦值運(yùn)算符優(yōu)先級(jí) 如,a=b<=c+d*e==f,,第四章 選擇結(jié)構(gòu),關(guān)系表達(dá)式:由關(guān)系運(yùn)算符構(gòu)成的表達(dá)式。,關(guān)系表達(dá)式的值:整數(shù)0或1,關(guān)系運(yùn)算符兩邊值的類(lèi)型不一致時(shí),自動(dòng)進(jìn)行類(lèi)型轉(zhuǎn)換。浮點(diǎn)數(shù)由于存放有誤差,,x==y,為0。,第四章 選擇結(jié)構(gòu),邏輯運(yùn)算符,&& 邏輯“與” 雙目,|| 邏輯“或” 雙目,! 邏輯“非” 單目,結(jié)合性:從左至右,優(yōu)先級(jí):!>&&>|| 如,b||c&&!d,第四章 選擇結(jié)構(gòu),優(yōu)先級(jí)比較,!>算術(shù)>關(guān)系>&&>||>賦值,如:,f=a||b<=!c+d&&e,,第四章 選擇結(jié)構(gòu),邏輯運(yùn)算規(guī)則,非運(yùn)算 !0為1 !1為0,是否,,與運(yùn)算 1&&1為1,同時(shí)滿(mǎn)足條件,,0&&1 1&&0 0&&0 為0,,或運(yùn)算 0||0為0,不滿(mǎn)足任何一個(gè)條件,,0||1 1||0 1||1為1,第四章 選擇結(jié)構(gòu),邏輯運(yùn)算規(guī)則,非運(yùn)算 !0為1 !1為0,是否,,與運(yùn)算 1&&1為1,同時(shí)滿(mǎn)足條件,,0&&1 1&&0 0&&0 為0,,或運(yùn)算 0||0為0,不滿(mǎn)足任何一個(gè)條件,,0||1 1||0 1||1為1,第四章 選擇結(jié)構(gòu),邏輯運(yùn)算規(guī)則,關(guān)系式 0<,x<10,在,c,語(yǔ)言中的表達(dá),0<,x&&x<10,&&,或||邏輯表達(dá)式“短路”現(xiàn)象,當(dāng),A,為0時(shí),不需計(jì)算,B,,可知,A&&B,為0,當(dāng),A,為1時(shí),不需計(jì)算,B,,可知,A||B,為1,第四章 選擇結(jié)構(gòu),,if,語(yǔ)句,,if(,表達(dá)式) 語(yǔ)句,,if(,表達(dá)式) 語(yǔ)句1,else,語(yǔ)句2,第四章 選擇結(jié)構(gòu),,if,語(yǔ)句,,if(,表達(dá)式) 語(yǔ)句,如,if (a<b),{ t=a;,a=b;,b=t;,},第四章 選擇結(jié)構(gòu),,if,語(yǔ)句,,if(,表達(dá)式) 語(yǔ)句,語(yǔ)句只能為一條語(yǔ)句,可以把多條語(yǔ)句組合成復(fù)合語(yǔ)句.,執(zhí)行過(guò)程:計(jì)算表達(dá)式中的值,如果為真,執(zhí)行,if,子句,然后執(zhí)行,if,語(yǔ)句后的一個(gè)語(yǔ)句;否則,跳過(guò),if,子句,直接執(zhí)行,if,語(yǔ)句后的一個(gè)語(yǔ)句;,第四章 選擇結(jié)構(gòu),,if,語(yǔ)句,,if(,表達(dá)式) 語(yǔ)句,語(yǔ)句只能為一條語(yǔ)句,可以把多條語(yǔ)句組合成復(fù)合語(yǔ)句.,執(zhí)行過(guò)程:計(jì)算表達(dá)式中的值,如果為真,執(zhí)行,if,子句,然后執(zhí)行,if,語(yǔ)句后的一個(gè)語(yǔ)句;否則,跳過(guò),if,子句,直接執(zhí)行,if,語(yǔ)句后的一個(gè)語(yǔ)句;,第四章 選擇結(jié)構(gòu),,if,語(yǔ)句,,if(,表達(dá)式) 語(yǔ)句1,,else,語(yǔ)句2,執(zhí)行過(guò)程:計(jì)算表達(dá)式的值,如果表達(dá)式的值為真,執(zhí)行,if,子句,然后跳過(guò),else,子句,去執(zhí)行,if,語(yǔ)句之后的下一條語(yǔ)句;如果表示式的值為假,跳過(guò),if,子句,執(zhí)行,else,子句,然后去執(zhí)行,if,語(yǔ)句之后的下一條語(yǔ)句.,第四章 選擇結(jié)構(gòu),,if,語(yǔ)句,,if(,表達(dá)式) 語(yǔ)句1,,else,語(yǔ)句2,執(zhí)行過(guò)程:計(jì)算表達(dá)式的值,如果表達(dá)式的值為真,執(zhí)行,if,子句,然后跳過(guò),else,子句,去執(zhí)行,if,語(yǔ)句之后的下一條語(yǔ)句;如果表示式的值為假,跳過(guò),if,子句,執(zhí)行,else,子句,然后去執(zhí)行,if,語(yǔ)句之后的下一條語(yǔ)句.,第四章 選擇結(jié)構(gòu),,if,語(yǔ)句的嵌套(一),,if (,表達(dá)式1),,if(,表達(dá)式2) 語(yǔ)句1,,else,語(yǔ)句2,,else,,語(yǔ)句3,第四章 選擇結(jié)構(gòu),,if,語(yǔ)句的嵌套(二),,if (,表達(dá)式1),{,if (,表達(dá)式2) 語(yǔ)句1},else,語(yǔ)句2,注意:,else,子句總與前面最近不帶,else,的,if,相結(jié)合.,,第四章 選擇結(jié)構(gòu),,if,語(yǔ)句的嵌套(三),,if (,表達(dá)式1) 語(yǔ)句1,else,,if (,表達(dá)式2,),語(yǔ)句2,,else,語(yǔ)句3,,,,if (,表達(dá)式1) 語(yǔ)句1,else if (,表達(dá)式2,),語(yǔ)句2,,else,語(yǔ)句3,,,等價(jià),盡量將內(nèi)嵌的,if,語(yǔ)句放在,else,子句中.,第四章 選擇結(jié)構(gòu),,if,語(yǔ)句的嵌套(四),,if (,表達(dá)式1) 語(yǔ)句1,else,,if (,表達(dá)式2,),語(yǔ)句2,,,,,if (,表達(dá)式1) 語(yǔ)句1,else if (,表達(dá)式2,),語(yǔ)句2,,等價(jià),盡量將內(nèi)嵌的,if,語(yǔ)句放在,else,子句中.,第四章 選擇結(jié)構(gòu),,if,語(yǔ)句的多層嵌套,if (,表達(dá)式1) 語(yǔ)句1,else,,if (,表達(dá)式2,),語(yǔ)句2,,else,,,if (,表達(dá)式3,),語(yǔ)句3,…,else,語(yǔ)句,n,,,,,,if (,表達(dá)式1) 語(yǔ)句1,else if (,表達(dá)式2,),語(yǔ)句2,else if (,表達(dá)式3,),語(yǔ)句3,…,else,語(yǔ)句,n,,等價(jià),逐一對(duì),if,后的表達(dá)式進(jìn)行檢測(cè),只執(zhí)行其中的一個(gè)表達(dá)式為真的子句,若所有表達(dá)式為0,執(zhí)行最后的,else,子句;若無(wú)最后的,else,子句,不執(zhí)行任何的子句.,第四章 選擇結(jié)構(gòu),條件表達(dá)式構(gòu)成的選擇結(jié)構(gòu),條件運(yùn)算符: ? :,條件表達(dá)式:,表達(dá)式1?表達(dá)式2:表達(dá)式3,運(yùn)算功能:如果表達(dá)式1為真,求表達(dá)式2的值,此時(shí)表達(dá)式2的值就是整個(gè)條件表達(dá)式的值;,如果表達(dá)式1為假,求表達(dá)式3的值,此時(shí)表達(dá)式3的值就是整個(gè)條件表達(dá)式的值;,,,,,第四章 選擇結(jié)構(gòu),條件表達(dá)式構(gòu)成的選擇結(jié)構(gòu),,條件表達(dá)式的優(yōu)先級(jí)別,低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符,但高于賦值運(yùn)算符.,如:,y=x>10?100:200,x<0?(-1)*x:x,,,,,第四章 選擇結(jié)構(gòu),switch,表達(dá)式構(gòu)成的選擇結(jié)構(gòu),switch (,表達(dá)式),{,case,常量表達(dá)式1:語(yǔ)句1,,case,常量表達(dá)式2:語(yǔ)句2,…,,case,常量表達(dá)式,n:,語(yǔ)句,n,default :,語(yǔ)句,n,},,,,通常和,break,語(yǔ)句聯(lián)合使用,當(dāng)執(zhí)行到,break,時(shí),立即跳出,switch,語(yǔ)句.,第四章 選擇結(jié)構(gòu),語(yǔ)句標(biāo)號(hào)和,goto,語(yǔ)句,,goto stop;,…,,stop:printf(“end\n”);,,,,,,第五章 循環(huán)結(jié)構(gòu),,while,語(yǔ)句和用,while,語(yǔ)句構(gòu)成的循環(huán),,while(,表達(dá)式) 循環(huán)體,例如:,,k=0;,while (k<10),{,printf(“*”);,k++;,},,,,,第五章 循環(huán)結(jié)構(gòu),,do-while,語(yǔ)句及其循環(huán),,do,,循環(huán)體,,while(,表達(dá)式);,例如:,do,{ i++;s+=i;,},While(i<10);,,,,第五章 循環(huán)結(jié)構(gòu),,for,語(yǔ)句及其循環(huán),,for(,表達(dá)式1;表達(dá)式2;表達(dá)式3),循環(huán)體,例如:,,for(k=0;k<10;k++),printf(“*”);,,,,,表達(dá)式1;,While(,表達(dá)式2),{,循環(huán)體;,表達(dá)式3;,},等價(jià)形式,第五章 循環(huán)結(jié)構(gòu),,break,語(yǔ)句和,continue,語(yǔ)句,Break,在循環(huán)結(jié)構(gòu)中終止本層循環(huán)體;,Continue,跳過(guò)本次循環(huán)體中余下尚為執(zhí)行的語(yǔ)句,立刻進(jìn)行下一次的循環(huán)條件判定,可以理解為僅結(jié)束本次循環(huán).,,,,第六章 字符型數(shù)據(jù),字符型常量,,C,語(yǔ)言中,一個(gè)字符常量代表,ASCII,字符集(見(jiàn)附錄七)中的一個(gè)字符,用單引號(hào)把一個(gè)字符括起來(lái)作為字符常量.,例如:,a,為標(biāo)識(shí)符,‘,a’,為字符型常量.,,,,,第六章 字符型數(shù)據(jù),字符型常量,注意:,大寫(xiě)字母和小寫(xiě)字母的,ASCII,值不同,因而代表不同的字符常量.,單引號(hào)中的空格也是一個(gè)字符常量.,字符常量只能包含一個(gè)字符.,字符常量只能用單引號(hào)括起來(lái),不能用雙括號(hào).,字符常量在內(nèi)存中占一個(gè)字節(jié),存放的是字符的,ASCII,代碼值.,,,,,第六章 字符型數(shù)據(jù),字符型常量,轉(zhuǎn)義字符常量 ‘\特定字符’,\,n,回車(chē) \\ 反斜杠 \‘ 單引號(hào) \“ 雙引號(hào),\,ddd,三位八進(jìn)制代表的一個(gè),ASCII,字符,\,xhh,二位十六進(jìn)制代表的一個(gè),ASCII,字符,注意:轉(zhuǎn)義字符常量只代表一個(gè)字符.,,,,第六章 字符型數(shù)據(jù),字符串常量,字符串常量是由雙引號(hào)括起來(lái)的一串字符.在,c,語(yǔ)言中,系統(tǒng)在每個(gè)字符串的最后自動(dòng)加入一個(gè)字符‘\0’作為字符串的結(jié)束標(biāo)志.,,注意:“”稱(chēng)為空串,也是一個(gè)字符串常量,占用一個(gè)字節(jié)的存儲(chǔ)空間.,,,,第六章 字符型數(shù)據(jù),字符量的運(yùn)算,在,C,程序中,字符量可參與任何整數(shù)運(yùn)算.,大小寫(xiě)字母的轉(zhuǎn)換:大寫(xiě)字母,ASCII,值=小寫(xiě)字母,ASCII,值-32,可以將數(shù)字字符轉(zhuǎn)換成整數(shù)值,也可以將整數(shù)值轉(zhuǎn)換成數(shù)字字符.,字符量可以進(jìn)行關(guān)系運(yùn)算.,,,,,第六章 字符型數(shù)據(jù),字符變量,,用關(guān)鍵字,char,進(jìn)行定義,,char ch1=‘a(chǎn)’;,,字符變量可以參與整型變量允許的運(yùn)算,有可以使用與字符處理相關(guān)的庫(kù)函數(shù).,,,,第六章 字符型數(shù)據(jù),字符的輸入和輸出,printf,輸出字符時(shí)使用格式說(shuō)明符%,c,,也可以在,c,前加入整數(shù)來(lái)指定輸出字符時(shí)所占的寬度.,用,scanf,輸入字符時(shí)也用格式說(shuō)明符%,c,,當(dāng)%,c,一個(gè)接一個(gè)時(shí),字符之間不應(yīng)有間隔符號(hào)(如回車(chē),空格).,,,,,,,第六章 字符型數(shù)據(jù),,putchar,和,getchar,輸入和輸出函數(shù),,putchar,輸出字符,putchar(ch);,getchar,輸入字符,ch=getchar();,,注意:只有在用戶(hù)敲入,enter,鍵時(shí),讀入才開(kāi)始執(zhí)行.,,,,,第七章 函數(shù),一個(gè)實(shí)用的,c,語(yǔ)言源程序總是由許多函數(shù)組成.,這些函數(shù)中可以調(diào)用,c,提供的庫(kù)函數(shù),也可以調(diào)用由用戶(hù)或他人編寫(xiě)的函數(shù).,,c,源程序在正常情況下總是從,main,函數(shù)開(kāi)始執(zhí)行,,main(),結(jié)束.,,,,,,第七章 函數(shù),熟悉c語(yǔ)言提供的豐富庫(kù)函數(shù),應(yīng)正確調(diào)用.,調(diào)用c語(yǔ)言標(biāo)準(zhǔn)庫(kù)函數(shù)要求使用include命令行.,include命令行必須以#開(kāi)頭,系統(tǒng)提供的頭文件以.h為文件的后綴,文件名用一對(duì)雙引號(hào)“”或一對(duì)尖括號(hào)括起來(lái).,標(biāo)準(zhǔn)庫(kù)函數(shù)的調(diào)用形式:出現(xiàn)在表達(dá)式中或者作為獨(dú)立的語(yǔ)句完成某種操作。,,,,第七章 函數(shù),函數(shù)的定義與返回值,函數(shù)定義的語(yǔ)法,,函數(shù)返回值的類(lèi)型名 函數(shù)名(類(lèi)型名 形式參數(shù)1,類(lèi)型名 形式參數(shù)2,……),{,說(shuō)明部分,語(yǔ)句部分,},,注意:不能在函數(shù)的內(nèi)部定義函數(shù) 。,,,,函數(shù)名和形式參數(shù)都是用戶(hù)命名的標(biāo)識(shí)符,同一程序中,函數(shù)名必須唯一,形式參數(shù)名只要在同一函數(shù)中唯一即可。,若在函數(shù)的首部省略了函數(shù)返回值的類(lèi)型名,則默認(rèn)函數(shù)返回值的類(lèi)型為,int,類(lèi)型。除了返回值類(lèi)型為,int,類(lèi)型的函數(shù)外,函數(shù)必須先定義(或說(shuō)明)后調(diào)用。若函數(shù)只是用于完成某些操作,沒(méi)有函數(shù)值返回,則必須把函數(shù)定義成,void,類(lèi)型。,第七章 函數(shù),函數(shù)的定義與返回值,如:,,double add (double a,double b),{,double s;,s=a+b;,return s;,},,,,函數(shù)體中,除形參外,用到的其他變量必須在說(shuō)明部分進(jìn)行定義,這些變量(包括形參 ),只在函數(shù)被調(diào)用時(shí)才臨時(shí)開(kāi)辟存儲(chǔ)單元,當(dāng)退出函數(shù)時(shí),這些臨時(shí)開(kāi)辟的存儲(chǔ)單元全部被釋放掉,因此這種變量只在函數(shù)體內(nèi)部起作用,與其他函數(shù)體中的變量互不相干,它們可以和其他函數(shù)中的變量同名。,第七章 函數(shù),函數(shù)的定義與返回值,如:,,double add (double a,double b),{,double s;,s=a+b;,return s;,},,,,函數(shù)的值通過(guò),return,語(yǔ)句返回,,return,語(yǔ)句的形式如下:,return,表達(dá)式; 或,return(,表達(dá)式);,return,語(yǔ)句中表達(dá)式的值就是所求的函數(shù)值,此表達(dá)式值的類(lèi)型必須與函數(shù)首部所說(shuō)明的類(lèi)型一致。若類(lèi)型不一致,則以函數(shù)值的類(lèi)型為準(zhǔn),由系統(tǒng)自動(dòng)進(jìn)行轉(zhuǎn)換。,,當(dāng)程序執(zhí)行到,return,語(yǔ)句時(shí),程序的流程就返回到調(diào)用該函數(shù)的地方,并帶回函數(shù)值。,第七章 函數(shù),函數(shù)的定義與返回值,如:,,double add (double a,double b),{,double s;,s=a+b;,return s;,},,,,在同一個(gè)函數(shù)中,可以根據(jù)需要在多處出現(xiàn),return,語(yǔ)句,在函數(shù)體的不同部位退出函數(shù),但,return,只可能執(zhí)行一次,return,語(yǔ)句中也可以不含表達(dá)式,這時(shí)必須定義函數(shù)為,void,類(lèi)型,函數(shù)體內(nèi)可以沒(méi)有,return,語(yǔ)句,這時(shí)必須定義函數(shù)為,void,類(lèi)型,程序的流程就一直執(zhí)行到函數(shù)末尾的“}”,然后返回調(diào)用函數(shù),也沒(méi)有確定的函數(shù)值帶回。,第七章 函數(shù),函數(shù)的兩種調(diào)用方式,函數(shù)的一般調(diào)用形式為:,函數(shù)名(實(shí)參表),若函數(shù)無(wú)形參,調(diào)用形式為,,函數(shù)名(),一般情況下,可用兩種方式調(diào)用函數(shù):,,當(dāng)所調(diào)用的函數(shù)用于求出某個(gè)值時(shí),函數(shù)的調(diào)用可作為表達(dá)式出現(xiàn)在允許表達(dá)式出現(xiàn)的任何地方。,當(dāng)函數(shù)僅進(jìn)行某些操作而不返回函數(shù)值,這時(shí)函數(shù)的調(diào)用可作為一條獨(dú)立的語(yǔ)句。,,,,當(dāng)實(shí)參個(gè)數(shù)多于一個(gè)時(shí),各實(shí)參之間用逗號(hào)隔開(kāi)。,實(shí)參的個(gè)數(shù)必須與所調(diào)函數(shù)中的形參相同,,類(lèi)型一一對(duì)應(yīng)匹配。,第七章 函數(shù),函數(shù)調(diào)用的語(yǔ)法要求,,調(diào)用函數(shù)時(shí),函數(shù)名必須與所調(diào)用的函數(shù)名字完全一致。,實(shí)參的個(gè)數(shù)必須與形參的個(gè)數(shù)一致。實(shí)參可以是表達(dá)式,在類(lèi)型上應(yīng)按位置與形參一一對(duì)應(yīng)。,函數(shù)必須先定義后調(diào)用(函數(shù)的返回值類(lèi)型為,int,或,char,時(shí)除外).,函數(shù)可以直接或間接的自己調(diào)用自己,稱(chēng)為遞歸調(diào)用。,,,,第七章 函數(shù),函數(shù)說(shuō)明的形式,,函數(shù)說(shuō)明的一般形式,類(lèi)型名 函數(shù)名(參數(shù)類(lèi)型1,參數(shù)類(lèi)型2,……),也可以采用下面的形式,類(lèi)型名 函數(shù)名(參數(shù)類(lèi)型1 參數(shù)1,參數(shù)類(lèi)型2 參數(shù)2,……),函數(shù)說(shuō)明可以是一條獨(dú)立的說(shuō)明語(yǔ)句,也可以與普通變量一起出現(xiàn)。,,,,第七章 函數(shù),函數(shù)說(shuō)明的形式,對(duì)函數(shù)進(jìn)行說(shuō)明能使,c,語(yǔ)言的編譯程序在編譯時(shí)進(jìn)行有效的類(lèi)型檢查。,當(dāng)在所有函數(shù)的外部、被調(diào)用之前說(shuō)明函數(shù)時(shí),在對(duì)函數(shù)進(jìn)行說(shuō)明的語(yǔ)句后面所有位置都可以對(duì)函數(shù)進(jìn)行調(diào)用。,函數(shù)說(shuō)明也可以放在調(diào)用函數(shù)內(nèi)的說(shuō)明部分。,,,,第七章 函數(shù),調(diào)用函數(shù)和被調(diào)用函數(shù)之間的數(shù)據(jù)傳遞,三種方式:,1、實(shí)參和形參之間進(jìn)行數(shù)據(jù)傳遞,2、通過(guò),return,語(yǔ)句把函數(shù)值返回。,3、通過(guò)全局變量。,在,C,語(yǔ)言中,數(shù)據(jù)只能從實(shí)參單向傳遞給形參,稱(chēng)為“按值”傳遞,也即是說(shuō),當(dāng)簡(jiǎn)單變量作為實(shí)參時(shí),用戶(hù)不可能在函數(shù)中改變對(duì)應(yīng)實(shí)參的值。,,,,第八章 地址和指針,變量的地址和指針,,a b,,1012 1013 1201 1202 1203 1204,一個(gè)變量實(shí)質(zhì)上是代表了“內(nèi)存中的某個(gè)存儲(chǔ)單元”,若在程序中定義了一個(gè)變量,,c,編譯系統(tǒng)就會(huì)根據(jù)定義中變量的類(lèi)型,為其分配一定字節(jié)數(shù)的內(nèi)存空間。,每個(gè)變量的地址是指該變量所占存儲(chǔ)單元的第一個(gè)字節(jié)的地址。,直接存?。褐苯影醋兞康牡刂反嫒∽兞恐档姆绞?。,,,,,第八章 地址和指針,變量的地址和指針,,p p a,,2002 2002 1012 1013,存放地址的變量稱(chēng)為“指針變量”。,間接存?。和ㄟ^(guò)指針變量間接存取變量值的的方式。,“指針變量,p,指向了變量,a”,就是指針變量,p,中存放了變量,a,的地址。,在,c,語(yǔ)言中,指針被廣泛運(yùn)用,它和數(shù)組、字符串、函數(shù)間數(shù)據(jù)的傳遞等有著密不可分的聯(lián)系。,,,,1012,,,1012,,,,,,,,第八章 地址和指針,指針變量的定義和指針變量的基類(lèi)型,定義指針變量的一般形式如下:,,類(lèi)型名 *指針變量名1,*指針變量名2,…..;,如,int *pi,*pj;,double *pd;,,我們稱(chēng),int、 double,是指針變量的基類(lèi)型。,,,,第八章 地址和指針,指針變量的定義和指針變量的基類(lèi)型,如:,,int **p,*s,k=20;,s=,p=,對(duì)于基類(lèi)型不同的指針變量,其內(nèi)容(地址值)增1、減1所跨越的字節(jié)數(shù)是不同的,因?yàn)橹羔樢苿?dòng)的最小單位。,,,,第八章 地址和指針,給指針變量賦地址值,通過(guò)求地址運(yùn)算符&獲得地址值,,int k=1,*p,*q;,q=,通過(guò)指針變量獲得地址值,,p=q;,通過(guò)標(biāo)準(zhǔn)函數(shù)獲得地址值,,,第八章 地址和指針,給指針變量賦“空”值,,p=NULL;,NULL,是在,stdio.h,頭文件中定義的預(yù)定義符,因此在使用,NULL,時(shí),應(yīng)該在程序的前面出現(xiàn)預(yù)定義行 #,include ,NULL,的代碼值為0,因此以上代碼等價(jià)于,,p=‘\0’;,或,p=0;,,,第八章 地址和指針,對(duì)指針變量的操作,,通過(guò)指針來(lái)引用一個(gè)存儲(chǔ)單元,當(dāng)變量中存放了一個(gè)確切的地址值時(shí),可以用“間接訪問(wèn)運(yùn)算符”*通過(guò)指針來(lái)引用該地址的存儲(chǔ)單元。,如,int *p,j=10,m;,p=,m=*p;,,,,,,第八章 地址和指針,對(duì)指針變量的操作,間接訪問(wèn)運(yùn)算符*是一個(gè)單目運(yùn)算符,必須出現(xiàn)在運(yùn)算對(duì)象的左邊,其運(yùn)算對(duì)象是存儲(chǔ)地址的指針變量或者是地址。,注意:,++和*具有相同優(yōu)先級(jí),結(jié)合性為從右到左,++*p *p+=1,(*p)++ *p+=1,*p++ p+=1,,,第八章 地址和指針,對(duì)指針變量的操作,,移動(dòng)指針:對(duì)指針變量加上或減去一個(gè)整數(shù),或通過(guò)賦值運(yùn)算,使指針變量指向相鄰的存儲(chǔ)單元。,,在對(duì)指針進(jìn)行加、減運(yùn)算時(shí),數(shù)字“1”不再代表十進(jìn)制整數(shù)“1”,而是指1個(gè)存儲(chǔ)單元長(zhǎng)度。1個(gè)單元長(zhǎng)度的字節(jié)數(shù),根據(jù)指針的基類(lèi)型而定。,,,,第八章 地址和指針,對(duì)指針變量的操作,指針比較,在關(guān)系表達(dá)式中可以對(duì)兩個(gè)指針進(jìn)行比較,,如:,,int *p,*q;,if(p<q) printf(“p points to lower memory”);,if(p==‘\0’) printf(“p points to NUll”);,,,第八章 地址和指針,函數(shù)之間地址值的傳遞,形參為指針變量時(shí)實(shí)參和形參之間的數(shù)據(jù)傳遞,通過(guò)傳送地址值在被調(diào)用函數(shù)中直接改變調(diào)用函數(shù)中的變量的值。,函數(shù)返回地址值。,,,,第九章 數(shù)組,數(shù)組,一組具有同一類(lèi)型的變量,在內(nèi)存中占有連續(xù)的存儲(chǔ)單元,,在,c,語(yǔ)言中,可以用,a[0]、a[1]、a[2]、…,這種形式來(lái)表示數(shù)組中連續(xù)的存儲(chǔ)單元,我們把它們稱(chēng)為“帶下標(biāo)的變量”或數(shù)組元素。,,,第九章 數(shù)組,一維數(shù)組的定義,一維數(shù)組:數(shù)組中每個(gè)元素只帶有一個(gè)下標(biāo),形式: 類(lèi)型名 數(shù)組名[整型常量(表達(dá)式)],如:,int a[8];,,,,,,,a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7],第九章 數(shù)組,一維數(shù)組的定義,如:,int a[8];,,,,,,,a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7],定義了一個(gè)名為,a,的一維數(shù)組。,方括號(hào)的8規(guī)定了,a,數(shù)組含有8個(gè)元素,它們是,a[0]、a[1]、……a[7],,類(lèi)型名,int,規(guī)定,a,數(shù)組中每個(gè)元素都是整型,只能存放整型數(shù)。,每個(gè)元素一個(gè)下標(biāo),,c,語(yǔ)言規(guī)定每個(gè)數(shù)組第一個(gè)元素的下標(biāo)總是0(下標(biāo)的下界),最后一個(gè)元素的下標(biāo)應(yīng)該是7(下標(biāo)的上界)。,可以用存儲(chǔ)單元的名字,a[0]、a[1]、…a[7],直接引用各存儲(chǔ)單元。,,第九章 數(shù)組,一維數(shù)組的定義,多個(gè)數(shù)組說(shuō)明符,,double w[22],v[100],u[5];,,和普通變量名一起說(shuō)明,,char c1,c2,carr[81];,,,,第九章 數(shù)組,一維數(shù)組元素的引用,引用形式 數(shù)組名[下標(biāo)表達(dá)式],如:,double x[8];,,則,x[0]、a[j]、a[m+n],都是對(duì)數(shù)組元素的合法引用。,注意:一個(gè)數(shù)組元素實(shí)質(zhì)上就是一個(gè)變量名,代表內(nèi)存中的一個(gè)存儲(chǔ)單元,一個(gè)數(shù)組占有一串連續(xù)的存儲(chǔ)單元。另外,在,c,語(yǔ)言中,一個(gè)數(shù)組不能被整體引用,例如,x,數(shù)組,不能用,x,代表,x[0],到,x[7],這8個(gè)元素。,,第九章 數(shù)組,一維數(shù)組的初始化,在定義語(yǔ)句中為所定義數(shù)組的各元素賦初值,,int a[8]={0,1,2,3,4,5,6,7};,,當(dāng)所賦值初值少于所定義數(shù)組的元素個(gè)數(shù)時(shí),將自動(dòng)給后面的元素補(bǔ)以初值0,如,int a[3]={1};,相當(dāng)于,int a[3]={1,0,0},,當(dāng)所賦初值多于所定義數(shù)組的元素個(gè)數(shù)時(shí),在編譯時(shí)將給出出錯(cuò)信息。,,第九章 數(shù)組,通過(guò)賦初值定義數(shù)組的大小,,int a[]={0,1,2,3},,相當(dāng)于,int a[4]={0,1,2,3},,數(shù)組說(shuō)明符的一對(duì)方括號(hào)中可以不指定數(shù)組的大小,可以根據(jù)賦初值來(lái)隱性定義數(shù)組元素的個(gè)數(shù)。,,,第九章 數(shù)組,一維數(shù)組的定義和數(shù)組元素的引用舉例,定義,,for (j=0;j<M;j++),a[j]=j;,/*,依次賦值*/,,for(j=0;j<M;j++),printf(“%d”,a[j]);,/*,依次輸出*/,for(j=M-1;j>=0;j--),printf(“%d”,a[j]),/*,倒序輸出*/,for(j=0;j<M;j++),printf(“%d”,a[M-1-j]),/*,倒序輸出*/,控制換行符 正序 (,j+1)%n==0,每輸出,n,個(gè)元素可以換行,逆序,j%n==0,每輸出,n,個(gè)元素可以換行,,,第九章 數(shù)組,一維數(shù)組和指針,,一維數(shù)組和數(shù)組元素的地址,,c,語(yǔ)言中,在函數(shù)體中或在函數(shù)外部定義的數(shù)組名可以認(rèn)為是一個(gè)存放地址值的指針變量名,其中的地址值是數(shù)組第一個(gè)元素的地址,也就是數(shù)組所占一串連續(xù)存儲(chǔ)單元的起始地址,定義數(shù)組時(shí)的類(lèi)型就是此指針變量的基類(lèi)型。,注意:這個(gè)指針變量的地址值不可改變,即不可給數(shù)組名重新賦值,可以認(rèn)為數(shù)組名是一個(gè)地址常量。,,第九章 數(shù)組,一維數(shù)組和指針,,一維數(shù)組和數(shù)組元素的地址,,float a[10],*p,x;,int k;,for(k=0;k<10;k++) p=a+k;,for(k=0;k<10;k++) scanf(“%d”,a+k);,,語(yǔ)句,p=,和,p=a;,都是合法的,功能相同,都使,p,指向了數(shù)組的首部地址。,,第九章 數(shù)組,一維數(shù)組和指針,,一維數(shù)組和數(shù)組元素的地址,,for(p=a,k=0;k<10;k++) {scanf(“%d”,p); p++;},,,,for(p=a,k=0;k<10;k++) scanf(“%d”,p++);,,for(p=a;p-a<10;p++) scanf(“%d”,p);,,,,第九章 數(shù)組,一維數(shù)組和指針,,通過(guò)數(shù)組的首地址引用數(shù)組元素,,int a[10];,a,是數(shù)組元素的首地址,,a,的值等于&,a[0],a+1,的值為&,a[1],a[0],等于 *&,a[0],,即*(,a+0),*a,a[1],等于 *&,a[1],,即*(,a+1),,,,,第九章 數(shù)組,通過(guò)指針引用一維數(shù)組元素,,float a[10],*p,k;,p=a;,,可以通過(guò)指針變量,p,來(lái)表示數(shù)組元素,,a[0] *p,a[1] *(p+1),,如,,for(p=a;p-a<10;p++) printf(“%4d”,*p);,,,,,第九章 數(shù)組,通過(guò)指針引用一維數(shù)組元素,,float s[10],*p,k;,p=s;,,可以用&,s[k],s+k,p+k,來(lái)表示,s[k],的地址,可以用,s[k],*(s+k),*(p+k),p[k],來(lái)表示,s[k],的值,,但注意:,s,是不變的,而,p,中的地址值是可以改變的,,,,第九章 數(shù)組,函數(shù)之間對(duì)一維數(shù)組和數(shù)組元素的引用,數(shù)組元素作實(shí)參,數(shù)組名作實(shí)參 形參形式,int arrin(int *a),int arrin(int a[]),int arrin(int a[M]),,注意:當(dāng)數(shù)組名為實(shí)參時(shí),在被調(diào)用函數(shù)中,并沒(méi)有為與數(shù)組名對(duì)應(yīng)的形參另外開(kāi)辟一串連續(xù)的存儲(chǔ)單元,而只是開(kāi)辟了一個(gè)指針變量的存儲(chǔ)單元。,,數(shù)組元素地址作為實(shí)參,,,,第九章 數(shù)組,二維數(shù)組,二維數(shù)組:數(shù)組元素帶有兩個(gè)下標(biāo)。邏輯上把二維數(shù)組看成一個(gè)具有行和列的表格。,定義形式:,,類(lèi)型名 數(shù)組名[常量表達(dá)式1][常量表達(dá)式2,],……;,如:,int a[3][4],,,,第九章 數(shù)組,二維數(shù)組,int a[3][4],的邏輯結(jié)構(gòu),,,int a[3][4],的實(shí)際存儲(chǔ)結(jié)構(gòu),,,第0列,第1列,第2列,第3列,第0行,a[0][0],a[0][1],a[0][2],a[0][3],第1行,a[1][0],a[1][1],a[1][2],a[1][3],第2行,a[2][0],a[2][1],a[2][2],a[2][3],a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3],按行存放,第九章 數(shù)組,二維數(shù)組,在,c,語(yǔ)言中,可以把一個(gè)二維數(shù)組看成一個(gè)一維數(shù)組,每個(gè)數(shù)組元素又是包含有若干個(gè)元素的一維數(shù)組。,例如:,int a[3][4],這個(gè),a,數(shù)組可以看成是由,a[0]、a[1]、a[2],三個(gè)元素組成的一維數(shù)組。其中每個(gè)元素又是由四個(gè)元素組成的一維數(shù)組。,,第九章 數(shù)組,二維數(shù)組元素的引用,數(shù)組名[下標(biāo)表達(dá)式1][下標(biāo)表達(dá)式2],二維數(shù)組的初始化,,int a[4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};,int a[4][3]={{1,2},{4,5},{7},{10}};,int a[4][3]={{1,2},{4,5}};,int a[4][3]={1,2,3,4,5};,,,,,第九章 數(shù)組,通過(guò)賦初值定義二維數(shù)組的大小,,int a[][3]={{1,2,3},{4,5},{6},{8}};,,第一維大小由行數(shù)來(lái)決定。,,int a[][3]={1,2,3,4,5};,,第一維大小由以下規(guī)則決定:,,a、,當(dāng)初值的個(gè)數(shù)能被第二維的常量表達(dá)式的值整除時(shí),所得商數(shù)就是第一維的大小。,,b、,當(dāng)初值的個(gè)數(shù)不能被第二維的常量表達(dá)式的值整除時(shí),第一維的大小=所得商數(shù)+1,,,,,第九章 數(shù)組,二維數(shù)組的定義和數(shù)組元素引用舉例,int a[M][N] ;,for(i=0;i<M;i++),,for (j=0;j<N;j++),scanf(“%d”,,,for(i=0;i<M;i++),,for (j=0;j<N;j++),printf(“%d”,