05年9月等级考试二级C语言考前密卷2(四)

05年9月等级考试二级C语言考前密卷2(四),第1张

05年9月等级考试二级C语言考前密卷2(四),第2张

(26)下列程序的输出结果是_ _ _ _ _ _。
main()
{ int k=4,m=1,p;
p=func(k,m);printf("%d ",p);
p=func(k,m);printf("%d\n ",p);
}
func(int a,int b)
{ static int m:O,I = 2;
I+= m+l;m = I+a+b;
return(m);
}
A)8,17 B)8,16 C)8,20d) 8.8
答案:A
点评:k和m的值带入func。第一次调用func()后,m和I的值应该是这样最终结果是8和17。

(27)下面的程序调用findmax函数来查找数组中元素的下标。请选择填写空:
# include
find max(int * s,int t,int * k)
{ int p;
for(p=0,* k = p;p if(s[p]> s[* k])_ _ _ _ _ _ _ _ _ _ _ _;
}
main()
{ int a(35)下列程序的输出结果是_ _ _ _ _ _ _ _ _。
fun()
{
static int x = 5:
if(x++ > 5)printf(" % DFT,x);
else printf ("%d . ',)juice+);
}
mainO
{
fun();fun();
}
A)67b)69c)68d)78
答案:C
备注:一个模块的代码开始运行后,用静态语句声明的变量会保持其值,直到该模块被重置或重启。第一次调用fun函数时,x的初始值为5,if语句的条件不成立,执行else printf(" % d " x++);语句,输出6,执行后x的值变为7。因为x是一个静态局部变量,所以在函数调用后没有释放,仍然保持x=7。第二次调用fun函数时,if语句的条件成立,执行打印按钮%∽x);报表,产出8。,I,k;
for(I = 0;i findmax(a,lO,& k);
printf("%d,%d\n ",k,a[k]);
}
a)k = p b)* k = p-s c)k = p-s d)* k = p
回答:D
评价:k是指针,它的值是地址,应该作为主函数的变量。

(28)当执行下面的程序时,为了使输出结果t=4, 输入到A和B的值应满足的条件是_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
main()
{
int s,t,A,B;
scanf("%d%d ",&a,& b);
s = l;t = I;
if(a > O)s = s+1;
if(a > b)t = s+t;
else if(a = = b)t = 5;
else t = 20s:
printf(" t = % d \ n ",t);
}
A)A > B B)ab)t = s+t;声明。If if (a > b) t = s+t被执行;语句,条件是a>b,需要s=3。在该语句之前的语句中,没有任何条件可以满足S = 3;否则执行t = 2 * s;语句,条件是ao)s = s+l;语句,因此应该满足条件0 (29)。以下函数调用语句包含_ _ _ _ _ _ _ _个参数。
func((expl,exp2),(exp3,exp4,exp 5));
A)l B)2 C)4 D)5
答案:B
备注:参数可以是常量、变量或表达式,(expl,exp2)是逗号表达式,其值为exp2的值;(exp3,exp4,exp5)是一个逗号表达式,其值是exp5的值。所以这个函数调用语句中的参数个数是2,分别是:(expl,exp2)和(exp3,exp4,exp5)。

(30)执行下面的程序后,输出结果是_ _ _ _ _ _ _ _ _ _ _ _ _ _。
main()
{
int y = 10;
do { y-;} while(-y);
printf("%d\n ",y-);
}
A)A l B)l C)8d)0
回答:D
点评:do-while语句的特点是先执行循环体,然后判断循环条件是否有效。当循环条件的值为0时,循环结束。当y=O时循环结束,printf ("%d \ n ",y-);该语句首先输出y,然后递减自身,因此输出结果为0。

(31)C语言中,要求操作数为整数的运算符是_ _ _ _ _ _ _ _ _ _ _。
a)% b)/c)答案:A
点评:问题的四个选项中,(B)(c)(D)不要求操作数必须是整数,参与模运算(%)的操作数必须是整数数据。

(32)C语言提供的合法数据类型关键字是_ _ _ _ _ _ _ _ _。
a)double B)noat c)integer d)char
答案:B
备注:选项a和d中第一个字母大写,不正确;
Option C在PASCAL中是整数关键字,在C语言中不是关键字。

(33)提供了以下定义:
int a [3] [3] = {1,2,3,4,5,6,7,8,9 };
int(*ptr)[3]=a,* p = a[0];
那么下列能正确表示数组元素a[1][2]的表达式是_ _ _ _ _ _ _ _ _ _ _ _ _ _。
a)*((* ptr+1)[2])b)*(*(p+(p+5))
c)(* ptr+1)+2d)*(*(a+1)+2)
。Ptr指向一个三元素的一维数组,所以A和C是错的。

(34)如果有以下解释:
int a [10] = {1,2,3,4,5,6,7,8,9,10},* p = a;
那么值为6的表达式就是_ _ _ _ _ _ _ _ _。
A)* p+6b)*(p+6)C)* p+= 5d)p+5
答案:C
评价:选项A,* p+6,其值等于1+6 = 7;选项B,*(p+6),其值等于A[6]= 7;选项c,*p+=5,其值等于* p = * p+5 = l+5 = 6;选项d,p+5是一个地址值。

[10]

(36)下列程序的输出是_ _ _ _ _ _。
main()
{
int m = Oxa,n = 2;
m+= n:
printf(" % x \ n " ",m);
}
A)c b)c)99d)2
答案:A
备注:格式控制字符X表示数据以十六进制形式输出(不输出前导字符0x)。执行完语句M 11 N:,M的值就变成了字母C,而且因为输出a-f时,如果格式控制字符用X,就会用大写字母输出;如果用x,则用小写字母输出,所以这个问题的答案是A. (37)下面这个程序的输出结果是_ _ _ _ _ _ _ _ _ _ _ _。
# include
main()
{ char * a = " abcdefghi ";int k;
乐趣(一);看跌期权(a);
}
fun(char * s)
{ intx,y;char c;
for(x=O,y = strlen(s)-l;x { C = S[y];s[y]= s[x];s[x]= c;}
}
A)ihgfedcba b)abcde electric hi c)abced cbad)ihgfefghi
答案:A
评价:通过观察子函数fun(),可以看出它是为了实现一个数组的首尾元素的位置互换。如您所见,主要功能是依次切换字符串中元素的第一个和最后一个位置。

(38)用下列函数定义,输出结果是_ _ _ _ _ _ _ _ _。
Char * fun(Char * str)
{
Char * p = str;
while(*p)
{if(*p>'d ')继续;
p++;
}
return p;
}
main()
{
printF % s \ n ",fun("欢迎!"));
}
A)欢迎B)来!C)w D)程序进入无限循环
回答:D
点评:continue语句的作用是结束这个循环,即跳过循环体中后面未执行的语句,然后决定下次是否执行该循环。随着' w'>'d '执行continue语句,当前循环结束(即p++;+被跳过;语句),或者继续比较' w'>'d ',程序进入无限循环。

(39)下列程序的输出结果是_ _ _ _ _ _ _ _ _。
main()
{ union { char I[2];
int k:
} r;
r . I[0]= 2;r . I[1]= 0;
printf("%d\n ",r . k);
}
A)2 B)l C)0 D)不确定
答案:A
点评:根据社区的定义,可以知道社区R的成员K和成员i[2]共享同一个内存空,所以,所以打印输出应该是2。

(40)设p1和p2是指向同一个int型一维数组的指针变量,k是int型变量,那么下列不能正确执行的语句是_ _ _ _ _ _ _ _ _。
A)l(= * pl+* p2;b)p2 = k;c)P1 = p2;d)k = * pl *(* p2);
答案:B
备注:指针变量中只存储地址(指针)。不要把整数(或者其他任何非地址类型的数据)赋给指针变量,所以B不正确。

(41)下列程序的输出结果是_ _ _ _ _ _ _ _ _。
# define f(X)X * X
main()
{ int a = 6,b=2,c;
c = f(a)/f(b);
printf("%d\n ",c);
}
A)9b)6c)36d)18
答案:C
备注:通过观察程序段可以看出,带参数的宏的展开只是将#define命令行中的形参替换为语句中宏名后括号中的自变量字符串。本题中C = f (a)/f (b)用#define f(x)X*X代替得到C = f (6)/f (2),即C = 6 * 6/2 * 2,结果是36。

(42)如果有如下定义:
char s (46)执行下面的程序段
int x = 35;
char z = ' A ';
int B:
B =((x & 15)&&(z之后,B的值为_ _ _ _ _ _ _ _
A)0b)1c)2d)3
答案:B
备注:从整个表达式来看,它是一个逻辑表达式,而AND运算符“& &”右边的子表达式的值为“A”,因为A的ASCII码小于A . AND运算符左边的子表达式它会(47)打开一个字符文件进行读/写操作,其正确的打开方法是_ _ _ _ _ _ _ _ _ _ _ _ _ _。
A)wr B)r+ C)rb+ D)rw
答案:B
备注:在C中,可以通过fopen函数打开一个文件,在该函数的第二个参数中指定其打开方法。以读写模式打开文件,可以用“r++”、“w+”和“a+”来表示。打开二进制文件,可以在打开方式中加字母B,字符文件不要加B。 =“编程”,* PS = s;
不能代表字符。的表达是_ _ _ _ _ _ _ _ _ _。
A)PS+2B)S[2]C)PS[2]D)PS+= 2,* PS
答案:A
备注:PS+2是s[21的地址,也就是存放字符。地址,所以a是错的。

(43)下列程序的输出结果是_ _ _ _ _ _ _ _ _。
main()
{ int I;
for(I = 1;I { if(I % 2){ printf(" ∨);继续;}
printf(" quote ");
}
printf(" \ n ");
}
A)# * # # # b)# # # c)* * * * * d)* * * *
答案:A
求值:I从1到5循环5次,当I为1时,就是说当I为奇数时,条件为真,程序打印出“#”;否则,它输出“*”。

(44)有以下程序
main()
{
int n = 9:
while(n > 6)
{
n-;
printf("%d|。,n);
}
}
这个程序的输出结果是_ _ _ _ _ _ _ _ _。
A)987 B)876 c)8765d)9876
答案:B
评价:n>6的只有7、8、9;所以循环数是3。选项c和d可以排除。而且因为n要先执行n-再输出,所以输出结果只能是876。

(45)下面的程序是把一个十进制正整数转换成一个八进制数。程序的空白中应该填写的语句是_ _ _ _ _ _ _ _ _ _ _ _ _ _。
# include
main()
{
int I = 9,a,b[10]= { 0 };
scanf("%d ",& a);
sub(a,b);
for(;I > = O;i - )printf("%d ",b[I]);
}
sub(int c,int d[])
{ int e,I = O;
while(c!= 0)
{ e = c % 8;
d[I]= e;
_ _ _ _ _ _ _ _ _ _ _ _ _;
i++:
}
return;
}
A)C = e/8b)C = C % 8c)C = C/8d)C = e % 8
答案:C
点评:本题主要考察十进制转换的除法和舍入方法。这个算法是将对数C除以8取余数作为转换后的八进制数的第一位,然后用同样的方法将8的商除以C,直到商为0,所以这个问题应该选C。

[20]

(48)下列程序的输出结果是_ _ _ _ _ _ _ _ _。
# include
main()
{
union
{
int k:
chari[2];
}*s,a;
s = & a:
s-> I[0]= Ox39;s-> I[l]= 0x 38;
printf("%x\n ",s-> k);
}
A)3839 b)3938 c)380039d)390038
答案:A
注释:在main函数中定义了一个公共变量A和指向该变量的指针S。执行s-> I[0]= 0x 39;s-> I[1]= 0x 38;,共享主体的第一个字节和第二个字节分别存储在十六进制数据0x39和0x38中。因为变量在共享体中共享存储空,所以输出S-> K .时,实际上是开始写数据。对于PC来说,存储int数据时,低位在前,高位在后,所以这个问题的输出是3839。

(49)如果有如下定义:int t[3][2];能正确表示T数组中元素地址的表达式是_ _ _ _ _ _ _ _ _。
A)& T[3][2]B)T[3]C)T[1]D)* T[2]
答案:C
注释:选项A和B的表达式都出界;选项D中,*t[2]是目标变量,即一个整数值而不是地址值。

(50)下列关于结构类型变量的定义中,不正确的是_ _ _ _ _ _ _ _ _ _ _。
A)typedef struct aa
{
int n:
float m:
} aa;
aat dl;
B)# define aa struct aa
aa {
int n:
float m:
} tdl;
C)struct
{
int n:
float m:
} aa;
struct aatdl;
D)struct
{
int n:
float m:
} tdl;
答案:C
点评:问题中的考查点是结构类型变量的定义。
选项C中,aa是结构变量,不是结构名,所以structaatdl是违法的。二。填写空题(每题2分空共40分)

请将每空的正确答案写在答题卡序号[1]至[20]的横线上,在试卷上不计分。

(1)设一棵完整的二叉树有500个节点,那么二叉树中有[1]个叶节点。
回答:[L] 250
点评:所谓完全二叉树,是指除了最后一层以外,每一层的节点数都达到该值;在最后一层,只有右边的几个节点缺失。
有n个节点的完全二叉树,父节点数为int (n/2),叶节点数等于汇总节点数减去父节点数。N=500,所以父节点数等于int (500/2) = 250,叶节点数等于500-250=250。

(2)最坏情况下,冒泡排序的时间复杂度为[2]。
答案:[2] N (n-1)/2或O (n (n-1)/21
点评:冒泡排序是交换类最简单的排序方法,通过相邻数据元素的交换,将线性表逐渐变成有序。
假设线性表的长度为n,最坏的情况下,冒泡排序需要经过n/2次前后扫描和n/2次前后扫描,需要的比较次数为n (n-1)/2。

(3)面向对象编程方法中涉及的对象是一个[3]用来描述系统中的客观事物。
答案:[3]实体
点评:面向对象编程方法中涉及的对象是用来描述系统中客观事物的实体,是系统的一个基本单元。它由一组表示其静态特征的属性和一组可以执行的操作组成。

(4)软件需求分析阶段的工作可以概括为四个方面:[4]、需求分析、需求规格说明书的编写、需求评审。
回答:[4]需求获取
评估:软件需求分析阶段的工作可以概括为四个方面:需求获取、需求分析、编写需求规格说明、需求评审。需求获取的目的是确定目标系统需求的所有方面。涉及的主要任务是建立获取用户需求的方法框架,支持和监控获取需求的过程。

(5) [5]是数据库应用的核心。
答案:[5]数据库设计
点评:数据库设计是数据库应用的核心。数据库应用系统中的一个核心问题是设计一个能满足用户要求且性能良好的数据库,这就是数据库设计。

(6)如果用下式定义,指针p不移动,通过指针p引用值为98的数组元素的表达式为[6]。
int w[10]:{23,54,10,33,47,98,72,80,61},* p = w;
答案:[6] * (p+5)或p[5]
备注:此题的考点是通过指针引用数组元素。
98是数组W的第5个元素(开头是第0个),P已经被+P = W指向了数组W,如果想在不移动指针P的情况下引用98,有两种方法:p[5],*(p+5)。

(7)下面这个程序的输出结果是[7]。
#定义MAX(x,y)(x)>(y)?(x):(y)
main()
{
int a = 5,b=2,c=3,d=3,t;
t=MAX(a+b,c+d)* lO;
printf("%d\n ",t);
}
答案:[7] 7
备注:宏替换后,表达式t=MAX(a+b,c+d)*10变成:t=(a+b)>(c+d)?(a+b):(c+d)* 10;
既然(a+b)>(c+d)为真,t=(a+b),也就是7。

(8)下面这个程序的输出结果是[8]。
main()
{
无符号短整型a = 65536
int b:
primf("%d\n ",b = a);
}
答案:[8] 0
备注:对于无符号short,它可以取的值是65535。这里,赋值. 65536超出了它的范围,因此它的高位将被截断,只有低位被赋值(全零)。所以a的值实际上是0。

   (9)若已经定义im a=25,b:14,c=19;,以下三目运算符(?:)所构成的语句的执行结果是  【9】  。
   a++=10)?3*x-11:(x

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 05年9月等级考试二级C语言考前密卷2(四)

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情