全國計算機二級考試c語言試題
A. 計算機二級c語言都有哪些題型
全國計算機二級C語言程序設計包括40個單選題(每題一分)和三道操作題(60分)。
單選題中1~10題為二級公共基礎知識,考試內容包括數據結構與演算法、程序設計基礎、軟體工程基礎、資料庫設計基礎四部分。單選題的11~40題是C語言的內容。
操作題包括程序填空(18分)、程序改錯(18分)和編程題(24分)各一題。
程序填空是將一個完整的程序,扣掉兩到三處,讓考生將它填寫完整。由於每位考生具體抽到的題目不同,程序填空有2到3個空要填。程序填空題以實際填寫的內容為評分依據,填寫正確一個空,給一個空的分。如果是2個空,每個空就是9分;如果是3個空每個空是6分。
程序改錯也是一個完整的程序,其中有2~3處錯誤要求考生將他們改正。與程序填空類似,2處錯誤的話,每處9分,3處錯誤的話,每處6分。程序改錯題的題目會提示每一處錯誤所在的行,在那一行的上一行有********found********標識。
編程題是要求考生編寫一個程序,然後運行出題干要求的結果。題目中主函數main()會完整給出,在主函數中將調用fun()函數,fun函數由考生自己編寫。編程題以運行結果給分,所編寫完成後必須運行,否則沒分。因此,大多數情況下,編程題要麼就是得24分滿分,要麼就是0分。
B. 計算機二級c語言考試題目類型
全國計算機二級C語言程序設計包括40個單選題(每題一分)和三道操作題(60分)。
單選題中1~10題為二級公共基礎知識,單選題的11~40題是C語言的內容。
操作題包括程序填空(18分)、程序改錯(18分)和編程題(24分)各一題。
程序填空是將一個完整的程序,扣掉兩到三處,讓考生將它填寫完整。由於每位考生具體抽到的題目不同,程序填空有2到3個空要填。
C語言有基礎知識(C語言概述、常量與變數、數據類型、運算符和表達式),編程三大結構(順序結構、選擇結構、循環結構),數組、函數和指針,其他內容(預處理命令、結構體和共用體、位運算、文件)四大部分內容。重點是第二、三部分。
C. c語言計算機二級考試選擇題如圖
全國計算機二級考試試題題庫(附答案)
下列各題 A) 、B)、C)、D)四個選項中,只有一個選項是正確的,請將正確選項在答題
卡相應位置上塗黑,答在試卷上不得分。
(1) 應用軟體是指
A) 所有能夠使用的軟體 B) 能被各應用單位共同使用的某種軟體
C) 所有微機上都應使用的基本軟體 D) 專門為某一應用目的而編制的軟體
(2) 下列述敘中錯誤的是
A) 計算機要經常使用不要長期閑置不用
B) 為了延長計算機的壽命,應避免頻繁開關計算機
C) 在計算機附近應避免磁場干擾
D) 計算機用幾小時後,應關機一會兒再用
(3) 下列字元中,ASCII碼值最小的是
A) A B) a C) Z D) x
(4) 用晶體管作為電子器件製成的計算機屬於
A) 第一代 B) 第二代 C) 第三代 D) 第四代
(5) 下列各不同進制的四個無符號數中,最小的數是
A) ()2 B) (37)8 C) (75)10 D) (2A)16
(6) 二進制數轉換成十六進制數是
A) B) C) D)
(7) 下列各無符號十進制數中,能用八位二進製表示的是
A) 296 B) 333 C) 256 D) 199
(8) 計算機的軟體系統可分類為
A) 程序與數據 B) 系統軟體與應用軟體
D) 操作系統與語言處理程序 D) 程序、數據與文檔
(9) 486機中的CPU同時能處理的二進制位數為
A) 8 B) 16 C) 32 D) 64
(10) 在使用計算機的過程中,需要重新啟動DOS,則要
A) 按Ctrl+Break鍵 B) 按^C鍵 C) 按Ctrl+Alt+Del鍵 D) 按^H鍵
(11) 現要從軟盤啟動DOS(軟盤中已存有DOS系統),設有如下一些操作:①打開計算機
電源;②將該軟盤插入A驅動器;③關好A驅動器門。則冷啟動的操作順序應為
A) ①→②→③ B) ③→②→① C) ②→①→③ D) ②→③→①
(12) 設當前盤中某一文件路徑為\A\C\B\,當前目錄為\A。下列命令中錯誤的是
A) CD.. B) RD \A\C\B
C) TYPE \A\C\B\ D) TYPE C\B\
(13) 設當前盤中的根目錄下有一子目錄AB,在子目錄AB下有一文件。現要查看文件
的內容,應使用命令
A) TYPE \AB B) TYPE \AB\
C) TYPE \ D) DIR \AB\
(14) 自動批處理文件必須放在
A) C盤根目錄中 B) A盤根目錄中
C) 啟動盤的任一個目錄中 D) 啟動盤的根目錄中
(15) 設當前盤當前目錄為C:\USER\XY\P,且當前盤當前目錄為空,則下列命令中能正
確執行的是
A) RD C:\USER\XY\P B) RD USER\XY\P
C) MD \USER\XY\P\USER D) MD \USER\XY\P\X\Y
(16) 下列DOS命令中,合法的是
A) DISKCOMP B) TYPE >>
C) COMP A: B: D) COMP A: A:
(17) 設當前盤為C盤,所用的所有軟盤已格式化,且容量相同,則下列DOS命令中錯
誤的是
A) DISKCOPY A: A: B) COPY A:*.* C) COPY *.* D) COPY A:*.* C:
(18) 下列DOS命令中錯誤的是
A) TYPE >PRN B) TYPE PRN
C) COPY *.TXT PRN D) COPY CON PRN
(19) 下列四組DOS命令中,互相等價的一組是
A) COPY A:*.* B:與DISKCOPY A: B:
B) COPY +與TYPE >>
C) COPY + 與COPY +
D) TYPE *.FOR>CON與COPY *.FOR CON
(20) 設C盤目錄結構如下:
且C盤根目錄下文件的內容為
CD FORTRAN
CD \TC
如果在A驅動器中插入一張根目錄中只有擴展名為.C的若干文件(即A盤中無DOS系統
文件)的軟碟片,則由C盤啟動DOS系統後,第一次鍵入下列命令中,正確的是
A) COPY A:\*.C B) COPY A:\*.C TC
C) COPY A:\*.C FORTRAN D) CD USER
(21) C語言提供的合法的數據類型關鍵字是
A) Double B) short C) integer D) Char
(22) 在C語言中,合法的長整型常數是
A) 0L B) 4962710 C) D)
(23) 表達式:10!=9的值是
A) true B) 非零值 C) 0 D) 1
(24) 合法的C語言中,合法的長整型常數是
A) '\t' B) "A" C) 65 D) A
(25) 若有說明和語句:
int a=5;
a++;
此處表達式a++的值是
A) 7 B) 6 C) 5 D) 4
(26) 在下列選項中,不正確的賦值語句是
A) ++t; B) n1=(n2=(n3=0)); C) k=i==j; D) a=b+c=1;
(27) 若有說明:int i,j=7, *p=&i;,則與i=j;等價的語句是
A) I= *P; B) *P=*&J; C) i=&j; D) i=* *p;
(28) 不能把字元串:Hello!賦給數組b的語句是
A) char b[10]={'H','e','l','l','o','!'};
B) char b[10];b="Hello!";
C) char b[10];strcpy(b,"Hello!");
D) char b[10]="Hello!";
(29) 若有以下說明:
int a[12]={1,2,3,4,5,6,7,8,9,10,11,12};
char c='a',d,g;
則數值為4的表達式是
A)a[g-c] B)a[4] C)a['d'-'c'] D)a['d'-c]
(30) 若有以下說明:
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
則數值為6的表達式是
A) *p+6 B) *(p+6) C) *p+=5 D) p+5
(31) 若有以下說明:
int w[3][4]o={{0,1},{2,4},{5,8}};
int(*p)[4]=w;
則數值為4的表達式是
A) *w[1]+1 B) p++,*(p+1) C) w[2][2] D) p[1][1]
(32) 若程序中有下面的說明和定義
struct abc
{int x;char y;}
struct abc s1,s2;
則會發生的情況是
A) 編譯進錯 B) 程序將順利編譯`連接`執行
C) 能順利通過編譯`連接`但不能執行 D) 能順利通過編譯`但連接出錯
(33) 能正確表示a≥10或a≤0的關系表達式是
A)a>=10 or a<=0 B)a>=10│a<=0
C)a>=10││a<=0 D)a>=10 ││a<=0
(34) 下面程序的輸出是
main()
{ int x=3,y=6,a=0;
while(x++!=(y+=o1))
{ a+o=1;
if(y
#include
main()
{ char ss[10]="12345";
strcat(ss,"6789");
gets(ss);printf("%s\n",ss);
}
A) ABC B) ABC9 C) 123456ABC D) ABC456789
(35) 下面程序的輸出是
main()
{ char *a="";
int v1=0,v2=0,v3=0,v4=0,k;
for(k=0;s[k];k++)
switch(s[k])
{ default:v4++;
case '1': v1++;
case '3': v3++;
case '2': v2++; }
printf("v1=%d,v2=%d,v3=%d,v4=%d\n",v1,v2,v3,v4); }
A) v1=4,v2=2,v3=1,v4=1 B) v1=4,v2=9,v3=3,v4=1
C) v1=5,v2=8,v3=6,v4=1 D) v1=8,v2=8,v3=8,v4=8
(36) 下面程序的輸出是
main()
{int k=11;printf("k=%d,k=%o,k=%x\n",k,k,k);}
A)k=11,k=12,k=11 B)k=11,k=13,k=13 C)k=11,k=013,k=0xb D)k=11,k=13,k=b
(37) 若有以下程序段,w和k都是整型變數:
┆
w=k;
LB: if(w==0) go to LE;
w--;
printf("*");
goto LB;
LE: ┆
則不能與上面程序段等價的循環語句是
A)for(w=k;w!=0;w--) printf("*"); B)for(w=k;w;--w)printf("*");
C)w=k; D)w=k;
while(w--!=0)printf("*");w++; do{ w--;printf("*");}while(w!=0);
(38) 若有說明,double *p,a;則能通過scanf語句正確給輸入項讀入數據的程序段是
A)*p=&a; scanf("%lf",p); B)p=(double *)malloc(8);scanf("%f",p);
C) p=&a;scanf("%lf",a); D)p=&a; scanf("%le",p);
(39) 當執行下面程序且輸入:ABC時,輸出的結果是
#include
#include
main()
{ char ss[10]="12345";
gets(ss);printf("%s\n",ss); }
A) ABC B) ABC9 C) 123456ABC D) ABC456789
(40) 若有以下的說明和語句:
main()
{int t[3][2], *pt[3],k;
fpr(k=o; k<3;k++)pt[k]=t[k];
}
則以一選項中能正確表示t數組元素地址的表達式是
A) &t[3][2] B) *pt[0] C) *(pt+1) D) &pt[2]
(41) 下面程序輸出數組中的最大值,由s指針指向該元素.
main()
{ int a[10]={6,7,2,9,1,10,5,8,4,3,},*p,*s;
flr(p=a, s=a; p-a<10; p++)
if(---?---)s=p;
printf("The max:%d",*s):
}
則在if語句中的判斷表達式應該是
A) p>s B) *p>*s C) a[p]>a[s] D) p-a>p-s
(42) 下面程序的輸出是
#include
main()
{ char*a="abcdefgh";
fun(a);puts(a); }
fun (char * s)
{ int x=0,y;char c;
for(y=strlen(s)-1;x
A)abcdefgh B)hgfdecba C)dcbahgfe D)hgfedcba
(43) 若有以下函數調用語句: fun(a+b,(x,y),fun(n+k,d,(a,b)));在此函數調用語句
中實參的個數是
A)3 B)4 C)5 D)6
(44) 下面程序的輸出是
main()
{ int t=1; fun(fun(t));}
fun(int h)
{ static int a[3]={1,2,3};
int k;
for(k=0;k<3;k++) a[k]+=a[k]-h;
for(k=1;k<3;k++) printf("%d",a[k]);
printf("\n"); return(a[h]);}
A)1,2,3, B)1,3,5, C) 1,3,5, D) 1,3,5,
1,5,9, 1,3,5, 0,4,8, -1,3,7,
(45) C語言中,函數的隱含存儲類別是
A)auto B)static C)extern D)無存儲類別
(46) 下面程序的輸出是
int w=3;
main()
{ int w=10; printf("%d\n",fun(5)*w); }
D. 急求計算機二級考試的試題(C語言)
05年4月全國計算機二級C語言考試試題及答案
(1)數據的存儲結構是指 D
(A)存儲在外存中的數據 (B)數據所佔的存儲空間量
(C)數據在計算機中的順序存儲方式 (D)數據的邏輯結構在計算機中的表示
(2)下列關於棧的描述中錯誤的是 B
(A)棧是先進後出的先性表
(B)棧只能順序存儲
(C)棧具有記憶作用
(D)對棧的插入和刪除操作中,不需要改變棧底指針
(3)對於長度為N的線性表,在最壞的情況下,下列各排序法所對應的比較次數中正確的是D
(A)冒泡排序為N/2 (B)冒泡排序為N
(C)快速排序為N (D)快速排序為N(N-1)/2
(4)對長度為N的線性表進行順序查找,在最壞的情況下所需要的比較次數為 C
(A)log2n (B)n/2 (C)n (D)n+1
(5)下列對於線性表的描述中正確的是 A
A)存儲空間不一定是連續,且各元素的存儲順序是任意的
B)存儲空間不一定是連續,且前件元素一定存儲在後件元素的前面
C)存儲空間必須連續,且各前件元素一定存儲在後件元素的前面
D)存儲空間必須連續,且各元素的存儲順序是任意的
(6)下列對於軟體測試的描述中正確的是 C
A)軟體測試的目的是證明程序是否正確
B)軟體測試的目的是使程序運行結果正確
C)軟體測試的目的是盡可能地多發現程序中的錯誤
D)軟體測試的目的是使程序符合結構化原則
(7)為了使模塊盡可能獨立,要求 B
(A)模塊的內聚程度要盡量高,且各模塊間的耦合程度要盡量強
(B)模塊的內聚程度要盡量高,且各模塊間的耦合程度要盡量弱
(C)模塊的內聚程度要盡量低,且各模塊間的耦合程度要盡量弱
(D)模塊的內聚程度要盡量低,且各模塊間的耦合程度要盡量強
(8)下列描述中正確的是 D
(A)程序就是軟體 (B)軟體開發不受計算機系統的限制
(C)軟體既是邏輯實體,又是物理實體 (D)軟體是程序、數據與相關文檔的集合
(9)數據獨立性是資料庫技術的重要特點之一.所謂數據獨立性是指 D
(A)數據與程序獨立存放
(B)不同的數據被存放在不同的文件中
(C)不同的數據只能被對應的應用程序所使用
(D)以上三種說法都不對
(10)用樹形結構表示實體之間聯系的模型是 C
(A)關系模型 (B)網狀模型 (C)層次模型 (D)以上三個都是
(11)演算法具有五個特性,以下選項中不屬於演算法特性的是 B
(A)有窮性 (B)簡潔性 (C)可行性 (D)確定性
(12)以下選項中可作為C語言合法常量的是 A
(A)-80. (B)-080 (C)-8e1.0 (D)-80.0e
(13)以下敘述中正確的是 C
(A)用C語言實現的演算法必須要有輸入和輸出操作
(B)用C語言實現的演算法可以沒有輸出但必須要有輸入
(C)用C程序實現的演算法可以沒有輸入但必須要有輸出
(D)用C程序實現的演算法可以既沒有輸入也沒有輸出
(14)以下不能定義為用戶標識符是 D
(A)Main (B)_0 (C)_int (D)sizeof
(15)以下選項中,不能作為合法常量的是 B
(A)1.234e04 (B)1.234e0.4 (C)1.234e+4 (D)1.234e0
(16)數字字元0的ASCII值為48,若有以下程序 C
main()
{
char a=』1』,b=』2』;
printf("%c,",b++);
printf("%d\n",b-a);
}
程序運行後的輸出結果是
(A)3,2 (B)50,2 (C)2,2 (D)2,50
(17)有以下程序 A
main()
{
int m=12,n=34;
printf("%d%d",m++,++n); printf("%d%d\n",n++,++m);
}
程序運行後的輸出結果是
(A)12353514 (B)12353513 (C)12343514 (D)12343513
(18)有以下語句:int b;char c[10];,則正確的輸入語句是 B
A)scanf("%d%s",&b,&c); B) scanf("%d%s",&b,c);
c)scanf("%d%s",b,c); D)scanf("%d%s",b,&c);
(19)有以下程序 A
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
(20)有以下程序 B
main()
{
int a,b,d=25;
a=d/10%9;b=a&&(-1);
printf("%d,%d\n",a,b);
}
程序運行後的輸出結果是
A)6,1 B)2,1 C)6,0 D)2,0
(21)有以下程序 D
main()
{
int i=1,j=2,k=3;
if(i++==1&&(++j==3||k++==3))
printf("%d %d %d\n",i,j,k);
}
程序運行後的輸出結果是
(A)1 2 3 (B)2 3 4 (C)2 2 3 (D)2 3 3
(22)若整型變數a、b、c、d中的值依次為:1、4、3、2。
則條件表達式aA) 1 B)2 C)3 D)
(23)有以下程序 B
main()
{
int p[8]={11,12,13,14,15,16,17,18},i=0,j=0;
while(i++<7) if(p[i]%2) j+=p[i];
printf("%d\n",j);
}
程序運行後的輸出結果是
A)42 B)45 C)56 D)60
(24)有以下程序 C
main()
{
char a[7]="a0\0a0\0"; int i,j;
i=sizeof(a); j=strlen(a);
printf("%d %d\n",i,j);
}
程序運行後的輸出結果是
A)2 2 B)7 6 C)7 2 D)6 2
(25)以下能正確定義一維數組的選項是 B
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";
(26)有以下程序 A
int f1(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=f1(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
27)已有定義:char a[]="xyz",b[]={』x』,』y』,』z』};,以下敘述中正確的是 C
A)數組a和b的長度相同 B)a數組長度小於b數組長度
C)a數組長度大於b數組長度 D)上述說法都不對
28)有以下程序 D
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{f(p,q);p++;q--;}
for(i=0;i<8;i++)printf("%d,",a[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,1,
29)有以下程序 D
main()
{
int a[3][3],*p,i;
p=&a[0][0];
for(i=0;i<9;i++)p[i]=i;
for(i=0;i<3;i++)printf("%d",a[1][i]);
}
程序運行後的輸出結果是
A)0 1 2 B)1 2 3 C)2 3 4 D)3 4 5
(30)以下敘述中錯誤的是 A
A)對於double類型數組,不可以直接用數組名對數組進行整體輸入或輸出
B)數組名代表的是數組所佔存儲區的首地址,其值不可改變
C)當程序執行中,數組元素的下標超出所定義的下標范圍時,系統將給出"下標越界"的出錯信息
D)可以通過賦初值的方式確定數組元素的個數
(31)有以下程序 C
#define N 20
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=0;i<5;i++)printf("%d",a[i]);
}
程序運行後的輸出結果是
A)10234 B)12344 C)12334 D)12234
32)有以下程序 B
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(j=0;j<2;j++)printf("-",a[i][j]);
printf("\n");
}
}
若運行時輸入:1 2 3<回車>,則輸出結果是
A)產生錯誤信息 B)1 0 C)1 2 D)1 0
2 0 3 0 2 0
0 0 0 0 3 0
33)有以下程序 B
prt(int *m,int n)
{int i;
for(i=0;i)
main()
{
int a[]={1,2,3,4,5},i;
prt(a,5);
for(i=0;i<5;i++)
printf("%d,",a[i]);
}
程序運行後的輸出結果是
A}1,2,3,4,5, B}2,3,4,5,6, C}3,4,5,6,7, D}2,3,4,5,1,
34)有以下程序 A
main()
{int a[]={1,2,3,4,5,6,7,8,9,0},*p;
for(p=a;p}
程序運行後的輸出結果是
A)1,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)1,1,1,1,1,1,1,1,1,1,
35)有以下程序 D
#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)編譯出錯
36)有以下程序 C
main()
{int c=35;printf("%d\n",c&c);}
程序運行後的輸出結果是
A)0 B)70 C)35 D)1
37)以下敘述中正確的是 D
A)預處理命令行必須位於源文件的開頭
B)在源文件的一行上可以有多條預處理命令
C)宏名必須用大寫字母表示
D)宏替換不佔用程序的運行時間
38)若有以下說明和定義 C
union dt
{int a;char b;double c;}data;
以下敘述中錯誤的是
A)data的每個成員起始地址都相同
B)變數data所佔的內存位元組數與成員c所佔位元組數相等
C)程序段:data.a=5;printf("%f\n",data.c);輸出結果為5.000000
D)data可以作為函數的實參
39)以下語句或語句組中,能正確進行字元串賦值的是 C
A)char *sp;*sp="right!"; B)char s[10];s="right!";
C)char s[10];*s="right!"; D)char *sp="right!";
40)設有如下說明 C
typedef struct ST
{long a;int b;char c[2];}NEW;
則下面敘述中正確的是
A)以上的說明形式非法 B)ST是一個結構體類型
C)NEW是一個結構體類型 D)NEW是一個結構體變數
41)有以下程序 B
main()
{int a=1,b;
for(b=1;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
42)有以下程序 A
main()
{char s[]="159",*p;
p=s;
printf("%c",*p++);printf("%c",*p++);
}
程序運行後的輸出結果是
A)15 B)16 C)12 D)59
43)有以下函數 D
fun(char *a,char *b)
{while((*a!=』\0』)&&(*b!=』\0』)&&(*a==*b))
{a++;b++;}
return(*a-*b);
}
該函數的功能是
A)計算a和b所指字元串的長度之差
B)將b所指字元串連接到a所指字元串中
C)將b所指字元串連接到a所指字元串後面
D)比較a和b所指字元串的大小
44)有以下程序 B
main()
{int num[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},i,j;
for(i=0;i<4;i++)
{for(j=0;j<=i;j++)printf("L",』 』);
for(j=_____;j<4;j++)printf("M",num[i][j]);
printf("\n");
}
}
若要按以下形式輸出數組右上半三角
1 2 3 4
6 7 8
11 12
16
則在程序下劃線處應填入的是
A)i-1 B)i C)i+1 D)4-i
45)有以下程序 D
point(char *p){p+=3;}
main()
{char b[4]={』a』,』b』,』c』,』d』},*p=b;
point(p);printf("%c\n",*p);
}
程序運行後的輸出結果是
A)a B)b C)c D)d
46)程序中若有如下說明和定義語句 A
char fun(char *);
main()
{
char *s="one",a[5]={0},(*f1)()=fun,ch;
......
}
以下選項中對函數fun的正確調用語句是
A)(*f1)(a); B)*f1(*s); C)fun(&a); D)ch=*f1(s);
47)有以下結構體說明和變數定義,如圖所示,
指針p、q、r分別指向此鏈表中的三個連續結點。
struct node
{int data;struct node *next;}*p,*q,*r;
現要將Q所指結點從鏈表中刪除,同時要保持鏈表的連續,
以下不能完成指定操作的語句是 D
A)P->next=q->next; B)p->next=p->next->next;
c)p->next=r; D)p=q->next;
48)以下對結構體類型變數td的定義中,錯誤的是 C
A)typedef struct aa B)struct aa C)struct D)struct
{int n; {int n; {int n; {int n;
float m; float m; float m; float m;
}AA; }td; }aa; }td;
AA td; struct aa td; struct aa td;
49)以下與函數fseek(fp,0L,SEEK_SET)有相同作用的是 D
A)feof(fp) B)ftell(fp) C)fgetc(fp) D)rewind(fp)
50)有以下程序 B
#include
void WriteStr(char *fn,char *str)
{FILE *fp;
fp=fopen(fn,"w");fputs(str,fp);fclose(fp);
}
main()
{
WriteStr("t1.dat","start");
WriteStr("t1.dat","end");
}
程序運行後,文件t1.dat中的內容是
A)start B)end C)startend D)endrt
1.某二叉樹中度為2的結點有18個,則該二叉樹中有______個葉子結點。
答案:19
2.在面向對象方法中,類的實例稱為____.
答案:對象
3.診斷和改正程序中錯誤的工作通常稱為______.
答案:調試
4.在關系資料庫中,把數據表示成二維表,每一個二維表稱為_____
答案:關系
5.問題處理方案的正確而完整的描述稱為___
答案:演算法
6.以下程序運行時若從鍵盤輸入:10 20 30<回車>.輸出結果是______
#include
main()
{
int i=0,j=0,k=0;
scanf("%d%*d%d",&i,&j,&k);printf("%d%d%d\n",i,j,k);
}
答案:10 30 0
7.以下程序運行後的輸出結果是____
#define S(x) 4*x*x+1
main()
{
int i=6,j=8;
printf("%d\n",S(i+j));
}
答案:81
*8.以下程序運行後的輸出結果是_____
main()
{int a=3,b=4,c=5,t=99;
if(b if(a printf("%d%d%d\n",a,b,c);
}
答案:4399
9.以下程序運行後的輸出結果是____
main()
{
int a,b,c;
a=10;b=20;c=(a%b<1)||(a/b>1);
printf("%d %d %d\n",a,b,c);
}
答案:10 20 0
10.以下程序運行後的輸出結果是___
main()
{char c1,c2;
for(c1=』0』,c2=』9』;c1printf("\n");
)
答案:0918273645
11.已知字元A的ASCII代碼值為65,以下程序運行時若從鍵盤輸入:B33<回車>.則
輸出結果是_____
#include
main()
{char a,b;
a=getchar();scanf("%d",&b);
a=a-』A』+』0』;b=b*2;
printf("%c %c\n",a,b);
}
答案:1 B
12.以下程序中,fun函數的功能是求3行4列二維數組每行元素中的最大值.請填空
void fun(int,int,int(*)[4],int *);
main()
{int a[3][4]={{12,41,36,28},{19,33,15,27},{3,27,19,1}},b[3],i;
fun(3,4,a,b);
for(i=0;i<3;i++)printf("M",b[i]);
printf("\n");
}
void fun(int m,int n,int ar[][4],int *bar)
{
int i,j,x;
for(i=0;i {x=ar[i][0];
for(j=0;j ________=x;
)
}
)
答案:bar[i]
13.以下程序運行後的輸出結果是______
void swap(int x,int y)
{ int t;
t=x;x=y;y=t;printf("%d %d ",x,y);
}
main()
{ int a=3,b=4;
swap(a,b);printf("%d %d\n",a,b);
}
答案:4 3 3 4
14.以下程序運行後的輸出結果是____
#include
void fun(char *s,int p,int k)
{int i;
for(i=p;i)
main()
{char s[]="abcdefg";
fun(s,3,strlen(s));puts(s);
}
答案:abcfg
17.以下程序運行後的輸出結果是______
struct NODE
{int k;
struct NODE *link;
};
main()
{ struct NODE m[5],*p=m,*q=m+4;
int i=0;
while(p!=q)
{p->k=++i;p++;
q->k=i++;q--;
}
q->k=i;
for(i=0;i<5;i++)printf("%d",m[i].k);
printf("\n");
}
答案:13431
18.以下程序中函數huiwen的功能是檢查一個字元串是否是迴文,當字元串是迴文時,
函數返回字元串:yes!,否則函數返回字元串:no!,並在主函數中輸出.所謂迴文即
正向與反向的拼寫都一樣,例如:adgda.請填空.
#include
char *huiwen(char *str)
{char *p1,*p2;int i,t=0;
p1=str;p2=______;
for(i=0;i<=strlen(str)/2;i++)
if(*p1++!=*p2--){t=1;break;}
if(____)return("yes!");
else return("no!");
}
main()
{char str[50];
printf("Input:");scanf("%s",str);
printf("%s\n",______);
}
答案:18) str+(strlen(str)-1)
19) !t
20) huiwen(str)
E. 全國計算機等級考試二級C語言歷年試題及答案
這里有一份最全的考研歷年真題資料分享給你
鏈接:
通過不斷研究和學習歷年真題,為考生沖刺階段復習提分指點迷津,做真題,做歷年真題集,對照考綱查缺補漏,提高實戰素養,制定做題策略,規劃方向;
若資源有問題歡迎追問!
F. 計算機二級C語言測試題及答案解析
2017年計算機二級C語言測試題及答案解析
全國計算機等級考試(National Computer Rank Examination,以下簡稱 NCRE),是經原國家教育委員會(現教育部)批准,由教育部考試中心主辦,面向社會,用於考查非計算機專業應試人員計算機應用知識與技能的全國性計算機水平考試體系。下面是2017年計算機二級C語言測試題及答案解析。歡迎閱讀。
2017年計算機二級C語言測試題及答案解析
1.(A )是構成C語言程序的基本單位。
A、函數
B、過程
C、子程序
D、子常式
2.C語言程序從 C 開始執行。
A、 程序中第一條可執行語句
B、 程序中第一個函數
C、 程序中的main函數
D、包含文件中的第一個函數
3、以下說法中正確的是( C )。
A、C語言程序總是從第一個定義的函數開始執行
B、在C語言程序中,要調用的函數必須在main( )函數中定義
C、C語言程序總是從main( )函數開始執行
D、C語言程序中的main( )函數必須放在程序的開始部分
4.下列關於C語言的說法錯誤的是( B ) 。
A、 C程序的工作過程是編輯、編譯、連接、運行
B、 C語言不區分大小寫。
C、 C程序的三種基本結構是順序、選擇、循環
D、C程序從main函數開始執行
5.下列正確的標識符是(C)。
A、-a1
B、a[i]
C、a2_i
D、int t
5~8題為相同類型題
考點:標識符的命名規則
只能由字母、數字、下劃線構成
數字不能作為標識符的開頭
關鍵字不能作為標識符
選項A中的“-” ,選項B中“[”與“]”不滿足(1);選項D中的int為關鍵字,不滿足(3)
6.下列C語言用戶標識符中合法的是(B )。
A、3ax
B、x
C、case
D、-e2 E)union
選項A中的標識符以數字開頭不滿足(2);選項C,E均為為關鍵字,不滿足(3);選項D中的“-”不滿足(1);
7.下列四組選項中,正確的C語言標識符是( C )。
A、 %x
B、a+b
C、a123
D、123
選項A中的“%” ,選項B中“+”不滿足(1);選項D中的標識符以數字開頭不滿足(2)
8、下列四組字元串中都可以用作C語言程序中的標識符的是( A)。
A、print _3d db8 aBc
B、Iam one_half start$it 3pai
C、str_1 Cpp pow while
D、Pxq My->book line# His.age
選項B中的“”,”$” ,選項D中“>”,”#”,”.”,”-”不滿足(1);選項C中的while為關鍵字,不滿足(3)
9.C語言中的簡單數據類型包括(D )。
A、整型、實型、邏輯型
B、整型、實型、邏輯型、字元型
C、整型、字元型、邏輯型
D、整型、實型、字元型
10.在C語言程序中,表達式5%2的結果是 C 。
A、2.5
B、2
C、1
D、3
%為求余運算符,該運算符只能對整型數據進行運算。且符號與被模數相同。5%2=1; 5%(-2)=1;(-5)%2=-1;(-5)%(-2)=-1;
/為求商運算符,該運算符能夠對整型、字元、浮點等類型的數據進行運算,5/2=2
11.如果int a=3,b=4;則條件表達式"aA、 3
B、 4
C、 0
D、1
詳見教材P97.
表達式1?表達式2:表達式3
先計算表達式1,
若表達式1成立, 則選擇計算表達式2,並表達式2的值作為整個大表達式的值;
若表達式1不成立,則選擇計算表達式3,並將表達式3的值作為整個大表達式的值
此題中的aa為3,b為4。a12.若int x=2,y=3,z=4 則表達式x
A、4
B、3
C、2
D、0
E)1
13.C語言中,關系表達式和邏輯表達式的值是( B ) 。
A、0
B、 0或1
C、 1
D、‘T’或’F’
14. 下面( D )表達式的值為4.
A、 11/3
B、 11.0/3
C、 (float)11/3
D、 (int)(11.0/3+0.5)
14~16題為同一類型
詳見教材P54~56.
(1)相同數據類型的元素進行數學運算(+、-、*、/)得到結果還保持原數據類型。
(2)不同數據類型的元素進行數學運算,先要統一數據類型,統一的標準是低精度類型轉換為高精度的數據類型。
選項A,11與3為兩個整數,11/3結果的數據類型也應為整數,因此將3.666666的小數部分全部舍掉,僅保留整數,因此11/3=3.
選項B,11.0為實數,3為整數,因此首先要統一數據類型,將整型數據3轉換為3.0,轉換後數據類型統一為實型數據,選項B變為11.0/3.0,結果的數據類型也應為實型數據,因此選項B 11.0/3=3.666666
選項C,先將整數11強制類型轉換,轉換為實型11.0,因此選項C變為11.0/3,其後計算過程、結果與選項B同
選項D,首先計算11.0/3,其計算過程、結果與選項B同,得到3.666666;再計算3.666666+0.5=4.166666,最後將4.166666強制類型轉換為整型,即將其小數部分全部舍掉,結果為4
15.設整型變數 a=2,則執行下列語句後,浮點型變數b的值不為0.5的是( B)
A、b=1.0/a
B、b=(float)(1/A、
C、b=1/(float)a
D、b=1/(a*1.0)
16. 若“int n; float f=13.8;”,則執行“n=(int)f%3”後,n的值是(A)
A、1
B、4
C、4.333333
D、4.6
“(int)f“表示將f中的值強制類型轉換為整型,即將13.8的小數部分舍掉,轉換為13;然後計算13%3,結果為1,再將結果賦給變數n,因此n的值為1
17. 以下對一維數組a的正確說明是: D
A、char a(10);
B、 int a[];
C、int k=5,a[k];
D、char a[3]={‘a’,’b’,’c’};
詳見教材P143~144,一維數組的定義、初始化
類型符 數組名 [常量表達式]
類型符是指數組中數組元素的類型;數組名要符合標識符命名規則;常量表達式是指數組的長度(數組中包含元素的個數),其值只能是整數,不可以是變數,而且從1開始計數。
選項A,常量表達式只能放在中括弧 [ ]中
選項B,只有在對數組初始化(即賦值)的時候才可以省略數組的長度,B中並未對a進行初始化。
選項C,常量表達式不能為變數。
18.以下能對一維數組a進行初始化的.語句是:( C )
A、int a[5]=(0,1,2,3,4,)
B、 inta(5)={}
C、 int a[3]={0,1,2}
D、 int a{5}={10*1}
詳見教材P145,一維數組的定義、初始化
選項B,D,常量表達式只能放在中括弧 [ ]中
選項A,數組可以看做是若干個相同數據類型元素的有序集合,因此以集合的形式對其初始化,使用{ }對其初始化,選項A用了().
19.在C語言中對一維整型數組的正確定義為 D 。
A、int a(10);
B、int n=10,a[n];
C、int n;a[n];
D、#define N 10
int a[N];
20、已知:int a[10]; 則對a數組元素的正確引用是( D )。
A、a[10]
B、a[3.5]
C、a(5)
D、a[0]
詳見教材P144,數組元素的引用
數組名[下標]
引用數組元素時,[ ]中的下標為邏輯地址下標,只能為整數,可以為變數,且從0開始計數
int a[10]表示定義了一個包含10個整型數據的數組a,數組元素的邏輯地址下標范圍為0~9,即a[0] 表示組中第1個元素; a[1] 表示組中第2個元素; a[2] 表示組中第3個元素; ......;a[9] 表示組中第10個元素.
選項A,超過了數組a的邏輯地址下標范圍;
選項B,邏輯地址下標只能為整數
選項C,邏輯地址下標只能放在[ ]中
21.若有以下數組說明,則i=10;a[a[i]]元素數值是(C)。
int a[12]={1,4,7,10,2,5,8,11,3,6,9,12};
A、10
B、9
C、6
D、5
先算a[a[i]]內層的a[i],由於i=10,因此a[i]即a[10].
a[10]對應下面數組中的元素為9. 因此a[a[i]]即為a[9]
a[9]對應下面數組中的元素為6. 因此a[9]即為6
22.若有說明:int a[][3]={{1,2,3},{4,5},{6,7}}; 則數組a的第一維的大小為: ( B )
A、2
B、3
C、4
D、無確定值
5 7
D、3 6 9
二維數組的一維大小,即指二維數組的行數,在本題中,按行對二維數組賦值,因此內層有幾個大括弧,數組就有幾行
23.對二維數組的正確定義是(C)
詳見教材P149~152,二維數組的定義、初始化
類型符 數組名 [常量表達式][常量表達式]
二維數組可以看做是矩陣
類型符是指數組中數組元素的類型;數組名要符合標識符命名規則;第一個常量表達式是指數組的行數;第二個常量表達式是指數組的列數;常量表達式的值只能是整數,不可以是變數,而且從1開始計數。
一維數組初始化時可以省略數組長度
二維數組初始化時可以省略行數,但不能省略列數
選項A,B,都省略了列數
選項D,不符合二維數組定義的一般形式,行、列常量表達式應該放在不同的[]中
A、int a[ ][ ]={1,2,3,4,5,6};
B、int a[2] []={1,2,3,4,5,6};
C、int a[ ] [3]={1,2,3,4,5,6};
D、int a[2,3]={1,2,3,4,5,6};
24.已知int a[3][4];則對數組元素引用正確的是__C___
A、a[2][4]
B、a[1,3]
C、a[2][0]
D、a(2)(1)
詳見教材P150,數組元素的引用
數組名[下標] [下標]
引用數組元素時,[ ]中的下標為邏輯地址下標,只能為整數,可以為變數,且從0開始計數
第一個[下標]表示行邏輯地址下標,第二個[下標]表示列邏輯地址下標。
本題圖示詳見P149圖6.7
因此a的行邏輯地址范圍0~2;a的列邏輯地址范圍0~3;
選項A,列邏輯地址下標超過范圍
選項B,D,的引用形式不正確。
25.C語言中函數返回值的類型是由 A 決定的.
A、函數定義時指定的類型
B、 return語句中的表達式類型
C、 調用該函數時的實參的數據類型
D、形參的數據類型
26. 在C語言中,函數的數據類型是指(A )
A、 函數返回值的數據類型
B、 函數形參的數據類型
C、 調用該函數時的實參的數據類型
D、任意指定的數據類型
27.在函數調用時,以下說法正確的是( B)
A、函數調用後必須帶回返回值
B、實際參數和形式參數可以同名
C、函數間的數據傳遞不可以使用全局變數
D、主調函數和被調函數總是在同一個文件里
28. 在C語言中,表示靜態存儲類別的關鍵字是: ( C )
A、 auto
B、 register
C、static
D、extern
29.未指定存儲類別的變數,其隱含的存儲類別為(A )。
A、auto
B、static
C、extern
D、register
30. 若有以下說明語句:
struct student
{ int num;
char name[ ];
float score;
}stu;
則下面的敘述不正確的是: (D )
A、 struct是結構體類型的關鍵字
B、 struct student 是用戶定義的結構體類型
C、 num, score都是結構體成員名
D、 stu是用戶定義的結構體類型名
31.若有以下說明語句:
struct date
{ int year;
int month;
int day;
}brithday;
則下面的敘述不正確的是__C___.
A、 struct是聲明結構體類型時用的關鍵字
B、 struct date 是用戶定義的結構體類型名
C、 brithday是用戶定義的結構體類型名
D、year,day 都是結構體成員名
32. 以下對結構變數stul中成員age的非法引用是 B
struct student
{ int age;
int num;
}stu1,*p;
p=&stu1;
A、 stu1.age
B、 student.age
C、 p->age
D、(*p).age
33.設有如下定義:
struck sk
{ int a;
float b;
}data;
int *p;
若要使P指向data中的a域,正確的賦值語句是 C
A、 p=&a;
B、 p=datA、a;
C、p=&datA、a;
D、*p=datA、a;
34.設有以下說明語句:
typedef struct stu
{ int a;
float b;
} stutype;
則下面敘述中錯誤的是( D )。
A、struct是結構類型的關鍵字
B、struct stu是用戶定義的結構類型
C、a和b都是結構成員名
D、stutype是用戶定義的結構體變數名
35.語句int *p;說明了 C 。
A、p是指向一維數組的指針
B、p是指向函數的指針,該函數返回一int型數據
C、p是指向int型數據的指針 // 指針的定義教材P223
D、p是函數名,該函數返回一指向int型數據的指針
36.下列不正確的定義是(A )。
A、int *p=&i,i;
B、int *p,i;
C.int i,*p=&i;
D、int i,*p;
選項A先定義一個整型指針變數p,然後將變數i的地址賦給p。然而此時還未定義變數i因此編譯器無法獲得變數i的地址。(A與C對比,選項C先定義變數i,則在內存中為i分配空間,因此i在內存空間的地址就可以確定了;然後再定義p,此時可以為p賦i的地址,C正確)
37. 若有說明:int n=2,*p=&n,*q=p,則以下非法的賦值語句是: (D )
A、p=q
B、*p=*q
C、n=*q
D、p=n
p,q同為整型指針變數,二者裡面僅能存放整型變數的地址。
選項A,q中為地址,因此可將此地址賦給p
選項B,*p表示p所指向對象n的內容,即一個整數;*q表示q所指向對象的內容,由於在定義q時為其初始化,將p中n的地址給q,因此p中存放n的地址,*q表示q所指向對象n的內容.因此*p=*q 相當於 n=n;
選項C,n=*q 等價於n=n;
選項D,p中只能存放地址,不能將n中的整數值賦給p
38.有語句:int a[10],;則 B 是對指針變數p的正確定義和初始化。
A、int p=*a;
B、int *p=a;
C、int p=&a;
D、int *p=&a;
選項A,a是數組名,不是指針變數名,因此不可用*標注數組名a
選項C,a是數組名,數組名就是地址,無需再用地址符號。而且在定義指針變數p時,應在變數名前加*,標明p是指針變數
選項D,a是數組名,數組名就是地址,無需再用地址符號。
39.若有說明語句“int a[5],*p=a;”,則對數組元素的正確引用是( C )。
A、a[p]
B、p[a]
C、*(p+2)
D、p+2
首先定義一個整型數組a,a的長度為5,然後定義一個指針變數p,並同時對p進行初始化,將數組a的地址賦給p。因此此時p中存放的數組a的首地址,即數組中第一個元素a[0]的地址。
對於數組元素下標的引用(詳見p144), 一般形式 數組名[下標] 其中下標為邏輯地址下標,從0開始計數,方括弧中的下標可以是變數,可以是表達式,但結果一定要是整數。
選項A,p中存放的是地址,不是整數,不能做數組元素的下標
選項B,a是數組名,數組名就是地址,不是整數,不能做數組元素的下標
選項C,(重點!!!詳見p231~234) p+2表示指向同一數組中的下兩個元素的地址,當前p指向a[0],則p+2表示a[2]的地址,因此*(p+2)表示a[2]的內容
40. 有如下程序
int a[10]={1,2,3,4,5,6,7,8,9,10},*P=a;
則數值為9的表達式是 B
A、 *P+9
B、 *(P+8)
C、 *P+=9
D、P+8
(重點!!!詳見p231~234)
首先定義一個整型數組a,a的長度為5,然後定義一個指針變數P,並同時對P進行初始化,將數組a的地址賦給P。因此此時P中存放的數組a的首地址,即數組中第一個元素a[0]的地址。
數組中9對應的是a[8], 選項B,P+8表示數組中後8個元素的地址,即a[8]的地址。*(P+8)則表示該地址內所存放的內容,即a[8]的值。
選項A,*P表示P所指向對象的內容,此時P指向a[0], *P即a[0]的值1. *P+9=1+9=10
選項C,*P表示P所指向對象的內容,此時P指向a[0], *P即a[0]的值。因此*P+=9 即*P =*P+9, 等價於a[0]=a[0]+9.
選項D,P+8表示數組中後8個元素的地址,即a[8]的地址,而非a[8]中的值。
41. 在C語言中,以 D 作為字元串結束標志
A、’ ’
B、’ ’
C、 ’0’
D、’