版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版高??蒲谐晒D(zhuǎn)化合同管理規(guī)定2篇
- 2025年度社區(qū)垃圾分類(lèi)與回收處理服務(wù)合同范本2篇
- 2025年度智能交通系統(tǒng)技術(shù)改造合同2篇
- 二零二五年度房地產(chǎn)維修基金補(bǔ)充協(xié)議合同模板3篇
- 2025年度生鮮乳產(chǎn)業(yè)鏈上下游協(xié)同發(fā)展協(xié)議3篇
- 螞蟻運(yùn)糧項(xiàng)目課程設(shè)計(jì)
- 2025年度汽車(chē)租賃合同糾紛調(diào)解協(xié)議書(shū)2篇
- 二零二五年度干掛石材研發(fā)與生產(chǎn)合作協(xié)議2篇
- 海南衛(wèi)生健康職業(yè)學(xué)院《植物學(xué)實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年度男方債務(wù)處理離婚協(xié)議示范書(shū)3篇
- 科研倫理與學(xué)術(shù)規(guī)范期末考試試題
- 2024年秋季人教版新教材七年級(jí)上冊(cè)語(yǔ)文全冊(cè)教案(名師教學(xué)設(shè)計(jì)簡(jiǎn)案)
- 2024中華人民共和國(guó)農(nóng)村集體經(jīng)濟(jì)組織法詳細(xì)解讀課件
- 2025屆湖南省長(zhǎng)沙市青竹湖湘一外國(guó)語(yǔ)學(xué)校七年級(jí)數(shù)學(xué)第一學(xué)期期末經(jīng)典試題含解析
- 2024中國(guó)食藥同源大健康產(chǎn)業(yè)消費(fèi)洞察與產(chǎn)業(yè)發(fā)展分析白皮書(shū)
- 郵政銀行借款合同
- 2024屆廣州市番禺區(qū)重點(diǎn)名校中考數(shù)學(xué)全真模擬試題含解析
- 出現(xiàn)產(chǎn)品質(zhì)量問(wèn)題退換貨承諾
- 合伙開(kāi)托管班協(xié)議書(shū)4篇
- 廣告宣傳物料廣告宣傳物料配送方案
- 項(xiàng)目維修維保方案
評(píng)論
0/150
提交評(píng)論