當前位置:首頁 » 編程語言 » 2015年二級c語言真題及答案

2015年二級c語言真題及答案

發布時間: 2023-10-16 23:48:48

A. 國家計算機二級c語言考試題

一 、選擇題
(1)下列數據結構中,按先進後出原則組織數據的是
A)線性鏈表
B)棧
C)循環鏈表
D)順序表
正確答案: B

(2)具有3個結點的二叉樹有
A)2種形態
B)4種形態
C)7種形態
D)5種形態
正確答案: D

(3)設有下列二叉樹:
對此二叉樹前序遍歷的結果為
A)ZBTYCPXA
B)ATBZXCYP
C)ZBTACYXP
D)ATBZXCPY
正確答案: B

(4)結構化程序設計主要強調的是
A)程序的規模
B)程序的效率
C)程序設計語言的先進性
D)程序易讀性
正確答案: D

(5)程序的3種基本控制結構是
A)過程、子過程和分程序
B)順序、選擇和重復
C)遞歸、堆棧和隊列
D)調用、返回和轉移
正確答案: B

(6)下列敘述中,不屬於測試的特徵的是
A)測試的挑剔性
B)完全測試的不可能性
C)測試的可靠性
D)測試的經濟性
正確答案: C

(7)需求分析中開發人員要從用戶那裡了解
A)軟體做什麼
B)用戶使用界面
C)輸入的信息
D)軟體的規模
正確答案: A

(8)下列關系模型中,能使經運算後得到的新關系中屬性個數多於原來關系中屬性個數的是
A)選擇
B)連接
C)投影
D)並
正確答案: B

(9)下列敘述中,正確的是
A)用E-R圖能夠表示實體集間一對一的聯系、一對多的聯系和多對多的聯系
B)用E-R圖只能表示實體集之間一對一的聯系
C)用E-R圖只能表示實體集之間一對多的聯系
D)用E-R圖表示的概念數據模型只能轉換為關系數據模型
正確答案: C

(10)"年齡在18~25之間"這種約束是屬於資料庫當中的
A)原子性措施
B)一致性措施
C)完整性措施
D)安全性措施
正確答案: C
11)以下說法錯誤的是
A)高級語言都是用接近人們習慣的自然語言和數學語言作為語言的表達形式
B)計算機只能處理由0和1的代碼構成的二進制指令或數據
C)C語言源程序經過C語言編譯程序編譯之後生成一個後綴為.EXE的二進制文件
D)每一種高級語言都有它對應的編譯程序
正確答案: C

(12)演算法是指為解決某個特定問題而採取的確定且有限的步驟,下面不屬於演算法的五個特性的是
A)有零個輸入或多個輸入
B)高效性
C)有窮性
D)確定性
正確答案: B

(13)已知int a=6; 則執行a+=a-=a*a;語句後,a的值為
A)36
B)0
C)-24
D)-60
正確答案: D

(14)下面各選項中,均是C語言標識符的選項組是
A)forchinato
B)long_123short56_do
C)voinion_342
D)text.txt _023_3ew
正確答案: B

(15)下列表達式中,結果為5的是
A)6*5%6
B)5*-2+15
C)5+75%10
D)6+-2/3
正確答案: B

(16)下列常量中,為不合法的實型常量表示的是
A).0032
B)0.0
C)0.3242E8
D).E3
正確答案: D

(17)關於C語言的主函數描述正確的是
A)C程序可以有多個main函數
B)C程序必有一個而且只能有一個main函數
C)C程序可以沒有main函數
D)C程序的執行不一定在main函數開始執行
正確答案: B

(18)已知int a=1,b=-1;則語句printf("%d\n",(a--,++b));的輸出結果是
A)-1
B)0
C)1
D)語句錯誤
正確答案: B

(19)已知int a,b;double c;則以下語句中錯誤的函數調用是
A)scanf("%d,%x,%lf",&a,&b,&c);
B)scanf("%d,%d,%le",&a,&b,&c);
C)scanf("%o,%x,%o",&a,&b);
D)scanf("%d,%o,%e",&a,&b,&c);
正確答案: D

(20)已知x,y,z均為整型變數,且值均為1,則執行語句++x||++y&&++z;後,表達式x+y的值為
A)1
B)2
C)3
D)4
正確答案: C

B. C語言程序設計2015A卷-

一、判斷題(每小題1分,共15分)

1.標准C中,只有數值型數據才能進行4則混合運算。

2.標准C中,_a是合法的自定義標識符。

3.有定義:float f;表達式f+=(int)3.6%2」不符合C語言語法。

4.標准C中,邏輯運算的結果只有是1表示滿足條件,而結果是0表示不滿足條件。

6.以下運算符排列順序滿足按照優先順序從高到低的排列:『&&』、『!』、『==』、『-』。

7.語句for(;;);是非法的。

8.在C語言程序中可以由多個源文件構成,每個源文件都可以有自己的main()函數。

9.while和do-while的主要區別是後者至少無條件執行一次。

10.數組名代表數組的首地址是常量,所以將實參數組名表示地址傳給形參數組名是錯誤的。

11.當函數沒有返回值類型時,表示函數類型為void。

12.C語言中,指針變數作函數參數時,它們不是採取單向值傳遞的方式。

13.一個函數中只允許有一條return語句。

14.在C語言中,如果沒有說明變數的存儲類型是auto類型的。

15.由於指針中所存放的地址都是整數,所以整型指針和浮點型指針可以相互賦值。

二、填空題(每空1分,共15分)

1. 若a=4;b=5,c=6;則表達式c==(b=-a); 中亂皮c的值是 (1) 。

2. 計算表達式的值:

4&&-4的值: (2) ;

設int a=3,b=4,c=5,則表達式a||b+c&&b==c的值: (3) ;

設x=2.5, a=7, y=4.7,則表達式x+a%3*(int)(x+y)%2/4的值: (4) ;

設a=12,則表達式a*=a/5的值: (5) ;

3. 若int x = 4,y = 6,z = 0;有循環while(x = y) {z ++;y--;}

則循環語句執行完後,z值為 (6) 。

4. 變數的指針就是指該變數的 (7) 。

5. 若有定義int (*p)[4],則標識符p是 (8) ;若有定義int *p[4],橋穗則標識符p是 (9) ;

6. 已有定義:char *p[ ]={「France」,「Chinese」,「Russia」,「America」};則語句printf(「%s」,p[2]);printf(「%c」,*(p[1]+2));printf(「%c」,*(*(p+1)+1));

的輸出結果分別為: (10) 、 (11) 、 (12) 。

7. 已有定義: int x=65; 若格式化輸出結果為「A, 65」,則對應的格式化輸出語句為printf(「 (13) , (14) 」, x, x)。

8. 已定義:int a[][2]={1, 2, 3, 4, 2, 6, 7, 2};則a[3][0]= (15) 。

三、簡答題(每題4分,共12分)

1、簡述選擇語句if和else語句對與switch語句的區別。

2、簡述在循環語句中,break和continue的區別。

3、若int a[5],*p=a;簡述*p++和(*p)++的區別。

四、下列各程序中每個程序各有2個錯誤,指出錯誤語句,寫出對應正確語句(每小題4分,共16分)



五、程序填空題:下列程序中缺少若干條語句,在對應的下劃線上填上合適的語句,每一個下劃線只填一條語句(每小題6分,共24分)

六、閱讀下列程序,寫出運行結果(第一小題4分,第二小題6分,共10分)



七、編程題(8分)

編譯程序,其功能是比較字元串的大小( 不允許敏陪卜 用系統提供的字元串比較函數strcmp)。要求是:

(1) 通過主函數調用一個函數strcompare來實現。

(2) 要求函數strcompare實現兩個字元的比較:如第一個字元小於第二個字元則返回一個負值;如兩個字元相等則返回0值;如第一個字元大於第二個字元則返回一個正值。

(3) 並輸出兩個字元串中相同部分的子串。

《C語言程序設計基礎》試卷參考答案

一、判斷題(每小題1分,共15分)

1~5 ; 6~10 ; 11~15

二、填空題(每空1分,共15分)

(1) 6 (2) 1 (3) 1 (4) 2.5 (5) 24 (6) 6

(7)地址 (8) 行指針,指向有四個元素的一維數組

(9)指針數組名,該數組有四個元素,每個元素都是指針

(10)Russia (11)i (12)h (13) %c (14) %d (15)7

三、簡答題(每題4分,共12分)

1、if總是判斷其後面的表達式的值是否為非零值,如是非零值則執行其後面的語句或由{}括起來的復合語句,否則執行else後面的語句。而switch語句則根據其後面表達式的可數值來判斷,執行switch語句體內與其中的一個case:常量值相等語句後面的語句。執行break語句後,跳出switch語句體。

2、break是終止整個循環過程;continue是終止本次循環。

3、*p++首先取a[0]的值,然後p指向a[1];(*p)++使得a[0]的值自增1,但p保持不變。

四、下列各程序中每個程序各有2個錯誤,指出錯誤語句,寫出對應正確語句(每小題4 分,共16分)

1、 (1)缺#include ; (2)scanf(「%f」,a); 改為 scanf(「%f」,&a);

2、 (1)缺sum=0; (2)for(i=1; i<=3; i++) 改為for(i=0;i<3;i++)

3、 (1)p1=p2 改為 *p1=*p2 (2)swap(&a, *p) 改為swap(&a, p)

4、 (1)在if(m<0)語句後添加else if(m==0) a=1; (2) 添加 return(a);

五、程序填空題:下列程序中缺少若干條語句,在對應的下劃線上填上合適的語句,每一個下劃線只填一條語句(每小題6分,共24分)

1、 (1)x=0; (2)if(n==x) (3)s++;或s=s+1;

2、 (4)&num[i] (5)max< num[i]? (6)num[i]!=0

3、 (7)n-i-1 (8)a[j]>a[j+1] (9)a[j+1]=temp

4、 (10)count=0; (11)n%10 (12)n>0或n!=0或n

六、閱讀下列程序,寫出運行結果(第一小題4分,第二小題6分,共10分)

1、 #*#*#*

2、 main i=1 j=2 k=2

sub i=1 j=2 k=1 x=2

sub i=1 j=2 k=1 x=3

七、編程題(8分)

#include

main()

{

int i,j, flag=0;

char str1[90],str2[90];

gets(str1);

gets(str2);

i=0;

do{

flag=strcompare(str1[i],str2[i]);

i++;

}while(str1[i]!=』』 && str2[i]!=』』 &&flag=0);

if(flag<0)printf(「%s小於%s 」,str1,str2);

else if(flag==0) printf(「%s 等於%s 」,str1,str2);

else printf(「%s大於%s 」,str1,str2);

printf(「兩個字元串中相同的字串為:」);

j=0;

i--; 後3句可用str1[i]=』』; printf(「%s」,str1);代替//用str2也可以。

while(j<i){printf(「%c」,str1[i]);j++;} span=""> </i){printf(「%c」,str1[i]);j++;}>

}

int strcompare(char c1,char c2)

{

int v;

v=c1-c2;

return v;

}

C. C語言試題及答案(2)

main()

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

for(k=1; k<3; k++) fun(a);

for(k=0; k<5; k++) printf("%d", a[k]);

}

上面程序的輸出結果是

A.34756

B.23445

C.35743

D.12345

(40) 請讀程序:

#include

#define SUB(X,Y) (X)*Y

main()

{ int a=3, b=4;

printf("%d", SUB(a++, b++));

}

上面程序的輸出結果是

A.12

B.15

C.16

D.20(41) 請讀程序:

#include

main()

{ int mun=0;

while(num<=2)

{ num++; printf("%d ",num);}

}

上面程序的輸出結果是

A.1

B.1

C.1

D.1

2 2 2

3 3

4

(42) 請讀程序:

#include

main()

{ float x,y;

scan("%f",&x);

if(x<0.0) y=0.0

else if((x<5.0)&&(x!=2.0))

y=1.0/(x+2.0);

else if (x<10.0) y=1.0/x;

else y=10.0;

printf("%f ",y);

}

若運行時從鍵盤上輸入2.0(表示回車),則上面程序的輸出結果是

A.0.000000

B.0.250000

C.0.500000

D.1.000000

(43) 請讀程序:

#include

main()

{ int x=1, y=0, a=0, b=0;

switch(x)

{ case 1:

switch(y)

{ case 0: a++;break;

case 1: b++;break;

}

case 2:

a++; b++; break;

}

printf("a=%d, b=%d ",a,

B.;

}

上面程序的輸出結果是

A.a=2, b=1

B.a=1, b=1

C.a=1, b=0

D.a=2, b=2

(44) 若有下面的程序片段:

int a[12]={0}, *p[3], **pp, i;

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

p[i]=&a[i*4];

pp=p;

則對數組元素的錯誤引用是

A.pp[0][1]

B.a[10]

C.p[3][1]

D.*(*(p+2)+2)

(45) 請讀程序:

#include

#include

main()

{ float x,y,z;

scan("%f%f",&x,&y);

z=x/y;

while(1)

{ if(fabs(z)>1.0)

{ x=y; y=z; z=x/y;

}

else break

}

printf("%f ",y);

}

若運行時從鍵盤上輸入3.6 2.4(表示回車),則輸出的結果是

A.1.500000

B.1.600000

C.2.000000

D.2.400000

(46) 請讀程序:

#include

f(in b[], int n)

{ int i, r;

r=1;

for(i=0; i<=n; i++) r=r*b[i];

return r;

}

main()

{ int x, a[]={ 2,3,4,5,6,7,8,9};

x=f(a, 3);

printf("%d ",x);

}

上面程序的輸出結果是

A.720

B.120

C.24

D.6

(47) 請讀程序:

#include

#include

void fun( char *s)

{ char a[10];

strcpy( a, "STRING");

s=a;

}

main()

{ char *p;

fun(p);

x=f(a, 3);

printf("%s ",p);

}

上面程序的輸出結果是(└┘表示空格)

A.STRING└┘└┘└┘└┘

B.STRING

C.STRING└┘└┘└┘

D.不確定的值

(48) 若已建立下面的鏈表結構,指針p、s分別指向圖中所示的結點,則不能將s所指的結點插入到鏈表末尾的語句組是

A.s->next=NULL; p=p->next; p->next=s;

B.p=p->next; s->next=p->next; p->next=s;

C.p=p->next; s->next=p; p->next=s;

D.p=(*p).next; (*s).next=(*p).next; (*p).next=s;

(49) 請讀程序:

#include

void fun(float *pl, float *p2, float *s)

{ s=( float * )calloc( 1, sizeof(float));

*s=*p1+ *(p2++);

}

main()

{ float a[2]={1.1, 2.2}, b[2]={10.0, 20.0}, *s=a;

fun(a, b, s)

printf("%f ",*s);

}

上面程序的輸出結果是

A.11.100000

B.12.100000

C.21.100000

D.1.100000

(50) 請讀程序:

#include

#include

void fun( char *w, int m)

{ char s, *p1, *p2;

p1=w; p2=w+m-1;

while (p1{ s=*p1++; *p1=*p2--; *p2=s;}

}

main()

{ char a[]="ABCDEFG";

fun( a, strlen(a));

puts(a);

}

上面程序的輸出結果是

A.GFEDCBA

B.AGADAGA

C.AGAAGAG

D.GAGGAGA

二、填空題(每空2分,共40分)

請將每空的正確答案寫在答題卡上【1】-【20】序號後的橫線上,答在試卷上不得分。

(1) DOS命令分為內部命令與外部命令,XCOPY命令是 【1】 命令

(2) 為了列出當前盤當前目錄中所有第三個字元為C的文件名的有關信息,應該用命令 【2】 。

(3) 設當前盤為A盤,當前目錄為XY,A盤上的一個文件QR.C在當前目錄下的子目錄W中。現已將A盤的當前目錄改為DXY,當前盤改為C盤,如需指定A盤上該文件應寫成 【3】 。

(4) 用十六進制給存儲器中的位元組地址進行編號,其地址編號是從0000到FFFF,則該存儲器的容量是【4】KB。

(5) 設有兩個八位二進制數00010101與01000111相加,其結果的十進製表示為 【5】 。

(6) 數學式子 寫成C語言表達式是 【6】 。

(7) 下面程序的輸出結果是 【7】 。

#include

main()

{ static char b[]="Goodbye";

char *chp=&b[7];

while( --chp >=&b[0]) putchar( *chp);

putchar(’ ’);

}

(8) 下面程序的輸出結果是 【8】 。

#include

void as( int x, int y, int *cp, int *dp)

{ *cp=x+y;

*dp=x-y;

}

main()

{ int a=4, b=3, c, d;

as( a, b, &c, &d);

printf( ’%d %d ", c, d);

}

(9) 請讀程序:

#include

main( int argc, char *argv[])

{ int i;

printf( ’%d ", argc);

for( i=0; i<=argc+1; i++) printf( "%s ", argv[i]);

printf(" ");

}

若上面的程序編譯、連接後生成可執行文件ABC.EXE,則輸入以下命令行

abc file1 file2(表示回車)

程序執行後的輸出結果是 【9】 。

(10) 條件“20(11) 設二進制數a是00101101,若想通過異或運算a^b使a的高4位取反,低4位不變,則二進制數b應是 【11】 。

(12) 若有以下說明和定義語句,則變數w在內存中所佔的位元組數是 【12】 。

union aa

{ float x, y;

char c[6];

};

struct st { union aa v; float w[5]; double ave; } w;

(13) 下面程序的輸出結果是 【13】 。

#include

#define N 5

fun( char *s, char a, int n)

{ int j;

*s=a; j=n;

while( ereturn j;

}

main()

{ char s[N+1];

int k, p;

for( k=1; k<=N; k++)

s[k]=’A’+k+1;

printf( "%d ", fun(s, ’E’, N));

}(14) 下面程序的輸出結果是 【14】 。

#include

void fun( char *a1, char *a2, int n)

{ int k;

for( k=0; ka2[k]=( a1[k]-’A’-3+26)&+’A’;

a2[n]=’’;

}

main()

{ char s1[5]="ABCD", s2[5];

fun( s1, s2, 4);

puts( s2);

}

(15) 下面的findmax函數返回數組s中最大元素的下標,數組中元素的個數由t傳入,請填空。

findmax( int s[], int t)

{ int k, p;

for( p=0, k=p; pif( s[p]>s[k]) 【15】 。

return k;

}

(16) 下面程序的輸出結果是 【16】 。

#include

fun( int x)

{ int p;

if( x==0||x==1) return(3);

p=x-fun( x-2);

return p;

}

main()

{ printf( "%d ", fun(9));}

(17) 下面程序的輸出結果是 【17】 。

#include

funa( int a, int b)

{ return a+b;}

funb( int a, int b)

{ return a-b;}

sub( int (*t)(), int x, int y)

{ return((*t)( x,y));}

main()

{ int x, (*p)();

p=funa;

x=sub(p,9,3);

x+=sub(funb, 8, 3);

printf("%d ", x);

}

(18) 下面程序的輸出結果是 【18】 。

#include

main()

{ char *p[]={ "BOOL", "OPK", "H", "SP"};

int i;

for(i=3; i>=0; i--,i--) printf( "%c", *p[i]);

printf(" ");

}

(19) 為了建立如圖所示的存儲結構(即每個結點含兩個域,data是數據域,next是向結點的指針域),請填空。

data next

struct link { char data; 【19】 } node;

(20) 下面的程序用來統計文件中字元的個數,請填空。

#include

main()

{ FILE *fp;

long num=0;

if(( fp=fopen("fname.dat","r"))==NULL)

{ printf( "Can’t open file! "); exit(0);}

while 【20】

{ fgetc(fp); num++;}

printf("num=%d ", num);

fclose(fp);

}

參考答案

一`選擇題((1)~(40)題每題1分,(41)~(50)題每題2分,共60分)

(1)C (2)A (3)B (4)D (5)D (6)A (7)C (8)B (9)D (10)C

(11)B (12)D (13)A (14)C (15)B (16)A (17)B (18)A (19)C (20)C

(21)D (22)B (23)B (24)A (25)C (26)D (27)D (28)B (29)C (30)A

(31)B (32)B (33)D (34)C (35)A (36)C (37)A (38)B (39)C (40)A

(41)C (42)C (43)A (44)C (45)B (46)B (47)D (48)C (49)D (50)C

二` 填空題(每空2分,共40分)

(第(2)`(3)空允許小寫或大小寫混合使用,其它空均須與答案一樣)

(1) 外部

(2) DIR ?? C*.*

(3) A:XYWQR.C

(4) 64

(5) 92

(6) pow(sin(x),2) * (a+b)/(a-b) 或 sit(x) * sit(x) * (a+b)/(a-b)

(7) eybdooG

(8) 7 1

(9) 3 abc.exe file1 file2 (注:兩個答案,每個1分)

(10) ((20 (11) 11110000

(12) 34

(13) 3

(14) XYZA

(15) k=p

(16) 7

(17) 17

(18) SO

(19) struct link *next

(20) (!feof(fp))或(feof(fp)==0)

D. 下半年計算機二級c語言基礎試題

下半年計算機二級c語言基礎試題

任何設計活動都是在各種約束條件和相互矛盾的需求之間尋求一種平衡,程序設計也不例外。下面是我收集的關於計算機二級c語言基礎試題,希望大家認真閱讀!

下半年計算機二級c語言基礎試題1

一、選擇:

1.給出以下定義:

char acX[ ]= "abcdefg";

char acY[ ]= {'a','b','c','d','e','f','g'};

則正確的敘述為( )

A) 數組acX和數組acY等價 B) 數組acX和數組acY的長度相同

C) 數組acX的長度大於數組acY的長度 D) 數組acX的長度小於數組acY的長度

答案:C

2.

void example(char acHello[])

{

printf("%d", sizeof(acHello));

return;

}

void main()

{

char acHello[] = "hello";

example(acHello);//數組名稱作參數,傳的是地址,一個地址佔四個位元組

return;

}

的輸出是

A 4 B 5 C 6 D不確定

答案:A

3. 有以下程序段

char acArr[]= "ABCDE";

char *pcPtr;

for(pcPtr = acArr; pcPtr < acArr + 5; pcPtr++)

{

printf("%s/n", pcPtr);

}

return;

輸出結果是( )

A) ABCD B) A C) E D) ABCDE

B D BCDE

C C CDE

D B DE

E A E

答案:D

4.在中斷中,不能同步獲取信號量,但是可以釋放信號量。

A.正確 B.錯誤

答案:A

5.以下敘述中不正確的是( )

A) 在不同的函數中可以使用相同名字的變數

B) 函數中的形式參數是局部變數

C) 在一個函數內定義的變數只在本函數范圍內有效

D) 在一個函數內的復合語句中定義的變數在本函數范圍內有效(復合語句指函數中的成對括弧構成的代碼)

答案:D

6.設有如下定義:

unsigned long pulArray[] = {6, 7, 8, 9, 10};

unsigned long *pulPtr;

則下列程序段的輸出結果為( )

pulPtr = pulArray;

*(pulPtr + 2) += 2;

printf ("%d,%d/n", *pulPtr, *(pulPtr + 2));

A)8,10 B)6,8 C)7,9 D)6,10

答案:D

7. 定義結構體時有下面幾種說法,請指出正確的(多選):______

A、結構體中的每個部分,最好進行四位元組對齊;

B、結構體的總長度最好是四位元組對齊;

C、結構中成員的存放不用考慮位元組對齊情況;

答案:A、B

8.void example()

{

int i;

char acNew[20];

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

{

acNew[i] = '0';

}

printf("%d/n", strlen(acNew));

return;

}

的輸出為( )

A 0 B 10 C 11 D不確定

答案:D

9.switch(c)中的c的數據類型可以是char、long、float、unsigned、bool. ( )

A. 正確 B. 錯誤

答案:B

10. 網路上傳輸的位元組序默認是大位元組的,如果主機是小位元組序,在網路通信時則須進行位元組序轉換;如果主機是

大位元組序,為了程序的一致性及可移植性,最好也在程序中加上位元組序轉換的操作(空操作)。

A. 正確 B.錯誤

答案:A

二、 填空題

1、 C語言函數返回類型的默認定義類型是

2、 函數的實參傳遞到形參有兩種方式: 和

3、在一個函數內部調用另一個函數的調用方式稱為 。在一個函數內部直接或間接調用該函數成為函數 的調用方式

4、C語言變數按其作用域分為 和

5、凡在函數中未指定存儲類別的局部變數,其默認的存儲類別為

三、 看程序寫結果

1、#include

Int abc(int u,int v);

Void main()

{int a=24,b=16,c;

c=abc(a,b);

printf(「value=%d」,c);

}

Int abc(int u, int v)

{int w;

While(v)

{w=u%v;

u=v;

v=w;

}

Return u;

}

2、#include

int x1=30,x2=40;

main()

{int x3=10,x4=20;

sub(x3,x4);

sub(x2,x1);

printf(「%d,%d,%d,%d 」,x3,x4,x1,x2);

}

sub(int x,int y)

{x1=x;x=y;y=x1;}

3、#include

Main()

{int i=5;

Printf(「%d 」,sub(i));

}

sub(int n)

{int a;

If(n==1) return 1;

a=n+sub(n-1);

return (a);

}

4、#include

Void fun()

{static int m;

m+=2;

printf(「%d 」,m);

}

Main()

{int a;

For(a=1;a<=4;a++) fun();

Printf(「 」);

}

四、 編程題

1、 編寫一個函數,判斷任一整數是否為素數,用main()函數調用並測試之。

2、 用遞歸方法求n!

3、 有一個一維數組,內放10個學生成績,寫一個函數,求出平均分,最高分和最低分

下半年計算機二級c語言基礎試題2

1.下列敘述中正確的是( )。

A. 所有數據結構必須有根結點

B. 所有數據結構必須有終端結點(即葉子結點)

C. 只有一個根結點,且只有一個葉子結點的數據結構一定是線性結構

D. 沒有根結點或沒有葉子結點的數據結構一定是非線性結構

【答案】D

【解析】D項正確,線性結構的特點是:

①集合中必存在「第一個元素"且惟一;

②集合中必存在「最後一個元素」且惟一;

③除最後一個元素外,其他數據元素均有惟一的「後繼;

④除第一個元素外,其他數據元素均有惟一的「前驅」。所以沒有根結點或沒有葉子結點的數據結構一定是非線性結構。AB兩項錯誤,不是所有數據結構都必須有根結點和葉子結點;C項錯誤,數據結構中若有中間結點不滿足只有一個前件或者後件的條件,就不是線性結構。答案選擇D選項。

2. 以下敘述中錯誤的是( )。

A. C語言中的每條可執行語句和非執行語句最終都將被轉換成二進制的機器指令

B. C程序經過編譯、鏈接步驟之後才能形成一個真正可執行的二進制機器指令文件

C. 用C語言編寫的程序稱為源程序,它以ASCII代碼形式存放在一個文本文件中

D. C語言源程序經編譯後生成後綴為.obj的目標程序

【答案】A

【解析】A項錯誤,注釋語句不會被翻譯成二進制的'機器指令。C源程序經過C編譯程序編譯之後生成後綴為.obj的二進制文件(稱為目標文件),然後由「鏈接程序」(Link)的軟體把.obj文件與各種庫函數連接起來生成一個後綴為.exe的可執行文件。答案選擇A選項。

3. C語言主要是藉助以下( )功能來實現程序模塊化的。

A. 定義函數

B. 定義常量和外部變數

C. 三種基本結構語句

D. 豐富的數據類型

【答案】A

【解析】C程序的模塊化主要通過函數來實現。C語言允許對函數單獨進行編譯,從而可以實現模塊化。答案選擇A選項。

4. 有以下程序段:

char ch;

int k;

ch='a';

k=12;

print("%c,%d,",h,ch,k);

printf("k=%d ",k);

已知字元a的ASCII碼十進制值為97,則執行上述程序段後輸出的結果是( )。

A. 因變數類型與格式描述符的類型不匹配輸出無定值

B. 輸出項與格式描述符個數不符,輸出為零值或不定值

C.a,97,12k=12

D. a,97,k=12

【答案】D

【解析】字元變數的值是該字元的ASCII碼值,可以參與整型變數所允許的任何運算。"ch='a",%c表示以字元格式輸出ch的值,所以輸出為a;%d表示以十進制代碼的形式輸出ch的值,為97;k沒有對應的輸出格式,不輸出。在第二個語句中,首先輸出"k=",然後以十進制代碼輸出k的值,為12。答案選擇D選項。

5. 下列敘述中正確的是( )。

A. 棧是「先進先出」的線性表

B. 隊列是「先進後出"的線性表

C. 循環隊列是非線性結構

D. 有序線性表既可以採用順序存儲結構,也可以採用鏈式存儲結構

【答案】D

【解析】有序的線性表既可採用順序存儲結構,也可以採用鏈式存儲結構。A項錯誤,棧是「先進後出"的線性表B項錯誤,隊列是「先進先出"的線性表;C項錯誤,循環隊列是線性結構的,有序的線性表既可採用順序存儲結構,也可採用鏈式存儲結構。

答案選擇D選項。

6. 某二叉樹的中序序列為DCBAEFG,後序序列為DCBGFEA,則該二叉樹的深度(根結點在第1層)為( )。

A. 5

B. 40

C.3

D. 2

【答案】B

【解析】二叉樹的後序序列為DCBGFEA,則A為根結點。中序序列為DCBAEFG,則DCB為左子樹結點,EFG為右子樹結點。同理B為C父結點,C為D父結點。根據分析,可畫出左子樹,同理E為F父結點,F為G父結點。根據分析,可畫出右子樹,故二叉樹深度為4層。答案選擇B選項。

7. 設有定義:struct{intn;floatx;}s[2],m[2]={{10,2.8},{0,0.0}};,則以下賦值語句中正確的是( )。

A. s[0]=m[1];

B. s=m;

C.s.n=m.n;

D. s[2].x=m[2].x;

【答案】A

【解析】定義了結構體類型數組s,長度為2,結構體類型數組m,長度為2,並對數組m進行了初始化。同類型的結構體可以直接用變數名實現賦值,A項正確;數組名為數組首地址,地址常量之間不可以相互賦值,B項錯誤;數組名為地址常量不是結構體變數,不能引用成員,C項錯誤;s[2]與m[2]數組越界,D項錯誤。答案選擇A選項。

8. 關於C語言標識符,以下敘述錯誤的是( )。

A. 標識符可全部由數字組成

B. 標識符可全部由下劃線組成

C. 標識符可全部由小寫字母組成

D. 標識符可全部由大寫字母組成

【答案】A

【解析】C語言標識符只能由字母、數字、下劃線構成,且只能以字母、下劃線開頭,故答案選擇A選項。

9. 以下程序段中的變數已定義為int類型,則

sum=pAd=5;

pAd=sum++,++pAd,pAd++;

printf("%d ",pAd);

程序段的輸出結果是( )。

A. 6

B. 4

C. 5

D. 7

【答案】D

【解析】自增和自減運算符的兩種用法:前置運算,運算符放在變數之前,規則是先使變數的值增(或減)1,然後以變化後表達式的值參與其他運算;後置運算,運算符放在變數之後,規則是變數先參與其他運算,然後再使變數的值增(或減)1。執行pAd=sum++,sum++是後置自增,執行完後,pAd=5,sum=6。++pAd和pAd++語句中沒有其他運算,即效果相同,pAd分別加1,兩句執行完後,pAd7。答案選擇D選項。

;

E. 計算機二級C語言選擇題及答案(2)

}

printf("%d ",num);

}

程序執行後的輸m結果是()。

A.35

B.37

C.39

D.3975

32.以下程序的'輸出結果是()。

main()

{char st[20]="hello \";

printf("%d%d ",strlen(st).sizeof(st));

}

A.9 9

B.5 20

C.13 20

D.20 20

33.若有以下的定義:‘int t[3][2];”,能正確表示t數組元素地址的表達式是()。

A.&t[3][2]

B.t[3]

C.t[l]

D.t[2][2]

34.函數fseek(pf,OL,SEEK END)中的SEEK ENE 代表的起始點是()。

A.文件開始

B.文件末尾

C.文件當前位置

D.以上都不對

35.下述程序的輸出結果是()。

#include

main()

{ int i;

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

{if(i*i>=20)&&(i*i<=100))

break;

}

printf("%d ",i*i);

}

A.49

B.36

C.25

D.64

36.若有定義“int b[8],*p=b;”,則p+6表示()。

A.數組元素b[6]的值

B.數組元素b[6]的地址

C.數組元素b[7]的地址

D.數組元素b[o]的值加上6

37.設變數已正確定義,則以下能正確計算f=n!的程序是()。

A.f=0:

for(i=1;i<=n;i++)f*=i:

B.F=1:

for(i=l;i<2n;i++)f*=i:

C.f=l:

for(i=n;i>1;i++)f*=i:

D.f=1;

for(i=n;i>=2;i--)f*=i:

38.下述程序執行的輸出結果是()。

#include

main()

{ char a[2][4];

strcpy(a,"are");strcpy(a[1],"you");

a[0][3]=’&’;

printf("%s ",a):

}

A.are&you

B.you

C.are

D.&

39.設x=011050,則x=x&01252的值是()。

A.0000001000101000

B.1111110100011001

C.0000001011100010

D.1100000000101000

40.在“文件包含”預處理語句的使用形式中,當#include後面的文件名用(雙引號)括起時,尋找被包含文件的方式是()。

A.直接按系統設定的標准方式搜索目錄

B.先在源程序所在的目錄搜索,如沒找到,再按系統設定的標准方式搜索

C.僅僅搜索源程序所在目錄

D.僅僅搜索當前目錄

【答案與解析】

1.D。【解析】演算法的空間復雜度,是指執行這個演算法所需的存儲空間。演算法所佔用的存儲空間包括演算法程序所佔用的空間、輸入的初始數據所佔用的存儲空間、演算法執行過程中所需要的額外空間。

2.D。【解析】數據的存儲結構是指數據的邏輯結構在計算機存儲空間中的存放形式,一種數據結構可以根據需要採用不同的存儲結構,用的存儲結構有順序和鏈式結構。用不同的存儲結構,其處理的效率是不同的。

3.D。【解析】所謂的交換排序方法是指藉助數據元素之間的互相交換進行排序的一種方法,包括冒泡排序和快速排序,冒泡排序通過相鄰元素的交換,逐步將線性表變成有序是一種最簡單的交換排序方法。

4.C。【解析】結構化程序設計的原則和方法之一是限制使用GOT0語句,但不是絕對不允許使用GOT0語句。其他三項為結構化程序設計的原則。

5.D。【解析】文件系統所管理的數據文件基本上是分散、相互獨立的。相對於資料庫系統,以此為基礎的數據處理存在3個缺點:數據冗餘大、數據的不一致性、程序與數據的依賴性強。

6.C。【解析】面對象的設計方法的基本原理是:使用現實世界的概念抽象地思考問題從而自然地解決問題。它雖強調模擬現實世界中的概念而不強調演算法,但是它鼓勵開發者在軟體開發的過程中從應用領域的概念角度去思考。

7.D。【解析】所謂的後序遍歷是指,首先遍歷左子樹,然後遍歷右子樹,最後訪問根結點,並且在遍歷左、右樹時,仍然先遍歷左子樹,然後遍歷右子樹,最後訪問根點。因此,後序遍歷二叉樹的過程也是一個遞歸過程。

8.B。【解析】軟體的過程設計是指系統結構部件轉換成軟體的過程描述。

9.A。【解析】①對軟,牛開發的進度和費用估計不準確:②用戶對已完成的軟體系統不滿意的現象時常發生;③軟體產品的質量往往靠不住;④軟體常常是不可維護的;⑤軟體通常沒有適當的文檔;⑥軟體成本在計算機系統總成本中所佔的比例逐年上升;⑦軟體開發生產率提高的速度遠遠跟不上計算機應用迅速普能及深入的趨勢。

10.C。【解析】對象的封裝性是指從外面看只能看到對象的外部特性,而對象的內部,其處理能力的實行和內部狀態對外是不可見的,是隱蔽的。

11.C。【解析】資料庫系統由如下5個部分組成:資料庫(DB)、資料庫管理系統fDBMS)、資料庫管理員(人員)、系統平台之一——硬體平台(硬體)、系統平台之二——軟體平台(軟體)。其中 DB(DataBase)即資料庫,是統一管理的相關數據的集合;DBMS即資料庫管理系統,是位於用戶與操作系統之間的一層數據管理軟體,為用戶或應用完程序提供訪問DB的方法。由以上可知,選C為正確答案。

12.A。【解析】標識符是由字母、數字或下劃線組成,並且它的第一個字元必須是字母或者下劃線。B選項int不是表達變數類型的標識符,它不能再用做變數名和函數名。C 選項do是C語言的一個關鍵字。D選項標識符只能以字母或下劃線開始。

13.D。【解析】本題考查邏輯運算符的使用。當“&&”的兩個運算對象都是邏輯1時,表達式返回值才是1;“||” 的兩個運算對象至少有一個是邏輯1時,表達式返回值也是1,x14.C。【解析】第1個printf函數,格式說明的個數是2,而輸出項的個數是3,所以對於多餘的輸出項k不予輸出;第2個printf函數,有兩個%說明,第1個%後面的字元要原樣輸出。本題考查printf函數的格式。①“%x”和“%0”分別表示以十六進制和八進制無符合型輸出整型數據(不帶前導ox或0);②printf函數中格式說明符之前插入的任何字元都原樣輸出;③格式說明與輸出項的個數,也要相等,如果格式說明的個數少於輸出項的個數,則對於多餘的輸出項不予輸出。

15.C。【解析】函數fun(int x,int y)的功能是返回x+y的值。在主函數中,變數a,b,c的初始值分別為1,2,3。因此,逗號表達式“a++,b++,aq b”的值等於5,表達式c++的值為3,調用於函數的表達式為“fun(5,3);”,其返回值等於8。

16.D。【解析】在x=2,y=x+3/2中,3/2=1。2+1= 3,因此表達式的值為3,因為x,y為double型變數,故選擇D選項。

17.A。【解析】當x為1時,執行case 1,a自加等於1,因為case 1後沒有break,接著執行case 2,此時a的值為2,b自加為1,故選擇A選項。

18.D。【解析】本題考夢自增運算符“++”、邏輯與運算符“&&”和邏輯或運算符“||”。自增運算符“++”出現在變數之前,表示先使用變數的值加l,再使用變數的值進行運算;出現在變數之後,表示先使用變數的值進行運算,再使用變數的值加l。當邏輯與運算符“&&’’兩邊的運算對象都為真時,邏輯表達式的值才為真;當邏輯或運算符“||”只要一個值為1,值就為1。根據運算符的優先順序,題中應先計算內層括弧中的值。++j是先自加後運算,因此運算時j的值等於3,所以表達式++j=3成立,即表達式的值為1;1與任何數都為進行或(||)運算,結果都為1,因此k=3的表達式i++是先運算後自加,因此運算時i為1,所以i++=1成立,自加1後i=2。if語句的條件為真即“1”,所以輸出i、j、k的值分別是2,3,3。

19.A。【解析】本題考查switch語句。當i一1時,執行case 1,因為沒有遇到break語句,所以依次往下運行,“a=a+ 2=2,a=a+3=5”;當i=2時,執行case 2,因為沒有遇到break語句,所以依次往下執行,“a=a+2=7,a=a+3= 10”;當i=3時,執行case 3,a=a+1=11,因為沒有遇到break語句,所以依次往下運行,a—a+2—13,a—a+3一l6:當i=4時,執行default,a=a+3=19,結束循環。

20.C。【解析】只有當3個if條件同時成立,即能夠同時被2、3、7整除時,才輸出i的值,而從0到50能夠同時被2、3、7整除的數只有42,故選擇C選項。

21.A。【解析】循環的作用是求行下標從1到2列下標從0到i的元素之和,即s=a[1][0]+a[1][1]+a[2][0]+a [2][1]+a[2][2]=3+4+5+6+0=18。

22.A。【解析】在程序語句中,k的初始值為5,進行第l次while循環後,k自減1為4,非0,執行循環體里的printf語句,輸出k,此時k的值變為1。程序執行第2次循環時,k 自減1變為0,為假,退出while循環語句。所以程序的最後結果為1。

23.A。【解析】通過地址來引用數組元素的方法有下列5種:

(1)a[i][j];(2)*(a[i]+j);(3)*(*(a+j)+i);(4)* (a[i][j]);(5)(&aE0][0]q-3*i+j)。故A正確。

24.C。【解析】選項A、B的空間不夠;字元串存儲要有結束符’’,且要佔用一個空間,printf用來輸出字元,不能輸入字元串。

25.D。【解析】由題目ee線性鏈表的定義可知,要將q 和r所指的結點交換前後位置,只要使q指向r的後一個結點,p指向r結點,r指向q結點即可。而在選項D由,r-> next=q,這時r指向的節點為q;p->next r,這時p指向的節點為r;q->next=r->next,因為r節點已經指向q,所以執行這個語句後q又指向q,所以選項D不正確。

26.B。【解析】在第1次外層for循環中,首先x++得到x=1。進入到內層for循環,只有循環j的值為奇數時,變數x的值才自加1,所以在內層for循環執行過程中,變數x的值自加兩次,當退出內層for循環時,x=3,然後執行x++,得到x=4。在進入執行第2次外層for循環中,首先x++得到x=5。進入到內層for循環,只有循環變數j的值為奇數時,變數x的值才自加1,所以在內層for循環執行過程中,變數X的值自加1兩次,當退出內層for循環時,x=7,然後執行x++,得到x=8,所以列印輸出變數x的值為8。

27.C。【解析】子函數fun1(double a)的功能是返回a的平方值的整數部分。子函數fun2(double x,double y)的功能是返回X的平方值的整數部分與Y的平方值的整數部分的和。又因為題中變數w的定義為double型,函數fun(2) 的定義為int型,按照各類數值型數據間的混合運算,整型數據被轉換為實型數據。所以雙精度型變數w的值為5.O。

28.C。【解析】在for循環語句中自變數i從0開始,每次自加2,執行s+=*(t+i)語句,因為C語言規定數組名做表達式相當於數組的首地址,也就是第一個元素的地址。因此,*(t+i)代表數組的第i+1個元素。所以程序運行的結果是1+3+5+7+9=25,即變數S的值等於25。

29.A。【解析】本題在函數int fun(int n)的定義中又出現了對函數fun的調用,所以函數fun是遞歸函數。因而在主函數中調用x=fun(x)時,當輸入10賦給變數x時,遞歸調用的過程為

fun(10)=10…fun(9)=104-94-fun(8)=104-9+84- fun(7)

=10+9++8++7++fun(6)=10+9++8+7+6+fun (6)

=10+9++8+7+6+5+fun(4)

=10+9++8+7+6+5+4+fun(3)

=10+9++8+7+6+5+4+3+fun(2)

=10+9++8+7+6+5+4+3+2+fun(1)

=10+9++8+7+6+5+4+3+2=55

熱點內容
qq登錄在哪個文件夾 發布:2025-02-01 01:57:59 瀏覽:624
如何加入安卓代理 發布:2025-02-01 01:51:40 瀏覽:2
我的世界手游伺服器刷鑽石教程 發布:2025-02-01 01:48:13 瀏覽:773
sqlifthen男女 發布:2025-02-01 01:44:59 瀏覽:690
幻靈和安卓哪個互通 發布:2025-02-01 01:43:33 瀏覽:648
電腦配置夠但為什麼打lol掉幀 發布:2025-02-01 01:37:08 瀏覽:316
21款朗逸哪個配置比較劃算 發布:2025-02-01 01:35:32 瀏覽:976
建築動畫片腳本 發布:2025-02-01 01:35:21 瀏覽:469
管家婆如何用阿里雲伺服器 發布:2025-02-01 01:29:09 瀏覽:649
解壓耳放 發布:2025-02-01 01:20:18 瀏覽:176