第3章最簡(jiǎn)單的C程序設(shè)計(jì)-順序結(jié)構(gòu)程序設(shè)計(jì)_第1頁(yè)
第3章最簡(jiǎn)單的C程序設(shè)計(jì)-順序結(jié)構(gòu)程序設(shè)計(jì)_第2頁(yè)
第3章最簡(jiǎn)單的C程序設(shè)計(jì)-順序結(jié)構(gòu)程序設(shè)計(jì)_第3頁(yè)
第3章最簡(jiǎn)單的C程序設(shè)計(jì)-順序結(jié)構(gòu)程序設(shè)計(jì)_第4頁(yè)
第3章最簡(jiǎn)單的C程序設(shè)計(jì)-順序結(jié)構(gòu)程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩83頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第3章最簡(jiǎn)單的C程序設(shè)計(jì)

——順序結(jié)構(gòu)程序設(shè)計(jì)3.1程序的三種結(jié)構(gòu)

1966年,Bohra和Jacopini提出了以下三種基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu),用這三種基本結(jié)構(gòu)作為表示一個(gè)良好算法的基本單元。(1)順序結(jié)構(gòu):

如右圖,虛線框內(nèi)是一個(gè)順序結(jié)構(gòu)。其中A和B兩個(gè)框是順序執(zhí)行的。即在執(zhí)行完A框所指定的操作后,必然接著執(zhí)行B框所指定的操作。順序結(jié)構(gòu)是最簡(jiǎn)單的一種基本結(jié)構(gòu)。

(2)選擇結(jié)構(gòu):

或稱分支結(jié)構(gòu),如下圖所示,虛線框內(nèi)是一個(gè)選擇結(jié)構(gòu)。此結(jié)構(gòu)中必包含一個(gè)判斷框。根據(jù)給定的條件p是否成立而選擇執(zhí)行A框或B框。(a)請(qǐng)注意:無(wú)論p條件是否成立,只能執(zhí)行A框或B框之一,不可能既執(zhí)行A框又執(zhí)行B框。無(wú)論走哪一條路徑,在執(zhí)行完A或B之后,都經(jīng)過(guò)b點(diǎn),然后脫離本選擇結(jié)構(gòu)。 A或B兩個(gè)框中可以有一個(gè)是空的,即不執(zhí)行任何操作,如下圖。(b)(3)循環(huán)結(jié)構(gòu):

即反復(fù)執(zhí)行某一部分的操作。有兩類循環(huán)結(jié)構(gòu)。當(dāng)型(While型)循環(huán)結(jié)構(gòu)

直到型(Until型)循環(huán)

①當(dāng)型(While型)循環(huán)結(jié)構(gòu)

如(a)圖,它的功能是當(dāng)給定的條件p1成立時(shí),執(zhí)行A框操作,執(zhí)行完A后,再判斷條件p1是否成立,如果仍然成立,再執(zhí)行A框,如此反復(fù)執(zhí)行A框,直到某一次p1條件不成立為止,此時(shí)不執(zhí)行A框,而從b點(diǎn)脫離循環(huán)結(jié)構(gòu)。②直到型(Until型)循環(huán)結(jié)構(gòu) 如(b)圖,它的功能是先執(zhí)行A框,然后判斷給定的p2條件是否成立,如果p2條件不成立,則再執(zhí)行A,然后再對(duì)p2條件作判斷,如果p2條件仍然不成立,又執(zhí)行A….如此反復(fù)執(zhí)行A,直到給定的p2條件成立為止,此時(shí)不再執(zhí)行A,從b點(diǎn)脫離本循環(huán)結(jié)構(gòu)。三種基本結(jié)構(gòu)的共同特點(diǎn):(1)只有一個(gè)入口。(2)只有一個(gè)出口。(請(qǐng)注意:一個(gè)菱形判斷框有兩個(gè)出口,而一個(gè)選擇結(jié)構(gòu)只有一個(gè)出口。不要將菱形框的出口和選擇結(jié)構(gòu)的出口混淆。)(3)結(jié)構(gòu)內(nèi)的每一部分都有機(jī)會(huì)被執(zhí)行到。(4)結(jié)構(gòu)內(nèi)不存在“死循環(huán)”(無(wú)終止的循環(huán))。小結(jié) 由三種基本結(jié)構(gòu)順序組成的算法結(jié)構(gòu),可以解決任何復(fù)雜的問(wèn)題。由基本結(jié)構(gòu)所構(gòu)成的算法屬于“結(jié)構(gòu)化”的算法,它不存在無(wú)規(guī)律的轉(zhuǎn)向,只在本基本結(jié)構(gòu)內(nèi)才允許存在分支和向前或向后的跳轉(zhuǎn)。不正確的流程表示:流程內(nèi)的死循環(huán)圖中沒有一條從入口到出口的路徑通過(guò)A框擴(kuò)展 只要具有上述四個(gè)特點(diǎn)的都可以作為基本結(jié)構(gòu)。可以自己定義基本結(jié)構(gòu),并由這些基本結(jié)構(gòu)組成結(jié)構(gòu)化程序。此圖符合基本結(jié)構(gòu)的特點(diǎn)

這是一個(gè)多分支選擇結(jié)構(gòu),根據(jù)表達(dá)式的值決定執(zhí)行路線。虛線框內(nèi)的結(jié)構(gòu)是一個(gè)入口一個(gè)出口,并且有上述全部的四個(gè)特點(diǎn)。由此構(gòu)成的算法結(jié)構(gòu)也是結(jié)構(gòu)化的算法??梢哉J(rèn)為這是由三種基本結(jié)構(gòu)所派生出來(lái)的。3.2C語(yǔ)句概述C程序源程序文件1源程序文件2源程序文件n預(yù)處理命令函數(shù)n函數(shù)1數(shù)據(jù)聲明函數(shù)首部函數(shù)體數(shù)據(jù)聲明執(zhí)行語(yǔ)句

C語(yǔ)句:C程序的執(zhí)行部分是由C語(yǔ)句組成的,程序的功能也是由執(zhí)行語(yǔ)句實(shí)現(xiàn)的。C語(yǔ)句以“;”作分隔符,編譯后產(chǎn)生機(jī)器指令。

一個(gè)c程序可以由若干個(gè)源程序文件組成;一個(gè)源文件可以由若干個(gè)函數(shù)和預(yù)處理命令以及全局變量(第七章)聲明部分組成;一個(gè)函數(shù)由函數(shù)首部和函數(shù)體組成;函數(shù)體由數(shù)據(jù)聲明和執(zhí)行語(yǔ)句組成。C語(yǔ)句分類:1、控制語(yǔ)句:用于完成一定的控制功能,以實(shí)現(xiàn)程序的各種結(jié)構(gòu)方式,它們由特定的語(yǔ)句定義符組成。C語(yǔ)言有9種控制語(yǔ)句,可分成以下三類:

(1)條件判斷語(yǔ)句:條件選擇語(yǔ)句:if<條件>~else~

; (或?:)多分支條件選擇語(yǔ)句(開關(guān)語(yǔ)句)

switch(){case...;~}(2)循環(huán)執(zhí)行語(yǔ)句:條件循環(huán)語(yǔ)句:for<條件>~

;條件循環(huán)(當(dāng)型)語(yǔ)句:while<條件>{~};條件循環(huán)(直到型)語(yǔ)句:do{~}while<條件>;(3)轉(zhuǎn)向語(yǔ)句:結(jié)束本次循環(huán)語(yǔ)句:continue終止循環(huán)或switch語(yǔ)句:break無(wú)條件轉(zhuǎn)向語(yǔ)句:goto從函數(shù)返回語(yǔ)句:return

2、函數(shù)調(diào)用語(yǔ)句:用于完成一次函數(shù)調(diào)用。 組成:由一次函數(shù)調(diào)用加“;”構(gòu)成。其一般形式為:函數(shù)名(實(shí)際參數(shù)表);執(zhí)行函數(shù)語(yǔ)句就是調(diào)用函數(shù)體并把實(shí)際參數(shù)賦予函數(shù)定義中的形式參數(shù),然后執(zhí)行被調(diào)函數(shù)體中的語(yǔ)句,求取函數(shù)值。(在第7章函數(shù)中再詳細(xì)介紹)

例如:printf(“ThisisaCstatement!”);

/*調(diào)用庫(kù)函數(shù),輸出字符串*/3、表達(dá)式語(yǔ)句:用于完成一次表達(dá)式操作。

組成:由一個(gè)表達(dá)式加“;”構(gòu)成。其一般形式為:表達(dá)式;執(zhí)行表達(dá)式語(yǔ)句就是計(jì)算表達(dá)式的值。

例如:x=y+z;/*賦值語(yǔ)句*/ y+z; /*加法運(yùn)算語(yǔ)句,但計(jì)算結(jié)果不能保留,無(wú)實(shí)際意義*/ i++;

/*自增1語(yǔ)句,i值增1*/4、空語(yǔ)句:

組成:只由一個(gè)“;”構(gòu)成,在程序中空語(yǔ)句可用來(lái)作流程的轉(zhuǎn)向點(diǎn)或循環(huán)語(yǔ)句中的空循環(huán)體。程序執(zhí)行時(shí)空語(yǔ)句不產(chǎn)生任何動(dòng)作。程序設(shè)計(jì)中有時(shí)需要加一個(gè)空語(yǔ)句來(lái)表示存在一條語(yǔ)句,但隨意加分號(hào)也會(huì)導(dǎo)致邏輯上的錯(cuò)誤,需要慎用。

例如:while(getchar()!=‘\n’);/*本語(yǔ)句的功能是,只要從鍵盤輸入的字符不是回車則重新輸入。這里的循環(huán)體為空語(yǔ)句,什么也不做。*/5、復(fù)合語(yǔ)句:用{…}括起來(lái)的一組語(yǔ)句,完成一些特定的操作功能,語(yǔ)法上和單一語(yǔ)句相同,在程序中應(yīng)把復(fù)合語(yǔ)句看成是單條語(yǔ)句,而不是多條語(yǔ)句。 一般形式:{ [數(shù)據(jù)說(shuō)明部分;] 執(zhí)行語(yǔ)句部分; }例如: {

x=y+z;

a=b+c;

printf(“%d%d”,x,a); }

是一條復(fù)合語(yǔ)句。復(fù)合語(yǔ)句內(nèi)的各條語(yǔ)句都必須以分號(hào)“;”結(jié)尾,在括號(hào)“}”外不能加分號(hào)。復(fù)合語(yǔ)句可嵌套:例如:voidmain(){ … { z=x+y; t=z/100;printf("%f",t); }…}3.3賦值表達(dá)式和賦值語(yǔ)句3.3.1賦值表達(dá)式1、賦值運(yùn)算符1)含義:將賦值號(hào)“=”右邊的運(yùn)算對(duì)象之值賦給左邊的運(yùn)算對(duì)象。 格式:變量標(biāo)識(shí)符=表達(dá)式如:x=1;x=x+1;2)使用要點(diǎn): 當(dāng)“=”兩邊數(shù)據(jù)類型不同時(shí),將進(jìn)行數(shù)據(jù)類型的自動(dòng)轉(zhuǎn)換,轉(zhuǎn)換規(guī)則:使賦值號(hào)右邊表達(dá)式值自動(dòng)轉(zhuǎn)換成左邊變量的類型。 例如:intx; floaty=3.5; x=y; /*則運(yùn)行結(jié)果為int型3*/ 例如:inti; i=2.56; /*結(jié)果i=2;*/2、復(fù)合賦值運(yùn)算符(自反運(yùn)算符)1)含義:在賦值運(yùn)算符“=”之前加上其它運(yùn)算符構(gòu)成的運(yùn)算符。2)一般形式:表達(dá)式1運(yùn)算符=表達(dá)式2

等價(jià)于:表達(dá)式1=表達(dá)式1運(yùn)算符表達(dá)式2如:a+=3 等價(jià)于a=a+3x*=3 等價(jià)于x=x*3x%=3 等價(jià)于x=x%3x/=y+3 等價(jià)于x=x/(y+3)3)使用要點(diǎn):

凡是二目(二元)運(yùn)算符,都可以與“=”組合成復(fù)合賦值符。

C語(yǔ)言規(guī)定的10種復(fù)合賦值運(yùn)算符如下: +=、-=、*=、/=、%=

/*復(fù)合算術(shù)運(yùn)算符(5個(gè))*/

<<=、>>=、&=、|=、^=

/*復(fù)合位運(yùn)算符(5個(gè))*/ 使用復(fù)合賦值符的目的:簡(jiǎn)化程序;提高編譯效率。 左側(cè)必須是變量,不能是常量或表達(dá)式。

例如:3=x-2*y;×

a+b=3;× 賦值表達(dá)式的值與變量值相等,且可嵌套。例:a=b=c=5a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)/*表達(dá)式值為5,a,b,c值為5*//*b=5;a=5*//*表達(dá)式值11,c=6,a=11*//*表達(dá)式值10,a=10,b=4,c=6*//*表達(dá)式值5,a=5,b=10,c=2*/例:inta=2;a%=4-1;a+=a*=a-=a*=3;例:a=12;a+=a-=a*a/*a=0等價(jià)于a=a+(a=a*(a=a-(a=a*3)))*//*a=-264等價(jià)于a=a+(a=a-(a*a))*/ 賦值轉(zhuǎn)換規(guī)則:使賦值號(hào)右邊表達(dá)式值自動(dòng)轉(zhuǎn)換成其左邊變量的類型例floatf;inti;i=10;f=i;則f=10.0例inti;i=2.56;/*結(jié)果i=2*/3、賦值表達(dá)式1)含義:由一個(gè)賦值運(yùn)算符將一個(gè)變量和表達(dá)式連接起來(lái)的式子。2)一般形式:變量=表達(dá)式3)求解過(guò)程:賦值運(yùn)算符按照“右結(jié)合”順序運(yùn)算,將“=”右邊表達(dá)式的值賦值給左邊的變量。

①求賦值運(yùn)算符右側(cè)的“表達(dá)式”的值; ②賦給賦值運(yùn)算符左側(cè)的變量。

例如:賦值表達(dá)式“a=3*5”的值為15,執(zhí)行表達(dá)式后,變量a的值也是15。

注意:一個(gè)表達(dá)式應(yīng)該有一個(gè)值左值(lvalue):賦值運(yùn)算符左側(cè)的標(biāo)識(shí)符變量可以作為左值;而表達(dá)式就不能作為左值(如a+b);常量也不能作為左值。右值(rvalue):出現(xiàn)在賦值運(yùn)算符右側(cè)的表達(dá)式

左值也可以出現(xiàn)在賦值運(yùn)算符右側(cè),因而左值都可以作為右值。4、使用舉例1)賦值表達(dá)式中的“表達(dá)式”,又可以是一個(gè)賦值表達(dá)式。

例如:a=(b=5)

分析:括弧內(nèi)的“b=5”是一個(gè)賦值表達(dá)式,它的值等于5。執(zhí)行表達(dá)式“a=(b=5)”相當(dāng)于執(zhí)行“b=5”和“a=b”兩個(gè)賦值表達(dá)式。賦值運(yùn)算符按照“自右而左”的結(jié)合順序,因此,“(b=5)”外面的括弧可以不要,即“a=(b=5)”和“a=b=5”等價(jià)。a=b=c=3

/*表達(dá)式值為3,a,b,c值均為3*/a=5+(c=2) /*表達(dá)式值為7,a值為7,c為2*/a=(b=4)+(c=6)/*表達(dá)式值為10,a=10,b=4,c=6*/a=(b=10)/(c=2)/*表達(dá)式值為5,a=5,b=10,c=2*/請(qǐng)分析下面的賦值表達(dá)式∶(a=3*5)=4*3分析:先執(zhí)行括弧內(nèi)的運(yùn)算,將15賦給a,然后執(zhí)行4*3的運(yùn)算,得12,再把12賦給a。最后a的值為12,整個(gè)表達(dá)式的值為12。可以看到:(a=3*5)出現(xiàn)在賦值運(yùn)算符的左側(cè),因此賦值表達(dá)式(a=3*5)是左值。注意:在對(duì)賦值表達(dá)式(a=3*5)求解后,變量a得到值15執(zhí)行(a=3*5)=4*3時(shí),實(shí)際上是將4*3的積12賦給變量a,而不是賦給3*5。不能寫成:a=3*5=4*32)賦值表達(dá)式也可以包含復(fù)合的賦值運(yùn)算符。

例如:若a=12,求a+=a-=a*a

分析:此賦值表達(dá)式的求解步驟如下∶①先進(jìn)行“a-=a*a”的運(yùn)算,它相當(dāng)于a=a-a*a,a的值為12-144=-132。②再進(jìn)行“a+=-132”的運(yùn)算,相當(dāng)于a=a+(-132),a的值為-132-132=-264。 3)將賦值表達(dá)式作為表達(dá)式的一種,使賦值操作不僅可以出現(xiàn)在賦值語(yǔ)句中,而且可以以表達(dá)式形式出現(xiàn)在其他語(yǔ)句(如輸出語(yǔ)句、循環(huán)語(yǔ)句等)中。

例如:printf("%d",a=b);

分析:如果b的值為3,則輸出a的值(也是表達(dá)式a=b的值)為3。在一個(gè)語(yǔ)句中完成了賦值和輸出雙重功能。3.3.2賦值過(guò)程中的類型轉(zhuǎn)換

如果賦值運(yùn)算符兩側(cè)的類型不一致,但都是數(shù)值型或字符型時(shí),在賦值時(shí)要進(jìn)行類型轉(zhuǎn)換。1、將浮點(diǎn)型數(shù)據(jù)(包括單、雙精度)賦給整型變量時(shí),舍棄浮點(diǎn)數(shù)的小數(shù)部分,取整數(shù)部分賦給整型變量。即:int=float的結(jié)果為int型。

如:i為整型變量,執(zhí)行“i=3.56”的結(jié)果是使i的值為3,以整數(shù)形式存儲(chǔ)在整型變量中。

如:floata;ints;a=12.34;s=a;這時(shí)s的值為12。2、將整型數(shù)據(jù)賦給單、雙精度浮點(diǎn)型變量時(shí),數(shù)值不變,但以浮點(diǎn)數(shù)形式存儲(chǔ)到變量中。

如:將23賦給float變量f,即執(zhí)行f=23,先將23轉(zhuǎn)換成23.00000,再存儲(chǔ)在f中。即:float=int的結(jié)果為float型。 將23賦給double型變量d,即執(zhí)行d=23,則將23補(bǔ)足有效位數(shù)字為23.00000000000000,然后以雙精度浮點(diǎn)數(shù)形式存儲(chǔ)到變量d中。即:double=int的結(jié)果為double型。3、將一個(gè)double型數(shù)據(jù)賦給float變量時(shí),截取其前面7位有效數(shù)字,存放到float變量的存儲(chǔ)單元(4個(gè)字節(jié))中。但應(yīng)注意數(shù)值范圍不能溢出。

如:floatf; doubled=123.456789e100; f=d; 就出現(xiàn)溢出的錯(cuò)誤。

如果將一個(gè)float型數(shù)據(jù)賦給double變量時(shí),數(shù)值不變,有效位數(shù)擴(kuò)展到16位,在內(nèi)存中以8個(gè)字節(jié)存儲(chǔ)。4、字符型數(shù)據(jù)賦給整型變量時(shí),由于字符只占1個(gè)字節(jié),而整型變量為2個(gè)字節(jié),因此將字符數(shù)據(jù)(8個(gè)二進(jìn)位)放到整型變量存儲(chǔ)單元的低8位中:。即:int=char☆第一種情況:

如果所用系統(tǒng)將字符處理為無(wú)符號(hào)的字符類型,或程序已將字符變量定義為unsignedchar型,則將字符的8位放到整型變量低8位,高8位補(bǔ)零。

例如:將字符‘\376’賦給int型變量i unsignedcharc; inti; c=‘\376’; i=c; 則i的值為254。111111101111111000000000☆第二種情況:

如果所用系統(tǒng)(如TurboC)將字符處理為帶符號(hào)的(即signedchar),若字符最高位為0,則整型變量高8位補(bǔ)0;若字符最高位為1,則高8位補(bǔ)1。這稱為“符號(hào)位擴(kuò)展”,這樣做的目的是使數(shù)值保持不變。

例如:變量c(字符‘\376’)以整數(shù)形式輸出為-2,i的值也是-2。charc; inti; c=‘\376’; i=c; 則i的值為-2。111111111111111011111110‘\376’代表ASACII為254的那個(gè)字符,轉(zhuǎn)換成二進(jìn)制就為11111110;因?yàn)槭孜粸?,所以它為負(fù)數(shù)。即為:-(1111110)2(補(bǔ)碼)轉(zhuǎn)換成原碼為:-(0000001+1)2=-(10)2=-2;所以charc=254和charc=-2是一樣的5、將一個(gè)int、short、long型數(shù)據(jù)賦給一個(gè)char型變量時(shí),只將其低8位原封不動(dòng)地送到char型變量(即截?cái)啵?/p>

例如:inti=289;charc=‘a(chǎn)’;c=i;

賦值情況: c的值為33,如果用“%c”輸出c,將得到字符“!”(其ASCII碼為33)。000000010010000100100001c=33i=2896、將帶符號(hào)的整型數(shù)據(jù)(int型)賦給long型變量時(shí),要進(jìn)行符號(hào)擴(kuò)展,將整型數(shù)的16位送到long型低16位中:

如果int型數(shù)據(jù)為正值(符號(hào)位為0),則long型變量的高16位補(bǔ)0;

如果int型變量為負(fù)值(符號(hào)位為1),則long型變量的高16位補(bǔ)1,以保持?jǐn)?shù)值不改變。

反之,若將一個(gè)long型數(shù)據(jù)賦給一個(gè)int型變量,只將long型數(shù)據(jù)中低16位原封不動(dòng)地送到整型變量(即截?cái)啵?、將signed型數(shù)據(jù)賦給長(zhǎng)度相同的unsigned型變量,按原樣照賦(連原有的符號(hào)位也作為數(shù)值一起傳送)。

例3.1有符號(hào)數(shù)據(jù)傳送給無(wú)符號(hào)變量。

#include<stdio.h>

voidmain()

{unsigneda;

intb=-1;

a=b;

printf(″%u\n″,a);

賦值情況見圖P.47圖3-7 說(shuō)明:“%u”是輸出無(wú)符號(hào)數(shù)時(shí)所用的格式符。如果b為正值,且在0~32767之間,則賦值后數(shù)值不變。運(yùn)行結(jié)果:655358、將unsignedint型數(shù)據(jù)賦給longint型變量時(shí),不存在符號(hào)擴(kuò)展問(wèn)題,只需將高位補(bǔ)0即可。將一個(gè)unsigned類型數(shù)據(jù)賦給一個(gè)占字節(jié)數(shù)相同的signed型整型變量(例如:unsignedint→int,unsignedlong→long,unsignedshort→short),將unsigned型變量的內(nèi)容原樣送到signed型變量中,但如果數(shù)據(jù)范圍超過(guò)相應(yīng)整型的范圍,則會(huì)出現(xiàn)數(shù)據(jù)錯(cuò)誤。

例3.2unsignedinta=65535; intb; b=a; 此時(shí)b的值為-1。(補(bǔ)碼) 將a整個(gè)送到b中,由于b是int,第1位是符號(hào)位,因此b成了負(fù)數(shù)。根據(jù)補(bǔ)碼知識(shí)可知,b的值為-1,可以用printf(″%d″,b);來(lái)驗(yàn)證。111111111111111111111111111111113.3.3賦值語(yǔ)句

賦值語(yǔ)句是由賦值表達(dá)式再加上分號(hào)構(gòu)成的表達(dá)式語(yǔ)句。其一般形式為:變量=表達(dá)式;賦值語(yǔ)句的功能和特點(diǎn)都與賦值表達(dá)式相同。它是程序中使用最多的語(yǔ)句之一。在賦值語(yǔ)句的使用中需要注意以下幾點(diǎn): 1、由于在賦值符“=”右邊的表達(dá)式也可以又是一個(gè)賦值表達(dá)式,因此,下述形式變量=(變量=表達(dá)式);是成立的,從而形成嵌套的情形。其擴(kuò)展之后的一般形式為:變量=變量=…=表達(dá)式;

例如:a=b=c=d=e=5;按照賦值運(yùn)算符的右結(jié)合性,因此實(shí)際上等效于:e=5;d=e;c=d;b=c;a=b;2、注意在變量說(shuō)明中給變量賦初值和賦值語(yǔ)句的區(qū)別:給變量賦初值是變量說(shuō)明的一部分,賦初值后的變量與其后的其它同類變量之間仍必須用逗號(hào)間隔,而賦值語(yǔ)句則必須用分號(hào)結(jié)尾。3、在變量說(shuō)明中,不允許連續(xù)給多個(gè)變量賦初值。

如說(shuō)明inta=b=c=5是錯(cuò)誤的,必須寫為inta=5,b=5,c=5;

而賦值語(yǔ)句允許連續(xù)賦值。4、注意賦值表達(dá)式和賦值語(yǔ)句的區(qū)別:賦值表達(dá)式是一種表達(dá)式,它可以出現(xiàn)在任何允許表達(dá)式出現(xiàn)的地方,而賦值語(yǔ)句則不能。

如:語(yǔ)句if((x=y+5)>0)z=x;是合法的,語(yǔ)句的功能是,若表達(dá)式x=y+5大于0則z=x。

如:語(yǔ)句if((x=y+5;)>0)z=x;是非法的,因?yàn)閤=y+5;是語(yǔ)句,不能出現(xiàn)在表達(dá)式中。5、條件中不能含有賦值符號(hào),但是賦值表達(dá)式可以包含于條件表達(dá)式中

例:

if(a=b)t=a; 錯(cuò)誤 if((a=b)>0)t=a; 正確

問(wèn)題:c語(yǔ)言中的賦值語(yǔ)句于其他高級(jí)語(yǔ)言的賦值語(yǔ)句有什么不同點(diǎn)?1)C語(yǔ)言中的賦值號(hào)“=”是一個(gè)運(yùn)算符,在其他大多數(shù)語(yǔ)言中賦值號(hào)不是運(yùn)算。2)其他大多數(shù)高級(jí)語(yǔ)言沒有“賦值表達(dá)式”這一概念。3.3.4變量賦初值

1、C語(yǔ)言允許在定義變量的同時(shí)使變量初始化。

如:inta=3;

/*指定a為整型變量,初值為3*/

floatf=3.56;

/*指定f為浮點(diǎn)型變量,初值為3.56*/ charc=‘a(chǎn)’;

/*指定c為字符變量,初值為‘a(chǎn)’*/2、可以使被定義的變量的一部分賦初值。

如:inta,b,c=5;

表示指定a、b、c為整型變量,但只對(duì)c初始化,c的初值為53、如果對(duì)幾個(gè)變量賦以同一個(gè)初值,

如:表示a、b、c的初值都是3,

應(yīng)寫成:inta=3,b=3,c=3;

不能寫成:inta=b=c=3; 注意:初始化不是在編譯階段完成的而是在程序運(yùn)行時(shí)執(zhí)行本函數(shù)時(shí)賦初值的,相當(dāng)于有一個(gè)賦值語(yǔ)句。3.4數(shù)據(jù)輸入輸出的概念及在c語(yǔ)言中的實(shí)現(xiàn)1、所謂輸入輸出是以計(jì)算機(jī)主機(jī)為主體而言的。輸入:從輸入設(shè)備(鍵盤,鼠標(biāo),掃描儀)向計(jì)算機(jī)輸入數(shù)據(jù)。輸出:從計(jì)算機(jī)向外部輸出設(shè)備(顯示器,打印機(jī))輸出數(shù)據(jù)。2、C語(yǔ)言本身不提供輸入輸出語(yǔ)句,輸入和輸出操作是由C函數(shù)庫(kù)中的函數(shù)來(lái)實(shí)現(xiàn)的。例如:字符輸入函數(shù):getchar 字符輸出函數(shù):putchar格式輸入函數(shù):scanf 格式輸出函數(shù):printf字符串輸入函數(shù):gets 字符串輸出函數(shù):puts3、在使用系統(tǒng)庫(kù)函數(shù)時(shí),要用預(yù)編譯命令“#include”將有關(guān)的“頭文件”包括到用戶源文件中。例如:在調(diào)用標(biāo)準(zhǔn)輸入輸出庫(kù)函數(shù)時(shí),文件開頭應(yīng)該有: #include<stdio.h> 或: #include“stdio.h”頭文件3.5字符數(shù)據(jù)的輸入輸出3.5.1單個(gè)字符的輸出──putchar()函數(shù)功能:將一個(gè)字符輸出到標(biāo)準(zhǔn)輸出設(shè)備。格式:putchar(c)使用要點(diǎn):putchar(c)中的c可以是字符型或整型數(shù)據(jù);

c=98;putchar(c)……輸出字符b

putchar(‘a(chǎn)’) ……輸出字符aputchar(0x41) ……輸出字符A使用輸出函數(shù)需要調(diào)用c的標(biāo)準(zhǔn)I/O庫(kù)函數(shù),故需用預(yù)編譯命令:#include<stdio.h>或#include“stdio.h”

將stdio.h頭文件(.h)包含在用戶源程序文件中;putchar()也可以輸出一個(gè)控制字符或其它轉(zhuǎn)義字符。如:putchar(‘\n’) ……輸出一個(gè)換行符

putchar(‘\101’) ……輸出字符A

putchar(‘\’’) ……輸出字符單引號(hào)’例3.3輸出單個(gè)字符。

#include<stdio.h>

voidmain()

{

chara,b,c;

a=‘B’;b=‘O’;c=‘Y’;

putchar(a);putchar(b);putchar(c);putchar(‘\n’);

}運(yùn)行結(jié)果:BOYputchar(a);putchar(‘\n’);putchar(b);putchar(‘\n’);putchar(c);putchar(‘\n’);運(yùn)行結(jié)果:BOY3.5.2單個(gè)字符的輸入──getchar()函數(shù)功能:從標(biāo)準(zhǔn)輸入設(shè)備上讀入一個(gè)字符。格式:getchar()使用要點(diǎn):getchar()函數(shù)本身沒有參數(shù),其函數(shù)值就是從輸入設(shè)備得到的一個(gè)字符;由getchar()獲得的字符可以賦值給一個(gè)字符或整型變量,也可以作為表達(dá)式的一部分;

如:c=getchar();

putchar(getchar());

printf(“%c”,getchar());使用getchar()函數(shù)要調(diào)用c的標(biāo)準(zhǔn)I/O庫(kù)函數(shù),應(yīng)在程序首部加上編譯預(yù)處理命令:#include“stdio.h”或#include<stdio.h>例3.4輸入單個(gè)字符。#include<stdio.h>voidmain(){charc;c=getchar();printf(“%c\n%d\n”,c,c); /*putchar(c)*/}運(yùn)行程序:輸入a 輸出a 973.6-3.7格式輸入與輸出一、格式輸出——printf函數(shù)1、功能:按指定的格式向終端輸出若干任意類型的數(shù)據(jù)。2、格式:printf(格式控制參數(shù),輸出表列)如:printf(“x=%d”,x)格式控制參數(shù):包含兩種信息格式說(shuō)明:%[修飾符]格式字符,用于指定輸出格式。普通字符或轉(zhuǎn)義序列:原樣輸出輸出表列:要輸出的數(shù)據(jù),可以是合法的常量、變量和表達(dá)式,(可以沒有,多個(gè)時(shí)以“,”分隔)格式字符當(dāng)格式字符個(gè)數(shù)少于輸出項(xiàng)時(shí),多余的輸出項(xiàng)不予輸出。若格式字符多于輸出項(xiàng)時(shí),各系統(tǒng)的處理有所不同,TC對(duì)于缺少的項(xiàng)將輸出不定值。printf()函數(shù)的格式控制字符

格式控制字符是用雙引號(hào)括起來(lái)的字符串,用來(lái)確定輸出項(xiàng)的格式和需要原樣輸出的字符串。其組成形式為:

“普通字符串

0m.nl

格式控制字符”“普通字符串

0m.nl

格式控制字符”其中:輸出數(shù)據(jù)項(xiàng)的順序一般按從左至右的順序輸出。格式控制中的普通字符串,照原樣輸出;如:printf(“a=%d,b=%d”,a,b);%:為C語(yǔ)言規(guī)定的標(biāo)記符;±:指定輸出數(shù)據(jù)的對(duì)齊方式:+為右對(duì)齊(可缺?。?為左對(duì)齊;

0:指定輸出的數(shù)據(jù)中不使用的位置是否填數(shù)字“0”printf()函數(shù)的附加格式說(shuō)明符(修飾符):修飾符功能m輸出數(shù)據(jù)域?qū)?,?shù)據(jù)長(zhǎng)度<m,左補(bǔ)空格;否則按實(shí)際輸出.n對(duì)實(shí)數(shù),指定小數(shù)點(diǎn)后位數(shù)(四舍五入)對(duì)字符串,指定實(shí)際輸出位數(shù)-輸出數(shù)據(jù)在域內(nèi)左對(duì)齊(缺省右對(duì)齊)+指定在有符號(hào)數(shù)的正數(shù)前顯示正號(hào)(+)0輸出數(shù)值時(shí)指定左面不使用的空位置自動(dòng)填0#在八進(jìn)制和十六進(jìn)制數(shù)前顯示前導(dǎo)0,0xl或L在d,o,x,u前,指定輸出精度為long型在e,f,g前,指定輸出精度為double型printf()函數(shù)的格式控制字符:

格式控制字符用于指定數(shù)據(jù)的輸出形式,可以包含轉(zhuǎn)義字符。d,ix,Xoucse,Efg,G%%十六進(jìn)制無(wú)符號(hào)整數(shù)不帶符號(hào)十進(jìn)制整數(shù)十進(jìn)制整數(shù)指數(shù)形式浮點(diǎn)小數(shù)單一字符字符串八進(jìn)制無(wú)符號(hào)整數(shù)小數(shù)形式浮點(diǎn)小數(shù)e和f中較短一種百分號(hào)本身inta=567;printf(“%d”,a);inta=255;printf(“%x”,a);inta=65;printf(“%o”,a);inta=567;printf(“%u”,a);chara=65;printf(“%c”,a);printf(“%s”,“ABC”);floata=567.789;printf(“%e”,a);floata=567.789;printf(“%f”,a);floata=567.789;printf(“%g”,a);printf(“%%”);用兩個(gè)連續(xù)的“%%”表示輸出字符“%”。567ff101567AABC5.677890e+02567.789000567.789%(1)d格式符:用來(lái)輸出十進(jìn)制整數(shù)。

①%d:按十進(jìn)制整型數(shù)據(jù)的實(shí)際長(zhǎng)度輸出。

②%md:m為指定的輸出字段的寬度。如果數(shù)據(jù)的位數(shù)小于m,則左端補(bǔ)以空格,若大于m,則按實(shí)際位數(shù)輸出。 例:printf(“%4d,%4d”,a,b); 若a=123,b=12345則輸出為:︼123,12345 ③%ld:輸出長(zhǎng)整型數(shù)據(jù)。 例:longa=135790;/*定義a為長(zhǎng)整型變量*/ printf(“%ld”,a);長(zhǎng)整型數(shù)據(jù)應(yīng)采用%ld格式輸出,若采用%d格式則出錯(cuò)。(2)o格式符:以八進(jìn)制整數(shù)形式輸出。

輸出的數(shù)值不帶符號(hào),符號(hào)位也一起作為八進(jìn)制數(shù)的一部分輸出。

例:inta=-1; printf(“%d,%o”,a,a); -1在內(nèi)存單元中的存放形式(以補(bǔ)碼形式存放)如下:1111111111111111 則輸出為:-1,177777 不會(huì)輸出帶負(fù)號(hào)的八進(jìn)制整數(shù)。長(zhǎng)整型數(shù)(long型)據(jù)用%lo格式輸出,也可以指定字段寬度。

如:printf(“%lo,%8o”,a,a);(3)x格式符:以十六進(jìn)制數(shù)形式輸出整數(shù)。同樣不會(huì)出現(xiàn)負(fù)的十六進(jìn)制數(shù)。

例:inta=-1; printf(“%x,%o,%d”,a,a,a); 輸出結(jié)果為:ffff,177777,-1 同樣,也可以用%lx輸出長(zhǎng)整型數(shù)據(jù)或指出輸出寬度。

如:printf(“%lx,%12x”,a,a)(4)u格式符:用來(lái)輸出unsigned型數(shù)據(jù)。 一個(gè)有符號(hào)整數(shù)(int型)也可以用%u格式輸出; 一個(gè)unsigned型數(shù)據(jù)也可以用%d格式輸出; unsigned型數(shù)據(jù)也可用%o或%x格式輸出。

例3.9無(wú)符號(hào)數(shù)據(jù)的輸出。

#include<stdio.h>

voidmain()

{

unsignedinta=65535;intb=-2;

printf(“a=%d,%o,%x,%u\n”,a,a,a,a);

printf(“b=%d,%o,%x,%u\n”,b,b,b,b);

}運(yùn)行結(jié)果:

a=-1,177777,ffff,65535

b=-2,177776,fffe,65534(5)c格式符:用來(lái)輸出一個(gè)字符。

例:chard=’a’; printf(“%c”,d); 輸出字符’a’.

一個(gè)整數(shù),只要它的值在0~255范圍內(nèi),可以用“%c”使之按字符形式輸出,在輸出前,系統(tǒng)會(huì)將該整數(shù)作為ASCII碼轉(zhuǎn)換成相應(yīng)的字符;一個(gè)字符數(shù)據(jù)也可以用整數(shù)形式輸出。

例3.5字符數(shù)據(jù)的輸出。

#include<stdio.h>

voidmain()

{

charc=‘a(chǎn)’;

inti=97;

printf(“%c,%d\n”,c,c);

printf(“%c,%d\n”,i,i);

}運(yùn)行結(jié)果:

a,97

a,97若指定輸出字?jǐn)?shù)的寬度,

printf(“%3c”,c);

則輸出:

︼︼

a(6)s格式符:輸出字符串。

①%s: 例:printf(“%s”,“CHINA”); 輸出字符串“CHINA”(不包括雙引號(hào))。 ②%ms:輸出的字符串占m列,若串長(zhǎng)大于m,則全部輸出,若串長(zhǎng)小于m,則左補(bǔ)空格。 ③%-ms:若串長(zhǎng)小于m,字符串向左靠,右補(bǔ)空格。 ④%m.ns:輸出占m列,只取字符串中左端n個(gè)字符,輸出在m列的右側(cè),左補(bǔ)空格。 ⑤%-m.ns:n個(gè)字符輸出在m列的左側(cè),右補(bǔ)空格,若n>m,m自動(dòng)取n值。例3.10字符串的輸出。

#include<stdio.h>

voidmain()

{

printf(“%3s,%7.2s,%.4s,%-5.3s\n”,“CHINA”,“CHINA”,“CHINA”,“CHINA”);

}運(yùn)行結(jié)果:

CHINA,︼

︼CH,CHIN,CHI︼

︼(7)f格式符:用來(lái)以小數(shù)形式輸出實(shí)數(shù)(包括單雙精度)有以下幾種用法:①%f:不指定字段寬度,由系統(tǒng)自動(dòng)指定字段寬度,使整數(shù)部分全部輸出,并輸出6位小數(shù)。應(yīng)當(dāng)注意,在輸出的數(shù)字中并非全部數(shù)字都是有效數(shù)字。單精度實(shí)數(shù)的有效位數(shù)一般為7位。②%m.nf:指定輸出的數(shù)據(jù)共占m列,其中有n位小數(shù)。如果數(shù)值長(zhǎng)度小于m,則左端補(bǔ)空格。③%-m.nf:與%m.nf基本相同,只是使輸出的數(shù)值向左端靠,右端補(bǔ)空格。例3.6輸出實(shí)數(shù)時(shí)的有效位數(shù)。

#include<stdio.h>

voidmain() {floatx,y;

x=111111.111;y=222222.222;

printf(“%f”,x+y);

}例3.7輸出雙精度數(shù)時(shí)的有效位數(shù)。

#include<stdio.h>

voidmain()

{doublex,y;

x=1111111111111.111111111;

y=2222222222222.222222222;

printf(“%f”,x+y);

}運(yùn)行結(jié)果:

333333.328125運(yùn)行結(jié)果:3333333333333.333010

例3.11輸出實(shí)數(shù)時(shí)指定小數(shù)位數(shù)。

#include<stdio.h>

voidmain()

{

floatf=123.456;

printf(“%f︼︼%10f︼

︼%10.2f︼

︼%.2f︼

︼%-10.2f\n”,f,f,f,f,f);

}運(yùn)行結(jié)果:

123.456001︼︼123.456001︼︼︼︼︼︼123.46︼︼123.46︼︼123.46︼︼︼︼(8)e格式符:以指數(shù)形式輸出實(shí)數(shù)??捎靡韵滦问剑孩伲:不指定輸出數(shù)據(jù)所占的寬度和數(shù)字部分的小數(shù)位數(shù)。 例: printf(“%e”,123.456); 輸出: 1.234560

e+002 6列5列 所輸出的實(shí)數(shù)共占13列寬度。(注:不同系統(tǒng)的規(guī)定略有不同)②%m.ne和%-m.ne:m、n和“-”字符的含義與前相同。此處n指擬輸出的數(shù)據(jù)的小數(shù)部分(又稱尾數(shù))的小數(shù)位數(shù)。若f=123.456,則:

printf("%e︼︼%10e︼︼%10.2e︼︼%.2e︼︼%-10.2e",f,f,f,f,f);

輸出如下:1.234560e+002︼︼1.234560e+002︼︼︼1.23e+002︼︼1.23e+002

︼︼1.23e+002︼

13列 13列 10列9列10列說(shuō)明:未指定n,自動(dòng)使n=6。超過(guò)給定的10列,乃突破10列的限制,按實(shí)際長(zhǎng)度輸出。第3個(gè)數(shù)據(jù)共占10列,只指定n=2,小數(shù)部分占2列。未指定m,自動(dòng)使m等于數(shù)據(jù)應(yīng)占的長(zhǎng)度。第5個(gè)數(shù)據(jù)應(yīng)占10列,數(shù)值只有9列,由于是“%-10.2e”,數(shù)值向左靠,右補(bǔ)一個(gè)空格。(注:有的C系統(tǒng)的輸出格式與此略有不同)(9)g格式符:用來(lái)輸出實(shí)數(shù)。 它根據(jù)數(shù)值的大小,自動(dòng)選f格式或e格式(選擇輸出時(shí)占寬度較小的一種),且不輸出無(wú)意義的零。 例:若f=123.468,則 printf(“%f︼︼%e︼︼%g”,f,f,f); 輸出如下:

123.468000

︼︼1.234680e+002

︼︼

123.468︼︼︼

10列 13列10列說(shuō)明:用%f格式輸出占10列,用%e格式輸出占13列,用%g格式時(shí),自動(dòng)從上面兩種格式中選擇短者(今以%f格式為短)故占10列,并按%f格式用小數(shù)形式輸出,最后3個(gè)小數(shù)位為無(wú)意義的0,不輸出,因此輸出123.468,然后右補(bǔ)3個(gè)空格。%g格式用得較少。說(shuō)明:除了X,E,G外,其他各式字符必須用小寫。可以在printf函數(shù)中的“格式控制”字符串中包含轉(zhuǎn)義字符。一個(gè)格式說(shuō)明必須以“%”開頭,以9個(gè)格式字符之一為結(jié)束,中間可以插入附加格式字符。想輸出%,則應(yīng)該在格式控制字符串中用連續(xù)兩個(gè)%表示。例inta=1234;floatf=123.456;charch=‘a(chǎn)’;printf(“%8d,%2d\n”,a,a);printf(“%f,%8f,%8.1f,%.2f,%.2e\n”,f,f,f,f,f);printf(“%3c\n”,ch);運(yùn)行 ︼

︼1234,1234結(jié)果:123.456001,123.456001,︼

︼123.5,123.46,1.23e+02

︼︼a例:m.n2

staticchara[]=“Hello,world!” printf(“%s\n%15s\n%10.5s\n%2.5s\n%.3s\n”,a,a,a,a,a);運(yùn)行結(jié)果:Hello,world!

︼︼

Hello,world!

︼︼

HelloHelloHel

例:m.n1例-例inta=1234;floatf=123.456;staticcharc[]=“Hello,world!”;printf(“%8d,%-8d\n”,a,a);printf(“%10.2f,%-10.1f\n”,f,f);printf(“%10.5s,%-10.3s\n”,c,c);運(yùn)行結(jié)果: ︼

︼1234,1234︼︼︼︼

 ︼

︼123,46,123.5︼︼︼︼



︼︼︼︼

︼Hello,Hel︼

例inta=1234;floatf=123.456;printf(“%08d\n”,a);printf(“%010.2f\n”,f);printf(“%0+8d\n”,a);printf(“%0+10.2f\n”,f);例0、+例inta=123;printf(“%o,%#o,%X,%#X\n”,a,a,a,a);

例#例longa=65536;printf(“%ld,%8ld\n”,a,a);

例l/*00001234*//*0000123.46*//*+0001234*//*+000123.46*//*173,0173,7B,0X7B*//*65536,65536*/二、格式化輸入——scanf函數(shù)1、格式:

scanf(“格式控制串”,輸入項(xiàng)地址表)

說(shuō)明:輸入項(xiàng)地址表由若干個(gè)地址組成,代表每一個(gè)變量在內(nèi)存的地址(或數(shù)組與字符串的首地址)。表示為:&變量(&為取地址運(yùn)算符)每次調(diào)用scanf()函數(shù)后,函數(shù)將得到一個(gè)整型函數(shù)值,此值等于正常輸入數(shù)據(jù)的個(gè)數(shù)。2、功能:按指定格式從鍵盤讀入數(shù)據(jù),存入地址表指定的存儲(chǔ)單元中,并按回車鍵結(jié)束。例:scanf(“%d”,&a);

輸入:10

則a=10例:scanf(“%x”,&a);

輸入:11

則a=173、格式控制參數(shù)(1)格式說(shuō)明項(xiàng):“%*

ml或h

格式控制字符”

格式控制的含義同printf函數(shù),“%格式控制字符”中格式字符有:d,o,x,u,c,s,e,f。(2)輸入分隔符的指定:一般以空格、TAB或回車鍵作為分隔符。其它字符做分隔符:格式串中兩個(gè)格式符間的字符。例scanf(“%d%o%x”,&a,&b,&c);printf(“a=%d,b=%d,c=%d\n”,a,b,c);輸入123123123輸出a=123,b=83,c=291例scanf(“%d:%d:%d”,&h,&m,&s);輸入12:30:45則12h,30m,45s例scanf(“%d,%d”,&a,&b)

輸入3,4

則3a,4b例scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);輸入a=12,b=24,c=36(3)抑制字符*:指定輸入項(xiàng)讀入后不賦給變量。 例:

scanf(“%2d%*2d%3d”,&num1,&num2); printf("num1=%d,num2=%d\n",num1,num2);

假設(shè)輸入“123456789”,則系統(tǒng)將讀取“12”并賦值給num1;讀取“34”、但舍棄掉(“*”的作用);讀取“567”

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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)論