【文章內(nèi)容簡介】
則以下語句正確的是 。 A) a=5; B) a={2,39。a39。,}; C) printf(%d\n,a); D) n=a; 【 】已知: struct sk { int a; int age; }date,*p; 如果要使指針 p 指向 data 中的成員 a,正確的賦值語句是 ____。 A) p = (struct sk *)amp。; B) p = (struct sk *); C) p = amp。; D) *p = ; 【 】已知 enum week {sun,mon,tue,wed,thu,fri,sat}day;則正確的賦值語句是 ____。 A) sun=0; C) san=day; D) sun=mon; D) day=sun; 【 】已知 enum color {red,yellow=2,blue,white,black}ren;執(zhí)行下述語句的輸出結果是 ____。 printf(%d,ren=white); A) 0 B) 1 C) 3 D) 4 【 】已知 enum name{zhao=1,qian,sun,li}man;執(zhí)行下述程序段后的輸出是 ____。 man=0; switch(man) { case 0: printf(People\n); case 1: printf(Man\n); case 2: printf(Woman\n); default: printf(Error\n); } A) People B) Man C) Woman D)Error 【 】下述關于枚舉類型名的定義中,正確的是 ____。 A) enem a={ one,two,three }; B) enem a { one=9,two=1,three }; C) enem a={one,two,three}; D) enem a {one,two,three}; 13 【 】C語言中標準輸入文件 stdin 是指 。 A) 鍵盤 B) 顯示器 C) 鼠標 D) 硬盤 【 】要打開一個已存在的非空文件 file用于修改,選擇正確的語句____。 A) fp=fopen(file, r); B) fp=fopen(file, a+); C) fp=fopen(file, w); D) fp=fopen(39。file, r+); 【 】當順利執(zhí)行了文件關閉操作時, fclose 函數(shù)的返回值是 。 A) 1 B) TRUE C) 0 D) 1 【 】 fscanf 函數(shù)的正確調(diào)用形式是 。 A) fscanf (文件指針 , 格式字符串 , 輸出列表 ); B) fscanf (格式字符串 , 輸出列表 , 文件指針 ); C) fscanf (格式字符串 , 文件指針 , 輸出列表 ); D) fscanf (文件指針 , 格式字符串 , 輸入列表 ); 【 】使用 fgetc 函數(shù),則打開文件的方式必須是 。 A) 只寫 B) 追加 C) 讀或讀 /寫 D) 參考答案 B 和 C 都正確 【 】已知宏定義 define N 3 define Y(n) ((N+1)*n) 執(zhí)行語句 z=2*(N+Y(5+1));后,變量 z 的值是 ____。 A) 42 B) 48 C) 52 D) 出錯 【 】已知宏定義 define SQ(x) x*x,執(zhí)行語句 printf(%d,10/SQ(3));后的輸出結果是 ____。 A) 1 B) 3 C) 9 D) 10 【 】已知宏定義如下: define PR printf define NL \n define D %d define D1 DNL 若程序中的語句是 PR(D1,a);經(jīng)預處理后展開為 ____。 A) printf(%d\n,a); B) printf(%d\n,a); C) printf(%d\n, a); D) 原語句錯誤 14 【單項選擇題參考答案】 【 】答案 : A 注釋: int 是 C 語言的關鍵字 【 】答案 : B 【 】答案: A 【 】答案: B 注釋: include 是預處理命令; scanf 是函數(shù)名; type 不是 C 語言的關鍵字。 【 】答案: D 【 】答案: D 【 】答案: A 【 】答案: A 注釋: int 型表示整數(shù)的范圍是 32768~ 32767。 【 】答案: D 注釋:整型常量 1 在計算機中表示為補碼 1111 1111 1111 1111,用十六進制顯示這個數(shù)時,最左邊的 1 不會被解釋為符號位,而是與右邊其它位共同轉換為十六進制數(shù)。 【 】答案: B 注釋:長整型數(shù) 32768 在計算機內(nèi)的表示是 1000 0000 0000 0000,以一般整型進行輸出時,此數(shù)恰是 32768 的補碼。 【 】答案: C 注釋:長整型數(shù) 65539 在計算機內(nèi)的表示是 0001 0000 0000 0000 0011,以一般整型進行輸出時,僅將右側 16 位二進制數(shù)轉換為十進制數(shù)。 【 】答案: A 注釋: C 語言中, int 型的負數(shù)是采用補碼表示的。 【 】答案: D 【 】答案: C 注釋:變量 c 是字符型,可用字符常量為它賦值。字符常量必須用單引號括起來,所以 B 是錯誤的;在單引號或雙引號內(nèi)的反斜線 39。\39。用于表示轉義字符, A 選項在無引號時使用反斜線是錯誤的; C 選項單引號內(nèi)出現(xiàn)反斜線表示 它與后面的數(shù)字組成一個轉義字符;單引號只允許括起一個字符, D 選項在單引號內(nèi)出現(xiàn) 4 個字符,是錯誤的。 【 】答案: C 【 】答案: D 注釋:空字符和空格符是不同的兩個字符,空格符的 ASCII 碼值是 32,空字符的 ASCII 值是 0。 【 】答案: A 【 】答案: B 【 】答案: A 【 】答案: C 【 】答案: B 注釋:單純從 C 語言語法來說,選項 B、 C 都是正確的,但是選項 C 中第一個運算的兩個對象都是整型常數(shù),其結果也是整型數(shù) 0,最后的運算結果也就是 0 了。 【 】答案: C 【 】答案: A 注釋:將條件表達式增加一個括號,此式變?yōu)?ab?a:(cd?c:d),它的運算順序就清楚了。由于條件運算符的結合性是從右向左,所以括號可以省略。它的運算順序是先算出右邊的條件表達 15 式 cd?c:d的值,然后求條件表達式 ab?a:3 的值。 【 】答案: C 【 】答案: B 【 】答案: B 注釋:當通過一個運算對象即可決定邏輯運算 amp。amp。的結果時,則對另一個運算對象不做處理。 【 】答案: D 【 】答案: B 注釋:數(shù)組元素在內(nèi)存中按行排列,此數(shù)組的前 3 個 元素的值分別是 1,表達式中雖然數(shù)組下標的寫法似乎每行有 3 個元素,和定義時的 3 行 2 列不一致,但是 C 語言引用數(shù)組元素時是根據(jù)數(shù)組的首地址和給出的下標進行運算決定元素的地址。題中表達式引用了數(shù)組前 3 個元素。 【 】答案 : A 【 】答案: D 【 】答案: B 【 】答案: B 【 】答案: B 【 】答案: A 【 】答案: C 【 】答案: C 【 】答案: C 【 】答案: D 【 】答案: D 【 】答案: C 】答案: D 注釋: scanf 函數(shù)返回值是輸入數(shù)據(jù)的個數(shù), printf 函數(shù)的返回值是輸出的字符個數(shù)。 【 】答案: D 【 】答案: C 注釋:在 C 語言中, 經(jīng)常用一個變量來作為邏輯表達式,其含義就是:當變量的值不為 0 時關系成立。 【 】答案: D 注釋: break 語句僅可跳出 switch 語句,不會跳出 while 循環(huán),這是一個死循環(huán)。 【 】答案: A 【 】答案: C 【 】答案: C 【 】答案: D 注釋:當除數(shù) y 為 0 時,程序發(fā)生溢出錯誤。 【 】答案: C 【 】答案: A 【 】答 案: C 【 】答案: C 注釋:答案 C 的賦值號左側是數(shù)組 s 的首地址,是一個常量,賦值號右側是一個字符串常量,不可能將一個字符串常量賦給一個地址常量。 【 】答案: D 注釋: D 選項缺少字符串結束標志。 【 】答案: C 16 注釋:此處函數(shù)形參是一個指針變量,接受實參的地址,而不是一個數(shù)組。 【 】答案: A 【 】答案: D 注釋:這里首先要明確一些基本概念。在 C 語言中,程序與文件是不同的概念,一個程序可以由一個文件組成,也可以由多個文件組成;一個文件中又可以包含多個函數(shù);函數(shù)是構成 C 程序的 基本單位。 變量的作用域因變量的存儲類型不同而不同。 auto 和 register 類型的變量的作用域是說明變量的當前函數(shù);外部變量的作用域是整個程序,即外部變量的作用域可以跨越多個文件;內(nèi)部靜態(tài)變量(定義在一個函數(shù)內(nèi)部的 static 型的變量)的作用域是當前函數(shù),外部靜態(tài)變量(定義在函數(shù)外面的 static 型的變量)的作用域是當前文件,即可以跨越同一文件中的不同函數(shù)。 【 】答案: A 【 】答案: A 注釋:它和參數(shù) a 一樣,數(shù)據(jù)類型說明被省略,按照 C 語言的規(guī)定,在這種情況下,表示它們是 int 型。 【 】答案: C 注釋:函數(shù) swapa 是值傳遞,函數(shù)的執(zhí)行結果不能返回;函數(shù) swapb 中變量 temp 不是指針變量,所以它不能接受地址量,用指針變量 x 為它賦值是不對的;函數(shù) swap 中雖然指針變量交換了地址,即它們的指向的目標變量進行了交換,但是目標變量并沒有行值的交換。 【 】答案: B 【 】答案: D 【 】答案: D 注釋:主調(diào)函數(shù)中 b=0,在執(zhí)行 fun1 函數(shù)里的除法時發(fā)生溢出錯誤。 【 】答案: B 【 】答案: C 【 】答案: D 注釋:在答案 D 中,正確的函數(shù)調(diào)用應當是: printf(%d, *y)。 【 】答案: C 注釋:要注意與說明語句 int (*p)[ ]; 的區(qū)別。說明語句 int (*p)[ ]; 說明的是一個指向數(shù)組的指針。 【 】答案: C 注釋:題干中由于 *和 p被小括號括起,所以 p 應被解釋為一個指針,而后的下標運算符 []說明所指向的對象是一個有 4 個 int 型元素的一維數(shù)組;如果是 int (*p)(),則是指向函數(shù)的指針。對于 int *p[4],則根據(jù)運算符的優(yōu)先級,先考慮 p和 []運算符的關系,所以它就是一個指針數(shù)組了。 【 】答案: B 注釋:選 項 B 有兩處錯誤,一是數(shù)組名是常量,不能出現(xiàn)的賦值好的左側,二是指針變量只能和整數(shù)做加,不能和作為地址常量的數(shù)組名相加。 【 】答案: D 注釋: s 作為數(shù)組名是地址常量,而 s++是 s=s+1, C 語言不允許對常量進行賦值。 【 】答案: C 【 】答案: C 注釋: a 是二維數(shù)組名, a+1 中的 1 不是 1 個字節(jié),而是數(shù)組的 一行 ,即 10 個字節(jié),所以 a+1是第二個字符串的首地址, A 選項正確。在 C 編譯系統(tǒng)中對二維數(shù)組名可這樣理解 (注意,這里僅是理解 ): a 指向一個一維數(shù)組,故 (a+1)是指向 a[1]的, *(a+1)就是取 a[1]的值,它保存第二個字符串 ShangHai的首地址,所以選項 B 也正確。 *a 是第一個字符串的首地址,加 1 是第一個字符串中第二個字符的地址,選項 C 的輸出是 beiJing。選項 D 中的 amp。a[1][0]是對第二個字符 17 串的第一個字符做取地址運算,得到該地址就是字符串 ShangHai的首地址。注意,對于二維數(shù)組來說,做一次 *或 []運算的結果仍是地址量,做兩次才是取數(shù)值。 【 】答案: A 注釋: p 是一個一級指針,選項 B 中對它進行了兩次 *運算是錯誤的。 ptr 是一個指向一維數(shù)組的指針,它所指 向的數(shù)組有三個元素,對于這樣一個指針,對它進行兩次 **運算才能取出地址單元中所存的數(shù)據(jù), C 選項中 *ptr 表示數(shù)組第一行的首地址,該地址是一維數(shù)組的地址, +3 表示加上三個它所指向的數(shù)據(jù)類型的長度,所以 (*ptr+1)+2 是數(shù)組中數(shù)值 4 的地址。根據(jù)以上分析,選項 D 對 ptr 進行了兩次地址操作( *和 []),所以結果應是數(shù)據(jù),但是它加 1 后指向數(shù)組第二行,根據(jù)后面 []中 2 它的地址增加兩個一維數(shù)組的長度,就指向數(shù)組的最后一行,再做 *運算就是數(shù)10,即 a[3][0]。 【 】答案: A 【 】答案: B B 【 】答案: D 【 】答案: B 【 】答案: D 注釋:答案 D 是另一種交換兩個變量值的算法。 【 】答案: B 【 】答案: C 注釋:使用 C 對 p進行賦值,則 pnext 是 a[0]的地址,引用其成員 n 再做前增 1 運算,結果就是 2。 【 】答案: B 【 】答案: D 【 】答案: A 【 】答案: C 注釋:聯(lián)合變量 temp的成員是占