版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第一章c語言概述1.1重點(diǎn)、難點(diǎn)1.c語言的特點(diǎn)(1)語言簡潔、緊湊、使用方便靈活(2)運(yùn)算符豐富(3)具有結(jié)構(gòu)化的控制語句(4)語法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大(5)c語言允許用戶直接訪問物理地址,能進(jìn)行位操作,可以直接對硬件進(jìn)行操作。2.源程序的書寫規(guī)則(1)c語言書寫自由,一行內(nèi)可以寫幾個(gè)語句,并且一個(gè)語句可以寫在多行上。(2)c程序沒有行號,每個(gè)語句和數(shù)據(jù)定義的最后必須有一個(gè)分號。(3)c語言分號是語句中必不可少的。即使是程序的最后一個(gè)語句也應(yīng)該包含分號。(4)c語言中的注釋可以用“/*”開始,用“*/”結(jié)束,注釋可以在任何允許插入空格符的地方插入。且“/”與“*”間不允許有空格。(5)c語言的注釋不允許用嵌套,注釋可以用西文也可以用中文。3.c程序的組成(1)一個(gè)c程序由一個(gè)或多個(gè)源程序文件組成(2)一個(gè)c源程序文件是由若干個(gè)函數(shù)組成的。函數(shù)是c程序的基本單位。在這些函數(shù)中有且只用一個(gè)主函數(shù)main(),主函數(shù)由系統(tǒng)提供。各個(gè)函數(shù)在程序中所處的位置不是固定的。(3)一個(gè)源程序文件是一個(gè)編譯單位,即以源文件為單位進(jìn)行編譯,而不是以函數(shù)為單位進(jìn)行編譯。C語言源程序文件的擴(kuò)展名為.c。(4)任何c程序都是從主函數(shù)開始執(zhí)行的,調(diào)用其他函數(shù)后,回到main()主函數(shù),在main()主函數(shù)中結(jié)束程序運(yùn)行。4.函數(shù)的組成一個(gè)函數(shù)由兩部分組成(1)函數(shù)的首部函數(shù)類型、函數(shù)名、函數(shù)參數(shù)類型、函數(shù)參數(shù)名函數(shù)名后必須是一對圓括弧,但可以沒有函數(shù)參數(shù)(2)函數(shù)體函數(shù)體是最外層{}括起來的部分,包括變量的聲明和執(zhí)行兩部分1.2例題【例題1-1】判斷(1)c語言是以函數(shù)為程序的基本單位,便于實(shí)現(xiàn)程序的模塊化()解析:c程序是由函數(shù)組成的,一個(gè)c源程序至少包含一個(gè)主函數(shù)main()。函數(shù)是c程序的基本單位。C語言的這種特點(diǎn)使c程序容易實(shí)現(xiàn)模塊化。答案:正確(2)c程序的執(zhí)行總是從程序第一句開始()解析:一個(gè)c程序總是從main()函數(shù)開始執(zhí)行,而不論main()函數(shù)處在程序中的任何位置。答案:錯(cuò)誤(3)c程序中可以不使用函數(shù)()解析:c語言是函數(shù)式語言,一個(gè)c源程序至少包含有一個(gè)main函數(shù)。答案:錯(cuò)誤(4)c語言提供了一個(gè)輸入語句scanf()和一個(gè)輸出語句printf()解析:c語言本身沒有輸入輸出語句,輸入輸出操作由庫函數(shù)scanf和printf等函數(shù)來完成。答案:錯(cuò)誤(5)c程序的一條語句必須寫在一行中()解析:c程序書寫格式自由,一行內(nèi)可以寫幾個(gè)語句,一個(gè)語句可以分寫在多行上。答案:錯(cuò)誤(6)c程序中注釋說明只能寫在一條語句的后面()解析:c語言中的注釋可以用“/*”開始,用“*/”結(jié)束,注釋可以在任何允許插入空格符的地方插入。且“/”與“*”間不允許有空格。答案:錯(cuò)誤【例題1-2】下列程序中格式錯(cuò)在何處A.main()B.{inta,b,z;C.a=2:b=3;D.z=a+b;}解析:A,B,D沒有錯(cuò)誤,C中,在a=2后應(yīng)該是分號“;”或逗號“,”,不應(yīng)該是冒號“:”,因此c處有錯(cuò)誤。答案:c【例題1-3】c語言的程序一行寫不下時(shí),可以A.用逗號換行B.用分號換行C.在任意空格處換行D.用回車符換行解析:c語言可以在任何一個(gè)分隔符或空格處換行答案:c【例題1-4】下列程序段中那一個(gè)是錯(cuò)誤的注釋方法?A.#in/*包含*/clued<stdio.h>B.#include<stdio.h>voidmain()voidmain/**/(/*主函數(shù)*/){{}}C.#include<stdio.h>D.#include<stdio.h>voidmain()voidmain(){intx/*初始化*/=10;{intx=10;/*打印*/printf(“%d”,x);printf(“%d”,x);}/*打印X的值*“*=10*/}解析:根據(jù)c語言的規(guī)定:注釋不能插在標(biāo)識符的中間,在其他有分隔符的地方都可以插入注釋,上面四個(gè)程序段中只有A是將注釋插入一標(biāo)識符的中間了,因此A的注釋是錯(cuò)誤的。答案:A【例題1-5】下列程序中的錯(cuò)誤在()main(){……..{{……..}}解析:從上面的c程序的結(jié)構(gòu)中,可以明顯看出花括號不是成對出現(xiàn)的,必須在上面的程序中再加上對應(yīng)的花括號,可以加到最后,也可以加在第四行或第五行,看程序的具體情況而定。答案:程序中少了一個(gè)花括號“}”第三章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式3.1重點(diǎn)、難點(diǎn)1.關(guān)鍵字關(guān)鍵字又稱保留字,是一種語言中用于固定用途的名字。C語言的關(guān)鍵字共有32個(gè)。,所有關(guān)鍵字都用小寫的英文單詞來表示。c語言的關(guān)鍵字如下:autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregistreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile2.標(biāo)識符1、概念:用來標(biāo)識變量名、符號常量名、函數(shù)名、數(shù)組名、類型名、文件名的有效字符序列稱為標(biāo)識符。簡單地說,標(biāo)識符就是一個(gè)名字。2、c語言的標(biāo)識符命名規(guī)則c語言的標(biāo)識符只能由字母、數(shù)字、下劃線三種字符組成。且第一個(gè)字符必須為字母或下劃線。3、標(biāo)識符的分類關(guān)鍵字:是一些特殊的標(biāo)識符,又稱保留字,這些保留字不允許用戶對它重新定義。標(biāo)準(zhǔn)標(biāo)識符:也是特殊含義的標(biāo)識符,例如庫函數(shù)(printf()函數(shù))、編譯預(yù)處理命令等用戶自定義標(biāo)識符4、對標(biāo)識符的說明用戶標(biāo)識符長度最好不要超過8個(gè)字符用戶標(biāo)識符不要和32個(gè)關(guān)鍵字同名用戶標(biāo)識符最好不要與c語言中的庫函數(shù)和其他一些命令(如編譯預(yù)處理命令)重名大小寫是不同的標(biāo)識符用戶標(biāo)識符應(yīng)做到見名知意3.c語言的數(shù)據(jù)類型在C語言中,數(shù)據(jù)類型可分為:基本數(shù)據(jù)類型,構(gòu)造數(shù)據(jù)類型,指針類型,空類型四大類。1.基本數(shù)據(jù)類型基本數(shù)據(jù)類型最主要的特點(diǎn)是,其值不可以再分解為其它類型。也就是說,基本數(shù)據(jù)類型是自我說明的。2.構(gòu)造數(shù)據(jù)類型是根據(jù)已定義的一個(gè)或多個(gè)數(shù)據(jù)類型用構(gòu)造的方法來定義的。也就是說,一個(gè)構(gòu)造類型的值可以分解成若干個(gè)“成員”或“元素”。每個(gè)“成員”都是一個(gè)基本數(shù)據(jù)類型或又是一個(gè)構(gòu)造類型。在C語言中,構(gòu)造類型有以下幾種:·數(shù)組類型·結(jié)構(gòu)類型·聯(lián)合類型3.指針類型指針是一種特殊的,同時(shí)又是具有重要作用的數(shù)據(jù)類型。其值用來表示某個(gè)量在內(nèi)存儲(chǔ)器中的地址。雖然指針變量的取值類似于整型量,但這是兩個(gè)類型完全不同的量,因此不能混為一談。4.空類型在調(diào)用函數(shù)值時(shí),通常應(yīng)向調(diào)用者返回一個(gè)函數(shù)值。這個(gè)返回的函數(shù)值是具有一定的數(shù)據(jù)類型的,應(yīng)在函數(shù)定義及函數(shù)說明中給以說明。但是,也有一類函數(shù),調(diào)用后并不需要向調(diào)用者返回函數(shù)值,這種函數(shù)可以定義為“空類型”。其類型說明符為void。4.常量和變量對于基本數(shù)據(jù)類型量,按其取值是否可改變又分為常量和變量兩種。(一)常量概念:常量(即常數(shù))是程序運(yùn)行過程中值不可改變的量,它又分為直接常量和符號常量。具體分為以下幾類。1.普通整型常量整型常量有三種表示形式十進(jìn)制數(shù):123,-456,0八進(jìn)制數(shù):(0開頭)0123即(123)8十六制數(shù):(0x開頭)0x123,即(123)16、0x2bf即(2bf)16整型常量占2個(gè)字節(jié)整型常量表示范圍為-32768——32767即215-1。2.長整型常量在一個(gè)整數(shù)后加字母l或L則變成長整型常量長整型常量占4個(gè)字節(jié)長整型常量表示范圍為231-13.無符號整型常量:一個(gè)整型常量后加一個(gè)字母u或U則認(rèn)為它是無符號整型數(shù)據(jù)。在內(nèi)存中按無符號整型規(guī)定的形式存放。如果是負(fù)數(shù)后加字母u或U則先把負(fù)數(shù)轉(zhuǎn)換成補(bǔ)碼,然后按無符號數(shù)存儲(chǔ)。例如:-12345u先將-12345轉(zhuǎn)換成補(bǔ)碼53191,然后按無符號數(shù)存儲(chǔ)。4.實(shí)型常量:又稱浮點(diǎn)數(shù)實(shí)型常量有兩種表示形式:十進(jìn)制小數(shù)表示形式和指數(shù)表示形式十進(jìn)制小數(shù)表示形式:由整數(shù)、小數(shù)點(diǎn)、和小數(shù)三部分組成,而且必須有小數(shù)點(diǎn)。例如0.123,0.23、45.0、3.67、0.0等當(dāng)小數(shù)部分或整數(shù)部分為0時(shí)0可以省略,但兩部分不能同時(shí)省略。例如45.0可以寫成45.,0.23可以寫成.23。0.0可以寫成.0或0.。指數(shù)形式:由尾數(shù)、E或e和指數(shù)三部分組成。例如123e3或123E3(123×103)或1.23E5(1.23×105)注意:1、尾數(shù)和指數(shù)都不能省略。即e或E的前后必須有數(shù)字。例如:3.58e4是正確的表示形式。1.23e或e5都是錯(cuò)誤的表示形式。2、e或E后面的指數(shù)必須為整數(shù)。例如:2.34e4.5是錯(cuò)誤的表示形式。3、小數(shù)點(diǎn)的前面有且只有一位非0的數(shù)字稱為規(guī)范化的指數(shù)形式。例如:5.67e34、如果一個(gè)實(shí)數(shù)在用指數(shù)形式輸出時(shí),是按規(guī)范化的指數(shù)形式輸出的。例如將5689.65指定按指數(shù)形式輸出會(huì)輸出5.68965e+003或5.68965e+03實(shí)型常量占8個(gè)字節(jié)64位按雙精度方式處理如果在實(shí)數(shù)的后面加字母f或F則系統(tǒng)會(huì)按單精度處理。如1.65f。5.字符常量:是一對單引號括起來的一個(gè)字符。如‘a(chǎn)’、‘A’、‘%’等。字符常量占一個(gè)字節(jié)字符常量存儲(chǔ)時(shí)存儲(chǔ)的是字符的ASCII值大小寫是不同的字符常量。例如‘A’和‘a(chǎn)’,’C’和‘c’等是不同的字符常量c語言還使用特殊形式的字符常量,就是以“\”開頭的字符序列,稱為轉(zhuǎn)義字符。常用的轉(zhuǎn)義字符如下:\n 回車換行,將光標(biāo)移到下一行行首。
\t 橫向跳格(跳到下一個(gè)輸出區(qū),一個(gè)輸出區(qū)8列,下個(gè)輸出區(qū)到第9列)\b 回退一格\r 回車光標(biāo)回到本行行首\f 走紙換頁\\ 反斜線符"\"\' 單引號符\a 鳴鈴\” 輸出雙引號\ddd 1~3位八進(jìn)制數(shù)所代表的字符
\xhh 1~2位十六進(jìn)制數(shù)所代表的字符
廣義地講,C語言字符集中的任何一個(gè)字符均可用轉(zhuǎn)義字符來表示。上述的\ddd和\xhh正是為此而提出的。ddd和hh分別為八進(jìn)制和十六進(jìn)制的ASCII代碼。如\101表示字符"A",\102表示字母"B",\134表示反斜線,\x0A表示換行等。6.字符串常量:字符串常量是一對雙引號括起來的字符序列。如“boy”、“ABCDE”等。每個(gè)字符串的結(jié)尾加一個(gè)字符串結(jié)束標(biāo)志(‘\0’)系統(tǒng)根據(jù)此標(biāo)志判斷字符串是否結(jié)束?!癨0“是一個(gè)ASCII為0的字符,是空操作符,由系統(tǒng)自動(dòng)加到字符串的結(jié)尾,不是人工操作。例“china”實(shí)際內(nèi)存中:china\0字符串常量所占的字節(jié)數(shù)是它的字符的個(gè)數(shù)加1。而字符串的長度是從第一個(gè)字符開始到第一個(gè)’\0’之間的字符的個(gè)數(shù)。例如:“qwert\0gs”的字節(jié)數(shù)是9而長度為5。7.符號常量:是用一個(gè)標(biāo)識符標(biāo)識一個(gè)常量。在使用過程中,這個(gè)標(biāo)識符就代表了該常量。若程序的開頭有#definePI3.1415926則PI即是符號常量,在程序中代表3.1415926(二)變量:概念:在程序執(zhí)行過程中取值可變的量稱為變量。它們可與數(shù)據(jù)類型結(jié)合起來分類。例如,可分為整型常量、整型變量、浮點(diǎn)常量、浮點(diǎn)變量、字符常量、字符變量、枚舉常量、枚舉變量。在程序中,常量是可以不經(jīng)說明而直接引用的,而變量則必須先說明后使用。變量定義的形式:存儲(chǔ)類型名類型標(biāo)識符變量名1[=表達(dá)式1],…….變量名n[=表達(dá)式n];1.整形變量(1)整形變量分類:基本型(int)、短整型(short[int])、長整形(long[int])、無符號整形(unsignedint、unsignedshort、unsignedlong)?;拘皖愋驼f明符為int或signedint,在內(nèi)存中占2個(gè)字節(jié),其取值范圍為-32768-32767短整型類型說明符為shortint或short。所占字節(jié)和取值范圍均與基本型相同。長整型類型說明符為longint或long,在內(nèi)存中占4個(gè)字節(jié),其取值同長整常數(shù)的取值范圍。無符號型類型說明符為unsigned。
無符號型又可與上述三種類型匹配而構(gòu)成:
無符號基本型類型說明符為unsignedint或unsigned。
無符號短整型類型說明符為unsignedshort
無符號長整型類型說明符為unsignedlong
各種無符號類型量所占的內(nèi)存空間字節(jié)數(shù)與相應(yīng)的有符號類型量相同。但由于省去了符號位,故不能表示負(fù)數(shù)。下表列出了TurboC中各類整型量所分配的內(nèi)存字節(jié)數(shù)及數(shù)的表示范圍。
類型說明符數(shù)的范圍分配字節(jié)數(shù)
int-32768~32767 ■■
shortint-32768~32767 ■■
longint-2147483648~2147483647 ■■■■
unsignedint0~65535 ■■unsignedshort0~65535 ■■
unsignedlong0~4294967295 ■■■■(2)整型變量的說明
變量說明的一般形式為:類型說明符變量名標(biāo)識符,變量名標(biāo)識符例如:
inta,b,c;(a,b,c為整型變量)
longx,y;(x,y為長整型變量)
unsignedp,q;(p,q為無符號整型變量)(3)在書寫變量說明時(shí),應(yīng)注意以下幾點(diǎn):允許在一個(gè)類型說明符后,說明多個(gè)相同類型的變量。各變量名之間用逗號間隔。類型說明符與變量名之間至少用一個(gè)空格間隔。最后一個(gè)變量名之后必須以“;”號結(jié)尾。變量說明必須放在變量使用之前。一般放在函數(shù)體的開頭部分。2.實(shí)型變量(1)實(shí)型變量分類:單精度(float)、雙精度(double)、長雙精度(longdouble)在TurboC中單精度型占4個(gè)字節(jié)(32位)內(nèi)存空間,其數(shù)值范圍為-3.4E-38~3.4E+38,只能提供7位有效數(shù)字。雙精度型占8個(gè)字節(jié)(64位)內(nèi)存空間,其數(shù)值范圍為-1.7E-308~1.7E+308,可提供16位有效數(shù)字。(2)實(shí)型變量說明的格式和書寫規(guī)則與整型相同。
例如:floatx,y;(x,y為單精度實(shí)型量)
doublea,b,c;(a,b,c為雙精度實(shí)型量)3.字符型變量:用char來定義字符型變量用來存放一個(gè)字符型常量,且只能放一個(gè)字符。實(shí)際在內(nèi)存中存放的是該字符的ASCII值。C語言中字符型數(shù)據(jù)和整形數(shù)據(jù)間可以通用,一個(gè)字符型數(shù)據(jù)既可以按字符型數(shù)據(jù)處理也可以按整形數(shù)據(jù)處理,按整形數(shù)據(jù)處理時(shí)將ASCII值作為整數(shù)處理,故字符型數(shù)據(jù)可以進(jìn)行算術(shù)運(yùn)算。字符型數(shù)據(jù)占一個(gè)字節(jié),只能存放0-255之間的整數(shù)。字符變量類型說明的格式和書寫規(guī)則都與整型變量相同。4.在c語言中沒有專門的字符串變量,如果要將字符串放在變量中,應(yīng)使用字符數(shù)組。5.變量的初值和類型轉(zhuǎn)換(一)變量賦初值在程序中常常需要對變量賦初值,以便使用變量。語言程序中可有多種方法。在定義時(shí)賦以初值的方法,這種方法稱為初始化。在變量說明中賦初值的一般形式為:類型說明符變量1=值1,變量2=值2,……;例如:(1)對被定義的變量均賦初值floatx=3.2,y=3f,z=0.75;charch1='K',ch2='P';(2)對被定義的變量的一部分賦初值inta,b,c=5;(3)對幾個(gè)變量賦同一初值inta=3,b=3,c=3;(二)變量類型的轉(zhuǎn)換變量的數(shù)據(jù)類型是可以轉(zhuǎn)換的。轉(zhuǎn)換的方法有兩種,一種是自動(dòng)轉(zhuǎn)換,一種是強(qiáng)制轉(zhuǎn)換。1、自動(dòng)轉(zhuǎn)換自動(dòng)轉(zhuǎn)換發(fā)生在不同數(shù)據(jù)類型的量混合運(yùn)算時(shí),由編譯系統(tǒng)自動(dòng)完成。自動(dòng)轉(zhuǎn)換遵循以下規(guī)則:若參與運(yùn)算量的類型不同,則先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算。高高doublefloatlongunsigned低intshort,char圖2.1所有的浮點(diǎn)運(yùn)算都是以雙精度進(jìn)行的,即使僅含float單精度量運(yùn)算的表達(dá)式,也要先轉(zhuǎn)換成double型,再作運(yùn)算。char型和short型參與運(yùn)算時(shí),必須先轉(zhuǎn)換成int型。在賦值運(yùn)算中,賦值號兩邊量的數(shù)據(jù)類型不同時(shí),賦值號右邊量的類型將轉(zhuǎn)換為左邊量的類型。如果右邊量的數(shù)據(jù)類型長度比左邊長時(shí),將丟失一部分?jǐn)?shù)據(jù),這樣會(huì)降低精度。圖2.1表示了類型自動(dòng)轉(zhuǎn)換的規(guī)則。2、強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換是通過強(qiáng)制類型轉(zhuǎn)換運(yùn)算符來實(shí)現(xiàn)的。其一般形式為:(類型說明符)(表達(dá)式)其功能是把表達(dá)式的運(yùn)算結(jié)果強(qiáng)制轉(zhuǎn)換成類型說明符所表示的類型。例如:(float)a把a(bǔ)轉(zhuǎn)換為實(shí)型,(int)(x+y)把x+y的結(jié)果轉(zhuǎn)換為整型。在使用強(qiáng)制轉(zhuǎn)換時(shí)應(yīng)注意以下問題:類型說明符和表達(dá)式都必須加括號(單個(gè)變量可以不加括號),如把(int)(x+y)寫成(int)x+y則成了把x轉(zhuǎn)換成int型之后再與y相加了。無論是強(qiáng)制轉(zhuǎn)換或是自動(dòng)轉(zhuǎn)換,都只是為了本次運(yùn)算的需要而對變量的數(shù)據(jù)長度進(jìn)行的臨時(shí)性轉(zhuǎn)換,而不改變數(shù)據(jù)說明時(shí)對該變量定義的類型。6.運(yùn)算符(一)算術(shù)運(yùn)算符和算術(shù)表達(dá)式1.加法運(yùn)算符“+”:加法運(yùn)算符為雙目運(yùn)算符,即應(yīng)有兩個(gè)量參與加法運(yùn)算。如a+b,4+8等。具有左結(jié)合性。
2.減法運(yùn)算符“-”:減法運(yùn)算符為雙目運(yùn)算符。但“-”也可作負(fù)值運(yùn)算符,此時(shí)為單目運(yùn)算,如-x,-5等具有左結(jié)合性。
3.乘法運(yùn)算符“*”:雙目運(yùn)算,具有左結(jié)合性。
4.除法運(yùn)算符“/”:雙目運(yùn)算,具有左結(jié)合性。參與運(yùn)算量均為整型時(shí),結(jié)果也為整型,舍去小數(shù)。如果運(yùn)算量中有一個(gè)是實(shí)型,則結(jié)果為雙精度實(shí)型。
voidmain(){printf("\n\n%d,%d\n",20/7,-20/7);
printf("%f,%f\n",20.0/7,-20.0/7);
}結(jié)果為:2,-22.857143,-2.857143本例中,20/7,-20/7的結(jié)果均為整型,小數(shù)全部舍去。而20.0/7和-20.0/7由于有實(shí)數(shù)參與運(yùn)算,因此結(jié)果也為實(shí)型。5.求余運(yùn)算符(模運(yùn)算符)“%”:雙目運(yùn)算,具有左結(jié)合性。要求參與運(yùn)算的量均為整型。求余運(yùn)算的結(jié)果等于兩數(shù)相除后的余數(shù)。
voidmain(){
printf("%d\n",100%3);
}結(jié)果:1“%”為雙目運(yùn)算,具有左結(jié)合性。求余運(yùn)算符%要求參與運(yùn)算的量均為整型。本例輸出100除以3所得的余數(shù)1。6.算術(shù)表達(dá)式算術(shù)表達(dá)式是由算術(shù)運(yùn)算符和括號連接起來的、符合c語法規(guī)則的式子,以下是算術(shù)表達(dá)式的例子:
a+b(a*2)/c(x+r)*8-(a+b)/7++isin(x)+sin(y)(++i)-(j++)+(k--)(二)自增1,自減1運(yùn)算符
自增1運(yùn)算符記為“++”,其功能是使變量的值自增1。自減1運(yùn)算符記為“--”,其功能是使變量值自減1。自增1,自減1運(yùn)算符均為單目運(yùn)算,都具有右結(jié)合性??捎幸韵聨追N形式:++ii自增1后再參與其它運(yùn)算。--ii自減1后再參與其它運(yùn)算。
i++i參與運(yùn)算后,i的值再自增1。
i--i參與運(yùn)算后,i的值再自減1。
在理解和使用上容易出錯(cuò)的是i++和i--。特別是當(dāng)它們出現(xiàn)在較復(fù)雜的表達(dá)式或語句中時(shí),常常難于弄清,因此應(yīng)仔細(xì)分析。注意:1、自增、自減運(yùn)算符只能用于變量不能用于常量或表達(dá)式2、自增、自減運(yùn)算符的結(jié)合方向?yàn)樽杂蚁蜃蟆@纾喝鬷的原值為3則執(zhí)行語句printf(“%d”,-i++);的結(jié)果為-3。(先取出i的值3輸出-i的值-3,然后i增值為4)3、對于i+++j類表達(dá)式c編譯系統(tǒng)在處理時(shí)自左而右盡可能多的將若干個(gè)字符組成一個(gè)運(yùn)算符。所以它相當(dāng)于(i++)+j4、在函數(shù)調(diào)用時(shí)對函數(shù)參數(shù)的求值順序是自右而左。例如:若i的初值位3則執(zhí)行printf(“%d,%d”,i,i++);的結(jié)果為4,3(三)賦值運(yùn)算符和賦值表達(dá)式
簡單賦值運(yùn)算符和表達(dá)式,簡單賦值運(yùn)算符記為“=”。由“=”連接的式子稱為賦值表達(dá)式。其一般形式為:變量=表達(dá)式例如:x=a+bw=sin(a)+sin(b)y=i+++--j賦值表達(dá)式的功能是計(jì)算表達(dá)式的值再賦予左邊的變量。賦值運(yùn)算符具有右結(jié)合性。因此a=b=c=5
可理解為
a=(b=(c=5))如果賦值運(yùn)算符兩邊的數(shù)據(jù)類型不相同,系統(tǒng)將自動(dòng)進(jìn)行類型轉(zhuǎn)換,即把賦值號右邊的類型換成左邊的類型。具體規(guī)定如下:
1、實(shí)型賦予整型,舍去小數(shù)部分。整型賦予實(shí)型,數(shù)值不變,但將以浮點(diǎn)形式存放,即增加小數(shù)部分(小數(shù)部分的值為0)。3、字符型賦予整型,由于字符型為一個(gè)字節(jié),而整型為二個(gè)字節(jié),故將字符的ASCII碼值放到整型量的低八位中,高八位為0或?yàn)?視系統(tǒng)而定。4、整型賦予字符型,只把低八位賦予字符量。5、將unsignedint型數(shù)據(jù)賦給longint型變量時(shí),只需將高位補(bǔ)0。6、將非unsigned型數(shù)據(jù)賦給長度相同的unsigned型變量,也是原樣照賦。(四)復(fù)合賦值符及表達(dá)式
在賦值符“=”之前加上其它二目運(yùn)算符可構(gòu)成復(fù)合賦值符。例如:+=,-=,*=,/=,%=構(gòu)成復(fù)合賦值表達(dá)式的一般形式為:變量雙目運(yùn)算符=表達(dá)式它等效于變量=變量運(yùn)算符表達(dá)式例如:a+=5等價(jià)于a=a+5x*=y+7等價(jià)于x=x*(y+7)r%=p等價(jià)于r=r%p復(fù)合賦值符這種寫法,對初學(xué)者可能不習(xí)慣,但十分有利于編譯處理,能提高編譯效率并產(chǎn)生質(zhì)量較高的目標(biāo)代碼。(五)逗號運(yùn)算符和逗號表達(dá)式C語言中逗號“,”也是一種運(yùn)算符,稱為逗號運(yùn)算符。其功能是把兩個(gè)表達(dá)式連接起來組成一個(gè)表達(dá)式,稱為逗號表達(dá)式。
其一般形式為:表達(dá)式1,表達(dá)式2其求值過程是分別求兩個(gè)表達(dá)式的值,并以表達(dá)式2的值作為整個(gè)逗號表達(dá)式的值。說明兩點(diǎn):
1、逗號表達(dá)式中的表達(dá)式1和表達(dá)式2也可以又是逗號表達(dá)式。例如:表達(dá)式1,(表達(dá)式2,表達(dá)式3)形成了嵌套情形。因此可以把逗號表達(dá)式擴(kuò)展為以下形式:表達(dá)式1,表達(dá)式2,…表達(dá)式n整個(gè)逗號表達(dá)式的值等于表達(dá)式n的值。2、程序中使用逗號表達(dá)式,通常是要分別求逗號表達(dá)式內(nèi)各表達(dá)式的值,并不一定要求整個(gè)逗號表達(dá)式的值。3、并不是在所有出現(xiàn)逗號的地方都組成逗號表達(dá)式,如在變量說明中,函數(shù)參數(shù)表中逗號只是用作各變量之間的間隔符。3.2例題【例題3-1】下列哪些是c語言提供的合法的數(shù)據(jù)關(guān)鍵字A.FloatB.signedC.integerD.Char解析:此題的選項(xiàng)A和D中有一個(gè)字母是大寫字母,c語言的關(guān)鍵字不允許用大寫字母,所以是不正確的,c也不對,在c語言中,用int而不用integer做為整形數(shù)據(jù)定義的關(guān)鍵字,只有B是對的,signed是有符號的意思,是c語言中的一個(gè)關(guān)鍵字。答案:B【例題3-2】下面標(biāo)識符中,合法的用戶標(biāo)識符為A.變量aB.fast+1c.printfD.2ab解析:標(biāo)識符只能由字母、數(shù)字、下劃線三種字符組成。且第一個(gè)字符必須為字母或下劃線。A是漢字不是上述三種情況之一,不能用做用戶標(biāo)識符。而B含有加號,加號不能用做標(biāo)識符。D是以數(shù)字開頭,不符合標(biāo)識符命名規(guī)則。C選項(xiàng)是c語言的庫函數(shù),可以做用戶標(biāo)識符。答案:C【例題3-3】下列屬于整形常量的是A.0X12AB.12xC.-12.D.1E2解析:十六進(jìn)制整數(shù)是以0x開頭,所以選項(xiàng)B不合法。選項(xiàng)C有小數(shù)點(diǎn)所以是實(shí)型常量的十進(jìn)制表示形式,D是實(shí)型常量的指數(shù)表示形式。c語言能用來表示整常數(shù)的有三種:十進(jìn)制、八進(jìn)制、十六進(jìn)制。A是整形常量的十六進(jìn)制表示形式。答案:A【例題3-4】下述四項(xiàng)中,合法的c語言整型常量是A.-087B.5LC.(long)123456D.1.23e+2解析:選項(xiàng)A中087雖然是以0開頭的,但它不是一個(gè)八進(jìn)制數(shù),因?yàn)橐粋€(gè)八進(jìn)制數(shù)的數(shù)字字符在0—7之間,八進(jìn)制數(shù)前可以帶負(fù)號。選項(xiàng)C是一個(gè)表達(dá)式而不是一個(gè)常量。選項(xiàng)D是一個(gè)實(shí)形常量。選項(xiàng)B是在一個(gè)整數(shù)后加L構(gòu)成一個(gè)長整形常量。答案:B【例題3-5】以下不正確的實(shí)型常量是()A.–2.B.123E-2C.-.543D.2.1E3.5解析:1、實(shí)型常量的十進(jìn)制表示形式中,小數(shù)部分或整數(shù)部分可省略,但不能同時(shí)省略。2、在指數(shù)形式(fem或fEm)的表示中,f為十進(jìn)制整數(shù)或浮點(diǎn)數(shù),m必須是整數(shù),并且f和m都不能省略,“+”號可以省略,“-”號不能省略。)觀察以上A、B、C三個(gè)選項(xiàng)都是合法實(shí)型常量。選項(xiàng)D中指數(shù)部分不是整數(shù),是錯(cuò)誤的。答案:D【例題3-6】若有以下定義和語句:intu=010,v=0x10,w=10;printf(“%d,%d,%d”,u,v,w);則結(jié)果輸出為()A.8,16,10B.10,10,10C.8,8,10D.8,10,10解析:函數(shù)printf要求三個(gè)整形變量u,v,w按十進(jìn)制形式輸出,所以八進(jìn)制數(shù)“010”要轉(zhuǎn)換成十進(jìn)制數(shù)8,十六進(jìn)制數(shù)0x10要轉(zhuǎn)換成十進(jìn)制16。答案:A【例題3-7】下述常量中,哪些是不合法的常量A.’\12’B.“”C.‘’D.“\483”解析:顯然,B和D是字符串常量,A是字符常量。選項(xiàng)A是一個(gè)普通的八進(jìn)制轉(zhuǎn)義字符,ASCII值為10。B是空字符串。選項(xiàng)D初看起來是一個(gè)八進(jìn)制轉(zhuǎn)義序列。但因?yàn)?超過了八進(jìn)制范圍,系統(tǒng)自動(dòng)將其識別為’\4’、’8’和’3’組成,在輸出時(shí)顯示為“
83”。選項(xiàng)c僅由兩個(gè)連續(xù)的單引號組成,是錯(cuò)誤的字符常量。答案:C【例題3-8】以下不合法的常量是()A.‘\6’B.""C.‘\286’D.”\286”解析:B選項(xiàng)""是空字符串常量,此串僅占用一個(gè)字節(jié)。A選項(xiàng)為轉(zhuǎn)義字符。D選項(xiàng)為字符串常量,而C選項(xiàng)看似為轉(zhuǎn)義字符,但超過了\后的八進(jìn)制的表示范圍,是不合法的。答案:C【例題3-9】字符串”\\\”AAA\123\xAA\t”的長度為A.8B.17C.14D.10解析:c語言對上述問題的處理方法是從左向右盡可能多的將連續(xù)的字符組成一個(gè)有意義的項(xiàng)。所以\\為轉(zhuǎn)義字符\,\”為轉(zhuǎn)義字符輸出為”。AAA是三個(gè)普通字符。\123也是轉(zhuǎn)義字符。\XAA是轉(zhuǎn)義字符。\t為一個(gè)轉(zhuǎn)義字符。答案:A【例題3-10】下列選項(xiàng)中,()是正確的轉(zhuǎn)義字符。A.'\xef'B.'\082'C.'xab'D.'\'解析:B選項(xiàng)“\”后應(yīng)為1-3位八進(jìn)制,但8超過了八進(jìn)制的表示范圍,故是錯(cuò)誤的。C選項(xiàng)不是轉(zhuǎn)義字符的表示形式。D選項(xiàng)不是轉(zhuǎn)義字符的正確表示形式。A選項(xiàng)表示十六進(jìn)制ef所表示的字符∩。答案:A【例題3-11】下面程序段的結(jié)果是inti=65536;printf(“%d\n”,i);A.65536B.0C.有語法錯(cuò)誤,無出結(jié)果D.1解析:c語言規(guī)定,int類型變量占兩個(gè)字節(jié)的存儲(chǔ)單元,表示的數(shù)值范圍為-32768——32767,題目中的i賦值為65536,已超過兩個(gè)字節(jié)所能表示的數(shù)值,c語言認(rèn)為這并不是出錯(cuò),而是自動(dòng)取低位兩個(gè)字節(jié)的內(nèi)容。將該數(shù)減去整型數(shù)據(jù)類型的模,所以65536-65536=0答案:B【例題3-12】若int類型數(shù)據(jù)占兩個(gè)字節(jié),則執(zhí)行以下語句的輸出為()intk=-1;printf(“%d,%u\n”,k,k);A.–1,-1B.-1,32767C.-1,32768D.-1,65535解析:c語言中,負(fù)數(shù)在內(nèi)存中是以補(bǔ)碼形式存在的。k=-1在內(nèi)存中的存儲(chǔ)形式是1111111111111111,當(dāng)把k的值按“%d”格式(有符號整數(shù))輸出時(shí)為-1。按“%u”格式(無符號整數(shù))輸出時(shí)為65535。答案:D補(bǔ)充:求負(fù)數(shù)的補(bǔ)碼(以-7為例)(1)寫出絕對值|-7|的二進(jìn)制表示形式0000000000000111(2)按位取反(即將0變?yōu)?,將1變?yōu)?)1111111111111000(3)末位加1即得到-7在內(nèi)存中的表示形式1111111111111001【例題3-13】在下述輸出語句的判定中,正確的是()intx=0x123456L;longinty=0xe;printf(“%x,%ld”,x,y);A.輸出值為3456,14B.非法賦值C.輸出值不確定D.輸出值為0x123456,0xe解析:Long型數(shù)據(jù)0x123456L賦給int型變量x,系統(tǒng)自動(dòng)對其進(jìn)行類型轉(zhuǎn)換,將數(shù)據(jù)中低16位3456賦值給x,舍棄高16位的0x0012。將0xe賦值給long型變量y,其值送到y(tǒng)的低16位,因?yàn)?xe是正數(shù),所以變量y的高16位補(bǔ)0。十六進(jìn)制0xe的十進(jìn)制為14。故選項(xiàng)A是正確的。答案:A【例題3-14】下列程序的輸出是#include<stdio.h>main(){printf(“%d”,null);}A.0B.變量無定義C.–1D.1解析:(1)要把此處的null與c語言中預(yù)定義表標(biāo)識符NULL區(qū)分開。NULL是在頭文件stdio.h中定義的的標(biāo)識符,它代表‘\0’;而null是小寫拼音字母拼寫,因此不能將它當(dāng)做NULL,而是一般的用戶標(biāo)識符。(2)c語言規(guī)定,程序中用到的所有變量在使用前必須先進(jìn)行定義,而本題中的程序在對null做輸出處理之前對它沒有給出明確的變量定義答案:B【例題3-15】若k為整形變量,則以下語句inta=-2L;printf(“%d\n”,a);A.賦值不合法B.輸出值為-2C.輸出為不確定值D.輸出值為2解析:本題的主要關(guān)鍵是要弄清c語言中常量的表示方法和有關(guān)的賦值原則。在一個(gè)整形常量后面加一個(gè)L則被認(rèn)為是長整形常量。一個(gè)整常量,如果其值在-32768-32767之間內(nèi),可以賦給一個(gè)int型或longint型變量。但如果整常量的值超過了上述范圍,而在-2147483648---2147483674范圍內(nèi),則應(yīng)將其值賦給一個(gè)longint型變量。本例中-2L雖然為longint但是其值為-2,因此可以通過類型轉(zhuǎn)換把長整形轉(zhuǎn)換為短整形,然后賦給整形變量a,并按照%d格式輸出該值即為-2。答案:B【例題3-16】在c語言中,若下面的變量都是int類型的,則輸出的結(jié)果是sum=pad=5;PAD=sum++,PAD++,++PAD;printf(“%d\n”,pad);A.7B.6C.5D.4解析:在c語言中,標(biāo)識符的大小寫含義是不同的,因而本題中的pad和PAD分別代表兩個(gè)不同的變量名稱。由于pad已賦值為5,所以顯示pad的結(jié)果也是5。答案:C【例題3-17】已知ch是字符變量,以下不正確的賦值語句是()A.ch=“a”;B.ch=’a’;C.ch=’\141’;D.ch=’\x61’+3;解析:‘a(chǎn)’是字符占用一個(gè)字節(jié)?!癮”是字符串占用兩個(gè)字節(jié),不能賦值給字符型變量,因?yàn)樽址妥兞恐荒艽娣乓粋€(gè)字節(jié)的內(nèi)容。所以A應(yīng)該是錯(cuò)誤的。C選項(xiàng)和D選項(xiàng)是轉(zhuǎn)義字符分別用八進(jìn)制和十六進(jìn)制的ASCII碼表示字符常量‘a(chǎn)’和‘d’。答案:A【例題3-18】下面選項(xiàng)中,()是對字符變量不正確的賦值方式A.ch=’$’B.ch=’7’+3C.ch=‘\t’D.ch=‘a(chǎn)+b’解析:A選項(xiàng)是將字符$賦給字符變量。選項(xiàng)B是數(shù)字字符7與整數(shù)3相加做算術(shù)運(yùn)算。C語言中字符型數(shù)據(jù)和整形數(shù)據(jù)間可以通用,一個(gè)字符型數(shù)據(jù)既可以按字符型數(shù)據(jù)處理也可以按整形數(shù)據(jù)處理。按整形數(shù)據(jù)處理時(shí)將ASCII值作為整數(shù)處理,故字符數(shù)據(jù)可以進(jìn)行算術(shù)運(yùn)算。選項(xiàng)c為轉(zhuǎn)義字符。選項(xiàng)D單引號括起來三個(gè)字符。而字符常量是單引號括起來的一個(gè)字符,字符型變量用來存放一個(gè)字符型常量,且只能放一個(gè)字符。故選項(xiàng)D為錯(cuò)誤。答案:D【例題3-19】若有以下定義和語句charc1=’b’,c2=’e’;printf(“%d,%c\n”,c2-c1,c2-‘a(chǎn)’+’A’);則輸出結(jié)果是A.2,MB.3,EC.2,eD.輸出項(xiàng)與對應(yīng)的格式控制不一致,輸出結(jié)果不穩(wěn)定解析:c語言中規(guī)定,字符型常量在內(nèi)存中占一個(gè)字節(jié),用于存放字符的ASCII值。所有字符型常量都作為整形量處理,其對應(yīng)的整數(shù)值就是ASCII字符集中該字符的序號。執(zhí)行表達(dá)式“c2-c1”相當(dāng)于字符‘e’與字符‘b’的ASCII碼值相減,即101-98得3。而“c2-‘a(chǎn)’+’A’”即101-97+65得69,而ASCII碼值69對應(yīng)的字符是‘E’。答案:B【例題3-20】請選出合法的c語言賦值語句A.a(chǎn)=b==58B.i++;C.a(chǎn)=58,b=58D.k=int(a+b);解析:由于c語言規(guī)定,c程序中的任一語句都必須有一個(gè)分號做結(jié)束標(biāo)志,分號是構(gòu)成任何語句的重要成分,所以答案A、C均錯(cuò)。答案D中的書寫int(a+b)是完全錯(cuò)誤的,根據(jù)c語言規(guī)定,使用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符的書寫形式為:(類型名)(表達(dá)式),所以答案D應(yīng)改寫為:k=(int)(a+b)。答案 B當(dāng)于語句i=i+1;由此可見,該語句是合法的賦值語句。答案:B【例題3-21】已知:‘a(chǎn)’的ASCⅡ碼值為97,‘0’的ASCⅡ碼值為48,下述程序的輸出結(jié)果是#include<stdio.h>main(){printf(“%s”,”\tabc%L\’\”\064\x41\085”);}A.□□□□□□□□abc%L’”4AB.\tabc%L\’\”\064\x41\085C.abc%L’”0AD.abc%L’”0A\085解析:(1)轉(zhuǎn)義字符“\t”的作用是使后面的輸出跳到下一個(gè)輸出區(qū)。一個(gè)輸出區(qū)為8列。(2)abc為三個(gè)普通字符,原樣輸出。(3)對應(yīng)“\’\””的輸出是單撇號和雙撇號。(4)“%”后面不是格式字符,它作為普通字符輸出,即輸出一個(gè)“%”。“L”是普通字符,原樣輸出。(5)轉(zhuǎn)義字符的ASCII碼表示一個(gè)字符,,八進(jìn)制的轉(zhuǎn)義字符“\064”為八進(jìn)制,轉(zhuǎn)換為十進(jìn)制為52,表示字符’4’。十六進(jìn)制的“\x41”表示字符‘A’。(6)“\085”不是八進(jìn)制的ASCII碼表示的一個(gè)字符,而是‘\0’、‘8’、‘5’字符,輸出時(shí)輸出到第一個(gè)空字符‘\0’時(shí)結(jié)束,所以,‘8’、‘5’不輸出。答案:A【例題3-22】下列語句中,符合c語言語法的賦值語句是A.a(chǎn)=7+b+c=a+c;B.a(chǎn)=7+b++=a+7;C.a(chǎn)=7+b,b++,a++D.a=7+b,c=a+7;解析:答案A和B均錯(cuò),c語言中的賦值運(yùn)算符的左邊只能是變量或表示一個(gè)存儲(chǔ)單元的表達(dá)式。答案c錯(cuò),c語言中規(guī)定任何語句都必須有一個(gè)分號來結(jié)束。答案D正確,c語言允許用逗號運(yùn)算符把若干個(gè)表達(dá)式連接起來形成逗號表達(dá)式。答案:D【例題3-23】經(jīng)過下述賦值后,變量x的數(shù)據(jù)類型是()intx=3;doubley;y=(double)x;A.intB.charC.floatD.double解析:將變量x的值3強(qiáng)制轉(zhuǎn)換成double類型,再賦值給y,變量x的數(shù)據(jù)類型還是int型。因?yàn)槿魏巫兞慷x后其數(shù)據(jù)類型不能改變。答案:A【例題3-24】以下程序的輸出結(jié)果()main(){floatx=3.6;inti;i=(int)x;printf(“x=%f,i=%d”,x,i);}A.x=3.600000,i=4B.x=3,i=3C.x=3.600000,i=3D.x=3i=3.600000解析:變量被作強(qiáng)制類型轉(zhuǎn)換后,其類型不會(huì)改變,改變的只有表達(dá)式的值,因此,執(zhí)行語句i=(int)x后,x的值仍為3.6,但i的值為3。答案:C【例題3-25】設(shè)x=2.5,a=7,y=4.7,算術(shù)表達(dá)式x+a%3*(int)(x+y)%2/4的值A(chǔ).2.5B.7C.4.7D.2.25解析:取模運(yùn)算只能在整形數(shù)據(jù)之間進(jìn)行,a為整形變量。因?yàn)?、*、/這三個(gè)運(yùn)算符的優(yōu)先級別相同,類型轉(zhuǎn)換符優(yōu)先于*、/運(yùn)算符,a的值為7,7%3=1,又因?yàn)椋╥nt)(2.5+4.7)=7,1*7=7,7%2=1,1/4=0,所以表達(dá)式x+a%3*(int)(x+y)%2/4=x+0=2.5答案:A【例題3-26】下述程序的輸出結(jié)果main(){inta=016;a%=6-1;printf(“%d,”,a);a+=a*=a/=3;printf(“%d,”,a++);printf(“%d”,++a);}A.4,0,3B.4,0,2C.4,2,4D.4,1,3解析:(1)016是八進(jìn)制整形常量,十進(jìn)制表示為14。復(fù)合的賦值運(yùn)算符的優(yōu)先級別比算術(shù)運(yùn)算符“-”的優(yōu)先級別低,先計(jì)算6-1=5,在計(jì)算a%5(即14%5得4)賦值給a,所以a的值是4,先輸出4。(2)計(jì)算a/=3(即4/3等于1,賦值給a,a的值為1)。計(jì)算a*=1(a*1等于1*1,賦值給a,a的值為1),計(jì)算a+=1(a+1等于1+1=2,賦值給a,a的值為2)。(3)執(zhí)行printf(“%d,”,a++);語句,先輸出a的值為2,然后,變量a的值在自增1(a的值為3)。(4)執(zhí)行printf(“%d,”,++a);語句,先將變量a的值自增1(a的值為4),再輸出a的值4。答案:C【例題3-27】以下程序的輸出結(jié)果是()main(){inta=1,b=2,c=3,k;k=a+++b+++c++;printf(“\n%d,%d,%d,%d”,a,b,c,k);}A.1,2,3,6B.2,3,4,6C.1,3,3,7D.1,3,3,6解析:表達(dá)式a+++b+++c++應(yīng)理解為:(a++)+(b++)+(c++)所以執(zhí)行此語句后,k的值是6,a的值是2,b的值是3,c的值是4,輸出結(jié)果為:2,3,4,6。答案:B【例題3-28】下面正確的語句是()A.intx=y=25;B.intz=(x+y)++;C.x=+8==7;D.x%=4.5;解析:在c語言中,可以在定義變量時(shí)對變量初始化,例如:intx=25,但是,對幾個(gè)變量賦同一初值時(shí)不允許以A方式定義變量或?qū)ψ兞砍跏蓟?。選項(xiàng)B中++運(yùn)算符只能用于變量不能用于常量或表達(dá)式,在本題中不能用于表達(dá)式(x+y)。選項(xiàng)D中,%運(yùn)算符的操作是只能是整形數(shù)據(jù),不能是4.5。選項(xiàng)c中的運(yùn)算符“==“比”=“的優(yōu)先級高,先進(jìn)行”+8==7“的運(yùn)算,其值為假(0),再賦值給x,選項(xiàng)c是正確的賦值語句。況且排除A、B、D只有C選項(xiàng)是正確的。答案:C【例題3-29】若x,y都是整形變量,x=100,y=200,執(zhí)行完printf(“%d”,(x,y));后,輸出結(jié)果是A.200B.100C.100200D.輸出格式不符,輸出不確定的值解析:c語言將逗號作為一種特殊的運(yùn)算符,其求值過程是分別求兩個(gè)表達(dá)式的值,并以表達(dá)式2的值作為整個(gè)逗號表達(dá)式的值。答案:A【例題3-30】若有說明語句inti,j;則計(jì)算表達(dá)式i=(j=3,j++,j=5,j+5)后i的值為A.3B.4C.5D.10解析:求逗號表達(dá)式的過程是:先求表達(dá)式1的值,再求表達(dá)式2的值,最后求表達(dá)式n的值,整個(gè)逗號表達(dá)式的值等于表達(dá)n的值)答案:D【例題3-31】下述程序運(yùn)行的結(jié)果是:main(){intx,y;x=sizeof3.14*5;y=sizeof(3.14*5);printf(“%d,%d\n”,x,y);}A.15,4B.40,8C.8,8D.20,8解析:sizef運(yùn)算符的優(yōu)先級高于算術(shù)運(yùn)算符的優(yōu)先級,所以sizeof3.14*5相當(dāng)于(sizeof3.14)*5為8*5得40。sizeof(3.14*5)為sizeof(15.70)其值為8(c語言中規(guī)定每個(gè)實(shí)型常量當(dāng)作雙精度處理)。答案:B第四章最簡單的C程序設(shè)計(jì)——順序程序設(shè)計(jì)4.1重點(diǎn)、難點(diǎn)1.C語言中的語句C語言中的語句用來向計(jì)算機(jī)發(fā)出命令,一個(gè)語句經(jīng)編譯后產(chǎn)生若干條機(jī)器指令。一個(gè)C源程序由若干函數(shù)構(gòu)成,每個(gè)函數(shù)應(yīng)包含若干條語句。在C語言中所有語句都是“可執(zhí)行語句”,沒有非執(zhí)行語句。C語言中的語句分為簡單句和復(fù)合句兩大類,簡單句由分號(;)結(jié)尾,表示一個(gè)語句的終結(jié),分號必不可少;復(fù)合句用一對花括號({})把一些語句括起來。注意:“}”后不必加“;”,但復(fù)合語句中最后一個(gè)語句中的“;”不能忽略不寫,例如:{y=a+b;printf(“%d”,y);}。復(fù)合語句中的每一個(gè)語句可以是任意語句,當(dāng)然包括復(fù)合語句本身,復(fù)合語句在形式上是多個(gè)語句的組合,但在語法上只相當(dāng)于一個(gè)簡單語句,可出現(xiàn)在任何簡單語句可以出現(xiàn)的地方。C語言中的語句按語句功能又可分為以下四類:(1)控制語句(共9種),完成一定的控制功能。①if(條件)語句else語句(條件語句)②for(表達(dá)式1;表達(dá)式2;表達(dá)式3)循環(huán)體(循環(huán)語句)③while(條件)循環(huán)體(循環(huán)語句)④do循環(huán)體while(條件)(循環(huán)語句)⑤continue(結(jié)束本次循環(huán)語句)⑥break(中止執(zhí)行switch或循環(huán)語句)⑦switch(多分支選擇語句)⑧goto(轉(zhuǎn)向語句)⑨return(從函數(shù)返回語句)(2)函數(shù)調(diào)用語句。由一次函數(shù)調(diào)用加一個(gè)分號(;)構(gòu)成。例:printf(“ThisaCprogram”);(3)表達(dá)式語句。由一個(gè)表達(dá)式加一個(gè)分號(;)構(gòu)成。例:area=3.1415926*r*r;(4)空語句。只有一個(gè)分號(;)構(gòu)成,它什么也不做。有時(shí)用來做循環(huán)體,表示循環(huán)體什么也不做。2.常用的順序執(zhí)行語句1.賦值語句由賦值表達(dá)式加上分號構(gòu)成。注意:a=x+y和a=x+y;意義不同,前者是表達(dá)式,后者是表達(dá)式語句。2.輸入輸出函數(shù)調(diào)用語句C語言本身沒有提供輸入輸出語句,而是在標(biāo)準(zhǔn)庫函數(shù)中定義了一系列的輸入輸出函數(shù),通過對這些函數(shù)的調(diào)用來實(shí)現(xiàn)數(shù)據(jù)的輸入輸出,如果在調(diào)用這些函數(shù)的結(jié)尾加上“;”,就構(gòu)成了輸入輸出函數(shù)調(diào)用語句。注意:在使用標(biāo)準(zhǔn)輸入輸出(I/O)庫函數(shù)時(shí),要用#include“stdio.h”預(yù)編譯命令將“stdio.h”文件包括到用戶源文件中。(1)字符輸入函數(shù)調(diào)用形式:getchar()作用:從終端(或系統(tǒng)隱含指定的輸入設(shè)備)輸入一個(gè)字符。注意:getchar沒有參數(shù),函數(shù)值是從輸入設(shè)備得到的字符。該函數(shù)可以不賦給任何變量直接輸出,例putchar(getchar())。(2)字符輸出函數(shù)調(diào)用形式:putchar(c)作用:向終端輸出一個(gè)字符。函數(shù)值是輸出的字符。C可以是字符型常量、字符型變量、整形常量、整形變量及其表達(dá)式。(3)格式輸出函數(shù)形式:printf(格式控制字符串,輸出表列)例如:printf(“%d,%d”,a,b)作用:選擇輸出數(shù)據(jù)的格式,向終端(或系統(tǒng)隱含指定的輸出設(shè)備)輸出若干任意類型的數(shù)據(jù)。說明:①格式控制字符串是用雙引號括起來的字符串,用于描述輸出項(xiàng)的輸出方式,包括兩類,一類是普通字符和轉(zhuǎn)義字符,普通字符(如上例中的“,”)按原樣輸出,轉(zhuǎn)義字符按轉(zhuǎn)義后的字符輸出;另一類是以%號開頭的格式說明符,用于描述輸出數(shù)據(jù)的顯示格式。若輸出%本身,應(yīng)在%前加一個(gè)%,即兩個(gè)%連寫。②輸出表列為若干個(gè)輸出項(xiàng),應(yīng)盡可能與格式控制串中以%號開頭的格式控制說明符在數(shù)量、數(shù)據(jù)類型、順序上保持一致。如果格式控制說明符與輸出項(xiàng)數(shù)據(jù)類型不一致,以格式說明符為主;如果輸出項(xiàng)的個(gè)數(shù)多余格式控制說明符的個(gè)數(shù),沒有格式控制說明符的輸出項(xiàng)不輸出;如果格式控制說明符的個(gè)數(shù)多余輸出項(xiàng)的個(gè)數(shù),按格式控制說明符輸出對應(yīng)的輸出項(xiàng)的值,對應(yīng)多余的格式控制說明符輸出隨機(jī)值。③常用格式說明如下:1)d格式(輸出十進(jìn)制整數(shù))%d按數(shù)據(jù)實(shí)際長度輸出;%mdm為正整數(shù),是指定的輸出字段寬度,若實(shí)際數(shù)據(jù)位數(shù)<m,則數(shù)據(jù)左端補(bǔ)空格,若實(shí)際數(shù)據(jù)位數(shù)≥m,按實(shí)際位數(shù)輸出(保證數(shù)據(jù)正確,突破場寬)。%-mdm是指定的輸出字段寬度,若實(shí)際數(shù)據(jù)位數(shù)<m,則數(shù)據(jù)右端補(bǔ)空格,若實(shí)際數(shù)據(jù)位數(shù)≥m,按實(shí)際位數(shù)輸出。%ld輸出長整形數(shù)據(jù),也可在l之前加上m。2)o格式(輸出八進(jìn)制整數(shù))把內(nèi)存單元(連同符號位)一起按八進(jìn)制形式輸出,因此不會(huì)輸出負(fù)號,同d格式符一樣,有%o,%mo,%lo等形式。3)x格式(輸出十六進(jìn)制整數(shù))類似o格式,也有%x,%mx,%lx等形式,不會(huì)輸出負(fù)值。4)u格式(以十進(jìn)制形式輸出unsigned數(shù)據(jù)類型)5)c格式(用以輸出一個(gè)字符,其范圍為ASCII碼在0——127之間)6)s格式(用于輸出字符串)%s按原樣輸出字符串。例:printf(“%s”,“China”);輸出China(注意:不輸出雙引號);%ms當(dāng)字符串長度大于m時(shí),按實(shí)際長度輸出,否則左邊補(bǔ)空格;%-ms當(dāng)字符串長度小于m時(shí)右邊補(bǔ)空格;%m.ns輸出m列,但只取字符串左邊的n個(gè)字符,左邊補(bǔ)空格;%-m.ns同上,但n個(gè)字符右邊補(bǔ)空格。7)f格式(以小數(shù)點(diǎn)形式輸出實(shí)數(shù))%f不指定寬度時(shí),由系統(tǒng)自動(dòng)確定,整數(shù)部分全部輸出,小數(shù)部分輸出六位,但有效數(shù)位單精度為7位,雙精度為16位。8)e格式(以指數(shù)形式輸出實(shí)數(shù))%e數(shù)值按規(guī)格化數(shù)形式輸出(即小數(shù)點(diǎn)前有一位非零數(shù)字),系統(tǒng)自動(dòng)確定6位小數(shù)部分和4位階碼部分(其中e本身占一位,階符一位,階二位,例如e+03)。%m.ne%-m.nem為總列數(shù),n為小數(shù)點(diǎn)后位數(shù)。9)g格式(輸出實(shí)數(shù),系統(tǒng)自動(dòng)選用e或f且不輸出無意義的0)系統(tǒng)自動(dòng)在e或f格式中選擇輸出寬度小的一種方式。表4-1、表4-2總結(jié)了printf的各種格式字符及附加格式字符(修飾符)。4-1printf格式字符表格式字符說明格式字符說明d,i以帶符號的十進(jìn)制形式輸出整數(shù)(正數(shù)不輸出+)f以小數(shù)形式輸出單、雙精度數(shù)(小數(shù)部分占6位)o以八進(jìn)制無符號形式輸出整數(shù)(不輸出前導(dǎo)符0)E,e以指數(shù)形式輸出單、雙精度數(shù)(6位小數(shù),4位階碼)X,x以十六進(jìn)制無符號形式輸出整數(shù)(不輸出前導(dǎo)符0x),用X時(shí),則以大寫字母輸出g選%f或%e格式中輸出寬度較短的一種格式,不輸出無意義的0u以無符號的十進(jìn)制形式輸出整數(shù)s輸出字符串c以字符形式輸出一個(gè)字符表4-2printf附加格式字符表附加字符說明字母l用于長整形數(shù)據(jù)的輸出,可加在d,o,x,u的前面正整數(shù)m指定輸出數(shù)據(jù)的寬度,實(shí)際數(shù)據(jù)超出時(shí),按實(shí)際輸出,可加在d、o、x、u的前面正整數(shù)n輸出實(shí)數(shù)時(shí),保留n位小數(shù);輸出字符串時(shí),表示截取n個(gè)字符-輸出項(xiàng)在輸出域內(nèi)左對齊排放,不加-號的格式輸出項(xiàng)按默認(rèn)的右對齊輸出+無論正、負(fù)數(shù),輸出時(shí)都帶符號位表4-3scanf格式字符表格式字符說明格式字符說明d,i輸入有符號的十進(jìn)制整數(shù)c輸入單個(gè)字符u輸入無符號的十進(jìn)制整數(shù)s輸入字符串,將字符串送入一個(gè)字符數(shù)組中,輸入時(shí)以非空白字符開始,以第一個(gè)空白字符結(jié)束。字符串以串結(jié)束標(biāo)志’\0’作為其最后一個(gè)字符o輸入無符號的八進(jìn)制整數(shù)f輸入實(shí)數(shù),可以用小數(shù)形式或指數(shù)形式X,x輸入無符號的十六進(jìn)制整數(shù)(大小寫作用相同)E,e,G,g與f作用相同,e與f,g可以互相替換(大小寫作用相同)表4-4scanf附加格式字符表附加字符說明字母l用于長整形數(shù)據(jù)的輸入(加在d,o,x的前面)及double型數(shù)據(jù)(%lf、%le)的輸入字母h用于短整形數(shù)據(jù)的輸入正整數(shù)m指定輸入數(shù)據(jù)的寬度,按指定寬度取值賦給相應(yīng)變量*對應(yīng)的輸入項(xiàng)不賦給相應(yīng)的變量,跳過此數(shù)據(jù)(4)格式輸入函數(shù)形式:scanf(格式控制字符串,地址表列)作用:按格式控制串的格式從終端為一個(gè)或多個(gè)不同類型的變量賦值。說明:①scanf函數(shù)的格式控制字符串與printf函數(shù)的格式控制字符串類似,其格式字符及附加格式字符見表4-3和表4-4。注意:除表中給出的大寫字符外,其它格式說明符只能用小寫字母,如%d不能寫成%D。②地址表列由若干個(gè)地址組成,可以是變量的地址(如&a)或已經(jīng)賦值的指針變量(第十章介紹)。③在輸入數(shù)據(jù)時(shí),數(shù)據(jù)分隔方法。1)當(dāng)格式控制字符之間不包括其它字符,且輸入的是數(shù)值型數(shù)據(jù)(整形或浮點(diǎn)型)時(shí),數(shù)據(jù)之間可以用空格、Tab鍵或回車鍵(<CR>)分隔;2)當(dāng)指定了數(shù)據(jù)寬度時(shí),可連續(xù)輸入數(shù)據(jù)。例如:假設(shè)inta;floatb,c;執(zhí)行scanf(“%2d%3f%4f”,&a,&b,&c);語句時(shí),輸入數(shù)據(jù)123456789<CR>,相當(dāng)于a=12,b=345.000000,c=6789.0000003)當(dāng)輸入的是數(shù)值型(整形和浮點(diǎn)型)和字符型,且兩種類型交錯(cuò)出現(xiàn),可連續(xù)輸入,系統(tǒng)自動(dòng)識別。例如:假設(shè)inta;charb;floatc;執(zhí)行scanf(“%d%c%f”,&a,&b,&c);語句時(shí),輸入數(shù)據(jù)1234c6789<CR>,相當(dāng)于a=1234,b=’c’,c=6789.000000。當(dāng)遇到“c”時(shí),系統(tǒng)知道相應(yīng)于“&x”項(xiàng)的輸入已經(jīng)結(jié)束,“c”是相應(yīng)于“&y”項(xiàng)的輸入,只接收一個(gè)字符,余下的是相應(yīng)于“&z”的輸入。4)如果格式控制字符串中有其它字符,輸入數(shù)據(jù)時(shí)必須在相應(yīng)位置輸入這些字符。當(dāng)這類普通字符出現(xiàn)在數(shù)值型數(shù)據(jù)之間時(shí),可以當(dāng)成數(shù)據(jù)分隔符。例如:假設(shè)intx;floatz;執(zhí)行scanf(“%d,%f”,&x,&z);語句時(shí),輸入數(shù)據(jù)12,34<CR>,相當(dāng)于x=12,z=34.000000,普通字符“,”看成數(shù)據(jù)間隔符。5)當(dāng)輸入字符數(shù)據(jù)時(shí),空格、回車、Tab鍵和轉(zhuǎn)義字符均為有效字符輸入,所以此時(shí)不能使用間隔符,例如:scanf(“%c%c%c”,&c1,&c2,&c3);當(dāng)輸入數(shù)據(jù)abc<CR>,相當(dāng)于c1=‘a(chǎn)’,c2=‘b’,c3=‘c’。④輸入數(shù)據(jù)時(shí)不能規(guī)定實(shí)型(即浮點(diǎn)型)數(shù)據(jù)精度,例如:scanf(“%7.2f”,&a)是不合法的。⑤輸入數(shù)據(jù)時(shí)遇到下列情況之一,認(rèn)為輸入數(shù)據(jù)結(jié)束??崭?、回車、Tab鍵遇到寬度滿足時(shí),例如:“%4d”,只取4列。遇到非法輸入。例如:scanf(“%d%c%f”,&x,&y,&z);當(dāng)輸入數(shù)據(jù)12345a12o.56<CR>(其中把數(shù)字0錯(cuò)打?yàn)橛⑽淖帜竜,則x=12345,y=‘a(chǎn)’,z=12.000000。⑥“%”后的附加說明符“*”用來表示本輸入項(xiàng)在讀入后不賦值給相應(yīng)的變量,即跳過它對應(yīng)的數(shù)據(jù)。例如:inta;charc;scanf(“%2c:%*2d%d”,&c,&a);運(yùn)行時(shí),輸入數(shù)據(jù)AB:1020<CR>“AB”是對應(yīng)格式“%2c“的輸入,則c=‘A’,普通字符“:”原樣輸入,“10”是對應(yīng)格式“%*2d”的輸入,跳過這兩位數(shù)10,將20賦值給變量a,使a=20。4.2例題一、填空【例4-1】已知boy=54,girl=46,(1)如果想輸出boy=54%,girl=46%,則輸出部分應(yīng)為:;(2)如果想輸出boy=54%,girl=46%則輸出部分應(yīng)為:;解析:(1)中的“boy=”、“,”、“girl=”為普通字符,原樣輸出,在格式串中直接寫出,“%”在格式串中用“%%”表示,“54”在格式串中用%d控制,與輸出項(xiàng)boy對應(yīng),“46”在格式串中也用%d控制,與輸出項(xiàng)girl對應(yīng)。(2)與(1)不同之處在于分兩行輸出,用“\n”控制。答案:(1)printf(“boy=%d%%,girl=%d%%”,boy,girl);(2)printf(“boy=%d%%\ngirl=%d%%”,boy,girl);【例4-2】若有程序main(){inti,j;scanf("i=%d,j=%d",&i,&j);printf("i=%d,j=%d\n",i,j);}要求給i賦10,給j賦20,則應(yīng)該從鍵盤輸入。解析:scanf函數(shù)中的格式串中的“i=,j=”為普通字符,原樣輸入,其中“,j=”又在兩個(gè)%d中間起分隔作用。答案:i=10,j=20<CR>【例4-3】若使用語句:scanf("%d,%d",&x1,&x2); scanf("%3c%c",&x3,&x4);將10、20、a、b分別賦值給整型變量x1、x2、x3、x4,應(yīng)按方式輸入數(shù)據(jù)。解析:本題考查的是scanf函數(shù)的數(shù)據(jù)輸入間隔問題。"%d,%d"用普通字符“,”間隔,輸入時(shí),原樣輸入;%d和%3c之間屬于不同數(shù)據(jù)類型的控制字符,自動(dòng)分隔,不用間隔符;%3c%c用字符寬度間隔,也不用間隔符。答案:10,20a**b(說明:**也可換成其它字符)【例4-4】以下程序運(yùn)行后的輸出結(jié)果是_______。main(){intx,y;x=97;y=097;printf(“%d%d\n”,x,y);printf(“%c%c\n”,x,y);}解析:x,y均為整型變量,第一個(gè)輸出語句按十進(jìn)制整型輸出,且數(shù)據(jù)之間有一個(gè)空格,按原樣輸出,第二個(gè)輸出語句按字符型數(shù)據(jù)輸出。注意:y應(yīng)轉(zhuǎn)成十進(jìn)制形式輸出。答案:9779a0【例4-5】寫出下面程序的結(jié)果。main(){intx=34;floaty=45.9867;printf(“%6D,%6.2F\n”,x,y);/*①輸出為:%6D,%6.2F*/printf(“%6d,%6.2f\n”,x,y);/*②輸出為:□□□□34,□45.99*/printf(“%-6d\n”,x);/*③輸出為:34□□□□(右補(bǔ)4個(gè)空格)*/printf(“%06d\n”,x);/*④輸出為:000034(左補(bǔ)4個(gè)0)*/printf(“%-06d\n”,x);}/*⑤輸出為:34(0將失去作用)*/解析:格式控制符應(yīng)為小寫字母,輸出語句①由于D、F是大寫字母,所以它們被當(dāng)成普通字符,原樣輸出;輸出語句②的d、f是格式控制字符,6和6.2是附加格式說明符,要求x按6位輸出,(左補(bǔ)4個(gè)空格),y按6位輸出,四舍五入保留2位小數(shù)(左補(bǔ)一個(gè)空格,小數(shù)點(diǎn)占一位);輸出語句③要求x按6位輸出,附加格式說明符-要求右補(bǔ)4個(gè)空格;輸出語句④要求x按6位輸出,附加格式說明符0要求左補(bǔ)4個(gè)0;輸出語句⑤要求x按6位輸出,附加格式說明符-0要求右補(bǔ)4個(gè)0,0將失去作用,否則出現(xiàn)錯(cuò)誤。答案:輸出結(jié)果在題右側(cè)?!纠?-6】以下程序段的輸出結(jié)果是。inta,c;unsignedd;floatb,e;a=3.5+3/2;b=23;c=’\xe0’;d=-1;e=2.555555555;printf(“\n%d,%f,%d,%u,%f”,a,b,c,d,e);解析:(1)變量a的值是4(3.5+3/2=3.5+1再取整,而不是3.5+1.5)。(2)b=23;將整形數(shù)據(jù)轉(zhuǎn)換成實(shí)型數(shù)據(jù)后再輸出。(3)轉(zhuǎn)義字符’\xe0’在內(nèi)存中占一位,其存儲(chǔ)形式為:11100000,將其賦值給int型變量c,系統(tǒng)將其賦給c的低八位,自動(dòng)將高八位補(bǔ)11111111,即c變量的值為1111111111100000,十進(jìn)制輸出是-32。(4)d=-1;-1在內(nèi)存中表示為:1111111111111111,數(shù)據(jù)中16位原樣賦值給變量d。輸出65535。(5)e=2.555555555;將double浮點(diǎn)數(shù)按四舍五入轉(zhuǎn)換成單精度賦值給變量e。本題主要考查不同類型的數(shù)據(jù)之間的賦值、數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式。提示:我們在編寫程序時(shí)也應(yīng)像本題一樣,注意輸出項(xiàng)的數(shù)據(jù)類型與格式控制符保持一致。答案:4,23.000000,-32,65535,2.555556二、選擇【例4-1】下列語句中,不正確的是。A.c=2*5;B.{x++==8;x/=4;} C.;D.c=a+b解析:本題主要考查語句的基本概念,c語句由分號(;)結(jié)尾,表示一個(gè)語句的終結(jié),分號必不可少,所以D錯(cuò)。B是復(fù)合語句;C是空語句。答案:D【例4-2】以下是非法函數(shù)調(diào)用語句。A.charc=’T’;B.charc;putchar(c);getchar(c);C.putchar(0x61);D.putchar(‘a(chǎn)’+1);解析:getchar函數(shù)沒有參數(shù),調(diào)用函數(shù)形式為getchar()putchar函數(shù)有參數(shù),調(diào)用函數(shù)形式為putchar(c),c可以是字符型常量、字符型變量、整型常量及其表達(dá)式。答案:B【例4-3】若輸入12345、abc下列程序的輸出結(jié)果為:。main(){inta;charch;scanf(“%3d%3c”,&a,&ch);printf(“%d,%c”,a,ch);}A.123,abcB.123,4C.123,aD.12345,abc解析:本題輸入項(xiàng)為兩個(gè)不同的數(shù)據(jù)類型,且指定了數(shù)據(jù)寬度,所以按指定寬度截取數(shù)據(jù)為變量賦值,整形變量a=123,字符型變量ch為一個(gè)字符,取截取的三個(gè)字符中的第一個(gè),即ch=‘4’;輸出時(shí),注意“,”原樣輸出。答案:B【例4-4】有如下語句:longinta;doublex;unsignedy;charch;則是合法的輸入語句。A.scanf("%ld%lf%x%c",a,x,y,ch); B.scanf("%d%5.2f%d%c",&a,&x,&y,&ch);C.scanf("%ld%lf%o%c",&a,&x,&y,&ch); D.scanf("%ld%f%x%c",&a,&x,&y,&ch); 解析:本題考查的是輸入語句的格式控制字符串應(yīng)與輸入項(xiàng)在數(shù)據(jù)類型上應(yīng)保持一致。,所以B錯(cuò),另外B的%5.2f加了精度限制,也屬于錯(cuò)誤之處;雙精度型變量x應(yīng)與格式控制符%lf對應(yīng),所以D錯(cuò);無符號型變量y應(yīng)與格式控制符%u、%x或%o對應(yīng);字符型變量ch應(yīng)與格式控制符%c或%d對應(yīng),用%d作為格式控制符時(shí),從鍵盤上輸入的數(shù)據(jù)應(yīng)為輸入字符的ASCII碼值。A錯(cuò)在輸入項(xiàng)是變量名本身,應(yīng)該是變量的地址。答案:C【例4-5】有如下定義和輸入語句,若要求a,b,c,d的值分別為23,45,’M’,’N’,正確的輸入應(yīng)該是。inta,b;charc,d;scanf(“%d%d”,&a,&b);scanf(“%c%c”,&c,&d);A.2345MN<CR>B.2345<CR>MN<CR>C.2345MN<CR>D.2345MN<CR>解析:A是錯(cuò)誤的,它使a=2345。因?yàn)檩斎霐?shù)據(jù)時(shí),23和45之間沒有數(shù)據(jù)分隔符。選項(xiàng)B是錯(cuò)誤的,它使a=23,b=45,c是“回車”,d=’M’。選項(xiàng)C也是錯(cuò)誤的,它使a=23,b=45,c=’□’,d=’M’。因?yàn)橐?c格式輸入字符數(shù)據(jù)時(shí),對應(yīng)的變量只接收一個(gè)字符?!翱崭瘛焙汀盎剀嚒币彩亲址麛?shù)據(jù)。本題主要考查scanf函數(shù)的使用。注意:以%c格式輸入字符數(shù)據(jù)時(shí),對應(yīng)的變量只接收一個(gè)字符?!翱崭瘛焙汀盎剀嚒币彩亲址麛?shù)據(jù)。答案:D【例4-6】以下程序段的輸出結(jié)果是。floatx=32.76888888;printf(“%6.3f,%f”,x,x);A.32.769,32.76888888B.32.769,32.768890C.32.76888888,32.7688888D.有語法錯(cuò)誤,無輸出解析:%6.3f要求輸出占6位(包括小數(shù)點(diǎn)),小數(shù)部分按四舍五入取值,占3位,輸出32.769。%f要求正常按實(shí)數(shù)輸出,7位有效數(shù)字,小數(shù)部分取6位,輸出32.768890,3,2,7,6,8,8,9為有效數(shù)字,0為隨機(jī)值。答案:B【例4-7】若int類型數(shù)據(jù)占兩個(gè)字節(jié),則執(zhí)行以下語句的輸出為。intx=-7;printf(“%d,%u\n”,x,x);A.-7,-7B.-7,32762C.-7,-32762D.-7,65529解析:首先明確變量的值在內(nèi)存中的存放形式(以補(bǔ)碼存放),x=-7在內(nèi)存中的存放形式是:1111111111111001,當(dāng)把x的值按“%d”格式(有符號整數(shù))輸出時(shí)為-7;按“%u”格式(無符號整數(shù))輸出時(shí)為65529。本題如果將k以無符號整數(shù)格式“%o”和“%x”輸出時(shí)結(jié)果為17771和fff9。答案:D【例4-8】以下程序段的輸出結(jié)果是。intk=32768;printf(“%d”,k);A.0B.-32768C.-1D.有語法錯(cuò)誤,無輸出解析:int型數(shù)據(jù)的范圍是:-32768~32767,k值超出了int型數(shù)據(jù)的范圍,系統(tǒng)做出了溢出處理,將該數(shù)減去整型數(shù)據(jù)類型的模(即該類型數(shù)據(jù)能表示的數(shù)據(jù)的個(gè)數(shù),基本整形的模為65536),所以32768-65536=-32768。答案:B【例4-9】在下述輸出語句的輸出結(jié)果中,正確的是。intx=0xabcdefL;longinty=0x11;printf(“%x,%ld”,x,y);A.輸出值為cdef,17B.非法賦值C.輸出值不確定D.輸出值為0xabcdef,0x11解析:Long型數(shù)據(jù)0xabcdef賦給int型變量x,系統(tǒng)自動(dòng)對其進(jìn)行類型轉(zhuǎn)換,將數(shù)據(jù)中低16位cdef賦值給x,舍棄高16位的0x00ab。將0x11賦值給long型變量y,其值送到y(tǒng)的低16位,因?yàn)?x11是正數(shù),所以,變量y的高16位補(bǔ)0。高16位低
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 大理2024年10版小學(xué)三年級英語第6單元期末試卷
- 員工費(fèi)用報(bào)銷填寫說明-記賬實(shí)操
- 2024年工業(yè)噴墨打印頭項(xiàng)目資金籌措計(jì)劃書代可行性研究報(bào)告
- 緊密紡精梳棉紗制備技術(shù)規(guī)范
- 幼兒園食品安全工作計(jì)劃
- 診所的自查報(bào)告(3篇)
- 足球賽新聞稿
- 25.4 相似三角形的判定 同步練習(xí)
- 陜西省咸陽市禮泉縣2024-2025學(xué)年高二上學(xué)期期中試題英語試題(含答案含聽力原文無音頻)
- 廣東省韶關(guān)市2025屆高三上學(xué)期11月綜合測試(一)語文試題(含答案)
- 高中心理健康教育-痛并快樂著-考試后心理輔導(dǎo)教學(xué)課件設(shè)計(jì)
- 項(xiàng)目驗(yàn)收匯報(bào)ppt模板
- 分包合同(施工隊(duì))
- 網(wǎng)電咨詢績效考核KPI
- 急性心肌梗死科普
- 鄉(xiāng)鎮(zhèn)落后表態(tài)發(fā)言
- 漢服特征,形制與分類
- SMT行業(yè)PLM和MES系統(tǒng)整體解決方案
- 小學(xué)三年級下冊綜合實(shí)踐活動(dòng).節(jié)約用水從我做起-(25張)ppt
- 0927高一【語文(統(tǒng)編版)】第三單元起始課-課件
- 丘吉爾英文介紹課件
評論
0/150
提交評論