全国计算机二级C语言分类模拟题507.docx
《全国计算机二级C语言分类模拟题507.docx》由会员分享,可在线阅读,更多相关《全国计算机二级C语言分类模拟题507.docx(16页珍藏版)》请在冰点文库上搜索。
全国计算机二级C语言分类模拟题507
二级C语言分类模拟题507
选择题
1.指针变量p的基类型为double,并已指向一连续存储区,若p中当前的地址值为65490,则执行p++后,p中的值为
A.65490
B.65492
C.65494
D.65498
答案:
D
2.对于while(!
E)s;,若要执行循环体s,则E的取值应为______。
A.E等于1
B.E不等于0
C.E不等于1
D.E等于0
答案:
D
[解答]while语句的一般形式为:
while(表达式)语句;,其中表达式是循环条件,语句为循环体。
while语句的语义是:
计算表达式的值,当值为真(非0)时,执行循环体语句。
该题中如要执行语句s,则!
E应为真,因此E应等于0,故D选项正确。
3.简单程序设计步骤中不包括______。
A.编码
B.确定算法
C.安装编译程序
D.调试
答案:
C
[解答]简单程序设计步骤为确定数据结构、确定算法、编码、调试、整理文档,不包括安装编译程序,故答案为C选项。
4.在长度为n的有序线性表中进行二分法查找,最坏情况下需要比较的次数是______。
A.O(n)
B.O(n2)
C.O(log2n)
D.O(nlog2n)
答案:
C
[解答]当有序线性表为顺序存储时才能用二分法查找。
可以证明的是,对于长度为n的有序线性表,在最坏情况下,二分法查找只需要比较log2n次,而顺序查找需要比较n次,因此本题答案为C。
5.软件生命周期是指______。
A.软件的定义和开发阶段
B.软件的需求分析、设计与实现阶段
C.软件的开发阶段
D.软件产品从提出、实现、使用维护到停止使用退役的过程
答案:
D
[解答]通常把软件产品从提出、实现、使用、维护到停止使用、退役的过程称为软件生命周期。
A、B、C选项均为生命周期的一部分。
故选D选项。
6.以下叙述正确的是
A.C语言比其他语言高级
B.C语言可以不用编译就能被计算机识别执行
C.C语言以接近英语国家的自然语言和数学语言作为语言的表达形式
D.C语言出现的最晚、具有其他语言的一切优点
答案:
C
[解答]C语言是一种高级语言,必须编译成目标代码才能执行,故选项B错误;与其他语言相比C语言更接近于硬件,更“低级”:
程序语言是不断发展的,不断有新的语言出现,C语言不是出现最晚的,故选项A和选项D错误;高级语言类似于人类的自然语言和数学语言。
所以,c选项为所选。
7.设有函数定义:
voidsub(intk,charch){…}则以下对函数sub的调用语句中,正确的是______。
A.sub(1,97);
B.sub(2,'97');
C.n=sub(3,'a');
D.sub(4,"a");
答案:
A
[解答]函数的参数有两个,第一个是整型,第二个是字符类型,在调用函数时,实参必须一个是整型,一个是字符型相容的类型(整型)。
A选项中97为字符‘a’的ASCII码,可以作为字符传入函数,A选项正确。
B选项‘97’不是合法字符,字符单引号里面只能有一个字符,B选项错误。
函数sub返回类型为空,即不返回任何值,故C选项中将函数返回值赋给n是不正确的调用方法,C选项错误。
D选项“a”为字符串,也不是合法的字符,D选项错误。
8.有以下程序
#include<stdio.h>
main()
{inta[5]={2,4,6,8,10},*p,**k;
p=a;k=&p;
printf("%d",*(p++));
printf("%d\n",**k);
}
程序运行后的输出结果是______。
A.24
B.44
C.22
D.46
答案:
A
[解答]*(p++),表达式为a[0]的值,为2,执行后p指向a[1],**k为*p实际为a[1],输出4,所以选择A。
9.设有定义语句int(*f)(int);,则以下叙述正确的是______。
A.f是基类型为int的指针变量
B.f是指向函数的指针变量,该函数具有一个int类型的形参
C.f是指向int类型一维数组的指针变量
D.f是函数名,该函数的返回值是基类型为int类型的地址
答案:
B
[解答]本题考查的是指向函数的指针。
语句“int(*f)(int);”是对一个函数的声明,其中f是指向该函数的指针,该函数有一个整型的参数,函数返回值类型为整型。
故答案选B。
10.以下程序段中,与语句“k=a>b?
(b>c?
1:
0):
0;”功能相同的是______。
A.if(a>b)&&(b>c)k=1;
elsek=0;
B.if((a>b)||(b>c))k=1;
elsek=0;
C.if(a<=b)k=0;
elseif(b<=c)k=1;
D.if(a>b)k=1;
elseif(b>c)k=1;
elsek=0;
答案:
A
[解答]本题考查了双重三目运算符的用法。
例如:
表达式a>b?
c:
d可以看成,当a>b时取c的值,否则取d的值。
在本题中k=a>b?
(b>c?
1:
0):
0可以看做:
当b>c时为真,则k=a>b?
1:
0。
当b<c时则k=a>b?
0:
0。
也就是说,当a>b并且b>c时,k=1,否则k=0。
所以A选项符合题意。
11.数据库管理系统中负责数据模式定义的语言是______。
A.数据定义语言
B.数据管理语言
C.模式描述语言
D.数据控制语言
答案:
C
[解答]模式描述语言(DataDescriptionLanguage,DDL)是用来描述、定义的,体现、反映了数据库系统的整体现。
12.有下列程序:
main()
{intx=5;
do
{printf("%d",x-=4);}
while(!
(--x));
}
程序的输出结果是______。
A.1
B.20
C.1-4
D.死循环
答案:
C
[解答]本题考查do-while循环。
先执行do的内容,也就是printf语句,x=x-4=1,输出1,判断while循环的控制条件,--x=0,则!
(--x)为非零,循环条件成立,执行下一次循环;x=x-4=-4,输出-4,判断while循环的条件,--x=-5,则!
(--x)为零,循环条件不成立,结束循环。
13.以下程序的输出结果是______。
#include<stdio.h>
main()
{inta[3][3]={0,1,2,0,1,2,0,1,2),i,j,s=1;
for(i=0;i<3;i++)
for(j=i;j<=i;j++)
s+=a[i][a[j][j]];
printf("%d\n",s);
}
A.3
B.4
C.1
D.9
答案:
B
14.有以下程序
#include<stdio.h>
main()
{FILE*fp;inti,a[6]={1,2,3,4,5,6};
fp=fopen("d2.dat","w+");
for(i=0;i<6;i++)fprintf(fp,"%d\n",a[i]);
rewind(fp);
for(i=0;i<6;i++)fscanf(fp,"%d",&a[5-i]);
fclose(fp);
for(i=0;i<6;i++)printf("%d,",a[i]);
}
程序运行后的输出结果是______。
A.6,5,4,3,2,1,
B.1,2,3,4,5,6,
C.4,5,6,1,2,3,
D.1,2,3,3,2,1,
答案:
A
[解答]第一个循环将数组a里数据写入文件,rewind函数将文件指针回到开头,第二个循环将文件里数据倒序写入a数组,第三个循环将a数组数据输入,则是a之前数据里的倒序,选择A。
15.以下选项中,不能正确赋值的是______。
A.chars1[10];s1="chest";
B.chars2[]={'C','t','e','s','t'};
C.chars3[20]="Chest";
D.char*s4="Ctest\n"
答案:
A
[解答]语言中不能将字符串常量直接赋给数组。
但在赋初值时可以。
16.以下程序中与语句k=a>b?
(b>c?
1:
0):
0;功能等价的是
A.if((a>b)&&(b>c))k=1;
elsek=0;
B.if((a>b)‖(b>c))k=1;
elsek=0;
C.if(a<=b)k=0;
elseif(b<=c)k=1;
elsek=0;
D.if(a>b)k=1;
elseif(b<c)k=1;
答案:
A
[解答]三目运算表达式的规则为如果“?
”前面的表达式的值为真,则取“:
”前的表达式的值,否则,取“:
”后面表达式的值。
分析题目中给出的表达式可知,如果a>b和b>c同时成立,k=1,否则k=0。
17.假定x和y为double型,则表达式x=2,y=x+3/2的值是______。
A.3.500000
B.3
C.2.000000
D.3.000000
答案:
D
[解答]在x=2,y=x+3/2中,3/2=1,2+1=3,因此表达式的值为3,因为x、y为double型变量,故选择D选项。
18.以下选项中,与k=n++完全等价的表达式是。
A.k=n,n=n+1
B.n=n+1,k=n
C.k=++n
D.k+=n+1
答案:
A
[解答]k=n++的意思是先将n的值赋给k,然后n的值再加1,选项A)符合题意;选项B)和C)是先使n的值加1,然后再赋值给k;选项D)等价于k=k+(n+1)。
19.算法的时间复杂度是指
A.执行算法程序所需要的时间
B.算法程序的长度
C.算法执行过程中所需要的基本运算次数
D.算法程序中的指令条数
答案:
C
[解答]算法的复杂度主要包括算法的时间复杂度和算法的空间复杂度。
所谓算法的时间复杂度是指执行算法所需要的计算工作量,即算法执行过程中所需要的基本运算的次数;算法的空间复杂度一般是指执行这个算法所需要的内存空间。
20.若变量已正确定义,在if(W)printf("%d\n",k);中,以下不可替代W的是______。
A.a<>b+c
B.ch=getchar()
C.a==b+c
D.a++
答案:
A
[解答]选项A是非法的表达式,C语言中没有<>运算符。
21.以下叙述中错误的是______。
A.非零的数值型常量有正值和负值的区分
B.常量是在程序运行过程中值不能被改变的量
C.定义符号常量必须用类型名来设定常量的类型
D.用符号名表示的常量叫符号常量
答案:
C
[解答]在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。
符号常量在使用之前必须先定义,其一般形式为:
#define标识符常量。
22.字符串”\nabcdef\\”的长度是______。
A.8
B.6
C.10
D.4
答案:
A
23.若有定义和语句:
inta,b;scanf("%d,%d",&a,&b);以下选项的输入数据中,不能把值3赋给变量a,5赋给变量b的是______。
A.3,5,
B.3,5,4
C.3,5
D.3,5
答案:
C
[解答]在输入3和5之间除逗号外不能有其他字符。
24.以下选项中不合法的标识符是______。
A.print
B.FOR
C.&a
D._00
答案:
C
[解答]合法的标识符只能由字母、数字或下划线组成。
C选项中&a出现非法字符“&”。
故本题答案为C。
25.有以下程序
#include<stdio.h>
main()
{inti,s=0,t[]={1,2,3,4,5,6,7,8,9};
for(i=0;i<9;i+=2)s+=*(t+i);
printf("%d\n",s);
}
程序执行后的输出结果是______。
A.25
B.20
C.45
D.36
答案:
A
[解答]本题考查的是通过数组首地址引用数组之素。
当数组名出现在表达式中时,它类似于一个指针常量,该指针始终指向该数组第1个元素的位置,它的指向不能被改变。
但它又与普通的指针常量有所区别:
对数组名使用sizeof运算符时,得到整个数组所占内存的大小;而对于指针常量,在TC中返回的始终是2(TC中,一个指针占2个字节的内存)。
所以,要获得数组t的第i个元素的内容,既可以使用常规的t[i]表达式,也可以将数组名t看作一个指针常量,使用表达式*(t+i)来获取数组t的第i个元素的内容。
在本题中,for循环会循环5次,循环变量i从0开始每次增加2,所以s=t[0]+t[2]+t[4]+t[6]+t[8]=25。
26.若变量都已正确说明,则以下程序段______。
#include<stdio.h>
main()
{inta=3;
intb=2;
printf(a>b?
"***a=%d":
"###bb=%d",a,b);}
A.输出为:
***a=3
B.输出为:
###b=3
C.输出为:
***a=3##b=5
D.全部错误
答案:
A
27.C语言程序的模块化通过以下哪个选项来实现______。
A.变量
B.函数
C.程序行
D.语句
答案:
B
[解答]C语言程序的模块化通过函数来体现,所以选择B。
28.有以下程序:
#include<stdio.h>
#include<string.h>
main()
{
charstr[12]={'s','t','r','I','n','g'};
printf("%d\n",strlen(str));
}
程序运行后的输出结果是______。
A.6
B.7
C.11
D.12
答案:
A
[解答]数组初始化时,如果在说明数组时给出了长度,但没有给所有的元素赋予初始值,而只依次给前面的几个数组元素赋予初值,那么C语言将自动对余下的元素赋初值,如果为字符数组,自动赋值“\0”,即str[12]={'s','t','r','i','n','g','\0',‘\0','\0','\0','\0','\0'}。
strlen函数求字符串长度,统计长度时以“\0”结束,即统计到长度为6时结束,strlen函数返回值为6,故A选项正确。
29.在软件开发过程中,软件结构设计是描述______。
A.数据存储结构
B.软件体系结构
C.软件结构测试
D.软件控制过程
答案:
B
[解答]从工程管理角度来看,软件设计分两步完成:
概要设计和详细设计。
概要设计(又称结构设计)将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式。
30.若变量c为char类型,能正确判断出c为小写字母的表达式是______。
A.'a'<=c<='z'
B.(c>='a')||(c<='z')
C.('a'<=c)and('z'>c)
D.(c>='a')&&(c<='z')
答案:
D
[解答]字符型数据在计算机内部是以ASCII存储的,英文大写字母和小写字母在ASCII码表中都是连续的,大写字母A到Z是从65到90的,小写字母a到z是从97到122,所以只要变量c大于a并且小于z就能保证其为小写字母。
31.以下对结构体变量mix中成员x的正确引用是______。
struct
{intt;intx;
}mix,*p;
p=&mix;
A.(*p).mix.x
B.(*p).x
C.p->mix.x
D.p.mix.x
答案:
B
[解答]结构体变量中的成员有3种引用方式:
①结构体变量名.成员名;②指针变量名->成员名:
③(*指针变量名).成员名。
32.有以下程序:
#include<stdio.h>
main()
{shortc=124;
c=c______;
printf("%d\n",c);
若要使程序的运行结果为248,应在下画线处填入的是______。
A.>>2
B.|248
C.&0248
D.<<1
答案:
D
[解答]短整型在存储时占用16位,按照移位运算,如果右移两位就等于原数除以4,结果为31,如果左移一位相当于原数乘以2,结果为248,所以选择D。
33.以下程序运行后的输出结果是
#include<stdio.h>
intf(intn);
main()
{inta=3,s;
s=f(a);s=s+f(a);printf("%d\n",s);
}
intf(intn)
{staticinta=1;
n+=a++;
returnn;
}
A.7
B.8
C.9
D.10
答案:
C
[解答]本题考查静态局部变量。
第一次调用f函数时,将实参a值3传给形参变量n,此时,静态局部变量a的值为1,经过n+=a++运算后,n为4,a为2,return语句将4带回到main函数赋给s;第二次调用f函数时,将实参a值3(注意,实参a的值并未改变)传给变量n,此时,静态局部变量a的值为2,经过n+=a++运算后,n为5,a为3,return语句将5带回到main函数,s=s+f(a)=4+5=9。
34.若x、i、j和k都是int型变量,则计算表达式x=(i=4,j=16,k=32)后,x的值为______。
A.4
B.16
C.32
D.52
答案:
C
35.程序流程图中带有箭头的线段表示的是______。
A.图元关系
B.数据流
C.控制流
D.调用关系
答案:
C
[解答]在数据流图中,用标有名字的带箭头线段表示数据流。
在程序流程图中,用标有名字的带箭头线段表示控制流,因此本题答案为C。