- 相關推薦
全國計算機等級考試二級C語言筆試第二套
在學習、工作生活中,我們經(jīng)常接觸到試卷,經(jīng)過半個學期的學習,究竟學到了什么?需要試卷來幫我們檢驗。你知道什么樣的試卷才是好試卷嗎?下面是小編幫大家整理的全國計算機等級考試二級C語言筆試第二套,僅供參考,大家一起來看看吧。
全國計算機等級考試二級C語言筆試第二套 1
一、選擇題
在下列各題的A)、B)、C)、D)四個選項中,只有一個選項是正確的,請將正確的選項涂寫在答題卡相應位置上,答在試卷上不得分。
(1)算法的空間復雜度是指
A)算法程序的長度 B)算法程序中的指令條數(shù) C)算法程序所占的存儲空間 D)執(zhí)行算法需要的內(nèi)存空間
(2)在結(jié)構(gòu)化程序設計中,模塊劃分的原則是
A)各模塊應包括盡量多的功能 B)各模塊的規(guī)模應盡量大 C)各模塊之間的聯(lián)系應盡量緊密
D)模塊內(nèi)具有高內(nèi)聚度、模塊間具有低耦合度
(3)下列敘述中,不屬于測試的特征的是
A)測試的挑剔性 B)完全測試的不可能性 C)測試的可靠性 D)測試的經(jīng)濟性
(4)下面關于對象概念的描述中,錯誤的是
A)對象就是C語言中的結(jié)構(gòu)體變量 B)對象代表著正在創(chuàng)建的系統(tǒng)中的一個實體
C)對象是一個狀態(tài)和操作(或方法)的封裝體 D)對象之間的信息傳遞是通過消息進行的
(5)下列關于隊列的敘述中正確的是
A)在隊列中只能插入數(shù)據(jù) B)在隊列中只能刪除數(shù)據(jù) C)隊列是先進先出的線性表 D)隊列是先進后出的線性表
(6)已知二叉樹后序遍歷序列是dabec,中序遍歷序列是debac,它的前序遍歷序列是
A)acbed B)decab C)deabc D)cedba
(7)某二叉樹中有n個度為2的結(jié)點,則該二叉樹中的葉子結(jié)點數(shù)為
A)n+1 B)n-1 C)2n D)n/2
(8)設有如下三個關系表
R S T
A B C A B C
m 1 3 m 1 3
n n 1 3
下列操作中正確的是
A) T=R∩S B) T=R∪S C) T=R×S D) T=R/S
(9)下列敘述中,正確的是
A)用E-R圖能夠表示實體集間一對一的聯(lián)系、一對多的聯(lián)系和多對多的聯(lián)系 B)用E-R圖只能表示實體集之間一對一的聯(lián)系 C)用E-R圖只能表示實體集之間一對多的聯(lián)系 D)用E-R圖表示的概念數(shù)據(jù)模型只能轉(zhuǎn)換為關系數(shù)據(jù)模型
(10)下列有關數(shù)據(jù)庫的描述,正確的是
A)數(shù)據(jù)處理是將信息轉(zhuǎn)化為數(shù)據(jù)的過程 B)數(shù)據(jù)的物理獨立性是指當數(shù)據(jù)的邏輯結(jié)構(gòu)改變時,數(shù)據(jù)的存儲結(jié)構(gòu)不變
C)關系中的每一列稱為元組,一個元組就是一個字段 D)如果一個關系中的屬性或?qū)傩越M并非該關系的關鍵字,但它是另一個關系的關鍵字,則稱其為本關系的外關鍵字
(11)C語言規(guī)定,在一個源程序中,main函數(shù)的位置
A)必須在最開始 B)必須在系統(tǒng)調(diào)用的庫函數(shù)的后面 C)可以任意 D)必須在最后
(12)以下敘述中錯誤的是
A)計算機不能直接執(zhí)行用C語言編寫的源程序 B)C程序經(jīng)C編譯程序編譯后,生成后綴為.obj的文件是一個二進制文件
C)后綴為.obj的文件,經(jīng)連接程序生成后綴為.exe的文件是一個二進制文件 D)后綴為.obj和.exe的二進制文件都可以直接運行
(13)下列選項可以正確表示字符型常量的是
A)′\r′ B)"a" C)"\897" D)296
(14)以下敘述中正確的是
A)構(gòu)成C程序的基本單位是函數(shù) B)可以在一個函數(shù)中定義另一個函數(shù)
C)main( )函數(shù)必須放在其他函數(shù)之前 D)C函數(shù)定義的格式是K&R格式
(15)設變量均已正確定義,若要通過scanf("%d%c%d%c",&a1,&c1,&a2,&c2);語句為變量a1和a2賦數(shù)值10和20,為變量c1和c2賦字符X和Y。以下所示的輸入形式中正確的是(注:□代表空格字符)
A) 10□X□20□Y<回車> B) 10□X20□Y<回車> C) 10□X<回車> 20□Y<回車> D) 10X<回車>
20Y<回車>
(16)若有說明:int *p,m=5,n;,以下正確的程序段是
A)p=&n;scanf("%d",&p); B)p=&n;scanf("%d",*p) C)scanf("%d",&n);*p=n; D)p=&n;*p=m;
(17)在執(zhí)行下述程序時,若從鍵盤輸入6和8,則結(jié)果為
main( )
{ int a,b,s;
scanf("%d%d",&a,&b);
s=a
if(a
s=b;
s*=s;
printf("%d",s); }
A)36 B)64 C)48 D)以上都不對
(18)若執(zhí)行下面的程序時,從鍵盤輸入5和2,則輸出結(jié)果是
main( )
{ int a,b,k;
scanf("%d,%d ",&a,&b);
k=a;
if(a
else k=b%a;
printf("%d\n",k);}
A)5 B)3 C)2 D)0
(19)在C語言中,函數(shù)返回值的類型最終取決于
A)函數(shù)定義時在函數(shù)首部所說明的函數(shù)類型 B)return語句中表達式值的類型 C)調(diào)用函數(shù)時主調(diào)函數(shù)所傳遞的實參類型 D)函數(shù)定義時形參的類型
(20)已知大寫字母A的ASCII碼是65,小寫字母a的ASCII碼是97。以下不能將變量c中的大寫字母轉(zhuǎn)換為對應小寫字母的語句是
A)c=(c-′A′)%26+′a′ B)c=c+32 C)c=c-′A′+′a′ D)c=(′A′+c)%26-′a′
(21)以下選項中,當x為大于l的奇數(shù)時,值為0的表達式是
A)x%2==1 B)x/2 C)x%2!=0 D)x%2==0
(22)有以下程序
main( )
{int k=5,n=0;
do
{switch(k)
{case 1: case 3:n+=1;k--;break;
default:n=0;k--;
case 2: case 4:n+=2;k--;break;
}
printf("%d",n);
}while(k>0 && n<5);
}
程序運行后的輸出結(jié)果是
A)235 B)0235 C)02356 D)2356
(23)有如下程序
main( )
{ int n=9;
while(n>6){n--; printf("%d",n);} }
該程序的輸出結(jié)果是
A)987 B)876 C)8765 D)9876
(24)有以下程序
#include
main( )
{ int c;
while((c=get ))!=′\n)
{ switch(c-′2′)
{ case 0:
case 1:putc+4);
case 2:putc+4);break;
case 3:putc+3);
case 4:putc+3);break; } }
printf("\n")}
從第一列開始輸入以下數(shù)據(jù)代表一個回車符。
2743
程序的輸出結(jié)果是
A)66877 B)668966 C)6677877 D)6688766
(25)有以下程序
main( )
{ int x=0,y=0,i;
for (i=1;;++i)
{ if (i%2==0) {x++;continue;}
if (i%5==0) {y++;break;} }
printf (" %d,%d",x,y); }
程序的輸出結(jié)果是
A)2,1 B)2,2 C)2,5 D)5,2
(26)有以下程序
main( )
{int a[4][4]={{l,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}},i,j,k,t;
for(i=0;i<4;i++)
for(j=0;j<3;j++)
for(k=j+1;k<4;k++)
if(a[j][i]>a[k][i]){t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;}/*按列排序*/
for(i=0;i<4;i++)printf("%d,",a[i][i]);
}
程序運行后的輸出結(jié)果是
A)1,6,5,7, B)8,7,3,1, C)4,7,5,2, D)1,6,2,1,
(27)有以下程序
int f(int n)
{ if(n==1)return 1;
else return f(n-1)+1;}
main( )
{ int i,j=0;
for(i=1;i<3;i++)j+=f(i);
printf("%d\n",j);}
程序運行后的輸出結(jié)果是
A)4 B)3 C)2 D)1
(28)當運行以下程序時,從鍵盤輸入AhaMA(空格)Aha,則下面程序的運行結(jié)果是
#include
main( )
{ char s[80],c=′a′;
int i=0;
scanf("%s",s);
while(s[i]!=′
{ if(s[i]==c)s[i]-32;
else if(s[i]==c-32)s[i]=s[i]+32;
i++; }
puts(s); }
A)ahaMa B)AbAMa C)AhAMa[空格]ahA D)ahAMa[空格]ahA
(29)下面程序輸出的結(jié)果是
main( )
{ int i;
int a[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)
printf("%d ",a[2-i][i]); }
A)1 5 9 B)7 5 3 C)3 5 7 D)5 9 1
(30)現(xiàn)有如下程序段
#include "stdio.h"
main( )
{ int a[5][6]={23,3,65,21,6,78,28,5,67,25,435,76,8,22,45,7,8,34,6,78,32,4,5,67,4,21,1};
int i=0,j=5;
printf("%d\n",*(&a[0][0]+2*i+j-2));}
則程序的輸出結(jié)果為
A)21 B)78 C)23 D)28
(31)請選出正確的程序段
A)int *p;
scanf("%d",p);
…
B)int *s, k;
*s=100;
…
C)int *s, k;
char *p, c;
s=&k;
p=&c;
*p=′a′;
…
D)int *s, k;
char *p, e;
s=&k;
p=&c;
s=p;
*s=1;
…
(32)下面程序段的運行結(jié)果是
char a[]="lanuage",*p;
p=a;
while(*p!=′u′){printf("%c",*p-32);p++;}
A)LANGUAGE B)language C)LAN D)langUAGE
(33)以下程序的輸出結(jié)果是
#include
int a[3][3]={1,2,3,4,5,6,7,8,9,},*p;
main( )
{ p=(int*)malloc(sizeof(int));
f(p,a);
printf("%d\n",*p);
free(p); }
f(int *s, int p[][3])
{ *s=p[1][1];}
A)1 B)4 C)7 D)5
(34)有以下程序
void f(int *q)
{int i=0;
for(;i<5; i++) (*q)++;
}
main( )
{int a[5] ={1,2,3,4,5}, i;
f(a);
for(i=0;i<5; i++) printf("%d,", a[i]);
}
程序運行后的輸出結(jié)果是
A)2,2,3,4,5, B)6,2,3,4,5, C)1,2,3,4,5, D) 2,3,4,5,6,
(35)以下合法的字符型常量是
A)′\x13′ B) ′\081′ C) ′65′ D)"\n"
(36)有以下語句,則對a數(shù)組元素的引用不正確的是
int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;
A)a[p-a] B)*(&a[i]) C)p[i] D)*(*(a+i))
(37)有以下程序
# include
main( )
{char p[20]={′a′, ′b′, ′c′, ′d′}, q[]="abc", r[]="abcde";
strcat(p, r); strcpy(p+strlen(q), q);
printf("%d\n",strlen(p));
}
程序運行后的輸出結(jié)果是
A)9 B)6 C)11 D)7
(38)在C語言中,變量的隱含存儲類別是
A)auto B)static C)extern D)無存儲類別
(39)以下程序的輸出結(jié)果是
main( )
{ int c=35; printf("%d\n",c&c);}
A)0 B)70 C)35 D)1
(40)有以下程序
#include
main( )
{ FILE *fp; int i=20,j=30,k,n;
fp=fopen("d1.dat","w");
fprintf(fp,"%d\n",i);fprintf(fp,"%d\n",j);
fclose(fp);
fp=fopen("d1.dat","r");
fscanf(fp,"%d%d",&k,&n); printf("%d %d\n",k,n);
fclose(fp); }
程序運行后的`輸出結(jié)果是
A)20 30 B)20 50 C)30 50 D)30 20
二、填空題
請將每一個空的正確答案寫在答題卡序號的橫線上,答在試卷上不給分。
(1)設一棵完全二叉樹共有700個結(jié)點,則在該二叉樹中有 【1】 個葉子結(jié)點。
(2)常用的黑箱測試有等價類劃分法、 【2】 和錯誤推測法3種。
(3)數(shù)據(jù)庫管理系統(tǒng)常見的數(shù)據(jù)模型有層次模型、網(wǎng)狀模型和 【3】 3種。
(4)通常,將軟件產(chǎn)品從提出、實現(xiàn)、使用維護到停止使用退役的過程稱為 【4】 。
(5)數(shù)據(jù)庫保護分為:安全性控制 、 【5】 、并發(fā)性控制和數(shù)據(jù)的恢復。
(6)執(zhí)行以下程序后的輸出結(jié)果是 【6】 。
main( )
{int a=10;
a=(3*5,a+4);printf("a=%d\n",a);
}
(7)以下程序的輸出結(jié)果是 【7】 。
#include
main( )
{printf("%d\n",strlen("IBM\n012\1\\"));}
(8)已定義char ch=′$′; int i=1,j;,執(zhí)行j!=ch&&i++以后,i的值為 【8】 。
(9)以下程序的運行結(jié)果是 【9】 。
#include
long fib(int g)
{ switch(g)
{ case 0:return 0;
case 1:
case 2:return 1; }
return(fib(g-1)+fib(g-2)); }
main( )
{ long k;
k=fib(5);
printf("k=%5ld\n",k);}
(10)下面程序的功能是輸出數(shù)組s中最大元素的下標,請?zhí)羁铡?/p>
main( )
{ int k, p,s[]={1, -9, 7, 2, -10, 3};
for(p=0, k=p; p<6; p++)
if(s[p]>s[k]) 【10】
printf("%d\n",k);}
(11)以下程序的功能是:求出數(shù)組x中各相鄰兩個元素的和依次存放到a數(shù)組中,然后輸出。請?zhí)羁铡?/p>
main( )
{int x[10],a[9],I;
for(I=0; I<10; I++) scanf("%d",&x[I]);
for( 【11】 ; I<10; I++ )
a[I-1]=x[I]+ 【12】 ;.
for(I=0; I<9; I++) printf("%d ",a[I]);
printf("");
}
(12)設有以下程序,為使之正確運行,請在橫線中填入應包含的命令行。(注:try_me( )函數(shù)在a:\myfile.txt中有定義。)
【13】
main( )
{ printf("\n");
try_me( );
printf("\n");}
(13)以下程序的功能是建立一個帶有頭結(jié)點的單向鏈表,鏈表結(jié)點中的數(shù)據(jù)通過鍵盤輸入,當輸入數(shù)據(jù)為-1時,表示輸入結(jié)束(鏈表頭結(jié)點的data域不放數(shù)據(jù),表空的條件是ph->next==NULL),請?zhí)羁铡?/p>
#include
struct list { int data; struct list *next;};
struct list*creatlist( )
{ struct list *p,*q,*ph;int a;ph=(struct list *)malloc (sizeof(struct list));
p=q=ph;printf("Input an integer number; entre-1 to end:\n");
scanf("%d",&a);
while(a!=-1)
{ p=(struct list*)malloc(sizeof(struct list));
【14】 =a;q->next=p; 【15】 =p;scanf("%d",&a);}
p->next=′\0;return(ph);}
main( )
{struct list * head; head=creatlist( );}
(1)D 【解析】 算法的復雜度主要包括算法的時間復雜度和算法的空間復雜度。所謂算法的時間復雜度是指執(zhí)行算法所需要的計算工作量;算法的空間復雜度是指執(zhí)行這個算法所需要的內(nèi)存空間。
(2)D 【解析】 在結(jié)構(gòu)化程序設計中,一般較優(yōu)秀的軟件設計盡量做到高內(nèi)聚、低耦合,這樣有利于提高軟件模塊的獨立性,也是模塊劃分的原則。
(3)C 【解析】 軟件測試的目標是在精心控制的環(huán)境下執(zhí)行程序,以發(fā)現(xiàn)程序中的錯誤,給出程序可靠性的鑒定。它有3個方面的重要特征,即測試的挑剔性、完全測試的不可能性及測試的經(jīng)濟性。其中,沒有測試的可靠性這一說法。
(4)A 【解析】 對象是由數(shù)據(jù)和容許的操作組成的封裝體,與客觀實體有直接的對應關系,對象之間通過傳遞消息互相聯(lián)系,從模擬現(xiàn)實世界中不同事物彼此之間的聯(lián)系,B)、C)、D)是正確的,對象的思想廣泛應用于C++、Java等語言中,因此A)錯誤。
(5)C 【解析】 隊列是一種操作受限的線性表。它只允許在線性表的一端進行插入操作,另一端進行刪除操作。其中,允許插入的一端稱為隊尾(rear),允許刪除的一端稱為隊首(front)。隊列具有先進先出的特點,它是按"先進先出"的原則組織數(shù)據(jù)的。
(6)D 【解析】 依據(jù)后序遍歷序列可確定根結(jié)點為c;再依據(jù)中序遍歷序列可知其左子樹由deba構(gòu)成,右子樹為空;又由左子樹的后序遍歷序列可知其根結(jié)點為e,由中序遍歷序列可知其左子樹為d,右子樹由ba構(gòu)成,如下圖所示,求得該二叉樹的前序遍歷序列為選項D)。
(7)A 【解析】 對于任何一棵二叉樹T,如果其終端結(jié)點(葉子)數(shù)為n1,度為2的結(jié)點數(shù)為n2,則n1=n2+1,所以該二叉樹的葉子結(jié)點數(shù)等于n+1。
(8)C 【解析】 對于兩個關系的合并操作可以用笛卡爾積表示。設有n元關系R和m元關系S,它們分別有p和q個元組,則R與S的笛卡兒積記為R×S它是一個m+n元關系,元組個數(shù)是p×q由題意可得,關系T是由關系R與關系S進行笛卡爾積運算得到的。
(9)A 【解析】 兩個實體之間的聯(lián)系實際上是實體集間的函數(shù)關系,這種函數(shù)關系可以有下面幾種,即一對一的聯(lián)系、一對多(或多對一)的聯(lián)系和多對多的聯(lián)系;概念模型便于向各種模型轉(zhuǎn)換。由于概念模型不依賴于具體的數(shù)據(jù)庫管理系統(tǒng),因此,容易向關系模型、網(wǎng)狀模型和層次模型等各種模型轉(zhuǎn)換。
(10)D 【解析】 數(shù)據(jù)處理是指將數(shù)據(jù)轉(zhuǎn)換成信息的過程,故選項A)敘述錯誤;數(shù)據(jù)的物理獨立性是指數(shù)據(jù)的物理結(jié)構(gòu)的改變,不會影響數(shù)據(jù)庫的邏輯結(jié)構(gòu),故選項B)敘述錯誤;關系中的行稱為元組,對應存儲文件中的記錄,關系中的列稱為屬性,對應存儲文件中的字段,故選項C)敘述錯誤。
(11)C 【解析】 不論main函數(shù)在整個過程中的位置如何,一個C程序總是從main函數(shù)開始執(zhí)行的。
(12)D 【解析】 一個C語言的源程序(后綴名為.c)在經(jīng)過編譯器編譯后,先生成一個匯編語言程序,然后由編譯程序再將匯編語言程序翻譯成機器指令程序,即目標程序(后綴名為.obj),目標程序不可以直接運行,它要和庫函數(shù)或其他目標程序連接成可執(zhí)行文件(后綴名為.exe)后方可運行。
(13)A 【解析】 C語言中,一個字符常量代表ASCII字符集中的一個字符,在程序中用單引號括起來作為字符常量,字符常量的的范圍是0~127。由于字符常量用單引號括起來,所以選項B),C)錯誤,選項D)超過了字符常量的表示范圍。
(14)A 【解析】 本題考查C語言的綜合基礎知識。構(gòu)成C程序的基本單位是函數(shù),不論main函數(shù)在整個程序中的位置如何,一個C程序總是從main函數(shù)開始執(zhí)行,C語言的函數(shù)定義都是互相平行、獨立的,在定義函數(shù)時,一個函數(shù)內(nèi)不能定義另一個函數(shù)。C函數(shù)定義的一般格式有兩種:傳統(tǒng)格式和現(xiàn)代格式。傳統(tǒng)格式也稱K&R格式,是早期編譯系統(tǒng)使用的格式;現(xiàn)代格式又稱ANSI格式,是現(xiàn)代編譯系統(tǒng)使用的格式。
(15)D 【解析】 本題中,scanf函數(shù)的格式控制沒有空格,所以,對于選項A)、B)、C),輸入的第一個空格會作為字符賦值給變量c1,而不會被解釋成分隔符。
(16)D 【解析】 "&"是求址運算符,"*"是指變量說明符。選項A)、B)應改為scanf("%d",p);選項C)中指針變量p未指向一確定的內(nèi)存單元,不能為其賦值,并且這樣做很危險,建議不使用。
(17)B 【解析】 本題中a的值為6,b的值為8,最后s的值為8,s*=s等價于s=s*s。
(18)C 【解析】 本題考查簡單的if…else語句。先執(zhí)行條件if(a
(19)A 【解析】 在C語言中,應當在定義函數(shù)時指定函數(shù)值的類型,凡不加類型說明的函數(shù),一律按整型處理。在定義函數(shù)時,對函數(shù)值說明的類型一般應該和return語句中的表達式類型一致。如果函數(shù)值的類型和return語句中的表達式類型不一致,則以函數(shù)類型為主,即函數(shù)類型決定返回值的類型。
(20)D 【解析】 C語言中,字符數(shù)據(jù)參加運算時,實際上是其ASCII碼參與運算。大寫字母的ASCII碼比其對應的小寫字母的ASCII碼小32。因此大寫字母轉(zhuǎn)化為小寫字母只需將其加上32即可。所以選項B)、C)都符合條件,因為變量c中存儲的是大寫字母,所以"c-A"的值一定小于26,故選項A)與選項C)的含義相同。
(21)D 【解析】 因為x的值為大于1的奇數(shù),所以x除以2的余數(shù)等于1,因此,選項A)、C)中表達式的結(jié)果為真,不為0;對于選項B)來說,x除以2的商不會等于0;選項D)中表達式的結(jié)果為假,即等于0。
(22)A 【解析】 因為變量的初始值分別為"k=5,n=0",所以程序第一次進入循環(huán)時,執(zhí)行 default語句,這時k=4,執(zhí)行"case 4:"這個分支,結(jié)果是"n=2,k=3",打印出2;程序然后進行第二次循環(huán),這時"n=2,k=3",執(zhí)行"case 3:"這個分支,結(jié)果是"n=3,k=2",打印出3;程序進行第三次循環(huán),這時"n=3,k=2",執(zhí)行"case 2: case 4:"這兩個分支,結(jié)果是?"n=5,k=1"?,打印出5,這時因為n=5不滿足n<5的循環(huán)條件,因此退出循環(huán),程序運行結(jié)束,故輸出結(jié)果為235。
(23)B 【解析】 該題目應該根據(jù)循環(huán)體第一次和最后一次執(zhí)行時的輸出結(jié)果來決定哪一項是正確的。第一次進入循環(huán)時,n的值是9,循環(huán)體內(nèi),先經(jīng)過n--運算,n的值變?yōu)?,所以第一次的輸出值是8,由此可以排除選項A)和D)。由循環(huán)條件n>6可以知道,最后一次循環(huán)開始時,n的值應該為7,所以最后一次執(zhí)行循環(huán)時,輸出為6,由此可以排除選項C)。
(24)A 【解析】 本題主要考查了字符輸入輸出函數(shù)getchar和putchar的使用。getchar函數(shù)用來從標準輸入設備上讀入一個字符,putc)函數(shù)是將字符變量c中的字符輸出到標準輸出設備上,并且字符可以看作整數(shù)參與運算。
(25)A 【解析】 本題考查了continue和break語句在循環(huán)語句中的作用。break語句的作用是結(jié)束本層循環(huán),而continue語句的作用是結(jié)束本次循環(huán)直接進入到下次循環(huán)。
(26)A 【解析】 本題利用多重 for循環(huán)的嵌套來實現(xiàn)對二維數(shù)組元素的按列排序。利用最外層循環(huán)來實現(xiàn)對列的控制。內(nèi)部循環(huán)利用選擇法對數(shù)組元素按照從小到大的順序進行排列,最后輸出對角線上的元素值。
(27)B 【解析】 在main函數(shù)中,對f(1)和f(2)的值進行了累加。
f(1)=1
f(2)=f(1)+1=2
最后,j的值為1+2=3
(28)A 【解析】 本題主要考查的知識點是大寫字母比它對應的小寫字母ASCII碼值小32,并且字符可以看作整數(shù)進行算術運算等操作。
(29)B 【解析】 本題用循環(huán)的方法考查對數(shù)組概念的掌握。首先,當i=0時,數(shù)組中的位置是a[2][0]=7,當然,如果用排除法,就不用考慮后面的循環(huán),因為在4個選項中,第1個數(shù)為7的選項只有B)。本題執(zhí)行第2次循環(huán)時,i的值為1,則printf函數(shù)中的數(shù)組指向為a[1][1]=5,依次循環(huán),可求出答案。
(30)A 【解析】 通過地址來引用二維數(shù)組,若有以下定義:int a[3][4],i,j;且當0≤i≤3,0≤j<4則可以有以下幾種方式來引用數(shù)組中的第i行,第j列的元素:?a[i][j]?,?*(a[i]+j),?*(*(a+i)+j),(*(a+i))[j],*(&a[0][0]+4*i+j)。表達式&a[0][0]+2*i+j-2相當于是地址&a[0][0]加上多少偏移量。
(31)C 【解析】 本題的選項A)和B)犯了同樣的錯誤,即指針變量在定義后并沒有指向具體的變量。也就是說,指針變量中沒有確定的地址值,它的值是不可預見的,所指的單元也是不可預見的,因此不能進行賦值操作。另外,在選項D)中,s是int型指針變量,p是char型指針變量,所指向的內(nèi)存單元所占用的字節(jié)數(shù)是不同的,因而不能將字符指針變量p的值賦給整型指針變量s。
(32)C 【解析】 本段程序的作用是輸出字符串"lanuage"中字母u之前的字符,并將其轉(zhuǎn)化為大寫字母。
注意:如果一個字符數(shù)組用來作為字符串使用,那么在定義該字符數(shù)組時,數(shù)組的大小就應該比它將要實際存放的最長字符多一個元素,以存放\0。
(33)D 【解析】 本題考查了二維數(shù)組元素引用的方法。題中用動態(tài)存儲分配函數(shù)malloc分配了一個int型數(shù)據(jù)長度大小的內(nèi)存,然后指針p指向了這段內(nèi)存,函數(shù)f( )中對p所指向的數(shù)據(jù)進行了賦值,p[1][1]為二維數(shù)組第二行第二列的元素,對應于實參a的元素5,所以輸出結(jié)果為5。
(34)B 【解析】 調(diào)用函數(shù)f( )時,將數(shù)組a的地址傳遞給了指針q,此時q指向的就是數(shù)組a的第一個元素a[0]。在5次循環(huán)過程中,q始終指向a[0],因此a[0]的值增加了5。最后的輸出結(jié)果為"6,2,3,4,5"。
(35)A 【解析】 C語言的字符常量是用單引號(即撇號)括起來的一個字符。除此之外,在C語言中還允許用一個"\" 開頭的字符序列來表示字符常量。其中,形式"\ddd"表示1到3位8進制數(shù)所代表的字符;形式"\xhh"表示1到2位16進制數(shù)所代表的字符。在本題中,\x13表示回車符,是一個字符常量;\081用8進制數(shù)所代表的字符,但形式不正確,因為8進制數(shù)所代表的字符中不會出現(xiàn)數(shù)字"8";65不是一個字符,而是一個十進制數(shù)字;"\n"是用雙引號括起來的一個字符,表示一個字符串,而不是字符常量。
(36)D 【解析】 本題考查數(shù)組指針的應用。選項D)第一層括號中為數(shù)組a中第i項元素的值,外面再加指針運算符沒有意義。
(37)B 【解析】 strcpy( )函數(shù)的功能是將字符串q復制到從p[3]位置開始的存儲單元,同時復制字符串結(jié)束標志\0 到p[6]中。函數(shù)strlen( )返回的是字符串中不包括\0在內(nèi)的實際長度,故本題答案為B)
(38)A 【解析】 auto變量:無static聲明的局部變量。用auto作存儲類別的聲明時,可以不寫auto,存儲類別隱含確定為auto(自動存儲類別),是動態(tài)存儲方式。大多數(shù)變量是自動變量。用static聲明的局部變量是靜態(tài)局部變量。函數(shù)調(diào)用結(jié)束后靜態(tài)局部變量占據(jù)的內(nèi)存存儲單元空間不釋放,局部變量保留原值,下次調(diào)用時可以繼續(xù)使用該值。用extern聲明外部變量,外部變量即全局變量,可以用extern聲明來改變?nèi)肿兞康淖饔糜颍瑢嶋H上,關鍵字"auto "可以省略,auto不寫則隱含確定為"自動存儲類別",屬于動態(tài)存儲方式。
(39)C 【解析】 本題考查按位與"&"。因為1&1=1,0&0=0,所以任何數(shù)與自身按位與,結(jié)果仍為此數(shù),不發(fā)生變化。
(40)A 【解析】 本題中,最主要的是掌握幾個有關文件函數(shù)的應用。
函數(shù)名:fopen
功能:打開一個文件
調(diào)用方式FILE *fp ;
fp=fopen(文件名,使用文件方式);
函數(shù)名:fprintf
功能:傳送格式化輸出到一個文件中
調(diào)用方式:fprintf(文件指針,格式字符串,輸出表列);
函數(shù)名:fclose
功能:關閉一個文件
調(diào)用方式:fclose(文件指針);
函數(shù)名:fscanf
功能:從磁盤文件執(zhí)行格式化輸入
調(diào)用方式:fscanf(文件指針,格式字符串,輸入列表)。
二、填空題
(1)【1】 350 【解析】 完全二叉樹中,設高度為n,則除h層外其它層結(jié)點數(shù)都到達最大,可以算出h=10,1至9層結(jié)點個數(shù)為2^9-1=511,最后一層結(jié)點個數(shù)為700-511=189個,189/2=95,除最后一層外共有結(jié)點2^(9-1)-95=161個,所以所有的結(jié)點個數(shù)為:189+161=350個。
(2)【2】 邊界值分析法 【解析】 黑箱測試法完全不考慮程序的內(nèi)部結(jié)構(gòu)和內(nèi)部特征,而只是根據(jù)程序功能導出測試用例。常用的黑箱測試有等價類劃分法、邊界值分析法和錯誤推測法3種。
(3)【3】 關系模型 【解析】 數(shù)據(jù)庫管理系統(tǒng)是位于用戶與操作系統(tǒng)之間的一層系統(tǒng)管理軟件,屬于系統(tǒng)軟件是用戶與數(shù)據(jù)庫之間的一個標準接口,其總是基于某種數(shù)據(jù)模型,可以分為層次模型、網(wǎng)狀模型和關系模型。
(4)【4】 軟件生命周期 【解析】 軟件產(chǎn)品從考慮其概念開始,到該軟件產(chǎn)品不能使用為止的整個時期都屬于軟件生命周期。一般包括可行性研究與需求分析、設計、實現(xiàn)、測試、交付使用以及維護等活動。
(5)【5】 完整性控制 【解析】 安全性控制:防止未經(jīng)授權(quán)的用戶有意或無意存取數(shù)據(jù)庫中的數(shù)據(jù),以免數(shù)據(jù)被泄露、更改或破壞;完整性控制:保證數(shù)據(jù)庫中數(shù)據(jù)及語義的正確性和有效性,防止任何對數(shù)據(jù)造成錯誤的操作;并發(fā)控制:正確處理好多用戶、多任務環(huán)境下的并發(fā)操作,防止錯誤發(fā)生;恢復:當數(shù)據(jù)庫被破壞或數(shù)據(jù)不正確時,使數(shù)據(jù)庫將其恢復到正確的狀態(tài)。
(6)【6】 a=14 【解析】 本題考查的是表達式的優(yōu)先級問題。先計算表達式3*5=15,再計算a+4=14,將數(shù)據(jù)14賦值給a,根據(jù)printf( )函數(shù)內(nèi)的輸出格式控制串,最后的輸出結(jié)果應為"a=14"。
(7)【7】 9 【解析】本題的字符串中共有9個字符,它們分別是I、B、M、\n、 0、1、2、\1、\\,其中,"\n"表示換行,"\\"表示反斜杠字符"\",所以本題的最后輸出結(jié)果為9。
(8)【8】 1 【解析】 在執(zhí)行邏輯表達式"j=!ch&&i++"時,首先判斷j=!ch的值,因為"ch=$"不為0,所以"j=!ch=0",編譯系統(tǒng)便不再計算表達式"i++"的值,i的值不變,仍為1。
(9)【9】 k=5 【解析】 本題主要考查了函數(shù)的遞歸調(diào)用方法。g=0或?g=1?或g=2是遞歸的終止條件,然后用回代的方法從一個已知值推出下一個值,直到計算出最終結(jié)果。
(10)【10】 k=p; 【解析】 為尋找數(shù)組中最大元素的下標,需先預設1個臨時最大元素的下標,并順序逐一考查數(shù)組的元素,當發(fā)現(xiàn)當前元素比臨時最大元素更大時,就用當前元素的下標更新臨時最大元素下標。直至考查了數(shù)組的全部元素后,這臨時最大元素下標就是數(shù)組的最大元素下標。通常預設的最大元素下標是數(shù)組的首元素下標,考查通常從首元素開始順序向后繼元素考查。程序中,存儲臨時最大元素下標的變量是k,變量p控制順序考查的循環(huán)控制變量。當發(fā)現(xiàn)當前元素s[p]比臨時最大元素s[k]更大時,應該用p更新k,所以在空框處應填入代碼"k=p;"。
(11)【11】 I=1 【12】 x[I-1] 【解析】 對于10個數(shù),相臨的兩個數(shù)相加取和,總共要進行9次加法運算,所以空14處應填入I=1。相臨的兩個數(shù)相加取和,放在數(shù)組a中,x[0]與x[1]的和存放在a[0]中,所以空15處應填入x[I-1]。
(12)【13】 #include
(13)【14】 p->data 【15】 q 【解析】 本題考查的是鏈表這一數(shù)據(jù)結(jié)構(gòu)對結(jié)構(gòu)體變量中數(shù)據(jù)的引用。鏈表的特點是結(jié)構(gòu)體變量中有兩個域,一個是數(shù)據(jù),另一個是指向該結(jié)構(gòu)體變量類型的指針,用以指明鏈表的下一個結(jié)點。
全國計算機等級考試二級C語言筆試第二套 2
一、選擇題((1)—(10)、(21)—(40)每題2分,(11)—(20)每題1分,共70分)
(1)下列數(shù)據(jù)結(jié)構(gòu)中,屬于非線性結(jié)構(gòu)的是
A.循環(huán)隊列
B.帶鏈隊列
C.二叉樹
D.帶鏈棧
(2)下列數(shù)據(jù)結(jié)果中,能夠按照“先進后出”原則存取數(shù)據(jù)的是
A.循環(huán)隊列
B.棧
C.隊列
D.二叉樹
(3)對于循環(huán)隊列,下列敘述中正確的是
A.隊頭指針是固定不變的
B.隊頭指針一定大于隊尾指針
C.隊頭指針一定小于隊尾指針
D.隊頭指針可以大于隊尾指針,也可以小于隊尾指針
(4)算法的空間復雜度是指
A.算法在執(zhí)行過程中所需要的計算機存儲空間
B.算法所處理的數(shù)據(jù)量
C.算法程序中的語句或指令條數(shù)
D.算法在執(zhí)行過程中所需要的臨時工作單元數(shù)
(5)軟件設計中劃分模塊的一個準則是
A.低內(nèi)聚低耦合
B.高內(nèi)聚低耦合
C.低內(nèi)聚高耦合
D. 高內(nèi)聚高耦合
(6)下列選項中不屬于結(jié)構(gòu)化程序設計原則的是
A.可封裝.
B. 自頂向下
C.模塊化
D. 逐步求精
(7)軟件詳細設計產(chǎn)生的圖如下:
該圖是
A.N-S圖
B.PAD圖
C.程序流程圖
D. E-R圖
(8)數(shù)據(jù)庫管理系統(tǒng)是
A.操作系統(tǒng)的一部分
B.在操作系統(tǒng)支持下的系統(tǒng)軟件
C.一種編譯系統(tǒng)
D. 一種操作系統(tǒng)
(9)在E-R圖中,用來表示實體聯(lián)系的圖形是
A.橢圓圖
B.矩形
C.菱形
D. 三角形
(10)有三個關系R,S和T如下:
其中關系T由關系R和S通過某種操作得到,該操作為
A.選擇
B.投影
C.交
D.并
(11)以下敘述中正確的是
A.程序設計的任務就是編寫程序代碼并上機調(diào)試
B.程序設計的任務就是確定所用數(shù)據(jù)結(jié)構(gòu)
C.程序設計的任務就是確定所用算法
D.以上三種說法都不完整
(12)以下選項中,能用作用戶標識符的是
A.void
B.8_8
C._0_
D.unsigned
(13)閱讀以下程序
#include
main( )
{ int case; float printF;
printf(“請輸入2個數(shù):”);
scanf(“%d %f”,&case,&pjrintF);
printf(“%d %f ”,case,printF);
}
該程序編譯時產(chǎn)生錯誤,其出錯原因是
A.定義語句出錯,case是關鍵字,不能用作用戶自定義標識符
B.定義語句出錯,printF不能用作用戶自定義標識符
C.定義語句無錯,scanf不能作為輸入函數(shù)使用
D.定義語句無錯,printf不能輸出case的值
(14)表達式:(int)((double)9/2)-(9)%2的值是
A.0
B.3
C.4
D.5
(15)若有定義語句:int x=10;,則表達式x-=x+x的值為
A.-20
B.-10
C.0
D.10
(16)有以下程序
#include
main( )
{ int a=1,b=0;
printf(“%d,”,b=a+b);
printf(“%d ”,a=2*b);
}
程序運行后的輸出結(jié)果是
A.0,0
B.1,0
C.3,2
D.1,2
17)設有定義:int a=1,b=2,c=3;,以下語句中執(zhí)行效果與其它三個不同的是
A.if(a>B. c=a,a=b,b=c;
B.if(a>B. {c=a,a=b,b=c;}
C.if(a>B. c=a;a=b;b=c;
D.if(a>B. {c=a;a=b;b=c;}
(18)有以下程序
#include
main( )
{ int c=0,k;
for (k=1;k<3;k++)
switch (k)
{ default: c+=k
case 2: c++;break;
case 4: c+=2;break;
}
printf(“%d ”,C.;
}
程序運行后的輸出結(jié)果是
A.3
B.5
C.7
D.9
(19)以下程序段中,與語句:k=a>b?(b>c?1:0):0;功能相同的是
A.if((a>b)&&(b>C.) k=1;
else k=0;
B.if((a>b)||(b>C. k=1;
else k=0;
C.if(a<=B. k=0;
else if(b<=C.k=1;
D.if(a>B. k=1;
else if(b>C.k=1;
else k=0;
20)有以下程序
#include
main( )
{ char s[]={“012xy”};int i,n=0;
for(i=0;s[i]!=0;i++)
if(s[i]>=’a’&&s[i]<=’z’) n++;
printf(“%d ”,n);
}
程序運行后的輸出結(jié)果是
A.0
B.2
C.3
D.5
(21)有以下程序
#include
main( )
{ int n=2,k=0;
while(k++&&n++>2);
printf(“%d %d ”,k,n);
}
程序運行后的輸出結(jié)果是
A.0 2
B.1 3
C.5 7
D.1 2
(22)有以下定義語句,編譯時會出現(xiàn)編譯錯誤的是
A.char a=’a’;
B.char a=’ ’;
C.char a=’aa’;
D.char a=’x2d’;
(23)有以下程序
#include
main( )
{ char c1,c2;
c1=’A’+’8’-‘4’;
c2=’A’+’8’-‘5’;
printf(“%c,%d ”,c1,c2);
}
已知字母A的ASCII碼為65,程序運行后的輸出結(jié)果是
A.E,68
B.D,69
C.E,D
D.輸出無定值
(24)有以下程序
#include
void fun(int p)
{ int d=2;
p=d++; printf(“%d”,p);}
main( )
{ int a=1;
fun(a); printf(“%d ”,a);}
程序運行后的輸出結(jié)果是
A.32
B.12
C.21
D.22
(25)以下函數(shù)findmax擬實現(xiàn)在數(shù)組中查找最大值并作為函數(shù)值返回,但程序中有錯導致不能實現(xiàn)預定功能
#define MIN -2147483647
int findmax (int x[],int n)
{ int i,max;
for(i=0;i
{ max=MIN;
if(max
return max;
}
造成錯誤的原因是
A.定義語句int i,max;中max未賦初值
B.賦值語句max=MIN;中,不應給max賦MIN值
C.語句if(max
D.賦值語句max=MIN;放錯了位置
(26)有以下程序
#include
main( )
{ int m=1,n=2,*p=&m,*q=&n,*r;
r=p;p=q;q=r;
printf(“%d,%d,%d,%d ”,m,n,*p,*q);
}
程序運行后的輸出結(jié)果是
A.1,2,1,2
B.1,2,2,1
C.2,1,2,1
D.2,1,1,2
(27)若有定義語句:int a[4][10],*p,*q[4];且0≤i<4,則錯誤的賦值是
A.p=a
B.q[i]=a[i]
C.p=a[i]
D.p=&a[2][1]
(28)有以下程序
#include
#include
main( )
{ char str[ ][20]={“One*World”, “One*Dream!”},*p=str[1];
printf(“%d,”,strlen(p));printf(“%s ”,p);
}
程序運行后的輸出結(jié)果是
A.9,One*World
B.9,One*Dream
C.10,One*Dream
D.10,One*World
(29)有以下程序
#include
main( )
{ int a[ ]={2,3,5,4},i;
for(i=0;i<4;i++)
switch(i%2)
{ case 0:switch(a[i]%2)
{case 0:a[i]++;break;
case 1:a[i]--;
}break;
case 1:a[i[=0;
}
for(i=0;i<4;i++) printf(“%d”,a[i]); printf(“ ”);
}
A.3 3 4 4
B.2 0 5 0
C.3 0 4 0
D.0 3 0 4
(30)有以下程序
#include
#include
main( )
{ char a[10]=”abcd”;
printf(“%d,%d ”,strlen(a),sizeof(a));
}
程序運行后的輸出結(jié)果是
A.7,4
B.4,10
C.8,8
D.10,10
(31)下面是有關C語言字符數(shù)組的描述,其中錯誤的'是
A.不可以用賦值語句給字符數(shù)組名賦字符串
B.可以用輸入語句把字符串整體輸入給字符數(shù)組
C.字符數(shù)組中的內(nèi)容不一定是字符串
D.字符數(shù)組只能存放字符串
(32)下列函數(shù)的功能是
fun(char * a,char * b)
{ while((*b=*a)!=’’) {a++,b++;} }
A.將a所指字符串賦給b所指空間
B.使指針b指向a所指字符串
C.將a所指字符串和b所指字符串進行比較
D.檢查a和b所指字符串中是否有’’
(33)設有以下函數(shù)
void fun(int n,char * s) {……}
則下面對函數(shù)指針的定義和賦值均是正確的是
A.void (*pf)( ); pf=fun;
B.viod *pf( ); pf=fun;
C.void *pf( ); *pf=fun;
D.void (*pf)(int,char);pf=&fun;
(34)有以下程序
#include
int f(int n);
main( )
{ int a=3,s;
s=f(a);s=s+f(a);printf(“%d ”,s);
}
int f(int n)
{ static int a=1;
n+=a++;
return n;
}
程序運行以后的輸出結(jié)果是
A.7
B.8
C.9
D.10
(35)有以下程序
#include
#define f(x) x*x*x
main( )
{ int a=3,s,t;
s=f(a+1);t=f((a+1));
printf(“%d,%d ’,s,t);
}
程序運行后的輸出結(jié)果是
A.10,64
B.10,10
C.64,10
D.64,64
(36)下面結(jié)構(gòu)體的定義語句中,錯誤的是
A.struct ord {int x;int y;int z;}; struct ord a;
B.struct ord {int x;int y;int z;} struct ord a;
C.struct ord {int x;int y;int z;} a;
D.struct {int x;int y;int z;} a;
(37)設有定義:char *c;,以下選項中能夠使字符型指針c正確指向一個字符串的是
A.char str[ ]=”string”;c=str;
B.scanf(“%s”,C.;
C.c=get);
D.*c=”string”;
(38)有以下程序
#include
#include
struct A
{ int a; char b[10]; double c;};
struct A f(struct A t);
main( )
{ struct A a={1001,”ZhangDa”,1098.0};
a=f(a);jprintf(“%d,%s,%6.1f ”,a.a,a.b,a.C.;
}
struct A f(struct A t)
( t.a=1002;strcpy(t.b,”ChangRong”);t.c=1202.0;return t; )
程序運行后的輸出結(jié)果是
A.1001,ZhangDa,1098.0
B.1001,ZhangDa,1202.0
C.1001,ChangRong,1098.0
D.1001,ChangRong,1202.0
(39)若有以下程序段
int r=8;
printf(“%d ”,r>>1);
輸出結(jié)果是
A.16
B.8
C.4
D.2
(40)下列關于C語言文件的敘述中正確的是
A.文件由一系列數(shù)據(jù)依次排列組成,只能構(gòu)成二進制文件
B.文件由結(jié)構(gòu)序列組成,可以構(gòu)成二進制文件或文本文件
C.文件由數(shù)據(jù)序列組成,可以構(gòu)成二進制文件或文本文件
D.文件由字符序列組成,其類型只能是文本文件
【全國計算機等級考試二級C語言筆試第二套】相關文章:
全國計算機等級考試二級C語言03-29
全國計算機等級考試二級C++筆試真題10-11
全國計算機等級考試二級C語言試題二03-29
3月全國計算機等級考試二級C++筆試真題10-11
計算機等級考試二級C語言真題09-26
2007年3月全國計算機等級考試二級C語言筆試真題參考答案03-28
計算機等級考試二級C++筆試選擇題04-23