2015年計算機二級《C語言》考前押題密卷(2)
27有以下程序:
main()
{int a=0,b=10,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,0B.0,0,0,3C.1,1,2,0D.編譯有錯
參考答案:D
參考解析:語法錯誤。else與if之間不應再用其他語句,如果滿足if條件,則繼續執行if后面的語句;不滿足就執行else語句。
28下列程序輸出結果是( )。
#include%stdio.h>
main()
{char aE3一{'a','b','c','d','e','f','\o');
int i,j;
A.7,7B.7,6C.6,6D.6.7
參考解析:本題要注意sizeof()和strlen()的區別,sizeof()函數的功能是返回字符串所占的字節數,strlen()函數的功能是返回字符串長度,'\o'是一個轉義符,它占存儲空間,但不計入串的長度。
29有以下程序
#include
int a=1:
int f(int c)
{ static int a=2;
c=c+1.
return(a++)+c;
}
main()
{ int i,k=0;
for(i=0;i<2;i++){int a=3;k+=f(a);)
k+=a;
printf(”%d\n”,k);
程序運行結果是( )。
A.14B.15C.16D.17
參考答案:A
參考解析:在主函數中,k的初值為0,首先調用函數f(3),返回值為6,k的值變為6,而函數intfun(intc)中的局部靜態變量a等于3。第二次調用函數f(3)時,返回值為7,所以k-6+7—13。退出循環語句,k再加上全局變量a的值1,其最終的值為14。
30按照“先進后出”原則組織數據的結構是( )。
A.隊列B.棧C.雙向鏈表D.二叉樹
參考解析:棧是線性表的一種,其插入和刪除運算都只在表的一端進行。進行插入、刪除的一端稱為棧頂,封閉的一端稱為棧底。棧頂元素按先進后出的原則組織數據,它是最后被插入的元素,不是最后被刪除的元素。
31若整型變量a、b、c、d中的值依次為2、2、3、4,則條件表達式a
A.1B.2C.3D.4
參考答案:C
32若有定義:“int*P,x=0,*P,P=&x;”,則語句“printf(”%d\n”,*p);”的輸出結果是( )。
A.隨機值B.0C.x的地址D.P的地址
參考解析:*P的意思是取其指向地址的內容,P是指向x地址的指針,因此輸出*P也就是輸出X的內容,即0,故選擇B選項。
33下列程序中C的二進制值是( )。
char a=2,b=4,c;
c=a^b>>2;
A.00000011B.00010100C.00011100D.00011000
參考答案:A
參考解析:本題主要考查右移運算和按位異或。把b化為二進制數為00000100,右移兩位后為00000001,a的二進制為00000010,兩者異或為00000011。
34有下列程序:
main()
{char*p[]={¨3697”.”2584”);
int i,j;long ntlm=0;
for(i=0;i<2;i++)
{ j=0;
while(p[i][j]!='\0')
{if((p[i][j]-'\0')%2)num=10*num+p
[j][j]-'0';
j+=2;
}
}
print[(“%d\n”,num);
程序執行后的輸出結果是( )。
A.35B.37C.39D.3975
參考答案:D
參考解析:執行第一次for循環時,用表達式p[i][j]!=’\o=來判斷字符串數組指針P是否到達字符串的結尾,如果沒有到達,繼續執行while中的語句。if語句表示(p[i][i]-\o’)除2的余數不為0時,即字符串所有奇數執行后面的語句。所以退出第l次for的循環體時,輸出為397,執行第2次循環體。對字符串“2584”進行處理,輸出結果為5,因而最后輸出結果為3975。
35有下列二叉樹,對此二叉樹前序遍歷的結果為( )。
A.ACFXDBEYZB.ABEFXYZCDC.ABCDEFXYZD.ABDYECFXZ
參考答案:D
參考解析:所謂二叉樹的前序遍歷是指先訪問根結點,訪問左子樹,最后訪問右子樹,可知選項D正確。本題中序為DYBEAFCZX,后序為YDEBFZXCA。
36設有如下關系表:
則下列操作中正確的是( )。
A.T=RnSB.T=RUSC.T—R×SD.T—R/s
參考解析:關系代數中的集合運算分4種:并、差、交和笛卡爾。①并(U);②差(一),R和S的差是由屬于R但不屬于s的元組構成的集合;③交(n):由既屬于R又屬于S的元組構成的集合;④笛卡爾積(×):對兩個關系R和S進行合并操作,產生的關系中元組個數為兩個關系中元組個數之積。根據關系T中的元組可知,T關系是關系R和關系S進行合并操作所得到的。
37若有定義:“int a[2][3];”,則對a數組的第i行第j列元素的正確引用為( )。
A.*(*(a+i)+j)B.(a+i)[j]C.*(a+j+j)D.*(a+i)+j
參考答案:A
參考解析:通過地址來引用數組元素的方法有下列5種:①a[i][j];②*(a[i]+J);③*(*(a+i)+j);④*(aEiJEj]);⑤(&a[o]EoJ+3*i十j)。故A正確。
38設有以下語句:
int a=1,b=2,c;
c=a^(b<<2);
執行后,c的值為( )。
A.6B.7C.8D.9
參考答案:D
參考解析:本題考查兩個知識點,按位異或左移把b左移2位化成二進制c=a^(b<<2)=a^(oooolo<<2)=a^o01000=0000001^001000=9,故選擇D。
39若二維數組a有m列,則在a[i][j]前的元素個數為( )。
A.i*m+j-1B.i*m+jC.j*m+iD.i*m+j+1
參考解析:二維數組的元素可以看成是按矩陣形式存放的,數組第一維的下標是i,說明它前面還有i行,有i*m個元素,數組第二維的下標是j,說明它前面還有j列,有j個元素,所以共有i*m+j個元素。
40已知大寫字母A的ASCIl碼是65,小寫字母a的ACSII碼是97。下列能將變量C中的大寫字母轉換為對應小寫字母的語句是( )。
A.c=(c-'A')%26+'A'
B.C=c+32
C.c=c-'A'+'A'
D.c=('A'+C)%26—'a'
參考解析:根據ASCIl碼選項可知大寫字符A與小寫字符a的ASCIl碼相差32,而選項D中應該是加上'a’,選項A和C左側的表達式都是大寫字符c與大寫字符A的差與…a的ASCIl代碼的和就是小寫字符c的ASCIl代碼。
二、程序填空題
41str是一個由數字和字母字符組成的字符串,由變量num傳入字符串長度。請補充函數proc(),該函數的功能是:把字符串str中的數字字符轉換成數字并存放到整型數組1,b中,函數返回數組bh的長度。
例如.str=”abc123de45f967”.結果為:1234567。
注意:部分源程序給出如下。
請勿改動main()函數和其他函數中的任何內容.僅在函數proc()的橫線上填入所編寫的若干表達式或語句。
試題程序:
#include
#define M 80
int bb[M];
int proc(char str[].int bh[],int num)
{
int i.n=0;
for(i=0;i
{
if( 【1】 )
{
bb[n]=【2】;
n++:
)
return 【3】 ;
}
void main()
{
char str[M];
int num=0.n,i:
printf(”Enter a string:n”);
gets(str);
while(str[num])
num++o
n=proc(str,bb,num);
prinlf(”\nbb=”);
for(i=0;i
printf(”%d”,bb[i]);
)
參考解析:
【1】str[i]:>='0’&&str[i]<=79’【2】str[i]-'0’ 【3】n
【解析】題目中要求把字符串str中的數字字符轉換成數字并存放到整型數組bb中。首先,應判斷字符串str中每個字符是否是數字字符。因此,【l】處填“str[i]>='0’&&str[i]<='9“’;將每一個數字字符轉化為數字放在整型數組bb中,因此,[21處填“str[i]-'0”’;由函數proc()可知,變量n存放整型數組bb中的元素個數,最后要返回到主函數當中,因此,[31處填“n”。第41題 筆記記錄我的筆記(0) | 精選筆記(2)選擇筆記標簽:試題內容(2)答案解析(0)
三、程序改錯題
42下列給定程序中函數proc的功能是:取出長整型變量s中偶數位上的數,依次構成一個新數放在t中。例如,當s中的數為123456789時,t中的數為2468。請修改程序中的錯誤,使它能得出正確的結果。
注意:不要改動main()函數,不得增行或刪行,也不得更改程序的結構。
試題程序:
#include
#include
#include
//****found****
void proc(1ong s,long t)
{long s1=10;
s/=10:
*t=s;
//****found****
while(s<0)
{ s=s/100;
*t=s*s1+*t;
s1=s1*10:
}
void main()
{long S,t;
system(”CLs”);
printf(”\nPlease enter s:”);
scanf(”%ld”,&s);
proc(s,&t):
printf(”The result is:%ld\\n”,t);
}
參考解析:
(1)錯誤:voidproc(10ngS,longt)正確:voidproc(10ngS,lon9“t)(2)錯誤:while(s<0)
正確:while(s>O)
【解析】從主函數中實參可知,形參的第二個變量是長整型的指針變量。因此“voidproc(10ngS,longt)”應改為“voidproc(10ngS,long*t)”;要從低位開始取出長整型變量s中偶數位上的數,每次變量S要除以100,然后判斷其是否大于0來決定是否要繼續,因此“while(S<0)”應改為“while(s>0)”。第42題 筆記記錄我的筆記(0) | 精選筆記(3)選擇筆記標簽:試題內容(3)答案解析(0)
四、程序設計題
43請編寫函數proc(),其功能是:將str所指字符串中除下標為偶數,同時ASCII碼值為奇數的字符外,其余的字符都刪除,串中剩余字符所形成的一個新串放在t所指的數組中。例如,若str所指字符串中的內容為ABCDEFGl2345,其中字符8的ASCII碼值為偶數,所在元素的下標為奇數,因此必須刪除;而字符A的ASCII碼值為奇數,所在數組中的下標為偶數,因此不應當刪除。依次類推,最后t所指的數組中的內容應是ACEG。
注意:部分源程序給出如下。
請勿改動main()函數和其他函數中的任何內容,僅在函數proc()的花括號中填入所寫的若干語句。
試題程序:
#include
#include
#include
#include
void proc(char*str,char t[])
{
)
void main()
(
char str[100],t[100];
system(”CLS”);
printf(”\nPlease enter string str:");
scanf(”%s”,str);
proc(str,t);
printf(”\nThe result is:%s\n”,t):
)
參考解析:
voidproc(char*sir。chart[])1
inti,j=0;
for(i=0;slr[,i]!=’\0’;i++)//從數組的第一個元素開始,到其最后一個
{if(i%2==0&.&str[i]!=o)//下標為偶數、同時ASCIl碼值為奇數的字符
t[j++]=str[i];}//如果成立,則把它放到t數組中
t[j]=’\0’;//字符串結束標志為’\0’}
【解析】題目中要求將字符串sir中下標為偶數,同時ASCIl碼值為奇數的字符放在數組t中。首先,需要檢查字符串str中下標為偶數的字符的ASCIl碼值是否為奇數,將符合要求的字符放在數組t中。最后,為新的字符串數組添加結束符。