二级C语言笔试-147
(总分:100.00,做题时间:90分钟)
一、选择题(总题数:40,分数:70.00)
1.有以下函数:
int fun(char * s)
char * t=s;
while(*t++);
return(t-s)
该函数的功能是______。
(分数:2.00)
int fun(char * s)
char * t=s;
while(*t++);
return(t-s)
该函数的功能是______。
(分数:2.00)
A.比较两个字符串的大小
B.计算s所指字符串占用内存字节个数
C.计算s所指字符串的长度 √
D.将s所指字符串复制到字符串t中
解析:[解析] 定义一个字符指针t,并将字符指针s的首地址赋给字符指针t;通过while语句将指针t往下移到字符串最后一个字符后面的地址,指针s始终指向首地址,将末地址减去首地址可以计算出字符串的长度。
2.以下数组定义中错误的是______。
(分数:2.00)
(分数:2.00)
A.intx[][3]=0;
B.int x[2][3]=1,2,3,4,5,6); √
C.intx[][3]=1,2,3,4,5,6;
&[2][3]=1,2,3,4,5,6;
解析:[解析] 二维数组赋初值时,第一个维数即行数可以省略,但是列数不能省略。因此选项A、C正确。选项D是按数据在二维数组中的顺序初始化。在选项B中,列维数的初始化格式跟定义的维数不一致,为错误选项。
3.设有定义:char p[]=‘1’,‘2’,‘3’,,*q=p;,以下不能计算出一个char型数据所占字节数的表达式是______。
(分数:2.00)
(分数:2.00)
A.sizeof(p) √
B.sizeof(char)
C.sizeof(*q)
D.sizeof(p[0])
解析:[解析] 本题考查的重点是sizeof()的运用。sizeof用于返回其操作数(变量、类型)相对应数据类型的字节数。因此,选项A是错误的,因为p是一个地址,它既不是一个数据类型,也不是数据变量。
4.有以下程序:
void f(int n,int * r)
int r1=0;
if(n%3==0)r1=n/3;
else if(n%5==0)r1=n/5;
else f(--n,&r1);
*r=r1;
main()
intm=7,r;
f(m,&r);printf("%d/n",r);
void f(int n,int * r)
int r1=0;
if(n%3==0)r1=n/3;
else if(n%5==0)r1=n/5;
else f(--n,&r1);
*r=r1;
main()
intm=7,r;
f(m,&r);printf("%d/n",r);
程序运行后的输出结果是______。
(分数:2.00)
(分数:2.00)
A.2 √
B.1
C.3
D.0
解析:[解析] 题目中定义了一个指针变量r作为形参f()的函数。在主函数main()中定义了两个变量m和r,同时给m赋初值7,调用函数f(m, &r)并执行,函数f()通过指针r将最后的值返回。
5.若变量已正确定义,则以下语句的输出结果是______。
s=32;s^=32;printf("%d",s);
(分数:2.00)
(分数:2.00)
A.-1
B.0 √
C.1
D.32
解析:[解析] 为按二进制异或运算符,变量s与其相等的数值异或的结果为0。
6.设变量已正确定义,则以下能正确计算f=n!的程序段是______。
(分数:2.00)
(分数:2.00)
A.f=0;
for(i=1;i<=n;i++)f*=i;
for(i=1;i<=n;i++)f*=i;
B.f=1;
for(i=1;i<n;i++)f*=i;
for(i=1;i<n;i++)f*=i;
C.f=1;
for(i=n;i>1;i++)f*=i;
for(i=n;i>1;i++)f*=i;
D.f=1;
for(i=n;i>=2;i--)f*=i; √
for(i=n;i>=2;i--)f*=i; √
解析:[解析] 选项A中,f初值设为0。则执行循环体后,所得的乘积值始终为0,不符合题意。选项B中,for循环条件是i<n,则当i为n时即退出循环,所以求得的乘积值是(n-1)!,也不符合题意。选项C中,i的初值为n,且i在每次执行循环体后都增加1,则如果n为大于1的数,程序会陷入死循环。只有选项D符合题意,求得f的值为n*(n-1)*(n-2)*…*2,即n!。
7.有以下程序:
main()
intp[8]=11,12,13,14,15,16,17,18,i=0,i=0;
while(i++<7)if(p[i]%2)j+=p[i];
printf(”%dn",j);
程序运行后的输出结果是______。
(分数:2.00)
intp[8]=11,12,13,14,15,16,17,18,i=0,i=0;
while(i++<7)if(p[i]%2)j+=p[i];
printf(”%dn",j);
程序运行后的输出结果是______。
(分数:2.00)
__________________________________________________________________________________________
解析:[解析] 由循环语句“while(i++<7)if(p[i]%2)j+=P[i];”可知,当“p[i]%2”为真,也就是非0时,累加p[i]d到j上。而“p[i]%2”非0,也就是P[i]为奇数,因此循环是累加数组P[i]={11,12,13,14,15.16,17,18
8.下列关于栈的叙述正确的是______。
(分数:2.00)
A.栈按“先进先出”组织数据
B.栈按“先进后出”组织数据 √
C.只能在栈底插入数据
D.不能删除数据
解析:[解析] 栈是限定在一端进行插入与删除的线性表,允许插入元素的一端为栈顶,允许删除元素的一端为栈底,故选项C、D是错误的。栈顶元素总是最后被插入的元素,也是最先被删除的元素;栈底元素则总是最先被插入而最后被删除的元素,即栈是按“先进后出”的原则组织数据的。
9.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是______。
(分数:2.00)
A.函数的实参和其对应的形参共占同一存储单元
B.形参只是形式上的存在,不会占用具体存储单元
C.同名的实参和形参占同一存储单元
D.函数的形参和实参分别占用不同的存储单元 √
解析:[解析] 本题考查的重点是形参与实参的存储单元是否一致。C语言中,函数的形参和实参是分别占用不同的存储单元的,因此,选项D是正确的。
10.下列叙述中正确的是______。
(分数:2.00)
(分数:2.00)
A.算法的效率只与问题的规模有关,而与数据的存储结构无关
B.算法的时间复杂度是指执行算法所需要的计算工作量 √
C.数据的逻辑结构与存储结构是一一对应的
D.算法的时间复杂度与空间复杂度一定相关
解析:[解析] 本题考查的是算法的基本概念,包括时间复杂度和空间复杂度,算法时间复杂度是指执行算法所需要的计算工作量,可以用执行算法的过程中所需基本运算的执行次数来度量。
11.有以下程序:
voidf(int*x,int * y)
int t;
t= *x;*x= *y;*y=t;
main()
voidf(int*x,int * y)
int t;
t= *x;*x= *y;*y=t;
main()
inta[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]);
程序运行后的输出结果是______;
(分数:1.00)
p=a;q=&a[7];
while(p)
f(p,q);p++;q--;
for(i=0;i<8;i++)printf("%d,",a[i]);
程序运行后的输出结果是______;
(分数:1.00)
__________________________________________________________________________________________
解析:[解析] 本题的函数f是将两个指针所指的两个单元中的数值对换。指针p指向数组a的第一个元素a[0]而指针q指向数组a的元素a[7]。调用f将p和q所指元素值对换,也就是将a[0]和a[7]的值对换,对换后结果分别是8、1。P++指向a[1],q-指向a[6J,继续循环,调用f将
a[1]和a [6]交换,结果变成7、1。以此类推,直到p和q相遇循环站束。数组a的值由{1,2,3,4,5,6,7,8}变成了{8,7,6,5,4,3,2,1
12.以下对结构体类型变量td的定义中,错误的是______。
(分数:1.00)
(分数:1.00)
&pedef struct aa
int n;
float m;
AA;
AA td;
int n;
float m;
AA;
AA td;
B.struct aa
int n;
float m;
int n;
float m;
td;
struct aa td;
struct aa td;
C.struct
int n;
float m;
aa; √
int n;
float m;
aa; √
D.struct
int n;
float m;
td;
struct aa td;
int n;
float m;
td;
struct aa td;
解析:[解析] 本题的考点是C语言结构体的定义和自定义类型typedef。对于选项A,首先用typedef将结构体自定义为AA,再用AA定义结构体变量td是正确的。对于选项B首先定义结构体类型aa,再用struct aa定义结构体变量td也是正确的。选项D直接用无名结构体定义结
构体变量td也是正确的。而选项C中,首先用无名结构体定义了结构体变量aa,再用结构体变量aa去定义结构体变量td是完全错误的。因此正确选项是C。
13.下列描述中正确的是______。
(分数:1.00)
(分数:1.00)
A.软件工程只是解决软件项目的管理问题
B.软件工程主要解决软件产品的生产率问题
C.软件工程的主要思想是强调在软件开发过程中需要应用工程化原则 √
D.软件工程只是解决软件开发中的技术问题
解析:[解析] 软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。软件工程的目的就是要建造一个优良的软件系统,它所包含的内容
概括为以下两点:①软件开发技术,主要有软件开发方法学、软件工具、软件工程环境;②软件工程管理,主要有软件管理、软件工程经济学。软件工程的主要思想是将工程化原则运用到软件开发过程,它包括3个要素:方法、工具和过程。
14.在数据库设计中,将E-R图转换成关系数据模型的过程属于______。
(分数:1.00)
(分数:1.00)
A.需求分析阶段
B.概念设计阶段
C.逻辑设计阶段 √
D.物理设计阶段
解析:[解析] 数据库的逻辑设计主要工作是将E-R图转换成指定RDBMS中的关系模式。需
求解析阶段的任务是通过详细调查现实世界要处理的对象,充分了解原系统的工作概况,明确用户的需求,然后在此基础上确定新系统的功能。概念设汁的目的则是解析数据间内在的语义关联,在此基础上建立一个数据的抽象模型。物理设计的主要目标是对数据库内部物理结构作调整并选择合理的存取路径,以提高数据库访问速度以及有效利用存储空间。
15.从工程管理角度,软件设计一般分为两步完成,它们是______。
(分数:1.00)
(分数:1.00)
A.概要设计与详细设计 √
B.数据设计与接口设计
C.软件结构设计与数据设计
D.过程设计与数据设计
解析:[解析] 从工程管理角度来看软件设计一般分为两步完成,分别是概要设计和详细设计。
16.设有定义int a;float b;执行scanf("%2d%f",&a,&b);语句时,若从键盘输入876543.0<回车>,a和b的值分别是______。
(分数:1.00)
(分数:1.00)
A.876和543.000000
B.87和6.000000 √
C.87和543.000000
D.76和543.000000
c语言struct头文件解析:[解析] “%2d”指定输入数据所占宽度为2,&是C语言中的求地址运算符。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论