2006上半年全國計算機二級C語言筆試真題
一、選擇題((1)一(10)每題2分,(11)一(50)每題1分,共60分)下列各題A)、B)、C)、D)四個選項中,只有一個選項是正確的,請將正確選項涂寫在答題卡相應位置上,答在試卷上不得分。
(1)下列選項中不屬于結構化程序設計方法的是
A.自頂向下
B.逐步求精
C.模塊化
D.可復用
(2)兩個或兩個以上模塊之間關聯的緊密程度稱為
A.耦合度
B.內聚度
C.復雜度
D.數據傳輸特性
(3)下列敘述中正確的是
A.軟件測試應該由程序開發者來完成
B.程序經調試后一般不需要再測試
C.軟件維護只包括對程序代碼的維護
D.以上三種說法都不對
(4)按照“后進先出”原則組織數據的數據結構是
A.隊列
B.棧
C.雙向鏈表
D.二叉樹
(5)下列敘述中正確的是
A.線性鏈表是線性表的鏈式存儲結構
B.棧與隊列是非線性結構
C.雙向鏈表是非線性結構
D.只有根結點的二叉樹是線性結構
(6)對如下二叉樹
ABDECF
進行后序遍歷的結果為
A.ABCDEF
B.DBEAFC
C.ABDECF
D.DEBFCA
(7)在深度為7的滿二叉樹中,葉子結點的個數為
A.32
B.31
C.64
D.63
(8)“商品”與“顧客”兩個實體集之間的聯系一般是
A.一對一
B.一對多
C.多對一
D.多對多
(9)在E-R圖中,用來表示實體的圖形是
A.矩形
B.橢圓形
C.菱形
D.三角形
(10)數據庫DB、數據庫系統DBS、數據庫管理系統DBMS之間的關系是
A.DB包含DBS和DBMS
B.DBMS包含DB和DBS
C.DBS包含DB和DBMS
D.沒有任何關系
(11)以下不合法的用戶標識符是
A.j2_KEY
B.Double
C.4d
D._8_
(12)以下不合法的數值常量是
A.011
B.1e1
C.8.0E0.5
D.0xabcd
(13)以下不合法的字符常量是
A.′\018′
B.′\"′
C.′\\′
D.′\xcc′
(14)表達式3.6-5/2+1.2+5%2的值是
A.4.3
B.4.8
C.3.3
D.3.8
(15)以下能正確定義字符串的語句是
A.char str[]={′\064′};
B.char str="kx43";
C.char str=";
D.char str[]="\0";
(16)以下數組定義中錯誤的是
A.int x[][3]={0};
B.int x[2][3]={{l,2},{3,4},{5,6}};
C.int x[][3]={{l,2,3},{4,5,6}};
D.int x[2][3]={l,2,3,4,5,6};
(17)若要求從鍵盤讀入含有空格字符的字符串,應使用函數
A.getc()
B.gets()
C.getchar()
D.scanf()
(18)以下四個程序中,完全正確的是
A.#include
B.#include
main();main()
{/*programming*/{/*/ programming /*/
printf("programming!\n");} printf("programming!\n");}
C.#include
D. include
main()main()
{/*/*programming*/*/{/*programming*/
printf("programming!\n");} printf("programming!\n");}
(19)若有定義:float x=1.5;int a=1,b=3,c=2;則正確的switch語句是
A.switch(x)
B.switch((int)x);
{case 1.0:printf("*\n"); {case 1:printf("*\n");
case 2.0:printf("**\n");} case 2:printf("**\n");}
C.switch(a+
B.
D.switch(a+
B.
{case 1:printf("*\n");{case 1:printf("*\n");
case 2+1:printf("**\n");}case c:printf("**\n");}
(20)若各選項中所用變量已正確定義,函數fun中通過return語句返回一個函數值,以下選項中錯誤的程序是
A.main()
B.float fun(int a,int
B.{……}
{……x=fun(2,10);……}main()
float fun(int a,int
B.{……} {……x=fun(i,j);……}
C.float fun(int,int);
D.main()
main() {float fun(int i,int j);
{……x=fun(2,10);……} ……x=fun(i,j); ……}
float fun(int a,int
B.{……}float fun(int a,int
B.{……}
(21)在以下給出的表達式中,與while(E)中的(E)不等價的表達式是
A.(!E==0)
B.(E>0‖E<0)
C.(E==0)
D.(E!=0)
(22)要求通過while循環不斷讀入字符,當讀入字母N時結束循環。若變量已正確定義,以下正確的程序段是
A.while((ch=getchar())!=′N′)printf("%c",ch);
B.while(ch=getchar()!=′N′)printf("%c",ch);
C.while(ch=getchar()==′N′)printf("%c",ch);
D.while((ch=getchar())==′N′)printf("%c",ch);
(23)已定義以下函數
int fun(int *p)
{return *p;)
fun函數返回值是
A.不確定的值
B.一個整數
C.形參P中存放的值
D.形參P的地址值
(24)若有說明語句:double *p,a;則能通過scanf語句正確給輸入項讀入數據的程序段是
A.*p=&a; scanf("%1f",p);
B.*p=&a; scanf("%f",p);
C.p=&a; scanf("%1f",*p);
D.p=&a; scanf("%1f",p);
(25)現有以下結構體說明和變量定義,如圖所示,指針p、q、r分別指向一個鏈表中連續的三個結點。
struct node
{char data;
struct node *next; }*p,*q,*r;
現要將q和r所指結點交換前后位置,同時要保持鏈表的連續,以下不能完成此操作的語句是
A.q->next=r->next;p->next=r;r->next=q;
B.p->next=r;q->next=r->next;r->next=q;
C.q->next=r->next;r->next=q;p->next=r;
D.r->next=q;p->next=r;q->next=r->next;
(26)有以下程序段
struct st
{int x;int *y;}*pt;
int a[]={l,2},b[]={3,4};
struct st c[2]={10,a,20,b};
pt=c;
以下選項中表達式的值為11的是
A.*pt->y
B.pt->x
C.++pt->x
D.(pt++)->x
(27)設fp為指向某二進制文件的指針,且已讀到此文件末尾,則函數feof(fp)的返回值為
A.EOF
B.非0值
C.0
D.NULL
(28)設有以下語句
int a=1,b=2,c;
c=a^(b<<2);
執行后,C的值為
A.6
B.7
C.8
D.9
(29)有以下程序
#include
main()
{char c1,c2,c3,c4,c5,c6;
scanf("%c%c%c%c",&c1,&c2,&c3,&c4);
c5=getchar(); c6=getchar();
putchar(c1);putchar(c2);
printf("%c%c\n",c5,c6);
}
程序運行后,若從鍵盤輸入(從第1列開始)
123<回車>
45678<回車>
則輸出結果是
A.1267
B.1256
C.1278
D.1245
(30)有以下程序
main()
{int y=10;
while(y--);printf("y=%d\n",y);
}
程序執行后的輸出結果是
A.y=0
B.y=-1
C.y=1
D.while構成無限循環
(31)有以下程序
main()
{int a=0,b=0,c=0,d=0;
if(a=1) b=1;c=2;
else d=3;
printf("%d,%d,%d,%d\n",a,b,c,
D.;
}
程序輸出
A.0,1,2,0
B.0,0,0,3
C.1,1,2,0
D.編譯有錯
(32)有以下程序
main()
{int i,j,x=0;
for(i=0;i<2;i++)
{x++;
for(j=0;j<=3;j++)
{if(j%2)continue;
x++;
}
x++;
}
printf("x=%d\n",x);
}
程序執行后的輸出結果是
A.x=4
B.x=8
C.x=6
D.x=12
(33)有以下程序
int fun1(double a){return a*=a;}
int fun2(double x,double y)
{double a=0,b=0;
a=fun1(x);b=fun1(y);return(int)(a+
B.;
}
main()
{double w;w=fun2(1.1,2.0);……}
程序執行后變量w中的值是
A.5.21
B.5
C.5.0
D.0.0
(34)有以下程序
main()
{int i,t[][3]={9,8,7,6,5,4,3,2,1};
for(i=0;i<3;i++) printf("%d",t[2-i][i]);
}
程序執行后的輸出結果是
A.7 5 3
B.3 5 7
C.3 6 9
D.7 5 1
(35)有以下程序
fun(char p[][10])
{int n=0,i;
for(i=0;i<7;i++)
if(p[i][0]==′T′)n++;
return n;
}
main()
{char str[][10]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
printf("%d\n",fun(str));
}
程序執行后的輸出結果是
A.1
B.2
C.3
D.0
(36)有以下程序
main()
{int i,s=0,t[]={l,2,3,4,5,6,7,8,9};
for(i=0;i<9;i+=2)s+=*(t+i);
printf("%d\n",s);
}
程序執行后的輸出結果是
A.45
B.20
C.25
D.36
(37)有以下程序
void fun1(char *p)
{char *q;
q=p;
while(*q!=′\0′)
{ (*q)++; q++; )
}
main()
{char a[]={"Program"), *p;
p=&a[3];fun1(p);printf("%s\n",a);
}
程序執行后的輸出結果是
A.Prohsbn
B.Prphsbn
C.Progsbn
D.Program
(38)有以下程序
void swap(char *x,char *y)
{char t;
t=*x; *x=*y; *y=t;
}
main()
{char *s1="abc",*s2="123";
swap(s1,s2);printf("%s,%s\n",s1,s2);
}
程序執行后的輸出結果是
A.123,abc
B.abc,123
C.1bc,a23
D.321,cba
(39)有以下程序
int fun(int n)
{if(n==1)return 1;
else
return(n+fun(n-1));
}
main()
{int x;
scanf("%d",&x); x=fun(x);printf("%d\n",x);
}
執行程序時,給變量X輸入10,程序的輸出結果是
A.55
B.54
C.65
D.45
(40)有以下程序
int fun(int x[],int n)
{static int sum=0,i;
for(i=0;ireturn sum;
}
main()
{int a[]={1,2,3,4,5},b[]={6,7,8,9},s=0;
s=fun(a,5)+fun(b,4);printf("%d\n",s);
}
程序執行后的輸出結果是
A.45
B.50
C.60
D.55
(41)有以下程序
main()
{union
{char ch[2];
int d;
}s;
s.d=0x4321;
printf("%x,%x\n",s.ch[0],s.ch[1]);
}
在16位編譯系統上,程序執行后的輸出結果是
A.21,43
B.43,21
C.43,00
D.21,00
(42)有以下程序
main()
{char *p[]={"3697","2584"};
int i,j;long num=0;
for(i=0;i<2;i++)
{j=0;
while(p[i][j]!=′\0′)
{if((p[i][j]-′0′)%2)num=10*num+p[i][j]-′0′;
j+=2;
}
}
printf("%d\n",num);
}
程序執行后的輸出結果是
A.35
B.37
C.39
D.3975
(43)執行以下程序后,test.txt文件的內容是(若文件能正常打開)
#include
main()
{FILE *fp;
char *s1="Fortran",*s2="Basic";
if((fp=fopen("test.txt","wb”))==NULL)
{printf("Can′t open test.txt file\n");exit(1);}
fwrite(s1,7,1,fp); /*把從地址s1開始的7個字符寫到fp所指文件中*/
fseek(fp,0L,SEEK_SET); /*文件位置指針移到文件開頭*/
fwrite(s2,5,1,fp);
fclose(fp);
}
A.Basican
B.BasicFortran
C.Basic
D.FortranBasic
(44)以下敘述中錯誤的是
A.C語言源程序經編譯后生成后綴為.obj的目標程序
B.C程序經過編譯、連接步驟之后才能形成一個真正可執行的二進制機器指令文件
C.用C語言編寫的程序稱為源程序,它以ASCII代碼形式存放在一個文本文件中
D.C語言中的每條可執行語句和非執行語句最終都將被轉換成二進制的機器指令
(45)以下敘述中錯誤的是
A.算法正確的程序最終一定會結束
B.算法正確的程序可以有零個輸出
C.算法正確的程序可以有零個輸入
D.算法正確的程序對于相同的輸入一定有相同的結果
(46)以下敘述中錯誤的是
A.C程序必須由一個或一個以上的函數組成
B.函數調用可以作為一個獨立的語句存在
C.若函數有返回值,必須通過return語句返回
D.函數形參的值也可以傳回給對應的實參
(47)設有以下定義和語句
char str[20]="Program",*p;
p=str;
則以下敘述中正確的是
A.*p與str[0]的值相等
B.str與p的類型完全相同
C.str數組長度和p所指向的字符串長度相等
D.數組str中存放的內容和指針變量p中存放的內容相同
(48)以下敘述中錯誤的是
A.C程序中的#include和#define行均不是C語句
B.除逗號運算符外,賦值運算符的優先級最低
C.C程序中,j++;是賦值語句
D.C程序中,+、-、*、/、%號是算術運算符,可用于整型和實型數的運算
(49)以下敘述中正確的是
A.預處理命令行必須位于C源程序的起始位置
B.在C語言中,預處理命令行都以"#"開頭
C.每個C程序必須在開頭包含預處理命令行:#include
D.C語言的預處理不能實現宏定義和條件編譯的功能
(50)以下敘述中錯誤的是
A.可以通過typedef增加新的類型
B.可以用typedef將已存在的類型用一個新的名字來代表
C.用typedef定義新的類型名后,原有類型名仍有效
D.用typedef可以為各種類型起別名,但不能為變量起別名
二、填空題(每空2分,共40分)請將每一個空的正確答案寫在答題卡【1】至【20】序號的橫線上,答在試卷上不得分。
(1)對長度為10的線性表進行冒泡排序,最壞情況下需要比較的次數為【1】。
(2)在面向對象方法中,【2】描述的是具有相似屬性與操作的一組對象。
(3)在關系模型中,把數據看成是二維表,每一個二維表稱為一個【3】。
(4)程序測試分為靜態分析和動態測試。其中【4】是指不執行程序,而只是對程序文本進行檢查,通過閱讀和討論,分析和發現程序中的錯誤。
(5)數據獨立性分為邏輯獨立性與物理獨立性。當數據的存儲結構改變時,其邏輯結構可以不變,因此,基于邏輯結構的應用程序不必修改,稱為【5】。
(6)若變量a,b已定義為int類型并賦值21和55,要求用printf函數以a=21,b=55的形式輸出,請寫出完整的的輸出語句【6】。
(7)以下程序用于判斷a、b、c能否構成三角形,若能,輸出YES,否則輸出NO。當給a、b、c輸入三角形三條邊長時,確定a、b、c能構成三角形的條件是需同時滿足三個條件:a+b>c,a+c>b,b+c>a。請填空。
main()
{float a,b,c;
scanf("%f%f%f",&a,&b,&
C.;
if(【7】)printf("YES\n");/*a、b、c能構成三角形*/
else printf("NO\n");/*a、b、c不能構成三角形*/
}
(8)以下程序的輸出結果是【8】 。
main()
{int a[3][3]={{1,2,9},{3,4,8},{5,6,7}},i,s=0;
for(i=0;i<3;i++) s+=a[i][i]+a[i][3-i-1];
printf("%d\n",s);
}
(9)當運行以下程序時,輸入abcd,程序的輸出結果是:【9】。
insert(char str[])
{int i;
i=strlen(str);
while(i>0)
{str[2*i]=str[i];str[2*i-1]=′*′;i--;}
printf("%s\n",str);
}
main()
{char str[40];
scanf("%s",str);insert(str);
}
(10)下面程序的運行結果是:【10】。
fun(int t[],int n)
{int i,m;
if(n==1)return t[0];
else
if(n>=2){m=fun(t,n-1); return m; }
}
main()
{int a[]={11,4,6,3,8,2,3,5,9,2};
printf("%d\n",fun(a,10));
}
(11)現有兩個C程序文件T18.c和myfun.c同在TC系統目錄(文件夾)下,其中T18.c文件如下:
#include
#include "myfun.c"
main()
{fun();printf("\n");}
myfun.c文件如下:
void fun()
{char s[80],c; int n=0;
while((c=getchar())!=′\n′) s[n++]=c;
n--;
while(n>=0) printf("%c",s[n--]);
}
當編譯連接通過后,運行程序T18時,輸入Thank!則輸出結果是:【11】。
(12)以下函數fun的功能是返回str所指字符串中以形參c中字符開頭的后續字符串的首地址,例如:str所指字符串為:Hello!,c中的字符為e,則函數返回字符串:ello!的首地址。若str所指字符串為空串或不包含c中的字符,則函數返回NULL。請填空。
char *fun(char *str,char
C.
{ int n=0; char *p=str;
if(p!=NULL)
while(p[n]!=c&&p[n]!=′\0′)n++;
if(p[n]==′\0′) return NULL;
return(【12】);
}
(13)以下程序的功能是:輸出100以內(不含100)能被3整除且個位數為6的所有整數,請填空。
main()
(int i,j;
for(i=0;【13】;i++)
{j=i*10+6;
if(【14】)continue;
printf("%d",j);
}
}
(14)以下isprime函數的功能是判斷形參a是否為素數,是素數,函數返回1,
否則返回0。請填空
int isprime(int a)
{int i;
for(i=2;i<=a/2;i++)
if(a%i==0)【15】;
【16】;
}
(15)以下程序的功能是輸入任意整數給n后,輸出n行由大寫字母A開始構成的三角形
字符陣列圖形。例如,輸入整數5時(注意:n不得大于10),程序運行結果如下:
A B C D E
F G H I
J K L
M N
O
請填空完成該程序。
main()
{int i,j,n; char ch=′A′;
scanf("%d",&n);
if(n<11)
{for(i=1;i<=n;i++)
{for(j=1; j<=n-i+1;j++)
{printf("%2c",ch);
【17】;
}
【18】;
}
}
else printf("n is too large!\n")
printf("\n");
}
(16)以下程序中函數fun的功能是:構成一個如圖所示的帶頭結點的單向鏈表,在結點的數據域中放入了具有兩個字符的字符串。函數disp的功能是顯示輸出該單鏈表中所有結點中的字符串。請填空完成函數disp。
#include
typedef struct node/*鏈表結點結構*/
{char sub[3];
struct node *next;
}Node;
Node fun(char s) /*建立鏈表*/
{…… }
void disp(Node *h)
{Node *p;
p=h->next;
while(【19】)
{printf("%s\n",P->su
B.; p=【20】; }
}
main()
{Node *hd;
hd=fun();disp(h
D.;printf("\n");
}
2006年4月全國計算機等級考試二級C語言筆試試題答案
【上半年全國計算機二級C語言筆試真題】相關文章:
計算機二級C語言筆試真題10-12
全國計算機等級考試二級C++筆試真題10-11
計算機二級C語言真題09-30
計算機二級C語言真題填空題03-04
3月全國計算機等級考試二級C++筆試真題10-11