C語(yǔ)言程序設(shè)計(jì)課堂筆記_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)課堂筆記_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)課堂筆記_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)課堂筆記_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)課堂筆記_第5頁(yè)
已閱讀5頁(yè),還剩47頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C語(yǔ)言程序設(shè)計(jì)

筆記

(第一版)

3

春莫申

編著

y

石家莊鐵道大學(xué)

一、C語(yǔ)言的基本知識(shí)

(1)字符集與標(biāo)識(shí)集

LC語(yǔ)言的字符集和包括:

大、小寫(xiě)英文字母;數(shù)字;運(yùn)算符;括號(hào):包括小括號(hào),中括號(hào)和大括號(hào);

標(biāo)點(diǎn)符號(hào);特殊符號(hào)(例如數(shù)學(xué)符號(hào));空格符、換行符、制表符。

注:不在字符集中的字符可以在兩個(gè)雙引號(hào)(稱(chēng)為字符串常量)或兩個(gè)單引號(hào)

(稱(chēng)為字符常量)之間出現(xiàn),還可以出現(xiàn)在注釋行中。

2.標(biāo)識(shí)符:

在C語(yǔ)言中,任何一個(gè)標(biāo)識(shí)符必須滿(mǎn)足下列語(yǔ)法規(guī)則:

以字母或下劃線中的任意字符開(kāi)頭and在第一個(gè)字符后,可以是任意的數(shù)字、

字母、下劃線組成序列。

關(guān)鍵字:

關(guān)鍵字又稱(chēng)保留字,一般為小寫(xiě)字母。關(guān)鍵字是C編譯程序預(yù)先登陸的標(biāo)識(shí)

符,它們代表固定的意義,用戶(hù)不能隨便使用。

特定字:

特定字包括:define>undef、include>ifdef、ifndef>endif>line?

用戶(hù)定義字:

用戶(hù)定義字命名時(shí)的注意事項(xiàng):

關(guān)鍵字和特定字不能作為用戶(hù)定義字使用;標(biāo)識(shí)符最好根據(jù)其所代表的含義

取其英文或漢語(yǔ)拼縮寫(xiě),以便于閱讀和檢查;根據(jù)經(jīng)驗(yàn),應(yīng)避免使用容易混淆的字符;字母

的大寫(xiě)和小寫(xiě)代表的意義是不同的;C語(yǔ)言有許多庫(kù)函數(shù),用戶(hù)定義字不要與其中某個(gè)函數(shù)

同名。

(2)變量與常量

1.變量

在C語(yǔ)言中,所有的變量都必須先定義后使用。這樣做的原因是:編譯系統(tǒng)

會(huì)根據(jù)定義為變量分配內(nèi)存空間,分配空間的大小與數(shù)據(jù)類(lèi)型有關(guān);未經(jīng)過(guò)定義的標(biāo)識(shí)符,

系統(tǒng)將不允許其作為變量名使用,這樣會(huì)給程序員調(diào)試程序帶來(lái)方便;編譯系統(tǒng)可以根據(jù)變

量的類(lèi)型檢查對(duì)該變量的運(yùn)算的合法性。

定義變量的格式為:類(lèi)型說(shuō)明符變量名表;

使用逗號(hào)分隔變量名表中的多個(gè)變量,并使用分號(hào)結(jié)束語(yǔ)句;如果不使用

變量名表,也可分別定義每個(gè)變量。

需要特別注意的是,在沒(méi)有使用賦值符號(hào)對(duì)其賦值之前,其初始值為不定值。

其原因是在分配給當(dāng)前定義的變量的內(nèi)存空間中存有之前占用此空間的程序的數(shù)據(jù),故其初

始值為不定值,將0賦給變量即可解決這個(gè)問(wèn)題。

2.常量

定義常量的方法:在第二行寫(xiě)下指令即可,如定義常量m的指令是:#define

PI3.1415926(define和PI是有間隔的)。我們可以把這種常量叫做符號(hào)常量。但是,這

種符號(hào)常量與其他高級(jí)語(yǔ)言用const方法定義的符號(hào)還是有區(qū)別的。此外,還需注意用

預(yù)處理命令#define為變量命名時(shí),通常用大寫(xiě)字母,以區(qū)分變量名。

注:i++的含義是在i的基礎(chǔ)上加上1,并且++號(hào)在i的前面和后面是有不同的含

義的,++在前,先加后用,++在后,先用后加。(需結(jié)合課件3.3)

(3)C語(yǔ)言的數(shù)據(jù)類(lèi)型

本節(jié)需注意的有三點(diǎn),數(shù)據(jù)類(lèi)型不同的變量在內(nèi)存中的儲(chǔ)存方式和所占的字節(jié)

都有可能不同,一種高級(jí)語(yǔ)言支持的數(shù)據(jù)類(lèi)型越多,程序設(shè)計(jì)時(shí)就越方便,越容易;當(dāng)整數(shù)

超出int的表示范圍時(shí),可以使用double或float來(lái)表示數(shù)據(jù);無(wú)意義的數(shù)字串視作字符處

理。

詳細(xì)的數(shù)據(jù)類(lèi)型屬性圖見(jiàn)課本第20頁(yè)。

(4)整型數(shù)據(jù)

1.整型數(shù)據(jù)在內(nèi)存中的存儲(chǔ)方式

一個(gè)整型數(shù)在內(nèi)存中的存儲(chǔ)方式與二進(jìn)制有關(guān):帶符號(hào)的整數(shù)在計(jì)算機(jī)內(nèi)

部采用二進(jìn)制補(bǔ)碼存儲(chǔ),不帶符號(hào)的整數(shù)則采用二進(jìn)制原碼存儲(chǔ)。

不同位數(shù)的整型數(shù)據(jù)的取值范圍是不同的,對(duì)于8位整型數(shù)據(jù)來(lái)說(shuō),表示

帶符號(hào)數(shù)的范圍是-128727,表示不帶符號(hào)數(shù)的范圍是0-255;對(duì)于16位整型數(shù)據(jù)來(lái)說(shuō),

表示帶符號(hào)數(shù)的范圍是-32768-32767,表示不帶符號(hào)數(shù)的范圍是0~6535;而對(duì)于32位整型

數(shù)據(jù),表示帶符號(hào)數(shù)的范圍是-2147483648-2147483647,表示不帶符號(hào)數(shù)的范圍是

0-4294967295.

2.整型變量

按照整型變量所占的二進(jìn)制數(shù)來(lái)分類(lèi),整型變量分為短整型(short)、普通

整形(int)和長(zhǎng)整型(long)三種。而根據(jù)整型變量是否帶符號(hào)來(lái)分類(lèi),可以分為不帶符號(hào)

的整型變量和帶符號(hào)位的整型變量。無(wú)符號(hào)用關(guān)鍵字unsigned表示,用unsigned與短整型、

普通整型和長(zhǎng)整型三種類(lèi)型相匹配,又可以構(gòu)成無(wú)符號(hào)短整型、無(wú)符號(hào)普通整型、無(wú)符號(hào)長(zhǎng)

整型三種類(lèi)型。

3.整形常量

十進(jìn)制表示不能以數(shù)字0開(kāi)頭,八進(jìn)制以數(shù)字0開(kāi)頭,而十六進(jìn)制以數(shù)字

。和x開(kāi)頭。編譯程序以開(kāi)始的數(shù)字區(qū)分三種不同的進(jìn)制。

如果不做特殊指定,整型常量按照普通整型變量的長(zhǎng)度來(lái)存儲(chǔ)。

4.用printf()顯示整型數(shù)據(jù)

顯示整型數(shù)的轉(zhuǎn)換字符有d、o、x、u等。

%d:表示把數(shù)據(jù)按十進(jìn)制整型輸出。

%o:表示把數(shù)據(jù)按八進(jìn)制整型輸出。

%x:表示把數(shù)據(jù)按十六進(jìn)制整型輸出。

%u:表示把數(shù)據(jù)參數(shù)按無(wú)符號(hào)整型輸出。

5,用scanf()輸入整型數(shù)據(jù)

scanf()函數(shù)的使用格式:

scanf("格式信息輸入項(xiàng)1,輸入項(xiàng)2,…);需要注意的是,輸入項(xiàng)必須

使用地址,普通變量的地址是在變量名前加取地址符&。

輸入整型數(shù)的轉(zhuǎn)換字符有d、o、x、u等。

%d:表示把數(shù)據(jù)按十進(jìn)制整型輸入。

%o:表示把數(shù)據(jù)按八進(jìn)制整型輸入。

%x:表示把數(shù)據(jù)按十六進(jìn)制整型輸入。

%u:表示把數(shù)據(jù)參數(shù)按無(wú)符號(hào)整型輸入。

格式信息中除了有%開(kāi)始的轉(zhuǎn)換說(shuō)明,還可以有普通字符,只是這些字符

不是顯示在屏幕上,而是要求使用者在輸入數(shù)據(jù)時(shí),要在相應(yīng)位置輸入相同的字符(除了空

格符、制表符或換行符)。

(5)浮點(diǎn)數(shù)

L浮點(diǎn)數(shù)的表示范圍:

-3.4*10A32~3.4*10A32?(32位系統(tǒng))。

2.浮點(diǎn)常量

C程序中的浮點(diǎn)常量由整數(shù)部分、小數(shù)部分、指數(shù)部分組成。浮點(diǎn)常量的

構(gòu)成規(guī)則是:整數(shù)部分可以不寫(xiě),小數(shù)部分可以不寫(xiě),但不能同時(shí)不寫(xiě);指數(shù)部分可以省略

(相當(dāng)于是用小數(shù)表示法);若有指數(shù)部分,e(或E)兩邊都至少有一位數(shù);指數(shù)的數(shù)字必

須是整數(shù)(范圍為1~3位的整數(shù)),可以為負(fù)或正號(hào),正號(hào)可以省略。

3.用printf()顯示浮點(diǎn)數(shù)據(jù)

輸出浮點(diǎn)數(shù)據(jù)可以用的轉(zhuǎn)換說(shuō)明是%f和%e。%f顯示小數(shù)表示的普通浮點(diǎn)

數(shù),%e顯示科學(xué)計(jì)數(shù)法表示的浮點(diǎn)數(shù)。輸出雙精度(double)類(lèi)型時(shí),還需要在轉(zhuǎn)換字符

前加上字母I。

注:域?qū)拞?wèn)題:域?qū)挷皇侵刚麛?shù)位的寬度,而是指整個(gè)浮點(diǎn)數(shù)顯示的寬度,

還包括了小數(shù)點(diǎn),若不指定域?qū)捄途?默認(rèn)的精度是6.如果指定的域?qū)挻笥谒@示的域?qū)挘?/p>

未用的位置用空格填寫(xiě),如果指定的域?qū)捫∮谒@示的數(shù)實(shí)際域?qū)挘磾?shù)的實(shí)際域?qū)掞@示。

簡(jiǎn)單來(lái)說(shuō),域?qū)捈凑麛?shù)位數(shù),小數(shù)位數(shù),與小數(shù)點(diǎn)的位數(shù)之總和。

(6)字符型數(shù)據(jù)

1.字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)方式

字符型數(shù)據(jù)在內(nèi)存中所占位數(shù)是固定的,只占1字節(jié)(8位)。

2.字符變量與字符常量:

C語(yǔ)言中的字符常量的表示方法是用單引號(hào)將一個(gè)字符括起來(lái)。;例

如H、I,,A,,可以使用字符常量為字符變量賦值此處要注意的問(wèn)題是:?jiǎn)我?hào)中的字符

只能是一個(gè)字符;不能用雙引號(hào)括起來(lái)一個(gè)的字符表示單個(gè)字符常量,即charbeta;

beta="a",這種情況是錯(cuò)誤的;非圖形字符,如退格、換行等,也可以表示成字符型常量。

表示方法是使用轉(zhuǎn)義符'與一些特殊字符構(gòu)成轉(zhuǎn)義序列;除此以外,字符型常量可以像整型

數(shù)據(jù)一樣參與四則運(yùn)算,其實(shí)質(zhì)字符型對(duì)應(yīng)的ASCII碼之間進(jìn)行的運(yùn)算。

3.用scanf()輸入字符:

當(dāng)scanf()讀入一組數(shù)據(jù)是,如果不使用%c進(jìn)行轉(zhuǎn)換,scanf()掃視輸

入信息,跳過(guò)空格符、制表符或換行符,尋找下一個(gè)輸入域。但是若使用%c進(jìn)行轉(zhuǎn)換,情

況則不同,scanf()不會(huì)跳過(guò)空格符、制表符、或換行符,而是直接把笑一個(gè)字符輸入各

參數(shù),不論它是什么,即使是空格符等非正常值,也會(huì)被順次賦給變量。

4.用getchar()輸入字符和用putchar。輸出字符

getchar()函數(shù)是接收一個(gè)從標(biāo)準(zhǔn)輸入/輸出設(shè)備上輸入的字符。一般的標(biāo)

準(zhǔn)輸入設(shè)備是鍵盤(pán)。調(diào)用getchar()函數(shù)的方法是:字符變量=8?£1^()。

putchar()函數(shù)是向標(biāo)準(zhǔn)輸入設(shè)備/輸出設(shè)備上輸入一個(gè)字符。一般的標(biāo)準(zhǔn)

輸出設(shè)備是屏幕終端。

Putchar。函數(shù)與getchar。函數(shù)不同,需要把輸出字符作為函數(shù)的參數(shù),

放在括號(hào)里,括號(hào)里的內(nèi)容是不能缺省的。調(diào)用的方法一般是:putchar(字符變量或字符常

量)putchar。函數(shù)的括號(hào)中返回的數(shù)據(jù)類(lèi)型是整型,返回值為字符的ASCII碼值。

5.字符串常量

用雙引號(hào)括起來(lái)的字符序列是字符串常量。需注意,形如“a”與H是完

全不同的,前者是字符串常量,占的字節(jié)數(shù)是2;后者是字符常量。占的字節(jié)數(shù)是1。

字符串常量的輸出有兩種方法,一種是直接輸出:“printf("howare

you")”,另一種是使用%s轉(zhuǎn)換說(shuō)明:“printf(“%s”,"howareyou")”。

(7)不同數(shù)據(jù)間的混合運(yùn)算

L自動(dòng)轉(zhuǎn)換:

自動(dòng)轉(zhuǎn)換是指編譯程序自己自發(fā)進(jìn)行的轉(zhuǎn)換,轉(zhuǎn)換的原則是為兩個(gè)運(yùn)算

對(duì)象的計(jì)算結(jié)果盡可能地提供多的存儲(chǔ)空間,自動(dòng)轉(zhuǎn)換表見(jiàn)課本33頁(yè)。

應(yīng)注意:自動(dòng)轉(zhuǎn)換只針對(duì)兩個(gè)運(yùn)算對(duì)象,不能對(duì)表達(dá)式的所有運(yùn)算符進(jìn)

行一次性的自動(dòng)轉(zhuǎn)換。例如:5/4+3.2的計(jì)算結(jié)果是4.20,因?yàn)?/4是按整型進(jìn)行計(jì)算的,故

5/4的值為1而非1.25,所以整個(gè)表達(dá)式的值是4.20而非4.45,并不因?yàn)?.2是浮點(diǎn)型而將

整個(gè)表達(dá)式按浮點(diǎn)型計(jì)算。

2.強(qiáng)制轉(zhuǎn)換

強(qiáng)制裝換的格式為(數(shù)據(jù)類(lèi)型名)操作對(duì)象。

3.賦值表達(dá)式的類(lèi)型轉(zhuǎn)換

當(dāng)賦值運(yùn)算符左邊的變量與賦值運(yùn)算符右邊的表達(dá)式的數(shù)據(jù)類(lèi)型相同

時(shí),不需要進(jìn)行數(shù)據(jù)類(lèi)型的轉(zhuǎn)換。

當(dāng)賦值運(yùn)算符左邊的變量與賦值運(yùn)算符右邊的表達(dá)式的數(shù)據(jù)類(lèi)型不相同

時(shí),系統(tǒng)負(fù)責(zé)將右邊的數(shù)據(jù)類(lèi)型轉(zhuǎn)變?yōu)樽筮叺臄?shù)據(jù)類(lèi)型。

編寫(xiě)程序時(shí)應(yīng)該遵循的原則是盡量不要在不同的數(shù)據(jù)類(lèi)型之間進(jìn)行轉(zhuǎn)換,

如果一定要進(jìn)行,可以在同種類(lèi)的數(shù)據(jù)類(lèi)型間進(jìn)行長(zhǎng)度增加的轉(zhuǎn)換,但是不要進(jìn)行長(zhǎng)度減少

的轉(zhuǎn)換,以期避免數(shù)據(jù)丟失。

二、順序和選擇結(jié)構(gòu)程序設(shè)計(jì)

(1)結(jié)構(gòu)化程序設(shè)計(jì)

1.結(jié)構(gòu)化程序設(shè)計(jì)的三種基本結(jié)構(gòu)

順序結(jié)構(gòu):順序結(jié)構(gòu)就是一組逐條執(zhí)行的可執(zhí)行語(yǔ)句。按照書(shū)寫(xiě)順序,自上

而下執(zhí)行。

選擇結(jié)構(gòu)(分支結(jié)構(gòu))。選擇結(jié)構(gòu)是一種先對(duì)給定條件進(jìn)行判斷,然后根據(jù)

判斷的結(jié)果執(zhí)行相應(yīng)的命令的結(jié)構(gòu)。

循環(huán)結(jié)構(gòu)。循環(huán)結(jié)構(gòu)是指多次重復(fù)執(zhí)行同一組命令的結(jié)構(gòu)。具有循環(huán)結(jié)構(gòu)的

程序一般必須指定循環(huán)終止的條件,以便對(duì)程序的循環(huán)進(jìn)行有效的控制,以免進(jìn)入無(wú)限循環(huán)

(或稱(chēng)死循環(huán))狀態(tài)。循環(huán)結(jié)構(gòu)一般有兩種,當(dāng)型循環(huán)和直到型循環(huán)。當(dāng)型循環(huán)的含義是:

當(dāng)條件P成立時(shí),反復(fù)執(zhí)行A,條件P不成立時(shí),結(jié)束循環(huán);直到型循環(huán)的含義是:反復(fù)

執(zhí)行A,直到條件P不成立。通常情況下,我們稱(chēng)條件P為循環(huán)條件,而將動(dòng)作A稱(chēng)為循

環(huán)體。

循環(huán)次數(shù)是指循環(huán)動(dòng)作所進(jìn)行的次數(shù)。有些程序在循環(huán)執(zhí)行之前是無(wú)法預(yù)知

循環(huán)次數(shù)的,而另一些程序在循環(huán)之前就知道循環(huán)次數(shù)。

(2)語(yǔ)句與分程序

1.復(fù)合語(yǔ)句與分程序結(jié)構(gòu)

復(fù)合語(yǔ)句在語(yǔ)法上相當(dāng)于一個(gè)簡(jiǎn)單語(yǔ)句,在程序中可以作為一個(gè)獨(dú)立語(yǔ)句來(lái)

看待,因此又稱(chēng)分程序。復(fù)合語(yǔ)句的執(zhí)行按在其中的語(yǔ)句順序執(zhí)行。復(fù)合語(yǔ)句中的每個(gè)說(shuō)明

語(yǔ)句和執(zhí)行語(yǔ)句都必須帶分號(hào),而在花括號(hào)的后面不用加分號(hào)。用復(fù)合語(yǔ)句代替多個(gè)簡(jiǎn)單語(yǔ)

句是C語(yǔ)言的特征之一。其優(yōu)點(diǎn)是:使用靈活,并可以在分程序中使用局部變量。

(3)順序結(jié)構(gòu)程序設(shè)計(jì)

順序結(jié)構(gòu)設(shè)計(jì)的步驟可以歸納為:

用預(yù)處理命令包含文件或進(jìn)行宏定義;定義變量(即分配存儲(chǔ)空間);為變量賦

初值(可以用賦值語(yǔ)句或輸入函數(shù));計(jì)算;輸出結(jié)果(用輸出函數(shù))。

如果在編譯程序中如果有用到一些較為復(fù)雜的數(shù)學(xué)計(jì)算,應(yīng)該在C的編譯的

開(kāi)頭寫(xiě)上#include"math.h"

(4)算術(shù)運(yùn)算符和賦值運(yùn)算符

1.算術(shù)運(yùn)算符的種類(lèi)及運(yùn)算

兩個(gè)數(shù)相除,結(jié)果仍為整數(shù),商向下取整數(shù),相當(dāng)于數(shù)學(xué)中的整除運(yùn)算;

取模運(yùn)算%實(shí)際上是數(shù)學(xué)運(yùn)算的求余數(shù)運(yùn)算。

2.算術(shù)表達(dá)式及算術(shù)運(yùn)算符的優(yōu)先級(jí)

算術(shù)運(yùn)算符的優(yōu)先級(jí)與數(shù)學(xué)中基本相同,即先乘除,后加減。取模運(yùn)算的

優(yōu)先級(jí)與乘除相同。函數(shù)和括號(hào)的優(yōu)先級(jí)最高。

3.算術(shù)運(yùn)算符的結(jié)合性

C語(yǔ)言規(guī)定雙目算術(shù)運(yùn)算符的結(jié)合性是自左至右,雙目運(yùn)算符的結(jié)合性和

數(shù)學(xué)運(yùn)算一致。

在做除法時(shí),一定要驗(yàn)證除數(shù)是否為零的問(wèn)題。

4.普通賦值運(yùn)算符

賦值號(hào)與數(shù)學(xué)中的等號(hào)是不同的,如X=X+1在數(shù)學(xué)中是不成立的,但是

在編譯中,表示將X+1后的值再賦給X;賦值運(yùn)算的優(yōu)先級(jí)小于算術(shù)運(yùn)算符。賦值運(yùn)算符

的結(jié)合性是自右至左。

(5)復(fù)合賦值運(yùn)算符

復(fù)合賦值運(yùn)算符的使用規(guī)則是:*(^=丫與*=*(^丫等價(jià),例如,a*=b-2等價(jià)

于a=a*(b-2)o

(6)選擇結(jié)構(gòu)設(shè)計(jì)

4.1.1關(guān)系運(yùn)算符和關(guān)系表達(dá)式

1.關(guān)系運(yùn)算符工

關(guān)系運(yùn)算:是對(duì)兩個(gè)操作數(shù)之間進(jìn)行比較的運(yùn)算符

關(guān)系運(yùn)算的結(jié)果:為邏輯值“真”或“假”

(邏輯值也稱(chēng)“布爾”值,boolean)?

C語(yǔ)言中提供六種關(guān)系運(yùn)算符:<、<=、>=、>、==、!=

★優(yōu)先級(jí):?<=>=?高于(==!=)

★“等于”的關(guān)系運(yùn)算符是,而是賦值運(yùn)算符

2.關(guān)系表達(dá)式

關(guān)系表達(dá)式:用關(guān)系運(yùn)算符把兩個(gè)表達(dá)式連接起來(lái)的式子

一般形式為:

表達(dá)式1關(guān)系運(yùn)算符表達(dá)式2

例如:

x>3工

y*5<100/a

x==0

x!=10

3.關(guān)系表達(dá)式的值

關(guān)系表達(dá)式的運(yùn)算結(jié)果為真或假,由于C語(yǔ)言無(wú)邏

輯類(lèi)型常量,規(guī)定用1和0代替。

邏輯真,記為1,邏輯假,記為0。

反之:用。表示假,非。表示真。

非零即真,如!5(對(duì)五取反)的邏輯值為0。

各種運(yùn)算符的運(yùn)算順序是?。ǚ沁\(yùn)算)>算術(shù)運(yùn)算符〉關(guān)系運(yùn)算符〉&&>||>賦值運(yùn)算符

c語(yǔ)言中的邏輯運(yùn)算符有三個(gè):

邏輯與(&&)、邏輯或(II)、譴輯非(!)

&&(邏輯與)兩個(gè)量都為真時(shí)為真(1),否則為假(0)

||(邏輯或)兩個(gè)量中只要有一個(gè)為真時(shí)為真(1),只有都

為假時(shí)為假(0)

!(邏輯非)一個(gè)量為真時(shí)為假(0),假時(shí)為真(1)

表4?3邏輯運(yùn)算真值表

ab!a!ba||b

豐。豐。00卡1

聿。00101

0本01001

001100

邏輯表達(dá)式是用邏輯運(yùn)算符連接起來(lái)的的式子,如果出現(xiàn)形如邏輯表達(dá)式i&&(H)

邏輯表達(dá)式2類(lèi)型的算式,則應(yīng)先計(jì)算邏輯表達(dá)式1或邏輯表達(dá)式2的值,再進(jìn)行兩個(gè)表達(dá)

式結(jié)果之間的與運(yùn)算或或運(yùn)算。邏輯計(jì)算的結(jié)果非真即假,也就是非0即1。

參加邏輯運(yùn)算的可以是任何類(lèi)型的數(shù)據(jù),但是系統(tǒng)只會(huì)根據(jù)其是0還是非0簡(jiǎn)單的

判定真假。

在書(shū)寫(xiě)表達(dá)式時(shí),要注意一些由格式不當(dāng)引起的語(yǔ)義錯(cuò)誤,例如5<=X<=20,在數(shù)

學(xué)中有很明確的含義,即X大于等于5,小于等于20.。隨著X的取值范圍變化,這個(gè)語(yǔ)句

可能為真,亦可能為假,但在計(jì)算機(jī)中,如果以這個(gè)語(yǔ)句恒為真,執(zhí)行順序?yàn)橛勺笾劣?,?/p>

管X的值為幾,X<=5的值只能為1或0(非真即假,所以非0即1),0和1均小于20,故

整個(gè)語(yǔ)句的值永遠(yuǎn)是1,故在計(jì)算機(jī)中要想表示該表達(dá)式的正確意思,應(yīng)用X>=5&&X<=20

這種形式來(lái)表達(dá),此類(lèi)問(wèn)題是需要格外注意的一點(diǎn)。

應(yīng)注意,等號(hào)的表達(dá)是用=="=”在計(jì)算機(jī)中是賦值符號(hào)。

練習(xí):計(jì)算下面表達(dá)式的值。

9-!4<8&&3||6>7

由運(yùn)算順序可知,現(xiàn)計(jì)算非運(yùn)算,故先計(jì)算!4的值,4非0,取反即為0,故

9-0<8為假,故與運(yùn)算符左邊的值是0;同理可判定與運(yùn)算符的右邊為1,故整個(gè)表達(dá)式的

值是0

If語(yǔ)句:

簡(jiǎn)單if語(yǔ)句流程圖語(yǔ)句的執(zhí)行過(guò)程:

先計(jì)算“條件”,若條

件成立(值為“真”),則

執(zhí)行“語(yǔ)句體”;否則什

么也不做。

此處的“語(yǔ)句體”可以

是簡(jiǎn)單語(yǔ)句,也可以是

用一對(duì)大括號(hào)氣》”括起

來(lái)的復(fù)合語(yǔ)句。

簡(jiǎn)單if語(yǔ)句流程圖

前導(dǎo)語(yǔ)句

If(條件表達(dá)式)

語(yǔ)句1:

語(yǔ)句2?

語(yǔ)句m

后續(xù)語(yǔ)句

單分支語(yǔ)句結(jié)構(gòu)如下:

前導(dǎo)語(yǔ)句

if(條件)

{

語(yǔ)句體1;

}

else

{

語(yǔ)句體2;

}

后續(xù)語(yǔ)句

多分支結(jié)構(gòu)如下:

if^elseif語(yǔ)句實(shí)現(xiàn)多分支選擇結(jié)構(gòu)

其一般形式為:

if(表達(dá)式1)

語(yǔ)句體1;

elseif(表達(dá)式2)

語(yǔ)句體2;

elseif(表達(dá)式3)

語(yǔ)句體3;

I!

else懈表達(dá)式n)

語(yǔ)句體n;

耐se

語(yǔ)句體n+1;

當(dāng)IF語(yǔ)句中只有一個(gè)條件時(shí),大括號(hào)可以不寫(xiě),但為形成良好的編寫(xiě)習(xí)慣建議寫(xiě)下

大括號(hào)。

IF的條件語(yǔ)句是真時(shí),才會(huì)執(zhí)行大括號(hào)里的語(yǔ)句,如果為假,則不執(zhí)行括號(hào)內(nèi)語(yǔ)句。

多分支語(yǔ)句對(duì)于括號(hào)的要求與單列語(yǔ)句是一致的。但此時(shí)強(qiáng)烈建議寫(xiě)上大括號(hào),因

為在分支太多而無(wú)大括號(hào)是,會(huì)出現(xiàn)系統(tǒng)自己無(wú)法找到與某個(gè)else配對(duì)的If的情況,此時(shí)

系統(tǒng)會(huì)沒(méi)有用花括號(hào)明確表明嵌套關(guān)系的情況下,會(huì)把else劃歸離它最近的IF,C語(yǔ)言的

這種規(guī)定可能會(huì)導(dǎo)致運(yùn)行結(jié)果與編程目的不符的結(jié)果。

例題:

3.中國(guó)三大電信運(yùn)營(yíng)商的電話號(hào)碼段如下:

(1)中國(guó)移動(dòng):

2G號(hào)段:134、135、1B6、137、138、139、150、

151、152、158、159

3G號(hào)段:157、187、188

(2)中國(guó)聯(lián)通:

2G號(hào)段:130、131、132、155、156

3G號(hào)段:185、186

(3)中國(guó)電信:

2G號(hào)段:133、153

3G號(hào)段:180、189

要求:根據(jù)輸入的號(hào)碼段,輸出運(yùn)營(yíng)商及號(hào)段種類(lèi)

如輸入:180,輸出:中國(guó)電信3G.

ttinclude"stdio.h〃

voidmain()

{

intcl;

printf(〃請(qǐng)輸入您的號(hào)段:〃);

scanf(〃%d〃,cl);

if((cl>=134&&cl<=152)||cl>=158||cl<=159)

printf(〃您的號(hào)碼是中國(guó)移動(dòng)2G號(hào)碼〃);

elseif(cl==157||cl==158||cl==159)

printf(〃您的號(hào)碼是中國(guó)移動(dòng)3G號(hào)碼〃);

elseif((cl>=130&&cl<=132)||cl==155||cl==156)

printf(〃您的號(hào)碼是中國(guó)聯(lián)通2G號(hào)碼〃);

elseif(cl==185||cl==186)

printf(〃您的號(hào)碼是中國(guó)聯(lián)通3G號(hào)碼〃);

elseif(cl==133||cl==153)

printf(〃您的號(hào)碼是中國(guó)電信2G號(hào)碼〃);

elseif(cl==180||cl==189)

printf(〃您的號(hào)碼是中國(guó)電信3G號(hào)碼〃);

else

printf(〃您輸入的號(hào)碼有誤,請(qǐng)重新輸入〃);

Switch條件語(yǔ)句:

1.形式

Switch(某個(gè)變量)

{Case常量1:語(yǔ)句1;break;

Case常量2:語(yǔ)句2;break;

Case常量n:語(yǔ)句n;break;

2.注意事項(xiàng):

Switch的條件常量必須是整形數(shù)或者字符,不能是小數(shù)或分?jǐn)?shù)。

同一個(gè)switch結(jié)構(gòu)中的常量表達(dá)式的值應(yīng)該不同,否則會(huì)發(fā)生錯(cuò)誤。

Switch結(jié)構(gòu)中的break很重要,如果不出現(xiàn)break,系統(tǒng)將依次執(zhí)行switch中的各條語(yǔ)

句。

Switch結(jié)構(gòu)中的最后一句可以不加break,因?yàn)榻Y(jié)構(gòu)已經(jīng)快要結(jié)束了,會(huì)自動(dòng)跳出結(jié)構(gòu)。

多個(gè)case可以執(zhí)行相同的語(yǔ)句,不用每個(gè)語(yǔ)句都寫(xiě)一遍,在最后一條寫(xiě)上即可。

形如:

Case常量1

Case常量2

Case常量3

Case常量4:語(yǔ)句1;break;

Case常量5語(yǔ)句2:break;

條件運(yùn)算符和條件表達(dá)式:

1.一般形式為:

表達(dá)式1?表達(dá)式2:表達(dá)式3;

當(dāng)表達(dá)式1為真,就執(zhí)行表達(dá)式2;表達(dá)式1為假,就執(zhí)行表達(dá)式3。

2.使用時(shí)的注意事項(xiàng):

條件運(yùn)算符?和:是一對(duì)運(yùn)算符,在條件表達(dá)式中不可分開(kāi)單獨(dú)使用。

一個(gè)條件表達(dá)式或用于賦值語(yǔ)句中,或用于另一個(gè)表達(dá)式中,不要單獨(dú)構(gòu)成一條語(yǔ)

句,即x<y?x+y:x-y;無(wú)任何輸出,是無(wú)意義的,因?yàn)閄和Y均無(wú)賦值。

條件運(yùn)算符的結(jié)合性是自右向左,即a>b?a:c>d?c:d應(yīng)理解為a>b?a:(c>d?c:d)

條件運(yùn)算符“?”和“:”是一對(duì)運(yùn)算符,其優(yōu)先級(jí)別高于賦值運(yùn)算符,低于算術(shù)運(yùn)

算符。

3.例題應(yīng)用舉例:

3,根據(jù)輸入的時(shí)毗將一天24小時(shí)分為凌晨⑻

〈6)、上午(才,6Y2)、中午('殖12Y4)、下午

fp',14Y8)、晚上(忙18~24)輸亂

解答:

ttinclude"stdio.h〃

voidmain()

intt;

scanf&t);

(0<=t&&12>t)?((0<=t&&6>=t)?printf(〃凌晨〃):printf(〃上午〃))

:((24>=t&&14〈=t)?((14〈二t&&18>=t)?printf(〃下午〃):printf(〃晚上〃))

:printf(“中午〃));

While循環(huán)

1.While表達(dá)式的條件必須用括號(hào)括起來(lái)。

2.While(i),在設(shè)定這個(gè)循環(huán)條件時(shí)。應(yīng)該注意i的設(shè)定,預(yù)防進(jìn)入死循環(huán)。

3.當(dāng)循環(huán)體中有兩句及以上的語(yǔ)句時(shí),必須用大括號(hào)把這些語(yǔ)句括起,這一點(diǎn)與IF語(yǔ)句

一致。

4.計(jì)數(shù)變量i要注意其初值和位置,不同的位置與處置也許會(huì)對(duì)循環(huán)造成極大的影響。

5.循環(huán)的三個(gè)要點(diǎn)是:循環(huán)變量的初始值,循環(huán)條件和循環(huán)條件的增量。

6.While語(yǔ)句的一般形式:

While(表達(dá)式)

循環(huán)體語(yǔ)句;

7.表達(dá)式一般是關(guān)系表達(dá)式或邏輯表達(dá)式。

8.do-while語(yǔ)句的語(yǔ)法格式

do

語(yǔ)句體;

While(表達(dá)式);/*結(jié)束*/

Do-while語(yǔ)句用于實(shí)現(xiàn)直到型循環(huán),不管條件是否成立,至少執(zhí)行循環(huán)體一次。

For循環(huán)

For(表達(dá)式1;表達(dá)式2;表達(dá)式3)

{

循環(huán)語(yǔ)句;

表達(dá)式1、表達(dá)式2、表達(dá)式3的功能分別是初始表達(dá)式、循環(huán)條件表達(dá)式、變值增量表達(dá)

式。

For語(yǔ)句與while語(yǔ)句并沒(méi)有什么本質(zhì)上的區(qū)別,只是for語(yǔ)句把while語(yǔ)句中的幾個(gè)關(guān)鍵條

件集中起來(lái),寫(xiě)在了括號(hào)里,便于觀察,這種方法在程序語(yǔ)句條數(shù)不多時(shí)沒(méi)有什么卵用,只

有在語(yǔ)句條數(shù)很多時(shí)才能體現(xiàn)出優(yōu)勢(shì)。

For語(yǔ)句的使用很靈活,三條語(yǔ)句都可以省略掉,由其他位置的語(yǔ)句代替。

循環(huán)嵌套

一個(gè)循環(huán)體中含有另外一個(gè)循環(huán)體,這樣的方式稱(chēng)為循環(huán)嵌套,循環(huán)嵌套可以嵌套同種循環(huán),

也可以嵌套不同種的循環(huán)。

內(nèi)層循環(huán)與外層循環(huán)的關(guān)系類(lèi)似于秒針、分針、時(shí)針的關(guān)系,最內(nèi)層的循環(huán)從初始條件到溢

出條件走完一遍,其外層循環(huán)的計(jì)數(shù)單位才加上一,及其類(lèi)似于當(dāng)秒針從0到60跑完一個(gè)

循環(huán),分針才會(huì)走動(dòng)一格。把握原則即可。

Break語(yǔ)句和continue語(yǔ)句的區(qū)別:系統(tǒng)一旦讀到break語(yǔ)句時(shí),會(huì)自動(dòng)跳出當(dāng)前循環(huán),往

下執(zhí)行,而系統(tǒng)continue語(yǔ)句時(shí),會(huì)跳到循環(huán)的條件判定處,如果條件符合,將重新從頭執(zhí)

行循環(huán)。

循環(huán)結(jié)構(gòu)是最重要的計(jì)算機(jī)結(jié)構(gòu),因?yàn)橛?jì)算機(jī)的優(yōu)勢(shì)就在于可以連續(xù)不斷的重復(fù)工作。

用循環(huán)結(jié)構(gòu)解決實(shí)際問(wèn)題的方法大致可以分為以下幾類(lèi):求和(積),迭代,窮舉等。

函數(shù)

函數(shù)是一段可以重復(fù)調(diào)用、功能相對(duì)完整的程序段

C程序的執(zhí)行是從main函數(shù)開(kāi)始的,也要從main程序結(jié)束,函數(shù)與函數(shù)之間并沒(méi)有從屬關(guān)

系,函數(shù)之間可以相互調(diào)用,但不能調(diào)用main函數(shù)。

一個(gè)函數(shù)的使用主要包括函數(shù)聲明、函數(shù)調(diào)用和函數(shù)定義其格式如圖所示:

6.2.2函數(shù)的結(jié)構(gòu)

include<stdio.h>函數(shù)聲明

floatfac(intk);

voidrnainQ函數(shù)調(diào)用

longt;

t=fac(8)/(fac(5)*fac(8<5));

printf("C(8,5)=%ld\nH,t);

)I

floatfac(intk)

inti;longf=1;

for(i=1;i<=k;i++)f=f*i;

retum(f);

)

如果函數(shù)是在另一個(gè)函數(shù)中聲明,那么這個(gè)被聲明的函數(shù)只能在它聲明的函數(shù)中調(diào)用。如果

想要讓所有的函數(shù)都可以調(diào)用定義的函數(shù),那么應(yīng)該在所有的函數(shù)開(kāi)頭(即最上方)聲明該

函數(shù)。

函數(shù)聲明的作用是通知系統(tǒng)該函數(shù)已經(jīng)定義過(guò)。

當(dāng)一個(gè)函數(shù)的定義在它的調(diào)用之前,就可以不用聲明。

函數(shù)聲明的一般格式:函數(shù)原型(定義函數(shù)的第一行)+分號(hào)

函數(shù)大致可以分為四類(lèi):無(wú)返回值無(wú)參數(shù)、無(wú)返回值有參數(shù)、有返回值無(wú)參數(shù)、有返回值有

參數(shù),圖表如下:

r無(wú)參數(shù)clrscr();

無(wú)返回值?

有參數(shù)window(20,5,60,20);

函數(shù)

無(wú)參數(shù)x=rand()%100;

有參數(shù)v=4/3.0*pi*pow(4.5,3);

無(wú)參數(shù)無(wú)返回值調(diào)用類(lèi)型的格式與舉例:

格式:

1.無(wú)參數(shù)無(wú)返回值類(lèi)型

表示無(wú)參數(shù)

⑴定義r

void函數(shù)名(void)可省略

{-

表示無(wú)返回值

不要省略

(2)聲明

void函數(shù)名(void);函數(shù)體

(3)調(diào)用

用函數(shù)語(yǔ)句調(diào)用:函數(shù)名();

舉例:(計(jì)算梯形面積程序)

/*Note:VourchoiceisCIDE*/

ttinclude"stdio.h"

uoidarea();

uoidnain()

<

area();

>

uoidarea()

<

inta,b,c,d;

printi(“請(qǐng)諳入梯形的上底、下底和高:,,);

scanf("%d%d%d",fea,&b,&c);

d=((a+b)*c)/2;

printf(“梯形的面積是

有參數(shù)無(wú)返回值的格式與舉例:

格式:

2.有參數(shù)無(wú)返回值類(lèi)型

(1)定義表示有參數(shù)

void函數(shù)名(形參列表)

表示無(wú)返回值

不要省略

(2)聲明

void函數(shù)名(形參列表);

(3)調(diào)用

用函數(shù)語(yǔ)句調(diào)用:函數(shù)名(實(shí)參列表);

舉例(計(jì)算n到m的值):

/*Note:VourchoiceisCIDE*/

ttinclude"stdio.h"

uoidsum(intm,intn,inta);

uoidmain()

<

int,a=0;

printF「請(qǐng)輸入累加的上限和下限“);

scanf("%d^d",,&n);

sum(m,n,a);

>

uoidsum(intm.intn,inta)

<

For(;n<=n;m++)

<

a=a+m;

>

printer累加和為常d'a);

>

無(wú)參數(shù)有返回值類(lèi)型:

格式:

3.無(wú)參數(shù)有返回值類(lèi)型

(1)定義

數(shù)據(jù)類(lèi)型函數(shù)名(void)

return返回值;

}

(2)聲明

void函數(shù)名(void);

(3)調(diào)用

用函數(shù)表達(dá)式調(diào)用:變量=函數(shù)名();

有參數(shù)有返回值類(lèi)型:

4?有參數(shù)有返回值類(lèi)型

(1)定義表示有參數(shù)

數(shù)據(jù)類(lèi)型函數(shù)名(形參列表)

表示有返回值

return返回值;不要省略

)---------------表示符結(jié)果返回,

(2)聲明返回值-函數(shù)的值

void函數(shù)名(形參列表);

(3)調(diào)用

用函數(shù)表達(dá)式調(diào)用:變量二函數(shù)名(實(shí)參列表);

x___________

接收返回值

返回值的數(shù)據(jù)類(lèi)型必須與函數(shù)的數(shù)據(jù)類(lèi)型相同。

形參與實(shí)參二三事

實(shí)參對(duì)型慘的數(shù)據(jù)傳遞只能是單向的,只能由形參傳遞給實(shí)參,而不能從形參傳遞給實(shí)參。

形參與實(shí)參的三個(gè)一致性要求:

形參與實(shí)參的必須個(gè)數(shù)相等、數(shù)據(jù)類(lèi)型一致、數(shù)據(jù)一一對(duì)應(yīng)。

數(shù)據(jù)傳遞

數(shù)據(jù)傳遞的方法主要包括三類(lèi):參數(shù)傳遞及函數(shù)返回值、批量數(shù)據(jù)傳遞、外部變量三種辦法。

利用參數(shù)傳遞及函數(shù)返回值是比較常用的數(shù)據(jù)傳遞方法,用return語(yǔ)句即可實(shí)現(xiàn)。

利用數(shù)組名實(shí)現(xiàn)批量數(shù)據(jù)傳遞的方法是使用傳遞數(shù)組,可分為傳值和傳址兩類(lèi),傳遞數(shù)據(jù)名

的特點(diǎn)包括效率高,無(wú)需返回值,可雙向傳遞但有安全隱患。

利用外部變量實(shí)現(xiàn)數(shù)據(jù)傳遞

使用外部變量實(shí)現(xiàn)數(shù)據(jù)傳遞的原因是外部變量作用域廣,壽命長(zhǎng),有記憶能力、為各函數(shù)共

享,便于函數(shù)間的數(shù)據(jù)交流,實(shí)現(xiàn)多值的返回;使用外部變量的缺點(diǎn):破壞了信息傳遞的隱

蔽性、降低了函數(shù)的通用性和可移植性。

函數(shù)的調(diào)用方式:

函數(shù)的遞歸調(diào)用:是指一個(gè)函數(shù)在它的函數(shù)體內(nèi),直接或間接的調(diào)用該函數(shù)本身。

直接遞歸調(diào)用間接遞歸調(diào)用

解遞歸問(wèn)題的關(guān)鍵是找出遞歸規(guī)律和遞歸

終止條件。

遞歸規(guī)律:使問(wèn)題向遞歸終止(邊界)條件轉(zhuǎn)化的規(guī)律

O遞歸規(guī)律必須使問(wèn)題越來(lái)越簡(jiǎn)單。

遞歸終止條件:也就是所描述問(wèn)題的最簡(jiǎn)單情況,

它本身不再使用遞歸規(guī)律。

函數(shù)的嵌套調(diào)用:是指在執(zhí)行調(diào)用函數(shù)時(shí),被調(diào)用函數(shù)又調(diào)用了其它函數(shù)。

函數(shù)的嵌套調(diào)用嵌套函數(shù)之間的關(guān)系有些類(lèi)似于微機(jī)原理中的中斷原理,即先不斷的遞歸調(diào)

用到不滿(mǎn)足調(diào)用條件為止,再不斷地進(jìn)行返回操作知道最初的一層。遞歸調(diào)用也可以看作是

一種特殊的嵌套函數(shù)效果圖如下:

變量的作用域和生存期:

「按定義位置{r外內(nèi)部部變量

變量j(動(dòng)態(tài)存儲(chǔ)變量

〔按存儲(chǔ)位置<靜態(tài)存儲(chǔ)變量

、寄存器變量

內(nèi)部變量:

內(nèi)部變量是指定義在某個(gè)函數(shù)內(nèi)的變量,其定義合法僅限于該函數(shù)。

作用域:只在本函數(shù)范圍內(nèi)可見(jiàn)。

生存期:函數(shù)調(diào)用的開(kāi)始至結(jié)束。

外部變量:

外部變量是指定義在所有函數(shù)之外的變量,其定義在整個(gè)程序中皆合法。

作用域:整個(gè)程序中可見(jiàn)。

生存期:程序的整個(gè)運(yùn)行期間。

內(nèi)部變量和外部變量的作用域與生存期小結(jié)

作用域生存期

僅限函數(shù)內(nèi)(或復(fù)合函數(shù)(或復(fù)合語(yǔ)句)調(diào)用的開(kāi)

內(nèi)部變量語(yǔ)句內(nèi))引用始至結(jié)束。

外部變量在整個(gè)工程中引用程序的整個(gè)運(yùn)行期間

當(dāng)外部變量與內(nèi)部變量重名時(shí),遵循就近原則,即哪個(gè)定義近,變量就被賦予了那個(gè)值。

靜態(tài)存儲(chǔ)區(qū):

使變量進(jìn)入靜態(tài)存儲(chǔ)區(qū)的兩種方式:將變量定義在函數(shù)外部(外部變量);在函數(shù)內(nèi)部使

用static關(guān)鍵字定義變量(內(nèi)部變量);常量一般也放在靜態(tài)存儲(chǔ)區(qū)中,

動(dòng)態(tài)存儲(chǔ)區(qū):

將變量定義在函數(shù)內(nèi)部,并用auto聲明。(內(nèi)部變量)。

作為函數(shù)定義的形參,如:

voidmain,)

(

autointx=1,y=5;/*內(nèi)部變量x、y聲明為動(dòng)態(tài)存儲(chǔ)7

加中,y|;

}

voidfuc(intm,intn)產(chǎn)形參m、n作為函數(shù)的形參為動(dòng)態(tài)存儲(chǔ)”/

(

inttime=0;/*內(nèi)部變量time使用動(dòng)應(yīng)存儲(chǔ)7

printf("m+n=%dH,m+n|;

)

CPU寄存器:

將變量定義在函數(shù)內(nèi)部,并用register聲明即可使函數(shù)進(jìn)入CPU寄存器。

內(nèi)部變量和外部變量的作用域與生存期小結(jié)

定義存儲(chǔ)類(lèi)別

位置存儲(chǔ)位置作用域生存期

美美宇

static僅在當(dāng)前文件中引用

外部

靜態(tài)存儲(chǔ)區(qū)程序的整個(gè)貶行期間

變量

不用static可在整個(gè)工程中引用

靜年存儲(chǔ)區(qū)static程序的整個(gè)運(yùn)行期間

內(nèi)部auto僅限函數(shù)內(nèi)(或復(fù)合語(yǔ)

動(dòng)態(tài)存儲(chǔ)區(qū)

變量(可?。┚洌﹥?nèi)引用函數(shù)(或復(fù)合語(yǔ)句)調(diào)用的

開(kāi)始至結(jié)束

CPU寄存器register

數(shù)組:

數(shù)組是指一組具有相同相同名稱(chēng)、相同數(shù)據(jù)類(lèi)型的有序變量組成。數(shù)組滿(mǎn)足下列條件:具有

相同的名字;具有相同的數(shù)據(jù)類(lèi)型;在存儲(chǔ)器中連續(xù)存放。

一維數(shù)組的定義格式:類(lèi)型標(biāo)識(shí)符數(shù)組名[常量表達(dá)式];在定義時(shí),中括號(hào)中必須是常量

而不能是變量,常量表達(dá)式說(shuō)明數(shù)組的大小,即數(shù)組中元素的個(gè)數(shù),故只能使用常量,且該

常量時(shí)整形數(shù),不能是小數(shù)。

數(shù)組名要符合標(biāo)識(shí)符的命名規(guī)則,且不能和其他變量重名。

一維數(shù)組在引用時(shí),引用格式是:數(shù)組名[表達(dá)式],引用時(shí)表達(dá)式可以使常量、也可以是

變量,表示調(diào)用了數(shù)組中下標(biāo)為變量值的數(shù)組元素;數(shù)組下標(biāo)從0開(kāi)始,但不能大于[數(shù)組

長(zhǎng)度-1]的那個(gè)數(shù);引用時(shí)只能引用某一個(gè)數(shù)組中的元素,不能引用整個(gè)數(shù)組;C語(yǔ)言編譯

系統(tǒng)不檢查數(shù)組下標(biāo)的越界問(wèn)題!!

intA[5]={11,20,32,14,15);

intB[5]={47,12,25,21,67);

上述形式叫做數(shù)組的初始化,大括號(hào)中的數(shù)被依次付給了變量中的每個(gè)元素,初始化允許只

初始化一部分元素,若初始化的數(shù)沒(méi)有覆蓋數(shù)組中所有的元素,則沒(méi)有覆蓋的元素沒(méi)默認(rèn)賦

值為0;靜態(tài)數(shù)組(static)的默認(rèn)初值均為零,動(dòng)態(tài)數(shù)組初值不定;初始化時(shí)允許省略數(shù)組

長(zhǎng)度(即在方括號(hào)中可以不填元素個(gè)數(shù))。

二維數(shù)組

二維數(shù)組的定義:類(lèi)型標(biāo)識(shí)符數(shù)組名【常量表達(dá)式1】【常量表達(dá)式2】,其中常量表達(dá)

式1表示二維數(shù)組的行數(shù)、常量表達(dá)式2表示二維數(shù)組的列數(shù)。

二維數(shù)組的引用形式:數(shù)組名【行下標(biāo)】【列下標(biāo)工二維數(shù)組的元素?cái)?shù)是行數(shù)乘列數(shù),行下

標(biāo)和列下標(biāo)的取值范圍是【a-1]

二維數(shù)組的初始化:

全部初始化:按行分段初始化:形如int【213】{{1,2,3},{4,5,6}}一個(gè)大括號(hào)括起的是一

行的元素;按行連續(xù)初始化:形如int【2【3】{1,2,3,4,5,6}這些數(shù)值會(huì)按順序依次賦給從00

到12對(duì)應(yīng)下標(biāo)的元素。部分初始化:形如int【2】[3]={{1,2,3},{4,5,6}}和int[【2】【3】

={1,2,3}則未被初始化到得元素會(huì)自動(dòng)賦值為0;第一維長(zhǎng)度省略初始化,例如int【】【3】

={{1},{4,5}}=>a[2】【3】,int【】【3]={l,2,3,4,5}=>a⑵[3],按行順序初始化的省略是

和元素總個(gè)數(shù)和賦值個(gè)數(shù)綜合確定的,比如上面的例子,1,2,34,5共有5個(gè)元素,所以第一

個(gè)空格中只能填2,如果填1的話只有三個(gè)元素,裝不下五個(gè)元素,所以只能填2使得數(shù)組

包含元素格式剛剛大于賦值數(shù)值的個(gè)數(shù)。定義時(shí)無(wú)論數(shù)組有幾維,初始化時(shí)只能省略第一

維?。?!

數(shù)組與函數(shù)的參數(shù):

數(shù)組值做函數(shù)的實(shí)參:與單獨(dú)變量做函數(shù)的參數(shù)完全一樣,只是單獨(dú)變量做參數(shù)時(shí)使用的是

變量名,數(shù)組元素作參數(shù)時(shí)填的是數(shù)組名[元素序號(hào)]。數(shù)組做函數(shù)的實(shí)參:在調(diào)用時(shí)直接

使用數(shù)組名即可,數(shù)組名此刻不但代表共同的名字,還代表著數(shù)組的首地址,即數(shù)組中第一

個(gè)元素的地址,換句話說(shuō),數(shù)組作實(shí)參時(shí),傳遞的是地址而不是值;在把整個(gè)數(shù)組做參數(shù)的

函數(shù)在函數(shù)名后的括號(hào)中,應(yīng)該有定義一個(gè)形參數(shù)組,如圖:

7.3數(shù)組作為函數(shù)的參數(shù)Ia[1]

—a[2]

例7.10用函數(shù)計(jì)算數(shù)組元素的總和。a[3]

a[4]

#include"stdlo.h"

a[5]

voidmain()

a[6]

inta[8]={1,2,3,4,5,6,7,8},c;—a[7]

c=sum(a,8);/*函數(shù)調(diào)用:將數(shù)組名a和其組元數(shù)作為實(shí)參*/

printf("sumis%d",c);

sum(intbfj^intz)/*函數(shù)定義:同型數(shù)組b和變量z做形參*/

{inti,s=0、^

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

此處是否標(biāo)注組員數(shù)無(wú)影

s=s+b[i];

響,形參數(shù)組的作用是接收

return(s);

實(shí)參數(shù)組的首地址。

在傳遞完成后,形參數(shù)組與調(diào)用的數(shù)組實(shí)際上已經(jīng)是同一個(gè)數(shù)組,改動(dòng)任何一個(gè),另外一個(gè)

也會(huì)自動(dòng)做出相同的改變。

字符數(shù)組:

C語(yǔ)言中,單引號(hào)括起來(lái)的是字符,雙引號(hào)引起來(lái)的是字符串,同時(shí)C語(yǔ)言中沒(méi)有字符串?dāng)?shù)

據(jù)類(lèi)型。

字符數(shù)組就是數(shù)據(jù)類(lèi)型為字符型的數(shù)組。

字符數(shù)組的初始化方法:

chartest[8]={'a','b','c','d',"e\T,'g\'h'>;

chartest[8]="abcdefgh";

chartest[]=Hgong1403class";

二、字符數(shù)組的初始化

與一般數(shù)組一樣,字符數(shù)組也可以初始化,如:

charchName[8]={'A',T,'『,*c','e'};

(1)如果花括弧內(nèi)的字符個(gè)數(shù)大于數(shù)組長(zhǎng)度,則按語(yǔ)

法錯(cuò)誤處理。

(2)如果花括弧內(nèi)的字符個(gè)數(shù)小于數(shù)組長(zhǎng)度,則只將

這些字符賦給數(shù)組中前面那些元素,其余的元素自

動(dòng)定為空字符(即'\0')O

(3)字符數(shù)組的長(zhǎng)度也可用初值來(lái)確定

(4)也可以直接用常量字符串進(jìn)行初始化賦值

字符串的輸入輸出方法:

7.4.2字符串的輸入輸出方法

1.單個(gè)字符的輸入輸出-用“%c",字符逐個(gè)輸入輸出

方法一:

chars[80];

scanf("%c",&s[i]);/*0<i<=79*/

printf("%c",s[i]);/*0<i<=79*/

方法二:[

chars[80];

s[i]=getchar();/*0<i<=79*/

putchar(s[i]);/*0<i<=79*/

2.字符串整體輸入輸出?用“%s”格式控制符

方法一:

charstr[80];

scanf("%s",str);"遇到空格不再接收數(shù)據(jù),回車(chē)輸入結(jié)束(無(wú)&)*/

printf("%s",str);

方法二(推薦):

charstr[80];

gets(str);"輸入都可接收,遇到回車(chē)結(jié)束輸入*/

puts(str);

注:scanf和gets在輸入結(jié)束后會(huì)自動(dòng)補(bǔ)'\0'

在接收字符串時(shí),使用scanf和gets是不同的,scanf遇到空格或回車(chē)都不再接受字符,而

gets只把回車(chē)當(dāng)成結(jié)束輸入的標(biāo)志。

7.4.3字符串及其結(jié)束標(biāo)志30':

字符串是用雙引號(hào)括起來(lái)的若干有效字符序列。

字符串可以包括字母、數(shù)字、專(zhuān)用字符、轉(zhuǎn)義字符

等。如“Iamastudent"、“Basic"、"x+y=%d\n"

等都是合法的字符串。

萬(wàn)般來(lái)講,字符串是利用字符數(shù)組存放的。在進(jìn)

行字符處理時(shí),必須事先知道字符數(shù)組中的字符個(gè)

數(shù),這在程序設(shè)計(jì)過(guò)程中是很麻煩的一件事。

I為了有效而方便地處理字符數(shù)組,c語(yǔ)言提供了7

:不需要了解數(shù)組中有效字符長(zhǎng)度的方法。其基本思彳

7想是:在每個(gè)字符數(shù)組的有效字符后面(或字符串末7

!尾)加上一個(gè)特殊字符'\0’(其ASCII碼值為0),在處理,

7字符數(shù)組的過(guò)程中,一旦遇到結(jié)束符w,就表示已?

7達(dá)到字符串末尾。同時(shí),c語(yǔ)言允許用一個(gè)簡(jiǎn)單的字;

:符串常量初始化一個(gè)字符數(shù)組,如:彳

chartest[50^="Happy";

)等價(jià)于彳

chartest[20]={'H','a','p','p','y','\0'};

!¥

在使用鍵盤(pán)輸入數(shù)據(jù)時(shí),在輸入完成后,按下回車(chē)鍵,系統(tǒng)會(huì)自動(dòng)的在末尾補(bǔ)上'\0',不用

手動(dòng)輸入,但注意,不要超過(guò)數(shù)組長(zhǎng)度,'\0’雖然并不顯示,但是也會(huì)占用一個(gè)數(shù)組名額。

字符數(shù)據(jù)與數(shù)值數(shù)組傳遞的比較:

5.字符數(shù)組的傳遞:5.數(shù)值數(shù)組的傳遞:

voidmain()voidmain()

((

charch[10]="student";chara[10]={2,4,7,1,2,5,5,3,968);

printf("%c",count(ch));printf("%d",count(a,10));

)}

i

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論