《電腦程式設計基礎(C語言)》
通用
單項選擇練習題
說明:帶*號的對非信息學院的同學不作要求。
一、基本概念
1. C語言程序是由 C 構成的。
A)一些可執行語言 B)main函數 C)函數 D)包含文件中的第一個函數
2.( A )是構成C語言程序的基本單位。
A、函數 B、過程 C、子程序 D、子例程
3.C語言程序從 C 開始執行。
A) 程序中第一條可執行語句 B) 程序中第一個函數
C) 程序中的main函數 D) 包含文件中的第一個函數
4.C語言程序從main()函數開始執行,所以這個函數要寫在_D___。
A) 程序文件的開始 B) 程序文件的最後
C) 它所調用的函數的前面 D) 程序文件的任何位置
5、以下說法中正確的是( C )。
A、C語言程序總是從第一個定義的函數開始執行
B、在C語言程序中,要調用的函數必須在main( )函數中定義
C、C語言程序總是從main( )函數開始執行
D、C語言程序中的main( )函數必須放在程序的開始部分
6. 下列方法中錯誤的是(D )。
A.主函數可以分為兩個部分:主函數說明部分和主函數體。
B.主函數可以調用任何非主函數的其它函數。
C.任何非主函數可以調用其它任何非主函數。
D.程序可以從任何非主函數開始執行。
7. 下列說法錯誤的是:( B )
A. C程序運行步驟是編輯、編譯、連接、執行。
B. C語言的變量名必須用小寫,常量用大寫。
C. C語言的三種基本結構是順序、選擇、循環。
D. C程序一定由函數構成的。
8.下列關於C語言的說法錯誤的是( B ) 。
A) C程序的工作過程是編輯、編譯、連接、運行
B) C語言不區分大小寫。
C) C程序的三種基本結構是順序、選擇、循環
D) C程序從main函數開始執行
9. 系統默認的C語言源程序擴展名為.C,需經過 C 之後,生成.exe文件,才能運行。
A) 編輯、編譯 B )編輯、連接 C) 編譯、連接 D) 編輯、改錯
*10.下列說法中正確的是(B )。
A.由於C源程序是高級語言程序,因此一定要在TC軟體中輸入。
B.由於C源程序是由字符流組成的,因此可以作為文本文件在任何文本編輯的軟體中輸入。
C.由於C程序是高級語言程序,因此輸入後即可執行。
D.由於C程序是高級語言程序,因此它是由命令組成的。
二、數據類型、運算符與表達式
1. 不是C語言提供的合法關鍵字是(B )。
A.switch B.cher C.case D.default
*2.C語言提供的合法關鍵字是(D )。
A.next B.string C.do case D.struct
*3.下列不屬於C語言中關鍵字的是 B
A)long B)print C)default D)typedef
4.下列正確的標識符是(C )。
A.-a1 B.a[i] C.a2_i D.int t
5. 下列C語言用戶標識符中合法的是( B )。
A、*y B、sum C、int D、%5f
6. 下面四個選項中,合法的標識符是:( D )
A. auto B. define C. 6a D. c
7.下列C語言用戶標識符中合法的是( B )。
A)3ax B)x C)case D)-e2 E)union
8. 以下選項中合法的用戶標識符是 B
A) long B) _2Test C) 3Dmax D) A.dat
9.下列四組選項中,正確的C語言標識符是( C )。
A) %x B) a+b C) a123 D) 123
10. 請選出可用作C語言用戶標識符的一組標識符( B )
A) void B) a3_b3 C) For D) 2a
define _123 -abc DO
WORD sum Case sizeof
11、下列四組字符串中都可以用作C語言程序中的標識符的是( A )。
A、print _3d db8 aBc B、I\am one_half start$it 3pai
C、str_1 Cpp pow while D、Pxq My->book line# His.age
12.下列C語言標識符中合法的變量名是 B 。
A)2e3 B)you C)*y D)float
13.C語言中的簡單數據類型包括(D )。
A、整型、實型、邏輯型 B、整型、實型、邏輯型、字符型
C、整型、字符型、邏輯型 D、整型、實型、字符型
14、下列可以正確表示字符型常量的是( A )。
A、』\t』 B、」a」 C、」\n」 D、297
15.下列表達式中, D 是正確的C語言字符常量。
A)」x」 B)e3 C)」COMPUTER」 D)』#』
16.在下列表達式中,屬於字符型常量的是 B 。
A) A B) 'a' C) "A" D) b
17. 以下選項中合法的字符常量是( B )
A) 「B」 B) 『\n』 C) 『68』 D) E
18.下面字符常量表示錯誤的是( D )
A)』a』 B)』?』 C)』\n』 D)」\n」
19. 已定義c為字符型變量,則下列語句中正確的是 ( C )
A)c='97' B)c="97" C)c=『a』 D)c="a"
20. 已知ch是字符型變量,不正確的賦值語句是( A )
A) ch='a+b' ; B) ch=' \0 ' ;
C) ch=' 7' ; D) ch=』;』;
21.C語言中字符型(char)數據在內存中的存儲的是( D )
A) 原碼 B) 補碼 C) 反碼 D) ASCII碼
22.在C語言中,字符型數據所佔的內存空間是( C )
A)2個字節 B) 4位元組 C) 1位元組 D)由用戶自定義
*23.若int類型數據佔2個字節,則unsigned int類型數據的取值範圍是 ( B )
A)0~255 B)0~65535 C)-32768~32767 D)-256~255
*24. 若有以下類型說明語句:char a;int b; float c; double d; 則表達式a*b+d-c的結果類型為( D )
A)float B) char C) int D)double
*25.若有以下類型說明語句:char w;int x;float y;double z;則表達式w-x*y/z的結果為( D )類型,表達式(int)(x+y-z*w)的結果為( C )類型。
A)float B)char C)int D)double
26 .C語言中運算對象必須是整型的運算符是( A )
A) %= B) / C) = D) 〈=
27.在C語言程序中,表達式8/5的結果是( B )
A)1.6 B)1 C)3 D)0
28.設x為int型變量,則執行以下語句後,x的值為 B
x=10; x+=x;
A) 10 B) 20 C) 40 D) 30
31.在C語言程序中,表達式5%2的結果是 C 。
A)2.5 B)2 C)1 D)3
32.如果int a=3,b=4;則條件表達式"a<b? a:b"的值是__A__。
A) 3 B) 4 C) 0 D) 1
33.若int x=2,y=3,z=4 則表達式x<z?y:z的結果是( B ).
A)4 B)3 C)2 D)0 E)1
34.C語言中,關係表達式和邏輯表達式的值是( B ) 。
A) 0 B) 0或1 C) 1 D) 『T』或』F』
35.設a,b和c都是int型變量,且a=3,b=4,c=5,則下面表達式中,值為0的表達式是( D )
A、』a』&&』b』 B、a<=b
C、a||b+c&&b-c D、!((a<b)&&!c||1)
37. 下面( D )表達式的值為4.
A) 11/3 B) 11.0/3
C) (float)11/3 D) (int)(11.0/3+0.5)
*39. 已知int x=5,y=5,z=5;執行語句x%=y+z;後,x的值是( C )
A .0 B. 1 C. 5 D. 6
40. 已知字母A的ASCII碼為十進位數65,且c2為字符型,則執行語句c2='A'+'6'-'3';後,c2中的值為 ( B )
A) 68 B) 『D』 C) 錯誤 D) 『d』
41.下列關於C語言的敘述錯誤的是( A )
A) 大寫字母和小寫字母的意義相同
B) 不同類型的變量可以在一個表達式中
C) 在賦值表達式中等號(=)左邊的變量和右邊的值可以是不同類型
D) 同一個運算符號在不同的場合可以有不同的含義
42. 有:int w=11,x=12,y=3,m; 執行下面語句後m的結果是( C )
m=(w<x)?w:x;
m=(m<y)?m:y;
A. 1 B. 2 C. 3 D. 以上結果都不對
43. 有:int w=7, x=12, y=3, m; 執行下面語句後m的值是( A )
m=(w>x)?w:x;
m=(m>y)?m:y;
A. 12 B. 0 C. 3 D. 1
45.設整型變量 a=2,則執行下列語句後,浮點型變量b的值不為0.5的是( B )
A.b=1.0/a B.b=(float)(1/a)
C.b=1/(float)a D.b=1/(a*1.0)
48. 以下運算符中優先級最高的運算符是( B )
A)&& B)++ C)+= D)!=
49.若「int n; float f=13.8;」,則執行「n=(int)f%3」後,n的值是(A)
A.1 B.4 C.4.333333 D.4.6
52. 設x為int型變量,則執行以下語句後,x的值為( C )
x=10; x*=x;
A) 10 B) 20 C) 100 D) 0
53. 若有語句int a=1,b; double y=2.3; b=(int)y; 則b的值為 (B )。
A) 3 B) 2 C) 1 D) 2.3
54.已知int x;char y;則下面錯誤的scanf函數調用語句為(B )
A)scanf(「%d,%d」,&x,&y); B) scanf(「%d,%c」,x,y)
C) scanf(「%d%d」,&x,&y) D) scanf(「%d,%c」,&x,&y)
57.在C語言的庫函數中,可以輸出char型變量x值的語句是 C 。
A)getchar(x); B)fputc(x) C)putchar(x) D)puts(x)
60. 以下說法正確的是( C )
A) 'x'+5是一個錯誤的表達式
B) C語言不允許類型的混合運算
C) 強制類型轉換時,類型說明符必須加括號
D) (int)x+y 和(int)(x+y)是完全等價的表達式
61.設 int x=0, y=1; 表達式(x||y)的值是 ( B )
A) 0 B) 1 C) 2 D) -1
三、選擇結構
1. 在C語言中,認為( D )為邏輯"真"
A) true B)大於0的數 C)非0整數 D)非0的數
2. 表示關係x<=y<=z的c語言表達式為 A
A) (x<=y)&&(y<=z) B) (x<=y)AND(y<=z)
C) (x<=y<=z) D) (x<=y)&(y<=z)
3.能正確表示邏輯關係:「a≥=10或a≤0」的C語言表達式是( D )
A) a>=10 or a<=0 B) a>=0|a<=10
C) a>=10 &&a<=0 D) a>=10‖a<=0
4、判斷char型變量c1是否為大寫字母的表達式為( D )。
A、』A』<=c1<=』Z』 B、(c1>=』A』) & (c1<=』Z』)
C、(』A』<=c1)AND (『Z』>=c1) D、 c1>=』A』 && c1<=』Z』
5. 為表示邏輯表達式79<X<90,應使用的C語言表達式是 A 。
A)( X>79 )&&( X<90 ) B) ( X>79 )!=( X<90 )
C) 79<X<90 D) (X>79 )||( X<90 )
6.設有語句「int a=2,b=3,c=-2,d=2;」,則邏輯表達式「a>0&&b&&c<0&&d>0」的 值是( A )
A.1 B.0 C.-1 D.出錯
7. 設a為整型變量,則不能正確表達數學關係10<a<15的C語言表達式是( A )。
A.10<a<15 B.a==11||a==12||a==13||a==14
C. a>10&&a<15 D.!(a<=10)&&!(a>=15)
8. 設x,t均為int型變量,則執行語句「x=10;t=x&&x>10;」後,t的值為(D )
A.不定值 B.10 C.1 D.0
9. 若int i=10; 執行下列程序後,變量i的正確結果是( A )。
switch ( i )
{ case 9: i+=1;
case 10: i+=1;
case 11: i+=1;
default : i+=1; }
A、13 B、12 C、11 D、10
10. 在下面的條件語句中(其中s1和s2表示是C語言的語句),只有一個在功能上與其它三個語句不等價,它是( D )。
A、if (a) s1 ; else s2; B、if (a= =0) s2; else s1;
C、if (a!=0) s1; else s2; D、if (a= =0) s1; else s2;
11.假定所有變量均已正確定義,則下列程序段運行後y的值是(A )
int a=0,y=10;
if(a=0) y--;
else if(a>0) y++;
else y+=y;
A.20 B.11 C.9 D.0
12.假定所有變量均已正確定義,則下列程序段運行後x的值是(B )。
a=b=c=0; x=35;
if(!a) x--;
else if(b);
if(c) x=3;
else x=4;
A.34 B.4 C.35 D.3
13. C語言對嵌套if語句的規定是:else語句總是與( D )配對。
A) 其之前最近的if B) 第一個if
C) 縮進位置相同的if D) 其之前最近的且尚未配對的if
14.在C語言語句中,用來決定分支流程的表達式是( A )。
A.可用任意表達式 B.只能用邏輯表達式或關係表達式
C.只能用邏輯表達式 D.只能用關係表達式
15.C語言中用( B )表示邏輯「真」。
A. true B. 整數值1
C. 非零整數值 D. false
16、若k是int型變量,且有下面的程序段:
int k;
k= -3;
if (k<=0) printf(「####」);
else printf(「&&&&」);
上面程序段的輸出結果是( A )
A、#### B、&&&&
C、####&&&& D、有語法錯誤,無輸出結果
17. main()
{ int x=0,a=0,b=0;
switch(x){
case 0: b++;
case 1: a++;
case 2: a++;b++;}
printf(「a=%d,b=%d\n」,a,b);}
該程序的輸出結果是 D
A) a=2,b=1 B) a=1,b=1 C) a=1,b=0 D) a=2,b=2
18. 以下程序的輸出結果是:( C )
main()
{ int x=-10,y= 1,z=1;
if(x<y)
if(y<0) z=0;
else z=z+1;
printf(「%d\n」,z);
}
A. 0 B. 1 C. 2 D. 3
19. 以下程序段的輸出結果是( B )
int a=10,b=50,c=30;
if(a>b)
a=b;
b=c;
c=a;
printf("a=%2d b=%2d c=%2d\n",a,b,c);
A) a=10 b=50 c=10 B) a=10 b=30 c=10
C) a=50 b=30 c=10 D) a=50 b=30 c=50
四、循環結構
*1.在C語言中,下列說法中正確的是( D )。
A) do-while語句構成的循環不能用其它語句構成的循環來代替。
B) do-while語句構成的循環只能用break語句退出。
C) do-while語句構成的循環在while後的表達式非零時結束循環。
D) do-while語句構成的循環,在while後的表達式為零時結束循環。
2. break語句不能出現在( D )語句中
A. switch B.for C. while D. if…else
*3.對於break語句和continue語句的說法錯誤的是( B )
A) break語句不能用於循環語句和switch語句之外的任何其他語句中。
B) break和continue也可以用於if語句中
C) continue語句只結束本次循環,而不是終止整個循環的執行。
D) break語句是結束整個循環過程,不再判斷執行循環的條件是否成立。
4.語句while(!y);中的表達式!y等價於 A
A)y==0 B)y!=1 C)y=!0 D) y==1
5.若有「int a=1,x=1;」,則循環語句「while(a<10) x++; a++;」的循環執行(A )
A.無限次 B.不確定次 C.10次 D.9次
6. 有以下程序段
int k=0
while(k)k++;
則while循環體執行的次數是 C
A) 無限次 B) 有語法錯,不能執行
C) 一次也不執行 D) 執行1次
7. 下列循環語句中有語法錯誤的是( D )
A while(x=y) 5; B while(0) ;
C do 2;while(x= =b); D do x++ while(x= =10);
*8.當運行時輸入:abcd$abcdeå, 下面程序的運行結果是 B
#include<stdio.h>
main()
{ while(putchar(getchar())!='$');
printf("end");
}
A) abcd$abcde B)abcd$end C)abcdend D) abcd$abcdeend
9. 以下程序段 ( A )
x=-1;
do { x=x*x; }
while(x>0);
A. 是死循環 B. 循環執行一次 C. 循環執行二次 D. 有語法錯誤
10. 下面程序段執行後的結果為: ( B )
int sum=0, n=10;
do { sum=sum+n;
n++; }
while(n<10)
printf(「%d,%d」,sum,n)
A. 0, 10 B. 10, 11 C. 0, 11 D. 以上結果都不對
11.對以下程序段的敘述正確的是___A____.
int x=1;
do
{ x= -1*x; }
while(!x)
A) 是死循環 B) 循環執行一次 C)循環執行二次 D)有語法錯誤
12.循環「for(i=0,x=1;i=10&&x>0;i++);」的循環執行( A )。
A.無限次 B.不確定次 C.10次 D.9次
13.執行語句{for(j=0;j<=3;j++) a=1;}後變量j的值是 C .
A)0 B) 3 C)4 D) 1
14. 有如下程序
main()
{ int i,sum=2;
for(i=1;i<=3;i+=2) sum+=i;
printf(「%d\n」,sum); }
該程序的執行結果是 A
A) 6 B) 3 C) 死循環 D) 4
*15、執行語句」for ( i=0; i++<3 ; ) ;」後,變量i的值為( C )。
A、2 B、3 C、4 D、5
16.設x和y均為int型變量,則執行以下的循環後,y的值為( D )。
for(y=1,x=1;y<=50;y++)
{
if(x>=0) break;
if(x%2==1) {x+=5;continue;}
x-=3;
}
A.2 B.4 C.6 D.1
五 數組
1. 以下對一維數組a的正確說明是: D
A) char a(10); B) int a[];
C)int k=5,a[k]; D)char a[3]={『a』,』b』,』c』};
2.以下能對一維數組a進行初始化的語句是: ( C )
A. int a[5]=(0,1,2,3,4,) B. int a(5)={}
C. int a[3]={0,1,2} D. int a{5}={10*1}
3.在C語言中對一維整型數組的正確定義為 D 。
A)int a(10); B)int n=10,a[n];
C)int n;a[n]; D)#define N 10
int a[N];
4、已知:int a[10]; 則對a數組元素的正確引用是( D )。
A、a[10] B、a[3.5] C、a(5) D、a[0]
5. 執行下面的程序段後,變量k中的值為 C
A) 不定值 B) 33 C) 30 D) 10
int k=3, s[2];
s[0]=k; k=s[0]*10;
*6. 下列說法中錯誤的是 C
A 構成數組的所有元素的數據類型必須是相同的
B 用指針法引用數組元素允許數組元素的下標越界
C 一維數組元素的下標依次是1、2、3……
D 定義數組時的長度可以是整型常量表達式
7. 若有以下數組說明,則數值最大的和最小的元素下標分別是( B )。
int a[12]={1,2,3,4,5,6,7,8,9,10,11,12};
A.1,12 B.0,11 C.1,11 D.0,12
8.若有以下數組說明,則i=10;a[a[i]]元素數值是( B )。
int a[12]={1,4,7,10,2,5,8,11,3,6,9,12};
A.10 B.9 C.6 D.5
9. 假定int類型變量佔用兩個字節,其有定義:int x[10]={0,2,4};,則數組x在內存中所佔字節數是 D
A) 3 B) 6 C) 10 D) 20
11.若有說明:int a[][3]={{1,2,3},{4,5},{6,7}}; 則數組a的第一維的大小為: ( B )
A. 2 B. 3 C. 4 D.無確定值
12.以下定義語句中,錯誤的是 ( D )
A) int a[]={1,2}; B) char *a;
C) char s[10]=「test」; D) int n=5,a[n];
13.下面程序段的輸出結果是: ( C )
int i;
int x[3][3]={1,2,3,4,5,6,7,8,9};
for (i=0;i<3;i++)
printf("%d ",x[i][2-i]);
A) 1 5 9 B) 1 4 7 C) 3 5 7 D) 3 6 9
14.對二維數組的正確定義是( C )
A.int a[ ] [ ]={1,2,3,4,5,6}; B.int a[2] [ ]={1,2,3,4,5,6};
C.int a[ ] [3]={1,2,3,4,5,6}; D.int a[2,3]={1,2,3,4,5,6};
15.已知int a[3][4];則對數組元素引用正確的是__C___
A)a[2][4] B)a[1,3] C)a[2][0] D)a(2)(1)
六、函數
1.C語言中函數返回值的類型是由 A 決定的.
A)函數定義時指定的類型 B) return語句中的表達式類型
C) 調用該函數時的實參的數據類型 D) 形參的數據類型
2. 在C語言中,函數的數據類型是指( A )
A 函數返回值的數據類型 B. 函數形參的數據類型
C 調用該函數時的實參的數據類型 D.任意指定的數據類型
*3.C程序中函數返回值的類型是由 A 決定的.
A)函數定義時指定的函數類型 B) 函數中使用的最後一個變量的類型
C)調用函數時臨時確定 D) 調用該函數的主調函數類型
*4. C語言規定,簡單變量做實參時,它和對應形參之間的數據傳遞方式為 ( B )
A. 由系統選擇 B. 單向值傳遞 C. 由用戶指定傳遞方式 D. 地址傳遞
5. 在函數調用時,以下說法正確的是( B )
A.函數調用後必須帶回返回值
B.實際參數和形式參數可以同名
C.函數間的數據傳遞不可以使用全局變量
D.主調函數和被調函數總是在同一個文件裡
*6. 在C語言程序中,有關函數的定義正確的是( B )。
A.函數的定義可以嵌套,但函數的調用不可以嵌套
B.函數的定義不可以嵌套,但函數的調用可以嵌套
C.函數的定義和函數的調用均不可以嵌套
D.函數的定義和函數的均可以嵌套
*7. 以下對C語言函數的有關描述中,正確的是( A )。
A.在C語言程序中,調用函數時,如函數參數是簡單變量,則只能把實參的值傳遞給形參,形參的值不能傳送給實參
B.C語言函數既可以嵌套定義又可遞歸調用
C.C語言函數必須有返回值,否則不能使用函數
D.在C語言程序中有調用關係的所有函數必須放在同一個源程序文件中
*8.C語言中對函數的描述正確的是 C .
A)可以嵌套調用,不可以遞歸調用 B) 可以嵌套定義
C)嵌套調用,遞歸調用均可 D)不可以嵌套調用
9.以下敘述中正確的是 A
A) 構成C程序的基本單位是函數
B) 可以在一個函數中定義另一個函數
C) main()函數必須放在其它函數之前
D) 所有被調用的函數一定要在調用之前進行定義
10.用數組名作為函數調用時的實參時,傳遞給形參的是 A 。
A)數組首地址 B)數組第一個元素的值
C)數組全部元素的值 D)數組元素的個數
11.有一函數的定義如:void fun(char *s){……},則不正確的函數調用是( D )。
A.main()
{char a[20]=」abcdefgh」;
fun(a);
……
}
B.main()
{ char a[20]=」abcdefgh」;
fun(&a[0]);
……
}
C. main()
{ char a[20]=」abcdefgh」;
char *p=a;fun(p);
……
}
D. main()
{char a[20]=」abcdefgh」;
fun(a[]);
……
}
13、函數的功能是交換變量x和y中的值,且通過正確調用返回交換的結果。能正確執行此功能的函數是( D )。
B、funb(int x , int y) { int t; t=x; x=y; y=t; }
A、funa(int *x, int *y)
{ int *p;
*p=*x ; *x=*y; *y=*p;
}
D、fund(int *x, int *y) { int t; t=*x; *x=*y; *y=t; }
C、func(int *x, int *y)
{ int *p;
p=x;x=y; y=p;
}
14. 有如下程序
int func(int a,int b)
{ return(a+b);}
main()
{ int x=2,y=x,z=8,r;
r=func(func(x,y),func(y,z));
printf(「%d\n」,r); }
該程序的輸出的結果是 C
A) 12 B) 13 C) 14 D) 15
*15. 以下程序的輸出結果是 B
int a, b;
void fun()
{ a=100; b=200; }
main()
{ int a=100, b=100;
fun();
printf(「%d%d \n」, a,b);
}
A) 100200 B) 100100 C) 200100 D) 200200
*16. 下列說法中正確的是:( A )
A. 局部變量在一定範圍內有效,且可與該範圍外的變量同名。
B. 如果一個源文件中,全局變量與局部變量同名,則在局部變量範圍內,局部變量不起作用。
C. 局部變量預設情況下都是靜態變量。
D. 函數體內的局部靜態變量,在函數體外也有效。
17. 在C語言中,表示靜態存儲類別的關鍵字是: ( C )
A) auto B) register C) static D) extern
18.未指定存儲類別的變量,其隱含的存儲類別為( A )。
A)auto B)static C)extern D)register
七、結構體
1. 若有以下說明語句:
struct student
{ int num;
char name[ ];
float score;
}stu;
則下面的敘述不正確的是: ( D )
A. struct是結構體類型的關鍵字
B. struct student 是用戶定義的結構體類型
C. num, score都是結構體成員名
D. stu是用戶定義的結構體類型名
2.若有以下說明語句:
struct date
{ int year;
int month;
int day;
}brithday;
則下面的敘述不正確的是__C___.
A) struct是聲明結構體類型時用的關鍵字
B) struct date 是用戶定義的結構體類型名
C) brithday是用戶定義的結構體類型名
D) year,day 都是結構體成員名
*3. 已知:(設整型2位元組,字符型1位元組,浮點型4位元組)
struct
{ int i;
char c;
float a;
}test;
則sizeof(test)的值是 D 。
A) 4 B) 5 C) 6 D) 7
4. 以下對結構變量stul中成員age的非法引用是 B
struct student
{ int age;
int num;
}stu1,*p;
p=&stu1;
A) stu1.age B) student.age C) p->age D) (*p).age
*5. 有如下定義
struct person{char name[9]; int age;};
struct person class[10]={「Tom」,17,「John」,19,
「Susan」,18,「Adam」,16,};
根據上述定義,能輸出字母A的語句是( B )
A) printf(「%c\n」,class[3].name);
B) printf(「%c\n」,class[3].name[0]);
C) printf(「%c\n」,class[3].name[1]);
D) printf(「%c\n」,class[2].name[3]);
6.存放100個學生的數據、包括學號、姓名、成績。在如下的定義中,不正確的是( B )。
A.struct student
{int sno;
char name[20];
float score;} stu[100];
B. struct student stu[100]
{int sno;
char name[20];
float score};
C. struct
{ int sno;
char name[20];
float score;} stu[100];
D. struct student
{int sno;
char name[20];
float score;};
struct student stu[100];
*7.設有定義語句「struct {int x; int y;} d[2]={{1,3},{2,7}};」則「printf(「%d\n」,d[0].y/d[0].x*d[1].x);」輸出的是( D )。
A.0 B.1 C.3 D.6
8.已知: struct sk
{ int a;
float b;
}data, *p;
若有p=&data,則對data中的成員a的正確引用是( C )。
A、(*p).data.a B、p->data.a C、(*p).a D、p.data.a
9.設有如下定義:
struck sk
{ int a;
float b;
}data;
int *p;
若要使P指向data中的a域,正確的賦值語句是 C
A) p=&a; B) p=data.a; C) p=&data.a; D)*p=data.a;
10.設有以下說明語句:
typedef struct stu
{ int a;
float b;
} stutype;
則下面敘述中錯誤的是( D )。
A、struct是結構類型的關鍵字
B、struct stu是用戶定義的結構類型
C、a和b都是結構成員名
D、stutype是用戶定義的結構體變量名
八.指針
1. 語句int *p;說明了 C 。
A)p是指向一維數組的指針
B)p是指向函數的指針,該函數返回一int型數據
C)p是指向int型數據的指針
D)p是函數名,該函數返回一指向int型數據的指針
2. 變量的指針,其含義是指該變量的:( B )
A. 值 B. 地址 C. 名 D.一個標誌
3.若x是整型變量,pb是基類型為整型的指針變量,則正確的賦值表達式是( A )
A) pb=&x B) pb=x C) *pb=&x D) *pb=*x
4、已知:int a, *p=&a; 則下列函數調用中錯誤的是( D )。
A、scanf(「%d」,&a); B、scanf(「%d」,p);
C、printf(「%d」,a); D、printf(「%d」,p);
5.對於同類型的指針變量,不可能進行的運算是( C )。
A.- B.= C.+ D.==
6. 對於基類型相同的兩個指針變量之間,不能進行的運算是 C
A) < B) = C) + D) -
7.下列不正確的定義是( A )。
A. int *p=&i,i; B.int *p,i;
C.int i,*p=&i; D.int i,*p;
8. 若有說明:int n=2,*p=&n,*q=p,則以下非法的賦值語句是: ( D )
A)p=q B)*p=*q C)n=*q D)p=n
9. int *p,a=10,b=1; p=&a; a=*p+b;
執行該程序段後,a的值為 C
A) 編譯出錯 B) 10 C) 11 D) 12
10.有語句:int a[10],;則 B 是對指針變量p的正確定義和初始化。
A)int p=*a; B)int *p=a; C)int p=&a; D)int *p=&a;
11.若有說明語句「int a[5],*p=a;」,則對數組元素的正確引用是( C )。
A.a[p] B.p[a] C.*(p+2) D.p+2
12. 若指針變量p指向整型數組a[10]的首地址, 即p=a ; 則下列數組元素a[i](0<i<10)的表示方法中正確的是:( C )
A. p+i B.&( a+i) C. *(a+i) D. *(p+i*2)
13. 有如下程序
int a[10]={1,2,3,4,5,6,7,8,9,10},*P=a;
則數值為9的表達式是 B
A) *P+9 B) *(P+8) C) *P+=9 D) P+8
14.若有以下定義,則不能表示a數組元素的表達式是( B )。
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
A.*p B.a[10] C.*a D.a[p-a]
*15.已知int a[5],*p=a;下面的敘述中正確的是 A 。
A) p+1與a+1等價 B) p[1]與*p等價
C) *(p+1)與a+1等價 D) p[1]與a++等價
16. 若有以下說明:
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
則數值為4的表達式是( C )
A) *p+4 B) *(p+4) C) *(p+3) D) p+3
17. 下面程序的輸出結果是 C
A) 0 B) 1 C) 2 D) 輸出錯誤
main()
{ int a[ ]={1,2,3,4,5,6,7,8,9,0},*p;
p=a;
printf(「%d\n」,*p+1);
}
18. 執行語句 char c[10]={ 」abcd」},*pc=c; 後,*(pc+4)的值是( B )
A) 「abcd」 B)』\0』 C) 『d』 D) 不確定
19.下列函數的功能是 A 。
void fun(int *p1,int *p2)
{ int p;
p=*p1;*p1=*p2;*p2=p;
}
A) 交換*p1和*p2的值 B) 語法正確,但無法交換*p1和*p2的值
C) 交換*p1和*p2的地址 D)有語法錯誤
*20. 有如下程序
main()
{ char s[]=「ABCD」, *P;
for(p=s+1; p<s+4; p++) printf (「%s\n」,p); }
該程序的輸出結果是 D
A) ABCD B) A C) B D) BCD
BCD B C CD
CD C D D
D D
*21. 請讀程序,輸出結果為: ( A )
#include<stdio.h>
int a[]={2,4,6,8};
main()
{ int i,b[4];
int *p=a;
for(i=0;i<4;i++) {b[i]=*p;p++;}
printf("%d\n",b[2]);
}
A) 6 B) 8 C) 4 D) 2
*22.內存空間被分成不同區域,其中用函數void* malloc(unsigned int size);
申請的內存在 C 分配。
A) 程序區 B)靜態存儲區 C)動態存儲區
九、字符串
1. 在C語言中,以 D 作為字符串結束標誌
A)』\n』 B)』 』 C) 』0』 D)』\0』
2.下列數據中屬於「字符串常量」的是( A )。
A.「a」 B.{ABC} C.『abc\0』 D.『a』
3.字符串 「ABCD」在內存佔用的字節數是( D )。
A.4 B.6 C.1 D.5
4. 下面不正確的字符串常量是:( A )
A. 『PROGRAM』 B 「12』12」 C 「0」 D 「 」
5.設有數組定義: char array [ ]="abcd"; 則數組array所佔的空間為 B
A) 4個字節 B) 5個字節 C) 6個字節 D) 7個字節
*6.下述對C語言中字符數組的描述錯誤的是 C 。
A)字符數組可以存放字符串
B)字符數組中的字符串可以整體輸入和輸出
C)可在賦值語句中通過賦值運算符「=」對字符數組整體賦值
D)可在對字符數組定義時通過賦值運算符「=」對字符數組整體初始化
7.已知char x[]="hello", y[]={'h','e','a','b','e'};, 則關於兩個數組長度的正確描述是 B .
A)相同 B)x大於y C)x小於y D)以上答案都不對
8.給出以下定義:
char x[ ]="abcdefg";
char y[ ]={'a','b','c','d','e','f','g'};
則正確的敘述為 C
A) 數組x和數組y等價 B) 數組x和數組y的長度相同
C) 數組x的長度大於數組y的長度 D) 數組x的長度小於數組y的長度
9、若有以下語句,則正確的描述是( D )。
static char x[ ]=」12345」 ;
static char y[ ]={『1』,『2』,『3』,『4』, 5』,』\0』} ;
A、x數組長度大於y數組長度 B、x數組和y數組不相同
C、x數組長度小於y數組長度 D、x數組等價於y數組
10、已知:char s[20]= 」programming」, *ps=s; 則不能引用字母o的表達式是( C )。
A、ps[2] B、s[2] C、ps+2 D、ps+=2, *ps
*11.判斷兩字符串s1,s2是否相等,應使用( D ).
A)if(s1==s2) B)if(s1=s2)
C)if(strcpy(s1,s2)) D)if(strcmp(s1,s2)==0)
*12.以下printf語句的輸出結果為: A
printf(「%d\n」,strlen(「school」));
A) 7 B) 6 C)存在語法錯誤 D)不定值
13. 對字符數組s賦值,不合法的一個是( C )
A. char s[]="Beijing";
B. char s[20]={"beijing"};
C. char s[20];s="Beijing";
D. char s[20]={'B','e','i','j','i','n','g'};
14. 對字符數組str賦初值,str不能作為字符串使用的一個是( D )
A. char str[]="shanghai";
B. char str[]={"shanghai"};
C. char str[9]={'s','h','a','n','g','h','a','i',』\0』};
D. char str[8]={ 's','h','a','n','g','h','a','i'};
15. 合法的數組定義是 C
A)int a[]={「string」}; B) int a[5]={0,1,2,3,4,5};
C)char a[]= 「string」; D) char a[5]={0,1,2,3,4,5};
16. 對字符數組s賦值,不合法的是: ( C )
A) char s[]="china";
B) char s[20]={" china "};
C) char s[20];s=" china";
D) char s[20]={'c','h','i','n','a'};
17. 下面初始化與此初始化charc[ ]=「I am happy」;等價的是( A )
A) char c[ ]={『I』,』』,』a』,’m』,』』,』h』,』a』,』p』,』p』,』y』,』\0』};
B) char c[ ]={『I』,』am』,』happy』};
C) char c[ ]={『I』, 』』,』a』,’m』,』』,』h』,』a』,』p』,』p』,』y』};
D)char c[ ]={『I』,』am』,』happy』,』\0』};
18.下面各語句中,能正確進行賦字符串操作的語句是( C )。
A. char s[5]={「ABCDE」};
B. char s[5]={『A』,『B』,『C』,『D』,『E』,』\0』};
C. char *s;s=「ABCDE」;
D. char *s;scanf(「%s」,&s);
19.下列字符串賦值方式不正確的是( A )
A).char str[20]; B). char *str ;
str=」I am a boy!」; str=」I am a boy!」;
C). char *str=」I am a boy!」; D). char str[20]=」 I am a boy!」;
十、文件
*1.在C語言中,文件由( A )。
A.字符(字節)序列組成 B.記錄組成
C.數據行組成 D.數據塊組成
2. 下面各函數中能實現打開文件功能的是 A
A) fopen B) fgetc C) fputc D) fclose
*3.若文件型指針fp指向某文件的末尾,則函數feof(fp)的返回值是( B )。
A.0 B. 1 C.非0值 D.NULL
4. 下列語句中,把變量fp說明為一個文件型指針的是( A ) 。
A) FILE *fp; B) FILE fp;
C) file *fp; D) file fp;
5、在進行文件操作時,寫文件的一般含義是( B )。
A、將磁碟中的信息存入計算機內存
B、將計算機內存中的信息存入磁碟
C、將計算機CPU中的信息存入磁碟
D、將磁碟中的信息存入計算機CPU
*6.以讀寫方式打開一個已有的文本文件file1,並且FILE *fp,下面fopen函數正確的調用方式是( B )。
A.fp=fopen(「file1」,「r」)
B.fp=fopen(「file1」,「r+」)
C.fp=fopen(「file1」,「rb」)
D.fp=fopen(「file1」,「w」)
*7.標準庫函數fputs(p1,p2)的功能是( C )。
A.從p1指向的文件中讀一個字符串存入p2指向的內存
B.從p2指向的文件中讀一個字符串存入p1指向的內存
C.從p1指向的內存中讀一個字符串寫到p2指向的文件中
D.從p2指向的內存中讀一個字符串寫到p1指向的文件中
十一、編譯預處理
*1.在C語言程序中,以#號帶頭的行是預編譯處理( A )。
A.命令 B.語句 C.函數 D.字符串
2.下列正確的預編譯命令是( D )。
A. define PI 3.14159
B. #define P(a,b)=strcpy(a,b)
C. #define stdio.h
D. #define PI 3.14159;
3.下列命令或語句中,正確的是( C )。
A. #define MYNAME=」ABC」
B. #include stdio.h
C. for(i=0;i<10;i++);
D. struct int stu{int name};
*4.下列命令或語句中,錯誤的是( C )。
A.#define PI 3.14159 B.#include <math.h>;
B.if(2); D.for(;;) if(1) break;