全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C語言考點(diǎn)_第1頁
全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C語言考點(diǎn)_第2頁
全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C語言考點(diǎn)_第3頁
全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C語言考點(diǎn)_第4頁
全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C語言考點(diǎn)_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C語言二級(jí)考點(diǎn)(完整版)第一章……C語言基礎(chǔ)知識(shí)第二章……順序結(jié)構(gòu)第三章……選擇結(jié)構(gòu)第四章.……循環(huán)結(jié)構(gòu)第五章……函數(shù)第六章……指針第七章……數(shù)組與指針第八章……數(shù)組與函數(shù)第九章……字符串第十章……結(jié)構(gòu)體與共用體第十一章……文件第一章C語言基礎(chǔ)知識(shí)

考點(diǎn)1.C語言程序的結(jié)構(gòu)認(rèn)識(shí)本節(jié)通過一個(gè)簡(jiǎn)單的c程序例子,介紹c語言的基本構(gòu)成、格式、以及良好的書寫風(fēng)格,使讀者對(duì)c語言有個(gè)初步認(rèn)識(shí)。例1計(jì)算兩個(gè)整數(shù)之和的c程序:#include<stdio.h>main(){

inta,b,sum;

/*定義變量a,b,sum為整型變量*/

a=20;

/*把整數(shù)20賦值給整型變量a*/

b=15;

/*把整數(shù)15賦值給整型變量b*/

sum=a+b;

/*把兩個(gè)數(shù)之和賦值給整型變量sum*/

printf("a=%d,b=%d,sum=%d\n",a,b,sum);

/*把計(jì)算結(jié)果輸出到顯示屏上*/}

重點(diǎn)說明:1、任何一個(gè)c語言程序都必須包括以下格式:main(){

}這是c語言的基本結(jié)構(gòu),任何一個(gè)程序都必須包含這個(gè)機(jī)構(gòu)。括號(hào)內(nèi)可以不寫任何內(nèi)容,那么該程序?qū)⒉粓?zhí)行任何結(jié)果。2、main()----在c語言中稱之為“主函數(shù)”,一個(gè)c程序有且僅有一個(gè)main函數(shù),任何一個(gè)c程序總是從main函數(shù)開始執(zhí)行,main函數(shù)后面的一對(duì)圓括號(hào)不能省略。3、被大括號(hào){}括起來的內(nèi)容稱為main函數(shù)的函數(shù)體,這部分內(nèi)容就是計(jì)算機(jī)要執(zhí)行的內(nèi)容。4、在{

}里面每一句話后面都有一個(gè)分號(hào)(;),在c語言中,我們把以一個(gè)分號(hào)結(jié)尾的一句話叫做一個(gè)c語言的語句,分號(hào)是語句結(jié)束的標(biāo)志。5、printf(“a=%d,b=%d,sum=%d\n”,a,b,sum);----通過執(zhí)行這條c語言系統(tǒng)提供給我們直接使用的屏幕輸出函數(shù),用戶即可看到運(yùn)行結(jié)果,本程序運(yùn)行后,將在顯示器上顯示如下結(jié)果:a=20,b=15,sum=356、#include<stdio.h>注意:(1)以#號(hào)開頭(2)不以分號(hào)結(jié)尾這一行沒有分號(hào),所以不是語句,在c語言中稱之為命令行,或者叫做“預(yù)編譯處理命令”。7、程序中以/*開頭并且以*/結(jié)尾的部分表示程序的注釋部分,注釋可以添加在程序的任何位置,為了提高程序的可讀性而添加,但計(jì)算機(jī)在執(zhí)行主函數(shù)內(nèi)容時(shí)完全忽略注釋部分,換而言之就是計(jì)算機(jī)當(dāng)做注釋部分不存在于主函數(shù)中。

考點(diǎn)2.C程序的生成過程C程序是先由源文件經(jīng)編譯生成目標(biāo)文件,然后經(jīng)過連接生成可執(zhí)行文件,如圖所示。編譯過程源程序的擴(kuò)展名為.c,目標(biāo)程序的擴(kuò)展名為.obj

,可執(zhí)行程序的擴(kuò)展名為.exe。

考點(diǎn)3.標(biāo)識(shí)符在編寫程序時(shí),必須為函數(shù)、變量等命名,這個(gè)名字稱為標(biāo)識(shí)符。C語言中標(biāo)識(shí)符的命名規(guī)則如下:1、標(biāo)識(shí)符只能由字母、數(shù)字、下劃線組成;2、標(biāo)識(shí)符的第一個(gè)字母必須是字母和下劃線;3、標(biāo)識(shí)符區(qū)分大小寫字母,如If和if是兩個(gè)完全不同的標(biāo)識(shí)符。合法標(biāo)識(shí)符如下:A6,b_3,_mn非法的標(biāo)識(shí)符如下:ab#12,8m,tr3:4,yesno

標(biāo)識(shí)符不能與程序中具有特殊意義的關(guān)鍵字相同,不能與用戶編制的函數(shù)名、C語言庫(kù)函數(shù)相同,在程序中各種標(biāo)識(shí)符盡量不要重復(fù),以便區(qū)分。選擇變量名和其他標(biāo)識(shí)符時(shí),應(yīng)注意做到“見名知義”。標(biāo)識(shí)符分為如下三類:1、關(guān)鍵字關(guān)鍵字是具有特定含義的,專門用來說明c語言特定成分的一類標(biāo)識(shí)符,不能用作用戶的標(biāo)識(shí)符。2、預(yù)定義標(biāo)識(shí)符預(yù)定義標(biāo)識(shí)符在c語言中也有特定的含義,但可以用作用戶標(biāo)識(shí)符,預(yù)定義標(biāo)識(shí)符分為兩類:(1)、庫(kù)函數(shù)名字,比如(printf,scanf,sin,isdigit等)(2)、編譯處理命令名,比如(define,include)3、用戶標(biāo)識(shí)符用戶根據(jù)需要自己定義的標(biāo)識(shí)符稱為用戶標(biāo)識(shí)符。無論如何自定義標(biāo)識(shí)符,都必須符合標(biāo)識(shí)符的三條命名規(guī)則。

考點(diǎn)4.常量在程序運(yùn)行中,其值不能被改變的量稱為常量。常量有5種類型:整型常量、實(shí)型常量、字符常量、字符串常量和符號(hào)常量。4.1數(shù)值轉(zhuǎn)換數(shù)字的四種表現(xiàn)形式:l

二進(jìn)制:所有數(shù)字由0,1構(gòu)成,逢二進(jìn)一,二進(jìn)制數(shù)中不會(huì)出現(xiàn)2.。例:110101

l

八進(jìn)制:以數(shù)字0(注意不是以字母O,o)開頭,所有數(shù)字由0~7構(gòu)成,逢八進(jìn)一,八進(jìn)制數(shù)中不會(huì)出現(xiàn)8。例:0112,0123,077等l

十進(jìn)制:所有數(shù)字由0~9構(gòu)成,逢十進(jìn)一,十進(jìn)制數(shù)中不會(huì)出現(xiàn)10。例:0,12,-15等l

十六進(jìn)制:以0x或者0X(數(shù)字0加字母x)開頭,所有數(shù)字由0~9,A~F(或者a~f)構(gòu)成,逢十六進(jìn)一(其中A、B、C、D、E、F分別代表10、11、12、13、14、15)例:0x4A

0X14c7等在計(jì)算機(jī)內(nèi)部,數(shù)字均以二進(jìn)制形式表示和存放,用戶輸入的普通十進(jìn)制數(shù)字都要被計(jì)算機(jī)轉(zhuǎn)換成二進(jìn)制才能在計(jì)算機(jī)內(nèi)部存儲(chǔ),同樣計(jì)算機(jī)的運(yùn)算結(jié)果也為二進(jìn)制,一般要將其轉(zhuǎn)換成十進(jìn)制數(shù)再輸出給用戶閱讀,這種轉(zhuǎn)換通常由計(jì)算機(jī)自動(dòng)實(shí)現(xiàn)。(1)將十進(jìn)制轉(zhuǎn)換二進(jìn)制、八進(jìn)制和十六進(jìn)制除法:將十進(jìn)制數(shù)除以2,記錄余數(shù),得到的商繼續(xù)除以2,直到商為0,然后將各次相處所得的余數(shù)從后往前逆序排列,所得余數(shù)數(shù)字序列就是該十進(jìn)制數(shù)對(duì)應(yīng)的二進(jìn)制數(shù)。八進(jìn)制和十六進(jìn)制轉(zhuǎn)換方法同上。例:十進(jìn)制數(shù)13轉(zhuǎn)換成二進(jìn)制數(shù)的值為1101,轉(zhuǎn)換八進(jìn)制為015,轉(zhuǎn)換成十六進(jìn)制為D.(2)將二進(jìn)制、八進(jìn)制和十六進(jìn)制轉(zhuǎn)換成十進(jìn)制乘積求和:將二進(jìn)制的每一位從低位到高位(右邊為低位,左邊為高位)分別乘以20,21,22。。。。,然后將這些積求和。例如:(1101)2=(13)10

(317)8=(207)10

(23E)16=(574)10(3)二進(jìn)制與八進(jìn)制、十六進(jìn)制數(shù)之間的相互轉(zhuǎn)換①二進(jìn)制轉(zhuǎn)八進(jìn)制:從右往左每三位一組轉(zhuǎn)換成十進(jìn)制數(shù),將所得數(shù)據(jù)組合就是對(duì)應(yīng)的八進(jìn)制數(shù)(注意:高位不足三位補(bǔ)零)。例:(010110111)2=(267)8②二進(jìn)制轉(zhuǎn)十六進(jìn)制:從右往左每四位一組轉(zhuǎn)換成十進(jìn)制數(shù),將所得數(shù)據(jù)組合就是對(duì)應(yīng)的十六進(jìn)制數(shù)(注意:高位不足四位補(bǔ)零)。例:(01011011)2=(5B)16③八進(jìn)制轉(zhuǎn)化二進(jìn)制:每一位數(shù)字轉(zhuǎn)換為三位二進(jìn)制數(shù)字例:(13)8=(001011)2=(1011)2(注意:去掉前面的兩個(gè)00,因?yàn)?在高位沒有意義)④十六進(jìn)制轉(zhuǎn)化二進(jìn)制:每一位數(shù)字轉(zhuǎn)換為四位二進(jìn)制數(shù)字例:(E3)16=(11100011)2

4.2整型常量整型常量有3種形式:十進(jìn)制整型常量、八進(jìn)制整型常量和十六進(jìn)制整型常量。(注意:c語言中沒有直接表示二進(jìn)制的整型常量,在c語言源程序中不會(huì)出現(xiàn)二進(jìn)制。)書寫方式如下:十進(jìn)制整型常量:123,0,-24,85L(長(zhǎng)整型常量)等八進(jìn)制整型常量:051,-026,0773等十六進(jìn)制整型常量:0x55,0x1101,0x,0x5AC0,-0xFF。其中L為長(zhǎng)整型。

4.3實(shí)型常量實(shí)型常量有兩種表示形式:小數(shù)形式和指數(shù)形式。小數(shù)形式:5.4

0.074

-23.0指數(shù)形式:5.4e04.3e-3-3.3e4(1)小數(shù)部分為0的實(shí)型常量,可以寫為453.0或453。(2)用小數(shù)表示時(shí),小數(shù)點(diǎn)的兩邊必須有數(shù),不能寫成“.453“和“453.“,而應(yīng)該寫成“0.453“和“453.0“。(3)用指數(shù)寫法時(shí),e前必須有數(shù)字,e后面的指數(shù)必須為整數(shù)(注意:整數(shù)階碼可以是正數(shù),負(fù)數(shù),也可以是八進(jìn)制數(shù)、十六進(jìn)制數(shù),但必須為整數(shù))。

4.4字符常量字符常量的標(biāo)志是一對(duì)單引號(hào)‘’,c語言中的字符常量有兩類:(1)由一對(duì)單引號(hào)括起來的一個(gè)字符,如‘a(chǎn)’,‘r’,‘#’。注意:′a′和′A′是兩個(gè)不同的字符常量。(2)由一對(duì)單引號(hào)括起來,以反斜杠\開頭,后跟若干數(shù)字或者字母,比如‘\n’,其中“\“是轉(zhuǎn)義的意思,后面跟不同的字符表示不同的意思,這類字符常量叫轉(zhuǎn)義字符。具體如圖所示。?

4.5字符串常量C語言中,以雙引號(hào)括起來的,由若干個(gè)字符組成的序列即為字符串常量。例:“nihao”

“happy”等等。4.6符號(hào)常量符號(hào)常量是由宏定義“#define“定義的常量,在C程序中可用標(biāo)識(shí)符代表一個(gè)常量。例:計(jì)算圓的面積的c程序。#include<stdio.h>#define

PI

3.14159main(){

float

r,s;

r=12.5;

s=PI*r*r;

printf("s=%f",s);}

說明:#define是宏定義,有關(guān)宏定義在以后的章節(jié)中詳細(xì)說明,此程序中所有出現(xiàn)PI的地方都代表3.14159,同時(shí)PI稱為符號(hào)常量。習(xí)慣上我們用大寫字母來表示符號(hào)常量,小寫字母表示變量,這樣比較容易區(qū)別。

考點(diǎn)5.變量變量就是其值可以改變的量。變量要有變量名,在內(nèi)存中占據(jù)一定的存儲(chǔ)單元,存儲(chǔ)單元里存放的是該變量的值。不同類型的變量其存儲(chǔ)單元的大小不同,變量在使用前必須定義。5.1整型變量整型變量分為4種:基本型(int)、短整型(shortint或short)、長(zhǎng)整型(longint或long)和無符號(hào)型(unsignedint,unsignedshort,unsignedlong)。不同的編譯系統(tǒng)對(duì)上述四種整型數(shù)據(jù)所占用的位數(shù)和數(shù)值范圍有不同的規(guī)定。?

說明:?jiǎn)卧~signed來說明“有符號(hào)”(即有正負(fù)數(shù)之分),不寫signed也隱含說明為有符號(hào),unsigned用來說明“無符號(hào)”(只表示正數(shù))。

5.2實(shí)型變量C語言中,實(shí)型變量分為單精度類型(float)和雙精度類型(double)兩種。如:float

a,b;double

m;在vc中,float型數(shù)據(jù)在內(nèi)存中占4個(gè)字節(jié)(32位),double型數(shù)據(jù)占8個(gè)字節(jié)。單精度實(shí)數(shù)提供7位有效數(shù)字,雙精度實(shí)數(shù)提供15~16位有效數(shù)字。實(shí)型常量不分float型和double型,一個(gè)實(shí)型常量可以賦給一個(gè)float型或double型變量,但變量根據(jù)其類型截取實(shí)型常量中相應(yīng)的有效數(shù)字。注意:實(shí)型變量只能存放實(shí)型值,不能用整型變量存放實(shí)型值,也不能用實(shí)型變量存放整型值。

5.3字符變量字符變量用來存放字符常量,定義形式:char

變量名;其中關(guān)鍵字char定義字符型數(shù)據(jù)類型,占用一個(gè)字節(jié)的存儲(chǔ)單元。例:char

cr1,cr2;cr1=‘A’,cr2=‘B’;將一個(gè)字符賦給一個(gè)字符變量時(shí),并不是將該字符本身存儲(chǔ)到內(nèi)存中,而是將該字符對(duì)應(yīng)的ASCII碼存儲(chǔ)到內(nèi)存單元中。例如,字符′A′的ASCII碼為65,在內(nèi)存中的存放形式如下:01000001由于在內(nèi)存中字符以ASCII碼存放,它的存儲(chǔ)形式和整數(shù)的存儲(chǔ)形式類似,所以C語言中字符型數(shù)據(jù)與整型數(shù)據(jù)之間可以通用,一個(gè)字符能用字符的形式輸出,也能用整數(shù)的形式輸出,字符數(shù)據(jù)也能進(jìn)行算術(shù)運(yùn)算,此時(shí)相當(dāng)于對(duì)它們的ASCII碼進(jìn)行運(yùn)算。

考點(diǎn)6.類型的自動(dòng)轉(zhuǎn)換和強(qiáng)制轉(zhuǎn)換當(dāng)同一表達(dá)式中各數(shù)據(jù)的類型不同時(shí),編譯程序會(huì)自動(dòng)把它們轉(zhuǎn)變成同一類型后再進(jìn)行計(jì)算。轉(zhuǎn)換優(yōu)先級(jí)為:char<int<float<double即左邊級(jí)別“低“的類型向右邊轉(zhuǎn)換。具體地說,若在表達(dá)式中優(yōu)先級(jí)最高的數(shù)據(jù)是double型,則此表達(dá)式中的其他數(shù)據(jù)均被轉(zhuǎn)換成double型,且計(jì)算結(jié)果也是double型;若在表達(dá)式中優(yōu)先級(jí)最高的數(shù)據(jù)是float型,則此表達(dá)式中的其他數(shù)據(jù)均被轉(zhuǎn)換成float型,且計(jì)算結(jié)果也是float型。在做賦值運(yùn)算時(shí),若賦值號(hào)左右兩邊的類型不同,則賦值號(hào)右邊的類型向左邊的類型轉(zhuǎn)換;當(dāng)右邊的類型高于左邊的類型時(shí),則在轉(zhuǎn)換時(shí)對(duì)右邊的數(shù)據(jù)進(jìn)行截取。除自動(dòng)轉(zhuǎn)換外,還有強(qiáng)制轉(zhuǎn)換,表示形式是:(類型)(表達(dá)式);例:(int)(a+b)討論:當(dāng)a值賦值為3.4,b值賦值為2.7,(int)(a+b)和(int)a+b的值分別為多少?

考點(diǎn)7.C運(yùn)算符認(rèn)識(shí)C語言的運(yùn)算符范圍很廣,可分為以下幾類:1、算術(shù)運(yùn)算符:用于各類數(shù)值運(yùn)算。包括加(+)、減(-)、乘(*)、除(/)、求余(%)、自增(++)、自減(--)共七種。2、賦值運(yùn)算符:用于賦值運(yùn)算,分為簡(jiǎn)單賦值(=)、復(fù)合算術(shù)賦值(+=,-=,*=,/=,%=)和復(fù)合位運(yùn)算賦值(&=,|=,^=,>>=,<<=)三類共十一種。3、逗號(hào)運(yùn)算符:用于把若干表達(dá)式組合成一個(gè)表達(dá)式(,)。4、關(guān)系運(yùn)算符:用于比較運(yùn)算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)六種。5、邏輯運(yùn)算符:用于邏輯運(yùn)算。包括與(&&)、或(||)、非(!)三種。6、條件運(yùn)算符:這是一個(gè)三目運(yùn)算符,用于條件求值(?:)。7、位操作運(yùn)算符:參與運(yùn)算的量,按二進(jìn)制位進(jìn)行運(yùn)算。包括位與(&)、位或(|)、位非(~)、位異或(^)、左移(<<)、右移(>>)六種。8、指針運(yùn)算符:用于取內(nèi)容(*)和取地址(&)二種運(yùn)算。9.、求字節(jié)數(shù)運(yùn)算符:用于計(jì)算數(shù)據(jù)類型所占的字節(jié)數(shù)(sizeof)。10、特殊運(yùn)算符:有括號(hào)(),下標(biāo)[],成員(→,.)等幾種。另外,按參與運(yùn)算的對(duì)象個(gè)數(shù),C語言運(yùn)算符可分為:?jiǎn)文窟\(yùn)算符(如!)、雙目運(yùn)算符(如+,-)和三目運(yùn)算符(如?

:)。

考點(diǎn)8.算術(shù)運(yùn)算符和算術(shù)表達(dá)式8.1基本的算術(shù)運(yùn)算符(1)+(加法運(yùn)算符或正值運(yùn)算符,如2+5)。(2)-(減法運(yùn)算符或負(fù)值運(yùn)算符,如4-2)。(3)*(乘法運(yùn)算符,如3*8)。(4)/(除法運(yùn)算符,如11/5)。/的運(yùn)算分為兩種情況:a、“除”的左右兩邊都為整數(shù)時(shí),所得結(jié)果必然是整數(shù)(注意:僅取整數(shù)部分,不是四舍五入)比如:5/2的值為2,不是2.5,1/2的值為0。b、“除”的左右兩邊至少有一個(gè)是實(shí)型數(shù)據(jù)(即小數(shù))時(shí),所得結(jié)果為實(shí)型數(shù)據(jù)。比如:5/2.0的值為2.5,7.0/2.0的值為3.5.(5)%(模運(yùn)算符或稱求余運(yùn)算符,%兩側(cè)均應(yīng)為整型數(shù)據(jù),如9%7的值為2)。需要說明的是:當(dāng)運(yùn)算對(duì)象為負(fù)數(shù)時(shí),所得結(jié)果隨編譯器不同而不同,在vc中,結(jié)果的符號(hào)與被除數(shù)相同,比如:13%-2值為1,而-15%2值為-1.

8.2算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級(jí)與結(jié)合性算術(shù)表達(dá)式是用算術(shù)運(yùn)算符和括號(hào)將運(yùn)算量(也稱操作數(shù))連接起來的、符合C語言語法規(guī)則的表達(dá)式。運(yùn)算對(duì)象包括函數(shù)、常量和變量等。在計(jì)算機(jī)語言中,算術(shù)表達(dá)式的求值規(guī)律與數(shù)學(xué)中的四則運(yùn)算的規(guī)律類似,其運(yùn)算規(guī)則和要求如下。(1)在算術(shù)表達(dá)式中,可使用多層圓括號(hào),但括號(hào)必須配對(duì)。運(yùn)算時(shí)從內(nèi)層圓括號(hào)開始,由內(nèi)向外依次計(jì)算各表達(dá)式的值。(2)在算術(shù)表達(dá)式中,對(duì)于不同優(yōu)先級(jí)的運(yùn)算符,可按運(yùn)算符的優(yōu)先級(jí)由高到低進(jìn)行運(yùn)算,若表達(dá)式中運(yùn)算符的優(yōu)先級(jí)相同,則按運(yùn)算符的結(jié)合方向進(jìn)行運(yùn)算。(3)如果一個(gè)運(yùn)算符兩側(cè)的操作數(shù)類型不同,則先利用自動(dòng)轉(zhuǎn)換或強(qiáng)制類型轉(zhuǎn)換,使兩者具有相同類型,然后進(jìn)行運(yùn)算。8.3自增自減運(yùn)算符作用:使變量的值增1或減1。如:++i,--i(在使用i之前,先使i的值加1、減1)。i++,i--(在使用i之后,使i的值加1、減1)。(1)只有變量才能用自增運(yùn)算符(++)和自減運(yùn)算符(--),而常量或表達(dá)式不能用,如10++或(x+y)++都是不合法的。(2)++和--的結(jié)合方向是“自右向左“,如-i++,i的左邊是負(fù)號(hào)運(yùn)算符,右邊是自增運(yùn)算符,負(fù)號(hào)運(yùn)算和自增運(yùn)算都是“自右向左“結(jié)合的,相當(dāng)于-(i++)。在循環(huán)語句中常用到自增(減)運(yùn)算符,在指針中也常用到該運(yùn)算符,考生要弄清楚“i++”和“++i”及“i--”和“--i”的區(qū)別,特別弄清楚表達(dá)式的值和變量的值。例:變量n的初始值為2,則例:有以下程序#include<stdio.h>main(

)

{

intm=12,n=34;

printf("%d

%d

",m++,++n);

/*輸出表達(dá)式m++和表達(dá)式++n的值*/

printf("%d

%d

",++m,n++);

/*輸出表達(dá)式++m和表達(dá)式n++的值*/

printf("%d

%d

",m,n);

/*輸出m、n的值*/}程序運(yùn)行后的輸出結(jié)果是_____A.12

35

13

35

14

36

B.12

35

14

35

14

36C.12

35

14

36

14

36

D.12

35

14

35

14

35解析:自增自減運(yùn)算需要注意區(qū)分表達(dá)式的值和變量的值,表達(dá)式運(yùn)算后,變量會(huì)自增自減運(yùn)算,表達(dá)式和變量變化如下:

考點(diǎn)9.賦值運(yùn)算符與賦值表達(dá)式9.1賦值運(yùn)算符與賦值表達(dá)式賦值符號(hào)“=“就是賦值運(yùn)算符,作用是將一個(gè)數(shù)據(jù)賦給一個(gè)變量或?qū)⒁粋€(gè)變量的值賦給另一個(gè)變量,由賦值運(yùn)算符組成的表達(dá)式稱為賦值表達(dá)式。一般形式為:變量名=表達(dá)式在程序中可以多次給一個(gè)變量賦值,每賦一次值,與它相應(yīng)的存儲(chǔ)單元中的數(shù)據(jù)就被更新一次,內(nèi)存中當(dāng)前的數(shù)據(jù)就是最后一次所賦值的那個(gè)數(shù)據(jù)。例:a=12;

此表達(dá)式讀作“將12的值賦值給變量a”。說明:a、如果賦值號(hào)兩邊的運(yùn)算對(duì)象類型不一致,系統(tǒng)會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換,轉(zhuǎn)換的規(guī)則:將賦值號(hào)右邊表達(dá)式的值的類型轉(zhuǎn)換成賦值號(hào)左邊變量的類型,例:int

y=3.5;在變量y中最終存儲(chǔ)的是整數(shù)3。b、可以將復(fù)制表達(dá)式的值再賦值給變量,形成連續(xù)賦值。例如:x=y=25是一個(gè)連續(xù)賦值表達(dá)式,x=y=25等價(jià)于x=(y=25),所以表達(dá)式x=y=25最終的值為25。

9.2復(fù)合的賦值運(yùn)算符在賦值運(yùn)算符之前加上其他運(yùn)算符可以構(gòu)成復(fù)合賦值運(yùn)算符。其中與算術(shù)運(yùn)算有關(guān)的復(fù)合運(yùn)算符是:+=,-=,*=,/=,%=。兩個(gè)符號(hào)之間不可以有空格,復(fù)合賦值運(yùn)算符的優(yōu)先級(jí)與賦值運(yùn)算符的相同。表達(dá)式n+=1等價(jià)于n=n+1,作用是取變量n中的值增1再賦給變量n,其他復(fù)合的賦值運(yùn)算符的運(yùn)算規(guī)則依次類推。如求表達(dá)a+=a-=a*a的值,其中a的初值為12。步驟:(1)先進(jìn)行“a-=a*a“運(yùn)算,相當(dāng)于a=a-a*a=12-144=-132。

(2)再進(jìn)行“a+=-132“運(yùn)算,相當(dāng)于a=a+(-132)=-132-132=-264。

考點(diǎn)10.逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式在c語言中,逗號(hào)除了作為分隔符,還可以用作一種運(yùn)算符----逗號(hào)運(yùn)算符,用逗號(hào)運(yùn)算符將幾個(gè)表達(dá)式連接起來,例如a=b+c,a=b*c等稱為逗號(hào)表達(dá)式。一般形式為:表達(dá)式1,表達(dá)式2,表達(dá)式3,…,表達(dá)式n例:x=2,y=3,z=4逗號(hào)表達(dá)式具有從左至右的結(jié)合性,即先求解表達(dá)式1,然后依次求解表達(dá)式2,直到表達(dá)式n的值。表達(dá)式n的值就是整個(gè)逗號(hào)表達(dá)式的值。上述的逗號(hào)表達(dá)式的值就是表達(dá)式z=4的值4.需要注意的是,逗號(hào)運(yùn)算符是所有運(yùn)算符中級(jí)別最低的。例:有如下程序段:main(){inta=2,b=4,c=6,x,y;y=(x=a+b),(b+c);printf("y=%d,x=%d",y,x);}程序顯示結(jié)果為:y=6,x=6討論:將y=(x=a+b),(b+c);改為y=((x=a+b),b+c)的程序結(jié)果?

考點(diǎn)11.關(guān)系運(yùn)算符和關(guān)系表達(dá)式11.1C語言中的邏輯值C語言中的邏輯值只有兩個(gè):真(true)和假(flase)。用非零代表真,用零代表假。因此,對(duì)于任意一個(gè)表達(dá)式,如果它的值為零,就代表一個(gè)假值,如果它的值為非零,就代表一個(gè)真值。只要值不是零,不管是正數(shù),負(fù)數(shù),整數(shù),實(shí)數(shù),都代表一個(gè)真值。例如-5的邏輯值為真。

11.2關(guān)系運(yùn)算符及其優(yōu)先次序C語言提供了6種關(guān)系運(yùn)算符,見表由兩個(gè)字符組成的運(yùn)算符之間不可以加空格,關(guān)系運(yùn)算符都是雙目運(yùn)算符。(1)結(jié)合性:自左向右。(2)優(yōu)先次序:前4種關(guān)系運(yùn)算符(<,<=,>=,>)的優(yōu)先級(jí)別相同,后兩種(==,!=)優(yōu)先級(jí)相同,且前4種優(yōu)先級(jí)高于后兩種;關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符,高于賦值運(yùn)算符。11.3關(guān)系表達(dá)式由關(guān)系運(yùn)算符連接而成的表達(dá)式稱為關(guān)系表達(dá)式。例如:a>b,(a=7)>(b=10)等都是合法的關(guān)系表達(dá)式。關(guān)系表達(dá)式的結(jié)果有兩個(gè):0和1,。其中0表示假,1表示真。如果關(guān)系表達(dá)式成立,則值為真,如果關(guān)系表達(dá)式不成立,則值為假。例:變量a的值為5,b的值為6,那么關(guān)系表達(dá)式a>b的值為假,即為0.而關(guān)系表達(dá)式(a=13)>(b=10)的值為真,即為1。當(dāng)關(guān)系運(yùn)算符兩邊值的類型不一致時(shí),若一邊是整型,一邊是實(shí)型,系統(tǒng)將自動(dòng)把整型數(shù)轉(zhuǎn)化為實(shí)型數(shù),然后再進(jìn)行比較。

考點(diǎn)12.邏輯運(yùn)算符和邏輯表達(dá)式12.1邏輯運(yùn)算符及其優(yōu)先級(jí)C語言提供了3種邏輯運(yùn)算符,如下表。說明:“&&”和“||”是雙目運(yùn)算符,要求要有兩個(gè)操作數(shù),而“!”是單目運(yùn)算符,只要求有一個(gè)操作數(shù)即可。以上邏輯運(yùn)算符的優(yōu)先級(jí)是:“!”(邏輯非)級(jí)別最高,其次是“&&”(邏輯與),“||”(邏輯或)級(jí)別最低,邏輯運(yùn)算符中的“&&”和“||”低于關(guān)系運(yùn)算符,“!”高于算術(shù)運(yùn)算符。即:“!”(邏輯非)>算術(shù)運(yùn)算符>關(guān)系運(yùn)算符>“&&”>“||”>賦值運(yùn)算符>逗號(hào)運(yùn)算符。12.2邏輯表達(dá)式“&&”和“||”的運(yùn)算對(duì)象有兩個(gè),故它們都是雙目運(yùn)算符,而!的運(yùn)算對(duì)象只有一個(gè),因此它是單目運(yùn)算符。邏輯運(yùn)算舉例如下:(1)a&&b:當(dāng)&&兩邊都為“真”時(shí),表達(dá)式a&&b的值才是真。值得注意的是:在數(shù)學(xué)中,關(guān)系式0<x<10是可以使用的,表示x的值應(yīng)在大于0且小于10的范圍內(nèi),但在C語言中卻不能用0<x<10這樣一個(gè)關(guān)系表達(dá)式來表示上述的邏輯關(guān)系,即關(guān)系運(yùn)算符不能連用,但可以借助邏輯運(yùn)算符來輔助運(yùn)算,正確的表示方法是0<x&&x<10。(2)a||b:當(dāng)||兩邊有一個(gè)為“真”時(shí),表達(dá)式a||b的值就是真。(3)!a:

表示取反,如果a為真,則!A為假,反之亦然。例如!-5的值就為0.在C語言中,由&&或||組成的邏輯表達(dá)式,在某些特定情況下會(huì)產(chǎn)生“短路“現(xiàn)象。(1)x&&y&&z,只有當(dāng)x為真(非0)時(shí),才需要判別y的值;只有x和y都為真時(shí),才需要去判別z的值;只要x為假就不必判別y和z,整個(gè)表達(dá)式的值為0??谠E:“一假必假”。

例:(!5==1)&&(++i==0)

(!5==1)表達(dá)式的值為0,所以計(jì)算機(jī)運(yùn)行中就跳過(++i==0)此表達(dá)式,(!5==1)&&(++i==0)表達(dá)式的值為0.(2)x||y||z,只要x的值為真(非零),就不必判別y和z的值,整個(gè)表達(dá)式的值為1,只有x的值為假,才需要判別y的值,只有x和y的值同時(shí)為假才需要判別z的值,口訣:“一真必真”。

考點(diǎn)13.位運(yùn)算13.1位運(yùn)算符在計(jì)算機(jī)中,數(shù)據(jù)都是以二進(jìn)制數(shù)形式存放的,位運(yùn)算就是指對(duì)存儲(chǔ)單元中二進(jìn)制位的運(yùn)算。C語言提供6種位運(yùn)算符。

說明:(1)位運(yùn)算中除“~“以外,均為雙目運(yùn)算符,要求兩側(cè)各有一個(gè)運(yùn)算量。(2)運(yùn)算量只能是整型或字符型數(shù)據(jù),不能為實(shí)型數(shù)據(jù)。

13.2位運(yùn)算位運(yùn)算符&

|~<<

>>

∧按優(yōu)先級(jí)從高到低排列的順序是:位運(yùn)算符中求反運(yùn)算“~“優(yōu)先級(jí)最高,而左移和右移相同,居于第二,接下來的順序是按位與“&“、按位異或“∧“和按位或“|“。順序?yàn)閪

<<

>>

&

|

。例1左移運(yùn)算符“<<”是雙目運(yùn)算符。其功能把“<<”左邊的運(yùn)算數(shù)的各二進(jìn)位全部左移若干位,由“<<”右邊的數(shù)指定移動(dòng)的位數(shù),高位丟棄,低位補(bǔ)0。例如:a<<4指把a(bǔ)的各二進(jìn)位向左移動(dòng)4位。如a=00000011(十進(jìn)制3),左移4位后為00110000(十進(jìn)制48)。例2右移運(yùn)算符“>>”是雙目運(yùn)算符。其功能是把“>>”左邊的運(yùn)算數(shù)的各二進(jìn)位全部右移若干位,“>>”右邊的數(shù)指定移動(dòng)的位數(shù)。例如:設(shè)

a=15,a>>2表示把000001111右移為00000011(十進(jìn)制3)。應(yīng)該說明的是,對(duì)于有符號(hào)數(shù),在右移時(shí),符號(hào)位將隨同移動(dòng)。當(dāng)為正數(shù)時(shí),最高位補(bǔ)0,而為負(fù)數(shù)時(shí),符號(hào)位為1,最高位是補(bǔ)0或是補(bǔ)1取決于編譯系統(tǒng)的規(guī)定。例3設(shè)二進(jìn)制數(shù)a是00101101,若通過異或運(yùn)算a∧b使a的高4位取反,低4位不變,則二進(jìn)制數(shù)b是。解析:異或運(yùn)算常用來使特定位翻轉(zhuǎn),只要使需翻轉(zhuǎn)的位與1進(jìn)行異或操作就可以了,因?yàn)樵瓟?shù)中值為1的位與1進(jìn)行異或運(yùn)算得0,原數(shù)中值為0的位與1進(jìn)行異或運(yùn)算結(jié)果得1。而與0進(jìn)行異或的位將保持原值。異或運(yùn)算還可用來交換兩個(gè)值,不用臨時(shí)變量。如inta=3,b=4;,想將a與b的值互換,可用如下語句實(shí)現(xiàn):a=a∧b;b=b∧a;a=a∧b;所以本題的答案為:11110000。

第二章順序結(jié)構(gòu)

考點(diǎn)1.C語句概述C語言的語句用來向計(jì)算機(jī)系統(tǒng)發(fā)出指令,一個(gè)實(shí)際的源程序通常包含若干語句,這些語句用來完成一定的操作任務(wù)。C程序中的語句,按照它們?cè)诔绦蛑谐霈F(xiàn)的順序依次執(zhí)行,由這樣的語句構(gòu)成的程序結(jié)構(gòu)稱為順序結(jié)構(gòu)。1.1其他類型語句函數(shù)調(diào)用語句(由函數(shù)調(diào)用加一個(gè)分號(hào)構(gòu)成),如scanf(“%d”,&a);。表達(dá)式語句(由一個(gè)表達(dá)式;構(gòu)成一個(gè)語句),如a=b;。1.2空語句C語言中所有語句都必須由一個(gè)分號(hào)(;)結(jié)束,如果只有一個(gè)分號(hào)如main(){;},這個(gè)分號(hào)也是一條語句,稱為空語句,程序執(zhí)行時(shí)不產(chǎn)生任何動(dòng)作,但表示存在著一條語句。1.3復(fù)合語句在C語言中花括號(hào)“{}”不僅可以用做函數(shù)體的開始和結(jié)束標(biāo)志,同時(shí)也常用做復(fù)合語句的開始和結(jié)束標(biāo)志,復(fù)合語句也可稱為“語句體”。在C語言中,任何表達(dá)式都可以加上分號(hào)構(gòu)成語句,如“i++;”。隨意加“;”會(huì)導(dǎo)致很多邏輯上的錯(cuò)誤,要慎用,不要亂用。復(fù)合語句中最后一個(gè)語句中最后的分號(hào)不能忽略不寫。

考點(diǎn)2.賦值語句前面已經(jīng)介紹賦值語句是由賦值表達(dá)式和末尾的分號(hào)(;)構(gòu)成的。這里要提醒讀者注意:“=”與“==”是兩個(gè)不同的運(yùn)算符,前者才是賦值運(yùn)算符,而后者是關(guān)系運(yùn)算符,用來進(jìn)行條件判斷,不能把二者混為一談。如“i=2;”,功能是把數(shù)值2放到變量i中,而i==2是判斷變量i的值是否為2?!癹=j+1;”在程序執(zhí)行時(shí),首先取出j中的值,執(zhí)行加數(shù)值1的操作后再把新值放回到j(luò)中。

考點(diǎn)3.輸入輸出概念及其實(shí)現(xiàn)(1)數(shù)據(jù)從計(jì)算機(jī)內(nèi)部向外部輸出設(shè)備(如顯示器、打印機(jī)等)輸送的操作稱為“輸出”,數(shù)據(jù)從計(jì)算機(jī)外部向輸入設(shè)備(如鍵盤、鼠標(biāo)、掃描儀等)送入的操作稱為“輸入”。(2)C語言本身不提供輸入輸出語句,可以通過函數(shù)來實(shí)現(xiàn)輸入和輸出的操作。(3)在使用C語言庫(kù)函數(shù)時(shí),首先要用預(yù)編譯命令“#include”將有關(guān)的“頭文件”包含到用戶源文件中。這里需要用到編譯預(yù)處理命令,在后面的章節(jié)中我們會(huì)詳細(xì)講到。3.1單個(gè)字符的輸入輸出3.1.1字符輸出函數(shù)putchar()putchar()函數(shù)的作用是向終端輸出一個(gè)字符。如:putchar(a);它輸出字符變量a的值,a也可以是字符型變量或整型變量。若a是整型變量,則輸出的是ASCII碼值為該變量值的那個(gè)字符。3.1.2字符輸入函數(shù)getchar()getchar()函數(shù)的作用是從終端輸入一個(gè)字符,getchar()函數(shù)沒有參數(shù),函數(shù)值就是從輸入設(shè)備得到的字符。getchar()只能接收一個(gè)字符,getchar()函數(shù)得到的字符可以賦給一個(gè)字符變量或整型變量,也可以不賦給任何變量,作為表達(dá)式的一部分。如果在一個(gè)函數(shù)中(今為main()函數(shù))要調(diào)用getchar()和putchar()函數(shù),在該主函數(shù)之前的包含命令“#include<stdio.h>“是必不可少的。3.2數(shù)據(jù)格式的輸入與輸出3.2.1printf()函數(shù)printf()函數(shù)是C語言提供的標(biāo)準(zhǔn)輸出函數(shù),它的作用是向終端(或系統(tǒng)隱含指定的輸出設(shè)備)按指定格式輸出若干個(gè)數(shù)據(jù)。a.

printf()函數(shù)的一般形式printf(格式控制,輸出表列);如:printf(“%f,%d”,x,y);printf是函數(shù)名,括號(hào)內(nèi)由以下兩部分組成:(1)“格式控制”:用雙引號(hào)括起來的字符串是“格式控制”字符串,它包括兩種信息。①格式轉(zhuǎn)換說明,由“%”和格式字符組成,如%d、%s等。上例中,當(dāng)輸出項(xiàng)為int型時(shí),系統(tǒng)規(guī)定用d作為格式描述字符,因此,有“%d”。當(dāng)輸出項(xiàng)為float或double類型時(shí),用f或e作為格式描述字符。格式描述符要與輸出項(xiàng)一一對(duì)應(yīng)且類型匹配。②需要原樣輸出的字符(通常指除了格式說明與一些轉(zhuǎn)義字符外的那部分)也寫在格式控制內(nèi)。(2)“輸出表列”是需要輸出的一些數(shù)據(jù),可以是常量、變量或表達(dá)式。例如:printf(“x=%dy=%d”,x,y);其中,“x=%dy=%d”是格式說明;x,y是輸出表列。輸出表列中的各輸出項(xiàng)要用逗號(hào)隔開。若x,y的值為7,8,以上兩條輸出結(jié)果為:x=7y=8

在兩數(shù)之間有空格,因?yàn)樵趦蓚€(gè)格式說明符中間有一個(gè)空格。b.

格式字符可以根據(jù)需要在“%”與格式字符之間插入“寬度說明”、左對(duì)齊符號(hào)“-”、前導(dǎo)零符號(hào)“0”等。(1)d格式符,用來對(duì)十進(jìn)制數(shù)進(jìn)行輸入輸出,其中“%d”按整型數(shù)據(jù)的實(shí)際長(zhǎng)度輸出,“%md”指定m為輸出字段所占的寬度。(2)o格式符,以八進(jìn)制數(shù)形式輸出整數(shù),同樣可以通過如“%8o”的格式指定輸出時(shí)所占的寬度。(3)x格式符,以十六進(jìn)制數(shù)形式輸出整數(shù),同樣可以通過如“%12x”的格式指定輸出時(shí)所占的寬度。(4)u格式符,用來輸出unsigned型數(shù)據(jù),即輸出無符號(hào)的十進(jìn)制數(shù)。(5)c格式符,用來輸出一個(gè)字符。(6)s格式符,用來輸出一個(gè)字符串。(7)f格式符,用來輸出實(shí)數(shù)(包括單、雙精度),以小數(shù)形式輸出,使整數(shù)部分全部如數(shù)輸出。(8)e格式符,以指數(shù)形式輸出實(shí)數(shù)。(9)g格式符,用來輸出實(shí)數(shù)。對(duì)于f、e、g格式符可以用“整型數(shù)1?閉?型數(shù)2“的形式,在指定寬度的同時(shí)來指定小數(shù)位的位數(shù),其中,“整型數(shù)1”用來指定輸出數(shù)據(jù)所占的總寬度,“整型數(shù)2”用來確定精度。精度對(duì)于不同的格式符有著不同的含義。當(dāng)輸出位數(shù)多于“整型數(shù)2”指定的寬度時(shí),截去右邊多余的小數(shù),并對(duì)截去的第一位小數(shù)做四舍五入處理。當(dāng)輸出數(shù)據(jù)的小數(shù)位數(shù)少于“整型數(shù)2”指定的寬度時(shí),在小數(shù)的最右邊添0,當(dāng)輸出的數(shù)據(jù)所占的寬度大于“整型數(shù)1”指定的寬度時(shí),小數(shù)位仍按上述規(guī)則處理,整數(shù)部分并不丟失。也可以用“?閉?型數(shù)2”的形式來指定小數(shù)位數(shù),這時(shí)輸出的數(shù)據(jù)所占寬度由系統(tǒng)決定。通常,系統(tǒng)對(duì)float類型提供7位有效位數(shù),對(duì)于double類型提供15位有效位數(shù)。

c.

使用printf()函數(shù)時(shí)的注意事項(xiàng)(1)在格式控制字符串中,格式說明與輸出項(xiàng)從左到右在類型上必須一一對(duì)應(yīng)匹配,如不匹配將導(dǎo)致數(shù)據(jù)輸出出現(xiàn)錯(cuò)誤,如在輸出long型數(shù)據(jù)時(shí),一定要用%ld格式控制,而不能用%d格式控制。(2)在格式控制串中,格式說明與輸出項(xiàng)的個(gè)數(shù)也要相等,如格式說明的個(gè)數(shù)多于輸出項(xiàng)的個(gè)數(shù),則對(duì)于多余的格式將輸出不定值(或0值)。(3)在格式控制串中,除了合法的格式說明外,可以包含任意的合法字符(包括轉(zhuǎn)義字符),這些字符在輸出時(shí)將被“原樣輸出”。(4)如果要輸出“%“,則應(yīng)該在格式控制串中用兩個(gè)連續(xù)的百分號(hào)“%%”來表示。

3.2.2scanf()函數(shù)a.

scanf()函數(shù)的一般形式scanf(格式控制,地址表列);其中scanf是函數(shù)名,“格式控制“的含義同printf()函數(shù),“地址表列“由若干個(gè)變量地址組成,既可以是變量的地址,也可以是字符串的首地址(參見“字符數(shù)組“一節(jié))。例如:scanf(“%d”,&a);printf(“%d”,a);運(yùn)行時(shí)輸入123,按回車鍵后則會(huì)在屏幕上輸出整型變量a的值123。其中“%d”是格式控制字符串。&a是輸入項(xiàng)。其中的“&”是“取地址運(yùn)算符”,&a指a在內(nèi)存中的地址,如需要有多個(gè)輸入項(xiàng)時(shí),輸入項(xiàng)之間要用逗號(hào)隔開。在實(shí)際輸入時(shí),若一次向計(jì)算機(jī)輸入多個(gè)數(shù)據(jù),則每?jī)蓚€(gè)數(shù)據(jù)間要以一個(gè)或多個(gè)空格間隔,也可以用回車鍵或跳格鍵【Tab】。b.

格式說明scanf()函數(shù)中的格式說明也是以%開始,以一個(gè)格式字符結(jié)束,中間可以加入附加的字符。說明:(1)對(duì)unsigned型變量的數(shù)據(jù),可以用%d、%o、%x格式輸入。(2)在scanf()函數(shù)中格式字符前可以用一個(gè)整數(shù)指定輸入數(shù)據(jù)所占寬度,但對(duì)于實(shí)型數(shù)則不能指定其小數(shù)位的寬度。(3)在格式控制串中,格式說明的個(gè)數(shù)應(yīng)該與輸入項(xiàng)的個(gè)數(shù)相等,且要類型匹配,如不匹配,系統(tǒng)也不會(huì)給出出錯(cuò)信息,但有可能使程序的結(jié)果不正確。若格式說明的個(gè)數(shù)少于輸入項(xiàng)的個(gè)數(shù),scanf()函數(shù)結(jié)束輸入,多余的項(xiàng)繼續(xù)從終端接收新的數(shù)據(jù),若格式說明的個(gè)數(shù)多于輸入項(xiàng)個(gè)數(shù)時(shí),scanf()函數(shù)同樣也結(jié)束輸入。

c.

使用scanf()函數(shù)時(shí)應(yīng)注意的問題(1)scanf()函數(shù)中的輸入項(xiàng)只能是地址表達(dá)式,而不能是變量名或其他內(nèi)容,也就是說輸入項(xiàng)必須是某個(gè)存儲(chǔ)單元的地址,這一點(diǎn)一定要掌握。例如:intm,n;scanf(“%d,%d”,m,n);是不對(duì)的,應(yīng)將其中的“m,n“改為“&m,&n”。(2)如果在“格式控制“字串中除了格式說明以外還有其他字符,則在輸入數(shù)據(jù)時(shí)應(yīng)輸入與這些字符相同的字符。(3)在用“%c”格式輸入字符時(shí),空格字符和轉(zhuǎn)義字符都作為有效字符輸入。(4)在輸入數(shù)據(jù)時(shí),若實(shí)際輸入數(shù)據(jù)少于輸入項(xiàng)個(gè)數(shù),scanf()函數(shù)會(huì)等待輸入,直到滿足條件或遇到非法字符才結(jié)束;若實(shí)際輸入數(shù)據(jù)多于輸入項(xiàng)個(gè)數(shù),多余的數(shù)據(jù)將留在緩沖區(qū)備用,作為下一次輸入操作的數(shù)據(jù)。在輸入數(shù)據(jù)時(shí),遇到以下情況時(shí)認(rèn)為輸入結(jié)束。遇空格、按“回車”或“跳格”(【Tab】)鍵,上述字符統(tǒng)一可稱為“間隔符”。在程序運(yùn)行到要求實(shí)際輸入時(shí),間隔符的數(shù)目不限,按指定的寬度結(jié)束,如“%3d”,只?。沉?。scanf()函數(shù)中的格式控制串是為輸入數(shù)據(jù)用的,其間的字符不能實(shí)現(xiàn)原樣輸出。若想在輸入時(shí)出現(xiàn)提示性語言,則需要另外使用printf語句。

第三章選擇結(jié)構(gòu)

考點(diǎn)1.

if語句和用if語句構(gòu)成的選擇結(jié)構(gòu)

if語句用來對(duì)所給定的條件進(jìn)行判定,判斷其表達(dá)式的值是否滿足某種條件,并根據(jù)判定的結(jié)果(真或假)決定執(zhí)行給出的兩種操作中的哪一種。1.1if語句的幾種形式(1)if(表達(dá)式)語句

例如:

if(a>b)

printf(“Theanswerisright!\n“);

其中,if是C語言的關(guān)鍵字,a>b是條件判斷表達(dá)式。表達(dá)式兩側(cè)的括號(hào)不可少,并且只能是圓括號(hào),不能用其他括號(hào)替代。緊跟著的是一條輸出語句,稱為if子句,如果在if子句中需要多個(gè)語句,則應(yīng)該使用大括號(hào)({})把一組語句括起來構(gòu)成復(fù)合語句,這樣在語法上滿足“一條語句“的要求。

(2)if(表達(dá)式)

語句1

else

語句2

例如:

if(a>b)printf(“Theanswerisright.\n“);

else

printf(“Theansweriswrong.\n“);

(3)if(表達(dá)式1)語句1

elseif(表達(dá)式2)語句2

elseif(表達(dá)式3)語句3

elseif(表達(dá)式m)語句m

else語句n

“語句1“是if子句,“語句2…語句m“是else子句。這些子句在語法上要求是一條語句,但需要執(zhí)行多條語句時(shí),則應(yīng)該使用花括號(hào)({})把這些語句括起來組成復(fù)合語句。

else不能獨(dú)立成為一條語句,它只是if語句的一部分,不允許單獨(dú)出現(xiàn)在程序中。else必須與if配對(duì),共同組成if…else語句。1.2if語句的嵌套

在if語句中又包含一個(gè)或多個(gè)if語句結(jié)構(gòu),稱為if語句的嵌套,一般形式如下:

if(

)

if()語句1

else語句2

else

if()語句3

else語句4應(yīng)當(dāng)注意:else總是與它上面的最近的沒有與else配對(duì)的if配對(duì)。1.3條件運(yùn)算符構(gòu)成的選擇結(jié)構(gòu)

有如下語句:

if(x<y)

min=x;/*求兩數(shù)中較小的一個(gè)*/

elsemin=y;

可以用min=(x<y)?x:y來替換,其中(x<y)?x:y是一個(gè)條件表達(dá)式,“?:“就是條件運(yùn)算符。該表達(dá)式是這樣執(zhí)行的:如果(x<y)條件成立,則整個(gè)條件表達(dá)式取值x,否則取值y。

優(yōu)先級(jí):條件運(yùn)算符高于賦值運(yùn)算符,但低于邏輯運(yùn)算符、關(guān)系運(yùn)算符和算術(shù)運(yùn)算符。

考點(diǎn)2.switch語句和goto語句2.1switch語句

switch語句是C語言提供的多分支選擇語句,用來實(shí)現(xiàn)多分支選擇結(jié)構(gòu)。它的一般形式如下:

switch(表達(dá)式)

{

case常量表達(dá)式1:語句1

case常量表達(dá)式2:語句2…

case常量表達(dá)式n:語句n

default:語句n+1

}

說明:

(1)switch是關(guān)鍵字,switch后面用花括號(hào)括起來的部分是switch語句體。

(2)switch后面括號(hào)內(nèi)的“表達(dá)式“,可以是C語言中任意合法表達(dá)式,但表達(dá)式兩側(cè)的括號(hào)不能省略。

(3)case也是關(guān)鍵字,與其后面的常量表達(dá)式合稱case語句標(biāo)號(hào),常量表達(dá)式的類型必須與switch后面的表達(dá)式的類型相匹配,且各case語句標(biāo)號(hào)的值各不相同,不能重復(fù)。

(4)default也是關(guān)鍵字,起標(biāo)號(hào)的作用,代表除了以上所有case標(biāo)號(hào)之外的那些標(biāo)號(hào),default標(biāo)號(hào)可以出現(xiàn)在語句體中任何標(biāo)號(hào)位置上,當(dāng)然,也可以沒有。

(5)case語句標(biāo)號(hào)后的語句1、語句2等,可以是一條語句,也可以是若干條,在必要時(shí),case語句標(biāo)號(hào)后的語句可以省略不寫。case和常量表達(dá)式之間一定要有空格。2.2語句標(biāo)號(hào)

語句標(biāo)號(hào)用標(biāo)識(shí)符表示,它的命名規(guī)則與變量名相同,即由字母、數(shù)字和下畫線組成,在標(biāo)識(shí)符后加一個(gè)冒號(hào),就成了一個(gè)語句標(biāo)號(hào)。在C語言中可以在任何語句前加上語句標(biāo)號(hào)。2.3goto語句

goto語句為無條件轉(zhuǎn)向語句,goto語句的一般形式如下:

goto

語句標(biāo)號(hào);

goto語句的作用:把程序的執(zhí)行轉(zhuǎn)向語句標(biāo)號(hào)所在的位置,這個(gè)語句標(biāo)號(hào)必須與此goto語句同在一個(gè)函數(shù)內(nèi),濫用goto語句將使程序的流程毫無規(guī)律,可讀性差,因此初學(xué)者應(yīng)慎用。

第四章循環(huán)結(jié)構(gòu)

在許多問題中,需要做某些重復(fù)執(zhí)行的操作,這時(shí)就會(huì)用到循環(huán)結(jié)構(gòu)。在程序設(shè)計(jì)中也一樣,例如,對(duì)1~100之間的自然數(shù)進(jìn)行求和計(jì)算,計(jì)算某班級(jí)所有同學(xué)的成績(jī)總分,還有很多,幾乎所有的程序都會(huì)包含循環(huán)控制結(jié)構(gòu)。循環(huán)結(jié)構(gòu)是程序中一種很重要的結(jié)構(gòu)。其特點(diǎn)是,在給定條件成立時(shí),反復(fù)執(zhí)行某程序段,直到條件不成立為止。給定的條件稱為循環(huán)條件,反復(fù)執(zhí)行的程序段稱為循環(huán)體。C語言提供了多種循環(huán)語句,可以組成各種不同形式的循環(huán)結(jié)構(gòu)。1)

用while語句;2)

用do-while語句;3)

用for語句;考點(diǎn).1while循環(huán)語句while語句while語句一般形式如下:while(表達(dá)式)循環(huán)體說明:while是C語言的關(guān)鍵字。緊跟其后的表達(dá)式可以是C語言中任意合法的表達(dá)式,該表達(dá)式是循環(huán)條件,由它來控制循環(huán)體是否執(zhí)行。循環(huán)體可以是一條可執(zhí)行語句,當(dāng)多項(xiàng)操作需要多次重復(fù)做時(shí),可以使用復(fù)合語句。執(zhí)行過程:(1)計(jì)算緊跟while后括號(hào)中表達(dá)式的值,當(dāng)表達(dá)式的值為非0時(shí),則接著執(zhí)行while語句中的內(nèi)嵌語句;當(dāng)整個(gè)表達(dá)式值為0時(shí),則跳過該while語句,執(zhí)行該while結(jié)構(gòu)后的其他語句。(2)執(zhí)行循環(huán)體內(nèi)嵌語句。(3)返回去執(zhí)行步驟(1),直到條件不滿足,即表達(dá)式的值為0時(shí),退出循環(huán),while結(jié)構(gòu)結(jié)束。特點(diǎn):先對(duì)表達(dá)式進(jìn)行條件判斷,后執(zhí)行語句。while語句構(gòu)成的循環(huán)結(jié)構(gòu)不同于由if語句構(gòu)成的選擇結(jié)構(gòu)。當(dāng)if后面的條件表達(dá)式的值為非零時(shí),其if子句只執(zhí)行一次;而當(dāng)while后面的條件表達(dá)式的值為非零時(shí),其后的循環(huán)體中的語句將被重復(fù)執(zhí)行。而且在設(shè)計(jì)循環(huán)時(shí),通常應(yīng)在循環(huán)體內(nèi)改變與條件表達(dá)式中有關(guān)變量的值,使條件表達(dá)式的值最終變成零,以便能及時(shí)退出循環(huán)。例如:用while循環(huán)求自然數(shù)1到100的和,程序段如下:#include<stdio.h>main(){

inti,sum=0;

i=1;

while(i<=100)

{

sum=sum+i;

i++;

}

printf("%d\n",sum);}

考點(diǎn)2.do…while循環(huán)語句do…while語句do…while循環(huán)結(jié)構(gòu)的一般形式如下:do循環(huán)體語句while(表達(dá)式);說明:(1)do是C語言的關(guān)鍵字,必須和while聯(lián)合使用,不能獨(dú)立出現(xiàn)。(2)do…while循環(huán)由do開始,用while結(jié)束。在語法上,在do和while之間只能是一條語句,如需要執(zhí)行多條語句時(shí),可以用大括號(hào)({})括起來,構(gòu)成復(fù)合語句。必須注意的是:while(表達(dá)式)后的分號(hào)不可丟,它用以表示do…while語句的結(jié)束。(3)while后面的圓括號(hào)中的表達(dá)式,可以是C語言中任意合法的表達(dá)式,由它控制循環(huán)是否執(zhí)行,且圓括號(hào)不可丟。執(zhí)行過程:先執(zhí)行一次指定的循環(huán)體語句,執(zhí)行完后,判別while后面的表達(dá)式的值,當(dāng)表達(dá)式的值為非零(真)時(shí),程序流程返回,去重新執(zhí)行循環(huán)體語句。如此反復(fù),直到表達(dá)式的值等于零為止,此時(shí)循環(huán)結(jié)束。特點(diǎn):先執(zhí)行循環(huán)體一次,然后判斷循環(huán)條件是否成立。do…while構(gòu)成的循環(huán)與while循環(huán)十分相似,它們之間的重要區(qū)別是:while循環(huán)的控制出現(xiàn)在循環(huán)體之前,只有當(dāng)while后面的表達(dá)式的值為非零時(shí),才可能執(zhí)行循環(huán)體;在do…while構(gòu)成的循環(huán)體中,總是先執(zhí)行一次循環(huán)體,然后再求表達(dá)式的值,因此無論表達(dá)式的值是否為零,循環(huán)體至少要被執(zhí)行一次。例如:用do-while循環(huán)求自然數(shù)1到100的和,程序段如下:#include<stdio.h>#include<stdio.h>main(){

inti,sum=0;

i=1;

do

{

sum=sum+i;

i++;

}

while(i<=100);

printf("%d\n",sum);}

考點(diǎn)3.for循環(huán)語句for語句for語句的一般形式為:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句

說明:for是C語言中的關(guān)鍵字,其后的圓括號(hào)中通常是3個(gè)表達(dá)式,這3個(gè)表達(dá)式可以是C語言中任意合法表達(dá)式,它們通常用于for循環(huán)的控制。各個(gè)表達(dá)式之間用“;“隔開,且圓括號(hào)不可省略。按照語法規(guī)則,循環(huán)體只能是一條語句,如需要完成多項(xiàng)操作,可以用大括號(hào)({})括起來構(gòu)成復(fù)合語句。執(zhí)行過程:(1)先求表達(dá)式1的值。(2)求表達(dá)式2的值,若其值為真(非0),則執(zhí)行for語句中指定的內(nèi)嵌語句后執(zhí)行下面步驟(3),若其值為假(0),則退出循環(huán),執(zhí)行for以下的其他語句。(3)求解表達(dá)式3的值。(4)重復(fù)執(zhí)行步驟(2)。例:用for循環(huán)求自然數(shù)1-100的和,程序段如下:#include<stdio.h>main(){

inti,sum=0;

for(i=0;i<=100;i++)

{

sum=sum+i;

}

printf("%d\n",sum);}

考點(diǎn)4.循環(huán)的嵌套循環(huán)嵌套在某一個(gè)循環(huán)體內(nèi)部又包含了另一個(gè)完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。前面介紹的3種類型的循環(huán)都可以互相嵌套,循環(huán)的嵌套可以多層,但要保證每一層循環(huán)在邏輯上必須是完整的。例有如下程序段:#include<stdio.h>main(){

inti,j;

for(i=0;i<2;i++)

for(j=0;j<2;j++)

printf("%d%d\n",i,j);}程序顯示的結(jié)果是:00011011

考點(diǎn)5.幾種循環(huán)的比較循環(huán)的比較前面講的幾種循環(huán)都可以用來處理同一問題,一般情況下它們可以互相代替。不過最好根據(jù)每種循環(huán)的不同特點(diǎn)選擇最適合的。while和do…while循環(huán),只在while后面指定循環(huán)條件,循環(huán)體內(nèi)應(yīng)包含使循環(huán)趨于結(jié)束的語句,for中使循環(huán)趨于結(jié)束的操作可以包含在“表達(dá)式3“中。由while完成的循環(huán),用for循環(huán)都能完成。在for語句“表達(dá)式1“中可以實(shí)現(xiàn)循環(huán)變量的初始化,而while和do…while的循環(huán)變量初始化應(yīng)在while和do…while語句之前完成。

考點(diǎn)6.break語句和continue語句6.1break語句在break后面加上分號(hào)就可以構(gòu)成break語句。在介紹選擇結(jié)構(gòu)時(shí),我們已經(jīng)知道break語句可以使流程跳出switch結(jié)構(gòu),繼續(xù)執(zhí)行switch語句下面的語句。實(shí)際上,break語句還可以用于從循環(huán)體內(nèi)跳出,即提前結(jié)束循環(huán)。說明:(1)break語句只能出現(xiàn)在循環(huán)體內(nèi)及switch語句內(nèi),不能用于其他語句。(2)當(dāng)break出現(xiàn)在循環(huán)體中的switch語句體內(nèi)時(shí),其作用只是跳出該switch語句體。當(dāng)break出現(xiàn)在循環(huán)體中,但并不在switch語句體內(nèi)時(shí),則在執(zhí)行break后,跳出本層循環(huán),當(dāng)然也不再去進(jìn)行條件判斷。6.2continue語句一般形式為:continue;其作用是結(jié)束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,而轉(zhuǎn)去重新判定循環(huán)條件是否成立,從而確定下一次循環(huán)是否繼續(xù)執(zhí)行。與break語句不同,執(zhí)行continue語句并沒有使整個(gè)循環(huán)終止。在while和do…while循環(huán)中,continue語句使得流程直接跳到循環(huán)控制的條件判斷部分,然后決定循環(huán)是否繼續(xù)執(zhí)行。在for循環(huán)中,遇到continue后,跳過循環(huán)體中余下的語句,而去求解for語句中的“表達(dá)式3“的值,然后再次對(duì)“表達(dá)式2“的條件進(jìn)行判斷,最后根據(jù)“表達(dá)式2“的值來決定for循環(huán)是否繼續(xù)執(zhí)行。continue不管是作為何種語句中的語句成分,都按上述功能執(zhí)行。continue語句和break語句的區(qū)別是:continue語句只結(jié)束本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行;而break語句則是結(jié)束整個(gè)循環(huán)過程,不再判斷執(zhí)行循環(huán)的條件是否成立。例如輸入任意的自然數(shù),判斷此數(shù)是不是素?cái)?shù),有程序段如下:#include<stdio.h>#include<math.h>main(){

intm,i,k;

scanf("%d",&m);

k=sqrt(m);/*此公式用于求m開根號(hào)*/

for(i=2;i<=k;i++)

if(m%i==0)break;

if(i>=k+1)

printf("%disaprimenumber\n",m);

else

printf("%disnotaprimenumber\n",m);}

第五章函數(shù)

考點(diǎn)1.函數(shù)概述在前面各章的例子及讀者自己編寫的C語言程序中都用到了以“main“開頭的主函數(shù),并且在程序中頻繁地調(diào)用了C語言提供的用于輸入輸出的庫(kù)函數(shù)(scanf()和printf()函數(shù))。函數(shù)是C源程序的基本模塊,通過對(duì)函數(shù)模塊的調(diào)用實(shí)現(xiàn)特定的功能。一個(gè)C程序可由一個(gè)主函數(shù)和若干個(gè)其他函數(shù)構(gòu)成,并且只能有一個(gè)主函數(shù)。由主函數(shù)來調(diào)用其他函數(shù),其他子函數(shù)之間也可以互相調(diào)用。C程序的執(zhí)行總是從main()函數(shù)開始。調(diào)用其他函數(shù)完畢后,程序流程回到main()函數(shù),繼續(xù)執(zhí)行主函數(shù)中的其他語句,直到main()函數(shù)結(jié)束,則整個(gè)程序的運(yùn)行結(jié)束。main()函數(shù)是由系統(tǒng)定義的。所有的函數(shù)都是平行的,即在函數(shù)定義時(shí)它們是互相獨(dú)立的,函數(shù)之間并不存在從屬關(guān)系。也就是說,函數(shù)不能嵌套定義(這是與PASCAL不同的),函數(shù)之間可以互相調(diào)用,但不允許調(diào)用main()函數(shù)。從用戶的使用的角度看,函數(shù)有兩種:(1)標(biāo)準(zhǔn)函數(shù),即庫(kù)函數(shù)。這些函數(shù)由系統(tǒng)提供,可以直接使用。(2)自定義的函數(shù)。用以解決用戶需要時(shí)設(shè)計(jì)定義的函數(shù)。從函數(shù)的形式看,函數(shù)分為兩類:(1)無參函數(shù)。(2)有參函數(shù)。

考點(diǎn)2.函數(shù)定義的一般形式函數(shù)的定義C語言中函數(shù)定義的一般形式如下:函數(shù)返回值的類型名

函數(shù)名(類型名

形式參數(shù)1,類型名

形式參數(shù)2,…){說明部分;語句部分;}說明:函數(shù)名和各個(gè)形式參數(shù)都是由用戶命名的合法標(biāo)識(shí)符,與普通變量名的定義規(guī)則相同。在同一程序中,函數(shù)名必須唯一,不能出現(xiàn)重名的情況。形式參數(shù)名只要在同一函數(shù)中唯一即可,由于形式參數(shù)的作用域不相同,因此形式參數(shù)名可以與其他函數(shù)中的變量名同名。C語言規(guī)定,不能在一個(gè)函數(shù)內(nèi)部再定義函數(shù),也就是說函數(shù)不能嵌套定義。(1)若在函數(shù)的首部省略了函數(shù)返回值的類型名,可以把函數(shù)首部寫成:函數(shù)名(類型名形式參數(shù)1,類型名形式參數(shù)2,…,類型名形式參數(shù)n)(2)緊跟在函數(shù)名之后的圓括號(hào)中的內(nèi)容是形式參數(shù)和類型說明表,在每個(gè)形參之前都要有類型名,以標(biāo)識(shí)形式參數(shù)的類型。各形參的定義之間用逗號(hào)分隔。例如,求兩整數(shù)和的函數(shù):int

add(inta,intb)

{intt;

/*函數(shù)體中聲明部分*/

t=a+b;

returnt;}若所定義的函數(shù)沒有形參,函數(shù)名后的一對(duì)圓括號(hào)依然不能省略。本例中函數(shù)體中的語句是用來完成求和的功能。在某些情況下,函數(shù)體可以是空的,例如:fun(){

}該函數(shù)中沒有任何語句,什么工作也不做,沒有任何實(shí)際作用。之所以要在主調(diào)函數(shù)上這樣寫,是為了表明此處要調(diào)用一個(gè)函數(shù),而現(xiàn)在這個(gè)函數(shù)的具體功能可能還沒有設(shè)計(jì)好,沒有起作用,等以后擴(kuò)充函數(shù)功能時(shí)補(bǔ)充上即可。(3)在函數(shù)體中,除形參外,用到的其他變量必須在說明部分進(jìn)行定義,這些變量(包括形參)只在函數(shù)被調(diào)用時(shí)才被臨時(shí)分配內(nèi)存單元,當(dāng)退出函數(shù)時(shí),這些臨時(shí)開辟的存儲(chǔ)單元全部被釋放掉,即在該函數(shù)體內(nèi)部定義的變量都將不存在。因此,這些變量只在函數(shù)體內(nèi)部起作用,與其他函數(shù)體內(nèi)的變量并不相關(guān)。

考點(diǎn)3.函數(shù)參數(shù)和函數(shù)返回值3.1形式參數(shù)和實(shí)際參數(shù)在程序中調(diào)用函數(shù)時(shí),絕大多數(shù)情況下,主調(diào)函數(shù)和被調(diào)函數(shù)之間會(huì)發(fā)生數(shù)據(jù)傳遞關(guān)系,這就要用到前面提到的有參函數(shù)。在定義函數(shù)時(shí),函數(shù)名后面括號(hào)中的變量稱為“形式參數(shù)“(簡(jiǎn)稱“形參“);在主調(diào)函數(shù)中,函數(shù)名后面括號(hào)中的參數(shù)(可以是一個(gè)表達(dá)式)稱為“實(shí)際參數(shù)“(簡(jiǎn)稱“實(shí)參“)。說明:(1)實(shí)參可以是常量、變量或表達(dá)式。(2)在被定義的函數(shù)中必須指定形參類型。(3)實(shí)參與形參的類型應(yīng)相同或賦值相兼容。(4)C語言規(guī)定,實(shí)參變量對(duì)形參變量的數(shù)據(jù)傳遞是“值傳遞“,即單向傳遞。只能由實(shí)參傳給形參,而不能由形參返回來給實(shí)參。在內(nèi)存中,實(shí)參單元與形參單元是不同的單元。(5)在調(diào)用函數(shù)時(shí),給形參分配存儲(chǔ)單元,并將實(shí)參對(duì)應(yīng)的值傳遞給形參。調(diào)用結(jié)束后,形參單元被釋放,實(shí)參單元仍保留并維持原值。3.2函數(shù)的返回值函數(shù)的返回值就是通過函數(shù)調(diào)用使主調(diào)函數(shù)能得到一個(gè)確定的值。函數(shù)的值通過return語句返回,return語句的形式如下:return表達(dá)式;或return(表達(dá)式);或return;return語句中的表達(dá)式的值就是所求的函數(shù)值。此表達(dá)式值的類型必須與函數(shù)首部所說明的類型一致。若類型不一致,則以函數(shù)值的類型為準(zhǔn),由系統(tǒng)自動(dòng)進(jìn)行轉(zhuǎn)換。例如通過函數(shù)調(diào)用的方法求1到自然數(shù)n(n>1)自然數(shù)的和,有程序段如下#include<stdio.h>ints(intn){

inti,sum=0;

for(i=1;i<=n;i++)

sum+=i;

returnsum;}main(){

intn;

printf("inputnumber\n");

scanf("%d",&n);

n=s(n);

printf("1到n的和為:%d\n",n);}

考點(diǎn)4.函數(shù)的調(diào)用4.1函數(shù)調(diào)用的一般形式函數(shù)調(diào)用的一般形式為:函數(shù)名(實(shí)參表列);函數(shù)的調(diào)用可以分為調(diào)用無參函數(shù)和調(diào)用有參函數(shù)兩種,如果是調(diào)用無參函數(shù),則不用“實(shí)參表列“,但括號(hào)不能省略。在調(diào)用有參函數(shù)時(shí),若實(shí)參列表中有多個(gè)實(shí)參,各參數(shù)間用逗號(hào)隔開。實(shí)參與形參要求類型一致。4.2函數(shù)調(diào)用的方式(1)函數(shù)語句。把函數(shù)調(diào)用做為一個(gè)語句,這時(shí)該函數(shù)只需要完成一定的操作而不必有返回值。(2)函數(shù)表達(dá)式。當(dāng)一個(gè)函數(shù)出現(xiàn)在一個(gè)表達(dá)式中,該表達(dá)式就被稱為函數(shù)表達(dá)式。因?yàn)橐獏⑴c表達(dá)式中的計(jì)算,所以要求該函數(shù)有一個(gè)確定的返回值提供給表達(dá)式。(3)函數(shù)參數(shù)。函數(shù)調(diào)用做為一個(gè)函數(shù)的實(shí)參。C語言中,調(diào)用函數(shù)和被調(diào)用函數(shù)之間的數(shù)據(jù)可通過3種方式進(jìn)行傳遞。(1)實(shí)參與形參之間進(jìn)行數(shù)據(jù)傳遞。(2)通過return語句把函數(shù)值返回到主調(diào)用函數(shù)中。(3)通過全局變量。4.3函數(shù)的說明C語言中,除了主函數(shù)外,對(duì)于用戶定義的函數(shù)要遵循先定義后使用的規(guī)則。把函數(shù)的定義放在調(diào)用之后,應(yīng)該在調(diào)用之前對(duì)函數(shù)進(jìn)行說明(或函數(shù)原型說明)。函數(shù)說明的一般形式如下:類型名函數(shù)名(參數(shù)類型1,參數(shù)類型2,…,參數(shù)類型n);如intadd(int

,int

);或類型名函數(shù)名(參數(shù)類型1

參數(shù)名1,參數(shù)類型2

參數(shù)名2,…,參數(shù)類型n

參數(shù)名n);此處的參數(shù)名完全是虛設(shè)的,它們可以是任意的用戶標(biāo)識(shí)符,既不必與函數(shù)首部中的形參名一致,又可以與程序中的任意用戶標(biāo)識(shí)符同名,實(shí)際上參數(shù)名常常省略。函數(shù)說明語句中的類型名必須與函數(shù)返回值的類型一致。函數(shù)說明可以是一條獨(dú)立的語句。對(duì)函數(shù)進(jìn)行說明,能使C語言的編譯程序在編譯時(shí)進(jìn)行有效的類型檢查。當(dāng)調(diào)用函數(shù)時(shí),若實(shí)參的類型與形參的類型不能賦值兼容而進(jìn)行非法轉(zhuǎn)換,C編譯程序?qū)?huì)發(fā)現(xiàn)錯(cuò)誤并報(bào)錯(cuò);當(dāng)實(shí)參的個(gè)數(shù)與形參的個(gè)數(shù)不同時(shí),編譯程序也將報(bào)錯(cuò)。4.4函數(shù)說明的位置一個(gè)函數(shù)在所有函數(shù)的外部,如在被調(diào)用之前說明,則在說明后的所有位置上都可以對(duì)該函數(shù)進(jìn)行調(diào)用。如在main()函數(shù)內(nèi)部進(jìn)行說明,則只能在main()函數(shù)內(nèi)部才能識(shí)別。例如調(diào)用求和函數(shù)輸出1到n的和值,程序段如下:#include<stdio.h>main(){

intn;

ints(intn);

printf("inputnumber\n");

scanf("%d",&n);

s(n);

printf("n=%d\n",n);}ints(intn){

inti,sum=0;

for(i=1;i<=n;i++)

sum+=i;

printf("1到n的和值為:%d\n",n);}

考點(diǎn)5.函數(shù)的遞歸調(diào)用

在調(diào)用一個(gè)函數(shù)的過程中又出現(xiàn)直接或間接地調(diào)用該函數(shù)本身,稱為函數(shù)的遞歸調(diào)用。允許函數(shù)的遞歸調(diào)用是C語言的特點(diǎn)之一。當(dāng)一個(gè)問題在采用遞歸法解決時(shí),必須符合以下3個(gè)條件:(1)可以把要解決的問題轉(zhuǎn)化為一個(gè)新的問題。而這個(gè)新的問題的解決方法仍與原來的解決方法相同,只是所處理的對(duì)象有規(guī)律地遞增或遞減。(2)可以應(yīng)用這個(gè)轉(zhuǎn)化過程使問題得到解決。(3)必須要有一個(gè)明確的結(jié)束遞歸的條件。

當(dāng)函數(shù)自己調(diào)用自己時(shí),系統(tǒng)將自動(dòng)把函數(shù)中當(dāng)前的變量和形參暫時(shí)保留起來,在新一輪的調(diào)用過程中,系統(tǒng)將為本次調(diào)用的函數(shù)所用到的變量和形參,開辟新的存儲(chǔ)單元。因此,遞歸調(diào)用的層次越多,同名變量所占的存儲(chǔ)單元也就越多。當(dāng)本次調(diào)用的函數(shù)運(yùn)行結(jié)束時(shí),系統(tǒng)將釋放本次調(diào)用所占的存儲(chǔ)單元。當(dāng)程序執(zhí)行的流程返回到上一層的調(diào)用點(diǎn)時(shí),同時(shí)取用進(jìn)入該層函數(shù)中的變量和形參所占用的存儲(chǔ)單元中的數(shù)據(jù)。例如求n!的值,有程序段如下:#include<stdio.h>longff(intn){

longf;

if(n<0)

printf("n<0,inputerror");

elseif(n==0||n==1)f=1;

elsef=ff(n-1)*n;

return(f);}main(){

intn;

longy;

printf("請(qǐng)輸入整數(shù)值:\n");

scanf("%d",&n);

y=ff(n);

printf("%d!=%ld",n,y);}

考點(diǎn)6.全局變量和局部變量在本節(jié)及以后幾節(jié)中,讀者應(yīng)特別注意“定義”和“說明”兩個(gè)詞的區(qū)別。“定義”是指給變量分配確定的存儲(chǔ)單元;“說明”只是說明變量的性質(zhì)。在C語言中,用戶命名的標(biāo)識(shí)符都有一個(gè)有效的作用域。所謂標(biāo)識(shí)符的“作用域”就是指程序中的某一部分,在這部分中,該標(biāo)識(shí)符是有定義的,可以被C編譯和連接程序所識(shí)別。我們知道每個(gè)變量都有自己的作用域,在一個(gè)函數(shù)內(nèi)定義的變量,不能在其他函數(shù)中引用。顯然,變量的作用域與其定義語句在程序中出現(xiàn)的位置有直接的關(guān)系,據(jù)此變量可以劃分為局部變量和全局變量。6.1局部變量在一個(gè)函數(shù)內(nèi)部定義的變量,它們只在本函數(shù)范圍內(nèi)有效,即只有本函數(shù)才能使用它們,其他函數(shù)不能使用這些變量,我們將這些變量稱為“局部變量”。不同函數(shù)中可以使用相同名字的局部變量,它們代表不同的對(duì)象,在內(nèi)存中占不同的單元,互不干擾。6.2全局變量在函數(shù)之外定義的變量稱為外部變量,外部變量是全局變量。全局變量可以為本文件中其他函數(shù)所共用,它的有效范圍從定義變量開始到本文件結(jié)束。如果在同一個(gè)源文件中,外部變量與局部變量同名,則在局部變量的作用范圍內(nèi),外部變量被“屏蔽”,即它不起作用。

考點(diǎn)7.變量的存儲(chǔ)類別從變量值存在的時(shí)間(即生存期)來看,變量的存儲(chǔ)方式可以分為靜態(tài)存儲(chǔ)方式和動(dòng)態(tài)存儲(chǔ)方式。所謂靜態(tài)存儲(chǔ)方式是指在程序運(yùn)行期間分配固定的存儲(chǔ)空間的方式,而動(dòng)態(tài)存儲(chǔ)方式是在程序運(yùn)行期間根據(jù)需要?jiǎng)討B(tài)分配存儲(chǔ)空間的方式。在內(nèi)存中供用戶使用的空間可以分為程序區(qū)、靜態(tài)存儲(chǔ)區(qū)和動(dòng)態(tài)存儲(chǔ)區(qū)3個(gè)部分。數(shù)據(jù)分別被存放在靜態(tài)存儲(chǔ)區(qū)和動(dòng)態(tài)存儲(chǔ)區(qū)中。靜態(tài)存儲(chǔ)區(qū)中存放的是全局變量,在程序開始執(zhí)行時(shí)就給全局變量分配存儲(chǔ)區(qū)。程序執(zhí)行過程中它們占據(jù)固定的存儲(chǔ)單元,程序執(zhí)行完畢這些存儲(chǔ)單元就被釋放。每一個(gè)變量和函數(shù)所具有的屬性是:數(shù)據(jù)的存儲(chǔ)類別和數(shù)據(jù)類型(在前面已經(jīng)介紹過)。所謂的存儲(chǔ)類別指的是數(shù)據(jù)在內(nèi)存中存儲(chǔ)的方法,其可分為兩類:靜態(tài)存儲(chǔ)類和動(dòng)態(tài)存儲(chǔ)類。具體包括自動(dòng)(auto)、靜態(tài)(static)、寄存器(register)和外部(extern),共4種。7.1auto變量當(dāng)在函數(shù)內(nèi)部或復(fù)合語句內(nèi)定義變量時(shí),如果沒有指定存儲(chǔ)類別,或使用了auto說明符,系統(tǒng)就認(rèn)為所定義的變量具有自動(dòng)類別。如:floata;等價(jià)于autofloata;auto變量的存儲(chǔ)單元被分配在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū),每當(dāng)進(jìn)入函數(shù)體(或復(fù)合語句)時(shí),系統(tǒng)自動(dòng)為auto變量分配存儲(chǔ)單元,退出時(shí)自動(dòng)釋放這些存儲(chǔ)單元另做他用。因此,這類局部變量的作用域是從定義的位置起,到函數(shù)體(或復(fù)合語句)結(jié)束止。所有自動(dòng)類局部變量的存儲(chǔ)單元都是在進(jìn)入這些局部變量所在的函數(shù)體(或復(fù)合語句)時(shí)生成,退出其所在的函數(shù)體(或復(fù)合語句)時(shí)消失(變?yōu)闊o定義)。這就是自動(dòng)類局部變量的“生存期“。當(dāng)再次進(jìn)入函數(shù)體(或復(fù)合語句)時(shí),系統(tǒng)將為它們另行分配存儲(chǔ)單元,因此變量的值不可能被保留。隨著函數(shù)的頻繁調(diào)用,動(dòng)態(tài)存儲(chǔ)區(qū)內(nèi)為某個(gè)變量分配的存儲(chǔ)單元位置會(huì)隨程序的運(yùn)行而改變。7.2register變量寄存器變量也是自動(dòng)類變量。它與auto變量的區(qū)別僅在于:用register說明變量是建議編譯程序?qū)⒆兞康闹当A粼贑PU的寄存器中,而不是像一般變量那樣占用內(nèi)存單元。程序運(yùn)行時(shí),訪問寄存器內(nèi)的值要比訪問內(nèi)存中的值快得多。因此,當(dāng)程序?qū)\(yùn)行速度有較高要求時(shí),把那些頻繁引用的少數(shù)變量,指定為register變量,有助于提高程序運(yùn)行的效率。說明:(1)CPU中寄存器的數(shù)目是有限的,因此只能說明少量的寄存器變量。在同一個(gè)函數(shù)中,允許說明為寄存器變量的數(shù)目不僅取決于CPU的類型,也與所用的C編譯程序有關(guān)。當(dāng)沒有足夠的寄存器來存放指定的變量,或編譯程序認(rèn)為指定的變量不適合放在寄存器中時(shí),將自動(dòng)按auto變量來處理。因此,register說明只是對(duì)編譯程序的一種建議,而不是強(qiáng)制性的。(2)由于register變量的值存放在寄存器內(nèi)而不是存放在內(nèi)存中,所以register變量沒有地址,也就不能對(duì)它實(shí)行求地址運(yùn)算。(3)register變量的說明應(yīng)盡量靠近其使用的地方,用完之后盡快釋放,以便提高寄存器的利用效率。7.3靜態(tài)存儲(chǔ)類別的局部變量當(dāng)函數(shù)體(或復(fù)合語句)內(nèi)部用static來說明一個(gè)變量時(shí),可以稱該變量為靜態(tài)局部變量。它與auto變量、register變量的本質(zhì)區(qū)別是:(1)在整個(gè)程序運(yùn)行期間,靜態(tài)局部變量在內(nèi)存中的靜態(tài)存儲(chǔ)區(qū)中占據(jù)著永久性的存儲(chǔ)單元。即使退出函數(shù)后,下次再進(jìn)入該函數(shù)時(shí),靜態(tài)局部變量仍使用原來的存儲(chǔ)單元。由于不釋放這些存儲(chǔ)單元,這些存儲(chǔ)單元中的值得以保留,因而可以繼續(xù)使用存儲(chǔ)單元中原來的值。由此可知,靜態(tài)局部變量的生存期將一直延長(zhǎng)到程序運(yùn)行結(jié)束。(2)靜態(tài)局部變量的初值是在編譯時(shí)賦予的,在程序執(zhí)行期間不再賦以初值。對(duì)未賦值的局部變量,C語言編譯程序自動(dòng)給它賦初值為0。7.4用static聲明外部變量有時(shí)在程序設(shè)計(jì)中希望某些外部變量只限于本文件使用,而不能被其他文件引用,這時(shí)可以在定義外部變量時(shí)加一個(gè)static聲明。并不是對(duì)外部變量加上static才是靜態(tài)存儲(chǔ)而不加static的是動(dòng)態(tài)存儲(chǔ)。兩種形式的外部變量都是靜態(tài)存儲(chǔ)方式,只是作用范圍不同而已。7.5用extern聲明外部變量①在一個(gè)文件內(nèi)聲明外部變量當(dāng)全局變量定義在后,引用它的函數(shù)在前時(shí),應(yīng)該在引用它的函數(shù)中用extern對(duì)此全局變量進(jìn)行說明,以便通知編譯程序,該變量是一個(gè)已在外部定義了的全局變量,已經(jīng)分配了存儲(chǔ)單元,不需要為它另開辟存儲(chǔ)單元。這時(shí)其作用域從extern說明處起,延伸到該函數(shù)末尾。全局變量的說明與全局變量的定義不同。變量的定義(開辟存儲(chǔ)單元)只能出現(xiàn)一次,在定義全局變量時(shí),不可使用extern說明符;而對(duì)全局變量的說明,則可以多次出現(xiàn)在需要的地方,這時(shí)必須用extern進(jìn)行說明。②在多文件的程序中聲明外部變量當(dāng)一個(gè)程序由多個(gè)單獨(dú)編譯的源文件組成,并且在每個(gè)文件中均需要引用同一個(gè)全局變量時(shí),若在每個(gè)文件中都定義了所需的同名全局變量,則在“連接”時(shí)將會(huì)產(chǎn)生“重復(fù)定義”的錯(cuò)誤。在這種情況下,單獨(dú)編譯每個(gè)文件時(shí)并無異常,編譯程序?qū)炊x分別給它們開辟存儲(chǔ)空間,而當(dāng)進(jìn)行連接時(shí),就會(huì)顯示出錯(cuò)信息。解決的方法是:在其中一個(gè)文件中定義所有全局變量,而在其他用到這些全局變量的文件中用extern對(duì)這些變量進(jìn)行說明。第六章指針考點(diǎn)1.關(guān)于地址和指針在程序中,我們經(jīng)常會(huì)遇到這樣的表達(dá)式,i=3;*i=3;加了*號(hào)和不加*號(hào)的區(qū)別到底是什么意思呢,為什么要設(shè)置這樣的*號(hào)來賦值,首先要清楚變量在內(nèi)存中的存儲(chǔ)方式及變量是如何被存取的。我們知道,在程序中定義的某個(gè)變量,在編譯時(shí)系統(tǒng)會(huì)給這個(gè)變量相應(yīng)地分配與該變量類型相匹配的內(nèi)存單元。即按照程序中所定義的變量的類型,分配與該變量類型所占相同長(zhǎng)度的空間。在內(nèi)存區(qū)中每一個(gè)字節(jié)都有一個(gè)編號(hào),這個(gè)編號(hào)就是“地址“,它相當(dāng)于每個(gè)變量的房間號(hào)。變量的數(shù)據(jù)就存放在地址所標(biāo)識(shí)的內(nèi)存單元中,變量中的數(shù)據(jù)其實(shí)就相當(dāng)于倉(cāng)庫(kù)中各個(gè)房間存放的貨物。如果內(nèi)存中沒有對(duì)字節(jié)進(jìn)行編號(hào),系統(tǒng)將無法對(duì)內(nèi)存進(jìn)行管理。內(nèi)存的存儲(chǔ)空間是連續(xù)的,因此內(nèi)存中的地址號(hào)也是連續(xù)的,并且用二進(jìn)制數(shù)表示,為了直觀起見,在這里我們將用二進(jìn)制數(shù)進(jìn)行描述。一般微機(jī)使用的C系統(tǒng)為整型變量分配2個(gè)字節(jié),為實(shí)型變量分配4個(gè)字節(jié),為字符型變量分配1個(gè)字節(jié),為雙精度類型變量分配8個(gè)字節(jié)。當(dāng)某一變量被定義后,其內(nèi)存中的地址也就確定了。在一般情況下,我們?cè)诔绦蛑兄恍瓒x變量并指出變量名,無須去知道每個(gè)變量在內(nèi)存中的具體地址,由C編譯系統(tǒng)來完成每個(gè)變量與其具體地址發(fā)生聯(lián)系的操作。在程序中我們對(duì)變量進(jìn)行存取操作,實(shí)際上也就是對(duì)某個(gè)變量的地址存儲(chǔ)單元進(jìn)行操作。這種直接按變量的地址存取變量的方式稱為“直接存取“方式。在C語言中,還可以用另一種稱為“間接存取“的方式來完成對(duì)變量進(jìn)行存取的操作,即將變量的地址存放在另一種類型的變量中,從而通過這種新的變量類型來得到變量的值。按C語言規(guī)定,可以在程序中定義整型變量、實(shí)型變量、字符變量等,也可以定義這樣一種特殊的變量,它是專門用來存放地址的。由于通過地址能找到所需的變量單元,我們就可以說:地址“指向“該變量單元。所謂“指向“就是通過地址來體現(xiàn)。在C語言中,將地址形象地稱為“指針“,意思是通過它能找到以它為地址的內(nèi)存單元,這里包含有一個(gè)方向指

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論