當前位置:全科學識雲 > 職場範文 > 筆試 > c語言筆試題目及答案
手機版

c語言筆試題目及答案

來源:全科學識雲 閱讀:2.31W 次

C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何執行環境支援便能執行的編程語言。下面是c語言筆試題目及答案,請參考。

c語言筆試題目及答案
  c語言筆試題目及答案

 一、選擇題((1)~(10)每小題2分,(11)~(50)每小題1分,共60分)

下列各題A)、B)、C)、D)四個選項中,只有一個選項是正確的,請將正確的選

項塗寫在答題卡相應位置上,答在試卷上不得分。

(1)數據的存儲結構是指________。

A)存儲在外存中的數據 B)數據所佔的存儲空間量

C)數據在計算機中的順序存儲方式 D)數據的邏輯結構在計算機中的表示

答案:D

評析:數據的邏輯結構在計算機存儲空間中的存放形式形式稱爲數據的存儲結構(也稱數據的物理結構)。

(2)下列關於棧的描述中錯誤的是________。

A)棧是先進後出的線性表

B)棧只能順序存儲

C)棧具有記憶作用

D)對棧的插入與刪除操作中,不需要改變棧底指針

答案:B

評析:棧是一種特殊的線性表,又稱先進後出表(FILO—First In Last Out)。

(3)對於長度爲n的線性表,在最壞情況下,下列各排序法所對應的比較次數中正確的是

________。

A)冒泡排序爲n2 B)冒泡排序爲n

C)快速排序爲n D)快速排序爲n(n一1)/2

答案:D

評析:假設線性表的長度爲n,則在最壞情況下,冒泡排序需要經過n/2遍的從前往後掃描和n/2遍的從後往前掃描,需要比較次數爲n(n-1)/2。快速排序法的最壞情況比較次數也是n(n-1)/2。

(4)對長度爲n的線性表進行順序查找,在最壞情況下所需要的比較次數爲________。

A)log2n B)n/2 C)n D)n+l

答案:C

評析:順序查找過程中,如果被查找的元素是線性表中的最後一個元素,或者元素不在線性表中,則需要與線性表中所有的元素進行比較。對長度爲n的線性表進行順序查找,在最壞情況下需要比較n次。

(5)下列對於線性鏈表的描述中正確的是________。

A)存儲空間不一定是連續,且各元素的存儲順序是任意的

B)存儲空間不一定是連續,且前件元素一定存儲在後件元素的前面

C)存儲空間必須連續,且前件元素一定存儲在後件元素的前面

D)存儲空間必須連續,且各元素的存儲順序是任意的

答案:A

評析:在鏈式存儲結構中,存儲數據結構的存儲空間可以不連續,各數據結點的存儲順序與數據元素之間的邏輯關係可以不一致,而數據元素之間的邏輯關係是由指針域來確定的。

(6)下列對於軟件測試的描述中正確的是________。

A)軟件測試的目的是證明程序是否正確

B)軟件測試的目的是使程序執行結果正確

C)軟件測試的目的是儘可能多地發現程序中的錯誤

D)軟件測試的目的是使程序符合結構化原則

答案:C

評析:關於軟件測試的目的,Grenford J.Myers再《The Art of Software Testing》一書中給出了深刻的闡述,整體來說,軟件測試的目的就是儘可能多地發現程序中的錯誤。

(7)爲了使模組儘可能獨立,要求________。

A)模組的內聚程度要儘量高,且各模組間的耦合程度要儘量強

B)模組的內聚程度要儘量高,且各模組間的耦合程度要儘量弱

C)模組的內聚程度要儘量低,且各模組間的耦合程度要儘量弱

D)模組的內聚程度要儘量低,且各模組間的耦合程度要儘量強

答案:B

評析:模組獨立性是指每個模組只完成系統要求的獨立的子功能,並且與其他模組的聯繫最少且接口簡單。軟件設計,應儘量做到高內聚,低耦合,有利於提高模組的獨立性。

(8)下列描述中正確的是________。

A)程序就是軟件

B)軟件開發不受計算機系統的限制

C)軟件既是邏輯實體,又是物理實體

D)軟件是程序、數據與相關文檔的集合

答案:D

評析:計算機軟件是計算機系統中與硬件相互依存的另一部分,是包括程序、數據及相關文檔的完整集合。

(9)數據獨立性是數據庫技術的重要特點之一,所謂數據獨立性是指________。

A)數據與程序獨立存放

B)不同的數據被存放在不同的檔案中

C)不同的數據只能被對應的應用程序所使用

D)以上三種說法都不對

答案:D

評析:數據獨立性是數據與程序間的互不依賴性,即數據庫中數據獨立於應用程序而不依賴於應用程序。也就是說,數據的邏輯結構、存儲結構與存取方式的改變不會影響應用程序。選項A、B、C三種說法都是錯誤的。

(10)用樹形結構表示實體之間聯繫的模型是________。

A)關係模型 B)網狀模型 C)層次模型 D)以上三個都是

答案:C

評析:層次模型是最早發展起來的數據庫模型,它的基本結構是樹形結構。

(11)算法具有五個特性,以下選項中不屬於算法特性的是________。

A)有窮性 B)簡潔性 C)可行性 D)確定性

答案:B

評析:有窮性、確定性、有零個或多個輸入、有一個或多個輸出、有效性是算法的基本特性。

(12)以下選項中可作爲C語言合法常量的是________。

A)-80. B)-080 C)-8e1.0 D)-80.0e

答案:A

評析:c語言的常量分爲整型常量、實型常量和字元型常量。選項A屬於實型常量中的十進制小數形式的表示法,是合法的。

(13)以下敘述中正確的是________。

A)用C程序實現的算法必須要有輸入和輸出操作

B)用C程序實現的算法可以沒有輸出但必須要輸入

C)用C程序實現的算法可以沒有輸入但必須要有輸出

D)用C程序實現的算法可以既沒有輸入也沒有輸出

答案:C

評析:算法的特性中包括“有零個或多個輸入”及“有一個或多個輸出”這兩個特性。一個算法得到的結果就是算法的輸出,沒有輸出的算法是沒有意義的,所以一個算法必須至少有一個輸出。

(14)以下不能定義爲用戶標識符的是________。

A)Main B)_0 C)_int D)sizeof

答案:D

評析:C語言規定標識符只能由字母、數字和下劃線三種符號組成,而且第一個字元必須是字母或下劃線。注意:大寫字母和小寫字母被認爲是兩個不同的字元。A中Main與主i函數名main不同。

(15)以下選項中不能作爲合法常量的是________。

A)1.234e04 B)1.234e0.4 C)1.234e+4 D)1.234e0

答案:B

評析:指數形式的實型常量要求字每e(或E)之前必需有數字,且e後面的指數必須爲整數,所以本題中選項B非法。

(16)數字字元0的ASCII值爲48,若有以下程序

main()

{char a=”1″,b=”2″;

printf(“%c,”,b++);

printf(“%d ”,b-a);

)

程序執行後的輸出結果是________。

A) 3,2 B)50,2 C)2,2 D)2,50

答案:C

評析l執行語句“printf(“%c,ll,b++);”後,b的值變成字元3,執行“printf(“%d ”,b-a);”,即‘3’-‘1’。

(17)有以下程序

main( )

{

int m=12, n=34;

printf(“%d%d”,m++,++n);

printf(“%d%d ”,n++,++m);

}

程序執行後的輸出結果是________。

A)12353514 B)12353513 C)12343514 D)12343513

答案:A

評析:執行“printf(“%d%d”m++,++n);”後,輸出的是m和n+l的值1235,接着執行

“printf(“%d%d\n”,n++,++m);”輸出n和m+l的值3514。

(18)有定義語句:int b;char c[10】;,則正確的輸入語句是________。

A) scanf("%d%s",&b,&C); B) scanf("%d%s",&b,C);

C) scanf("%d%s",b,C); D) scanf("%d%s",b,&C);

答案:B

評析:scanf函數中的“格式控制”後面應當是地址,而不是變量名。對於變量,透過地址運算符“&”求出內存中的地址;對於數組c[10],數組名c即爲數組在內存中的地址。

(19)有以下程序

main()

{int m,n,p;

scanf(“m=%dn=%dp=%d”,&m,&n,&p);

printf(“%d%d%d\n”,m,n,p);

}

若想從鍵盤上輸入數據,使變量m中的值爲123,n中的值爲456,p中的值爲789,

則正確的輸入是________。

A) m。123n=456p=789 B) m=123 n=456 p=789

C) m=123,n=456,p=789 D) 123 456 789

答案:A

評析:根據本題的數據輸入形式“scanf(“m=%dn=%dp=%d”&m,&n,&p);”說明在輸入數據時,必須輸入“m=”、“n=”、“p=”字元,且中間不能含有空格。

(20)有以下程序

main()

{ int a,b,d=25;

a=d/10%9;

b=a&&(-1);

printf(”%d,%d\n”,a,b);

}

程序執行後的輸出結果是________。

A)6,l B)2,l C)6,0 D)2,0

答案:B

評析:本題中“a=d/10%9;”的值爲25/10%9=2; “b=a&&(-1);”爲2&&(-1)=1(注意:-1表示真,只有O才表示假),所以a,b的值分別爲2,1。

(21)有以下程序

main()

{

int i=1 j=2,k=3;

if(i++==1&&(++j==3||k++==3))

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

}

程序執行後的輸出結果是________。

A)l 2 3 B)2 34 C) 2 2 3. D)2 3 3

答案:D

評析:執行“i++==1&&(++j==3‖k++==3)”時,表達式“i++==1”嗨值爲真,其值爲1,表達式“++j=3”的值爲真,根據短路原理,右邊的表達式“k++==3”不再進行運算。括號中表達的值爲l,作與運算後整個表達式的值也爲l,輸出i.j,k時,由於未執行過k,所以它們的值分別爲2,3,3。

(22)若整型變量a、b、c、d中的值依次爲:1、4、3、2。則條件表達式a<b?a:c<d?c:d的值是________。

A)l B)2 C)3 D)4

答案:A

評析:條件表達式的一般形式爲:表達式17表達式2:表達式3

本題先求的是a<b的值,爲真,所以整個表達式“a<b?a:c<d?c:d”的值爲a的值1。

(23)有以下程序

main( )

{

int p[8]={11,12,13,14,15,16,17,18},i=O,j=0;

while(i++<7)if p[i]%2)j+-=p[i];

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

}

程序執行後的輸出結果是________。

A)42 B)45 C)56 D)60

答案:B

評析:本程序的作用是求除p[O]外的其它奇數的和。

(24)有以下程序

main()

{

char a[7]= “a0\OaO\0”; int i,j;

i=sizeof(a);j=strlen(a);

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

)

程序執行後的輸出結果是________。

A)2 2 B)76 C)7 2 D)6 2

答案:C

評析:c語言中以‘\0’作爲字元串的結束符,且strlen()函數計算的是‘\0’字元前的所有字元的個數。數組定義以後系統就爲其分配相應大小的內存空間,而不論其中有沒有內容。

(25)以下能正確定義一維數組的選項是________。

A)int a[5]={0,1,2,3,4,5; B)char a[]={0,1,2,3,4,5};

C)char a={’A’,’B’,’C’}; D)int a[5]=”0123″;

答案:B

評析:選項A中定義的是5個數組元素,但賦值的時候賦的是6個元素,所以出錯;選項c不符合數組定義形式,數組名後應加上“[]”;選項D的類型說明符錯誤,如果用char定義就對了;選項B中的0,1,2,3,4,5分別表示對應字元的ASCII碼,所以選項B是正確的。

(26)有以下程序

int fl(int x,int y){return x>y?x:y;}

int f2(int x,int y){return x>y?y:x;}

main()

{

int a=4,b=3,c=5,d=2,e,f,g;

e=f2(f1(a,b),f1(c,d));f=fl(f2(a,b),f2(c,d));

g=a+b+c+d-e-f;

printf(“%d,%d,%d\n”,e,f,g);

)

程序執行後的輸出結果是________。

A)4,3,7 B)3,4,7 C)5,2,7 D)2,5,7

答案:A

評析:函數n的功能是返回兩個數中比較大的值,f2的功能是返回兩個數中比較小的值。

(27)已有定義:char a[]=”xyz”,b[]={’x’,’y’,’z};,以下敘述中正確的是________。

A)數組a和b的長度相同 B)a數組長度小於b數組長度

C)a數組長度大於b數組長度 D)上述說法都不對

答案:C

評析:c語言規定‘\0’爲字元串結束標誌。所以“char a[]=“xyz””的數組長度爲4,而“b[]={‘x’,‘y’,‘z’};”的數組長度爲3,數組長度與strlen函數所求的長度不同,本題是指數組佔內存空間的大小。

(28)有以下程序

Void f(int *x, int *y)

{

int t;

t= *x; *x=*y;’*y=t;

)

main( )

{

int a[8]={1,2,3,4,5,6,7,8},i,*p,*q;

p=a;q=&a[7];

while(p<q)

{f(p,q); p++; q?;} 。

for(i=0;i<3;i++) printf(“%d”,a[1][i]);

}

程序執行後的輸出結果是________。

A)8,2,3,4,5,6,7,1, B)5,6,7,8,1,2,3,4.

C)1,2,3,4,5,6,7,8, D)8,7,6,5,4,3,2,l,

答案:D

評析;本程序中函數f的作用是交換指針變量x和y所指向的存儲單元的值。

(29)有以下程序

main()

{

im a[3][3],*p,i;

p=&a[0][o];

for(i=0;j<9;i++) p[i]=I;

for(i=0;j<3;i++)printf(“%d”,a[1][i]);

)

程序執行後的輸出結果是________。

A)012 B)123 C)234 D)345

答案:D

評析:本題賦值後,a的數組元素的值分別爲a[01[0]=0,a[0][1]=1,a[0][2]=2,a[1][0]=3,a[1][1]=4,a[1][2]=5,a[2][0]=6,a[2][1]=7,a[2][2]=8,故本題輸出的值爲345。

(30)以下敘述中錯誤的是________。

A)對於double類型數組,不可以直接用數組名對數組進行整體輸入或輸出

B)數組名代表的'是數組所佔存儲區的首地址,其值不可改變

C)當程序執行中,數組元素的下標超出所定義的下標範圍時,系統將給出“下標越

界”的出錯資訊

D)可以透過賦初值的方式確定數組元素的個數

答案:C

評析:在c語言中,如果出現下標越界的情況,系統不管在編譯還是執行時都不會給出“下標越界”的錯誤提示。

(31)有以下程序

#define N20

fun(int a[],int n,int m)

{ int i,j;

for(i=m;i>=n;i?)a[i+1]=a[i];

}

main()

{

int i,a[N]={1,2,3,4,5,6,7,8,9,10};

fun(a,2,9);

for(i=O;i<5;i++) printf(“%d”,a[i]);

}

程序執行後的輸出結果是________。

A)10234 B)12344 C)12334 D)12234

答案:C

評析:本題函數fun的作用是將指定的數組元素(從下標n到下標m)向後移一位。由函數調用“fun(a,2,9);”可知,函數fun用於將a[2]到a[9]的各元素依次向後移一位,移完後,a數組中各元素的值分別爲1,2,3,3,4,5,6,7,8,9,10,故輸出的前5個數組元素爲12334。

(32)有以下程序

main()

{

int a[3][2]={0},(*ptr)[2],i,j;

for(i=0;i<2;i++) {ptr=a+i; scanf(“%d”,ptr); ptr++;}

for(i=0;i<3;i++)

{ for(i=0;j<2;j++) printf(“%2d”,a[i][j]);

printf(“\n”);

}

}

若執行時輸入:1 2 3<回車>,則輸出結果是________。

A)產生錯誤資訊

B)l0 C)l 2 D)l 0

2 O 3 0 2 0

0 0 0 O 3 0

答案:B

評析:二維數組a,透過a[3][2]={0}將數組中的各個元素初始化爲0,指針變量ptr,指向包含2個元素的一維數組。a[0][0]:l,a[1][0]=2,故本題的輸出選B。

(33)有以下程序

prt(int *m, int n)

{ int i;

for(i=O;i<n;i++) m[i]++;

)

main()

{

int a[]={ 1,2,3,4,5 },i;

prt(a,5);

for(i=O;i<5;i++)

printf(“%d,”,a[i]);

程序執行後的輸出結果是________。

A)l,2,3,4,5, B)2,3,4,5,6, C)3,4,5,6,7, D)2,3,4,5,1,

答案:B

評析:用數組名作函數實參時,不是把數組的值傳遞給形參,而是把實參數組的起始地址傳遞給形參數組,這樣兩個數組就共同佔用同一段內存單元。

(34)有以下程序

main()

{ int a[]={1,2,3,4,5,6,7,8,9,0},*p;

for(p=a;p<a+10;p++)printf(“%d,”,*p);

}

程序執行後的輸出結果是________。

A)l,2,3,4,5,6,7,8,9,0, B)2,3,4,5,6,7,8,9,10,1,

C)0,1,2,3,4,5,6,7,8,9, D)l,l,1,l,l,l,l,l,l,l,

答案:A

評析:c語言規定數組變量名代表數組的首地址,即第0號元素的地址。本題將a數組中的值全部輸出,即爲l,2,3,4,5,6,7,8,9,0,。

(35)有以下程序

#define P 3

void F(int x){return(P*x*x);}

main()

{printf(“%d\n”,F(3+5));}

程序執行後的輸出結果是________。

A)192 B)29 C)25 D)編譯出錯

答案:D

評析:return語句用於從被調函數帶回一個函數值。void關鍵字表示“無類型”,即不需要從被調函數中帶回函數值,所以不需要return語句,故編譯時出錯。

(36)有以下程序

main()

{int c=35;printf(“%d\n”,c&C);}

程序執行後的輸出結果是________。

A)0 B)70 C)35 D)1

答案:C

評析:按位“與”時,1&1=1,其他都等O。因爲本題中相與的兩個值相等,即對應位上的二進制值相等,所以“與”的結果也即爲其值本身。

(37)以下敘述中正確的是________。

A)預處理命令行必須位於源檔案的開頭

B)在源檔案的一行上可以有多條預處理命令

C)宏名必須用大寫字母表示

D)宏替換不佔用程序的執行時間

答案:D

評析:通常,預處理命令位於源檔案的開頭,也可以寫在函數與函數之間;不能在一行上寫多條預處理命令:宏名一般習慣用大寫字母表示,以便與變量名相區別,但這並非規定,也可用小寫字母。

(38)若有以下說明和定義

union dt

{int a;har b;ouble c;}data;

以下敘述中錯誤的是________。

A)data的每個成員起始地址都相同

B)變量data所佔的內存字節數與成員c所佔字節數相等

C)程序段:data.a=5;pintf(“%f ”,data.C);輸出結果爲5.000000

D)data可以作爲函數的實參

答案:C

評析:union是表示共用體的關鍵字,成員a,b,c共佔用同一個內存空間,data的每個成員起始地址都相同;共用體變量所佔的內存長度等於最長的成員的長度,故變量’data所佔的內存字節數與成員c所佔字節數相等;執行“data.a=5;printf(“%f ”,data.C);”printf函數只是將內存中的數據以不同的類型輸出,而不能將內存中的整型數據自動轉換爲等值的浮點數,故C是錯誤的。

(39)以下語句或語句組中,能正確進行字元串賦值的是________。

A)char*sp;*sp=”right!”; B)char s[lO];s=”right! “;

C)char s[10];*s=”right! “; D)char*sp=”right! “;

答案:D

評析:選項A定義了字元型的指針變量sp,則*sp存儲的是第一個字元,而給它賦的是字元串,故錯;

選項B表示代表數組的首地址,而題中給它賦的是字元串,所以錯誤;

選項c定義了一個字元型的數組s[10],再透過+s給數組元素賦初值,這時是與選項A相同的錯誤。

(40)設有如下說明

typedef struct ST

{long a; int b; char c[2];}NEW;

則下面敘述中正確的是________。

A)以上的說明形式非法 B)ST是一個結構體類型

C)NEW是一個結構體類型 D)NEW是一個結構體變量

答案:C

評析:typedef關鍵字用於聲明一個新的類型名代替已有的類型名。

本題中如果沒有用typedef進行定義的話,則struct ST爲結構體類型,現在用typedef定義後,相當於用NEW代表了struct ST這一結構體類型,故NEW爲結構體類型。

(41)有以下程序

main()

{ int a=1,b;

for(b=l;b<10;b++)

{ if(a>=8)break;

if(a%2==1){a+=5;continue;}

a-=3;

)

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

}

程序執行後的輸出結果是________。

A) 3 B)4 C) 5 D) 6

答案:B

評析:break和continue的區別是:continue語句只結束本次循環,而不是終止整個循環的執行;而break語句則是結束整個循環過程,.不再判斷執行的條件是否成立。

(42)有以下程序

main()

{ char s[]=”l 59″,*p;

p=s;

printf(“%c”,*p++);printf(“%c”,*p++);

}

程序執行後的輸出結果是________。

A)15 B)16 C)12 D)59

答案:A

評析:本題透過“p=s”將指針變量p指向字元數組s,在第一次輸出時,由於++和*爲同一優先級,“*p++”相於“+(p++)”。p指向s[1],輸出爲s[1]的值。

本文連結:https://www.qkxsy.com/zhichangfw/bishi/qx9pej.html

Copyright © 2024. 全科學識雲 All right reserved.

文字美圖素材,版權屬於原作者。部分文章內容由網友提供推送時因種種原因未能與原作者聯繫上,若涉及版權問題,敬請原作者聯繫我們,立即處理。