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中。最后,为新的字符串数组添加结束符。