二级C语言笔试-320
(总分:100.00,做题时间:90分钟)
一、选择题(总题数:50,分数:60.00)
1.能正确表示逻辑关系""a≥10或a≤0""的C语言表达式是______。
(分数:2.00)
(分数:2.00)
A.a>=10 or a<=0
B.a>=0|a<=10
C.a>=10&&a<=0
D.a>=10||a<=10 √
解析:[评析] C语言中的“或”关系用“||”表示,其他相关逻辑运算符“与”用“&&”表示:运算符“非”用“!”来表示。
2.有如下程序段:
#include<stdio.h>
#define Max(a,B) a>b?a:b
main()
int a=5,b=6,c=4,d;
d=c+Max(a,B) ;
printf("%d",D) ;
其输出结果为______。
(分数:2.00)
#include<stdio.h>
#define Max(a,B) a>b?a:b
main()
int a=5,b=6,c=4,d;
d=c+Max(a,B) ;
printf("%d",D) ;
其输出结果为______。
(分数:2.00)
A.10
B.5 √
C.6
D.编译错误
解析:[评析] 在C语言中,宏定义是直接替换的,所以在c+a>b?a:b这个条件表达式中,c+a>b为真,所以用a的值作为整个表达式的值,而a的值为5,所以整个表达式的值为5。
3.若变量已正确定义并赋值,下面符合C语言的表达式是______。
(分数:2.00)
(分数:2.00)
A.a:=b+1
B.a=b=c+2 √
C.int 18.5%3
D.a=a+7=c+b
解析:[评析] 选项A和C一望而知其错:对于表达式a=a+7=c+b(答案D),是先执行赋值表达式a+7=c+b,再把这个表达式的值赋给a,显然,表达式a+7=c+b非法,因为赋值表达式的左侧不能为常量或表达式。
4.有如下函数调用语句
func(rec1,rec2+rec3,(rec4,rec5));
该函数调用语句中,含有的实参个数是______。
(分数:2.00)
func(rec1,rec2+rec3,(rec4,rec5));
该函数调用语句中,含有的实参个数是______。
(分数:2.00)
A.3 √
B.4
C.5
D.有语法错误
解析:[评析] (rec4,rec5)是逗号表达式,它的值是rec5的值。所以该函数调用语句含有的实参个数是3。
5.有如下程序段
int *p,a=10,b=1;
p=&a;a=*p+b;
执行该程序段后,a的值为______。逗号表达式的运算顺序
(分数:2.00)
int *p,a=10,b=1;
p=&a;a=*p+b;
执行该程序段后,a的值为______。逗号表达式的运算顺序
(分数:2.00)
A.12
B.11 √
C.10
D.编译出错
解析:[评析] 执行p=&a;后,p指向整数a,*p即p的目标变量,也就是a;所以a=*p+b等价于a=a+b,可知a的值最终为 11。
6.检查软件产品是否符合需求定义的过程称为______。
(分数:2.00)
(分数:2.00)
A.确认测试 √
B.集成测试
C.验证测试
D.验收测试
解析:[评析] 确认测试的任务是验证软件的功能和性能及其他特性是否满足了需求规格说明中的确定的各种需求,以及软件配置是否完全、正确。
7.有以下函数定义:
void fun(int n,double x)……
若以下选项中的变量都已正确定义并赋值,则对函数fun正确调用语句是______。
(分数:2.00)
void fun(int n,double x)……
若以下选项中的变量都已正确定义并赋值,则对函数fun正确调用语句是______。
(分数:2.00)
A.fun(int y,double m);
B.k=fun(10,12.5);
C.fun(x,n); √
D.void fun(n,x);
解析:[评析] 函数调用的一般形式为:函数名(实参表列);,实参与形参的个数应相等,类型应一致,在调用函数时,不要指定其返回类型,对于返回类型为void的函数,不能作为赋值表达式的组成部分,所以选C。
8.下面一组中都是C语言关键字的是______。
(分数:2.00)
(分数:2.00)
A.double Int for
B.main while goto
C.volatile break static √
D.malloc sizeof new
解析:[评析] C语言中的关键字有32个关键字(参见C语言教程),本题中只有C符合题意。
9.有如下程序段
int a=14,b=15,x;
char c='A';
x=(a&&B) &&(c<'B');
执行该程序段后,x的值为______。
(分数:2.00)
int a=14,b=15,x;
char c='A';
x=(a&&B) &&(c<'B');
执行该程序段后,x的值为______。
(分数:2.00)
&ue
B.false
C.0
D.1 √
解析:[评析] a&&b的值为true,c<'B',的值也为true,所以(a&&b)&&(c<'B')的值为true。
但x是int型变量,所以(a&&b)&&(c<'B')的值最后要从bool型转换为int型赋给x。这样x的值应为1。
10.下面程序的输出结果是______。
main()
char str[10],c='a';
int i=0;
for(;i<5;i++)
str[i]=C++;
printf("%s",str);
(分数:2.00)
main()
char str[10],c='a';
int i=0;
for(;i<5;i++)
str[i]=C++;
printf("%s",str);
(分数:2.00)
A.abcde
B.a
C.不确定 √
D.bcdef
解析:[评析] 字符串少一个结束标志,所以输出的结果不确定。
11.C语言运算对象必须是整型的运算符是______。
(分数:1.00)
(分数:1.00)
A.%= √
B./
C.=
D.<=
解析:[评析] 在C语言中,模运算(即取余运算%)的运算对象必须是整型数据(常量、变量或表达式)。
12.有以下程序:
int*f(int *x,int *y)
if(*x<*y)return x;
else return y;
main()
int a=7,b=8,*p,*q,*r;
p=&a;q=&b;
r=f(p,q);
printf("%d,%d,%d/n",*p,*q,*r);
程序运行后输出结果是______。
int*f(int *x,int *y)
if(*x<*y)return x;
else return y;
main()
int a=7,b=8,*p,*q,*r;
p=&a;q=&b;
r=f(p,q);
printf("%d,%d,%d/n",*p,*q,*r);
程序运行后输出结果是______。
(分数:1.00)
A.7,8,8
B.7,8,7 √
C.8,7,7
D.8,7,8
解析:[评析] f函数的功能是返回地址为x,y的两个数中值较的数的地址,本题输出结果是7,8,7。
13.下述关于C语言文件的操作的结论中,正确的是______。
(分数:1.00)
(分数:1.00)
A.对文件操作必须先关闭文件
B.对文件操作必须先打开文件 √
C.对文件操作顺序无要求
D.对文件操作前必须先测文件是否存在,然后再打开文件
解析:[评析] 在c中对文件操作必须先打开文件,待文件操作完毕后要关闭文件。对文件以读的方式进行打开操作时,同时会执行文件的检查文件是否存在,不存在将会返回空的文件指针,如果对文件以写的方式打开时,文件不存在,将会自动创建文件,因此在C中打开文件前不必对其检查文件是否存在,故答案为B。
14.以下叙述不正确的是______。
(分数:1.00)
(分数:1.00)
A.分号是C语言的必要组成部分
B.C程序的注释可以写在句的后面
C.函数是C程序的基本单位
D.主函数的名字不一定用main表示 √
解析:[评析] C语言的程序是由主函数main()开始运行,由主函数来调用其他函数,所以D是错误的。
15.在面向对象方法中,一个对象请求另一对象为其服务的方式是通过发送______。
(分数:1.00)
(分数:1.00)
A.调用语句
B.命令
C.口令
D.消息 √
解析:[评析] 面向对象的世界是通过对象与对象间彼此的相互合作来推动的,对象间的这种互合作需要一个机制协助进行,这样的机制称为消息。消息是一个实例与另一个实例之间传递的信息,它请求对象执行某一处理或回答某一要求的信息,它统一了数据流和控制流。
16.若变量a、i已正确定义,且i已正确赋值,合法的语句是______。
(分数:1.00)
(分数:1.00)
A.a=1
B.++i; √
C.a=a++=5;
D.a=int(i);
解析:[评析] 选项D显然是错的,而选项A没有分号结束,不是C语句;a++=5违反了赋值表达式工侧必须为一个变量(不能是常量或表达式)的规定。
17.将E-R图转换到关系模式时,实体与联系都可以表示成______。
(分数:1.00)
(分数:1.00)
A.属性
B.关系 √
C.键
D.域
解析:[评析] 关系是由若干个不同的元组所组成,因此关系可视为元组的集合,将E-R图转换到关系模式时,实体与联系都可以表示成关系。
18.若已建立如下图所示的单向链表结构:
在该链表结构中,指针p、s分别指向图中所示结点,则不能将s所指的结点插入到链表末尾仍构成单向链表的语句组是______。
(分数:1.00)
在该链表结构中,指针p、s分别指向图中所示结点,则不能将s所指的结点插入到链表末尾仍构成单向链表的语句组是______。
(分数:1.00)
A. √
B.
C.
D.
解析:[评析] 在答案A中:p=p->next;s->next=p;p->next=s;s的确已插到了链表的末尾,但它的next却并没有为NULL,而是指向了它的直接前趋p;边样它就不是一个单向链
表(单向链表最后一个结点的next指针一定是一个NULL)。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论