1.若有定義:int a,b.c;以下選項中的指派語句正确的是(A)
A)a=(b=c)+1;
B(a=b)=c=1:
C)a=(b==c)=1;
D)a+b=c;
解析:指派運算結合性為由右向左結合,指派運算符左值為變量,右值為變量或常量,且左右兩邊資料類型相同才能實作指派。A選項中,将c指派給b,然後将b加1指派給a,正确的指派語句,A選項正确。B選項中,将1指派給c,指派運算(a=b)=c中左值為表達式,不是變量不能被指派,B選項錯誤。C選項中指派運算(b==c)=1左值為邏輯表達式,不是變量不能被指派,C選項錯誤。D選項左值(a+b)為表達式,不是變量不能被指派,D選項錯誤。
2.以下選項中,合法的C語言實數是(B)
A)3.1e0.4
B).2e0
C)E13
D)7.12E
解析:實型常量:用帶小數點的數字表示,其值有兩種表達形式,分别為十進制小數形式和指數形式。十進制小數形式由數字和小數組成,必須有小數點,且小數點的位置不受限制。指數形式由十進制數加階碼标志“e"或”E”以及階碼(隻能為整數,可以帶符号)組成。2e0為指數形式實數,B選項正确。3.1e0.4,階數不是整數,A選項錯誤。E13階碼标志前缺少十進制數,C選項錯誤。7.12E缺少階碼,D選項錯誤。
3.有如下程式
#include <stdio.h>
main{
intx=0x13;
if(x=0x18)printf("T);
printf("F");
printf("n);
}
程式運作後的輸出結果是(A)
A)TF
B)T
C)F
D)TFT
【解析】x=0x18為指派表達式,十六進制數0x18非0,即x非0,條件成立輸出T,之後再輸出F與回車符。程式運作後的輸出結果是TF,A選項正确。
4.有一下程式段
FILE*fp;
if((fp=fopen("test.txt","w))==NULL)
{
printf (不能打開檔案!);
exit(0);
}
else printf(“成功打開檔案!”);
若指定檔案test.txt不存在,且無其他異常,則以下叙述錯誤的是(A)
A.輸出“不能打開檔案
B.輸出”成功打開檔案!
C.系統将按指定檔案名建立檔案
D.系統将為寫操作建立文本檔案
解析 :fopen函數以一定方式打開指定檔案,傳回一個指向檔案的檔案指針,如果不能實作打開指定檔案的操作,則傳回一個空指針NULL。如果指定文牛不存在則建立一個檔案名為指定檔案名的新檔案,然後打開它。在指定檔案有錯誤或者指定檔案不存在卻不能建立新檔案的情況下,打開檔案操作錯誤,傳回指針。本題程式中,檔案test.txt不存在,但無其他異常,表示可以建立新檔案,命名為test.tst,C選項叙述正确,并以隻寫方式打開它,D選項叙述正确,傳回指檔案的指針,條件不成立,輸出“成功打開檔案!”,B選項叙述正确,A選項叙述錯誤。
5.有以下程式
#inchude<stdio.h>
#define N 2
#define M N+1
#define MUN(M+1)*M/2
main(){
printf("%dn",MUN);
}
程式運作後的輸出結果是(A)
A)8 B)9 C)5 D)6
解析:【我錯誤的解法】将M=N+1=3帶入(M+1)*M/2=(3+1)*3/2=6
【正确解法】(M+1)*M/2換成(N+1+1)*N+1/2,将N=2代入得到MUN=8,程式的運作結果是8,A選項正确。
6.若有以下程式
#include<stdio.h>
#define S(x)(x)*(x)
#define T(x)S(x)/S(x)+1
main()
{int k=3,j=2;
printf("%d,%dn",S(k+j),T(k+j));
}
則程式的輸出結果是(D)
A.11.2 B25.2 C.11,12 D.25.26
【解析】本題考查宏定義,宏定義隻是做個簡單的替換,執行S(k+j)=(k+j)*(k+j)=25,T(k+j)=S(k+j)/S(k+j)+1=(k+j)*(k+j)/(k+j)*(k+j)+1=26,選項D正确。這種題目 需要注意是否有括号。
7.有以下程式
#include <stdio.h>
struct link{
int data;
struct link*next;
}
main(){
struct link*h,a,b;
h=&a,a.data=10;a.next=&b;b.data=20;
}
程式運作時不能輸出10.20的語句是(A)
A) printf("%d,%d \n",h->data,a. next. data);
B) printf("%d.%d n",a data,(*a next). data);
C) printf("%d,%d n",h->data,(*a. next). data):
D) printf("%d,%d n",a. data,a. next->data);
解析:可用以下3種形式來引用結構體變量中的成員:結構體變量名.成員名;指針變量名->成員名;(*指針變量名).成員名。主函數定義了兩個結構體變量a,b其成員data分别為10和20,且a成員指針指向b。A選項中a.next為指針,其引用格式為a.next->data與(*a.next).data,A選項錯誤。B選項a.data=10,(*a.next).data=20,正确輸出10.20;C選項h->data=10,(*a.next).data=20,能正确輸出10,20;D選項a.data=10,a.next->data=20,能正确輸出10,20。
8.若有說明語句:char c='\72';則變量c中存放的是(B)
A)2個字元 B)1個字元 C)3個字元 D)說明語句不合法
解析:用一對單引号括起來的單個字元為字元常量,以"\"開頭的轉義字元也是字元常量。"\"後可以為某些單個字元也可以為八進制或十六進制數字,故c中存放的是一個字元。B選項正确。