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