二级C语言笔试-27
(总分:100.00,做题时间:90分钟)
一、选择题(总题数:40,分数:70.00)
1.以下选项中合法的标识符是
(分数:2.00)
(分数:2.00)
A.1_1
B.1--1
C._11 √
D.1__
解析:[解析] C语言中的用户标识符可以由字母、数字和下画线组成,且第一个字符不能是数字。选项A、D第一个字母不符合语法要求,选项B中“-”是非法字符。
2.以下程序运行后的输出结果是
#include<stdio.h>
main()
int a=5, b=1, t;
t=(a<<2)|b); printf("%d/n", t);
(分数:2.00)
#include<stdio.h>
main()
int a=5, b=1, t;
t=(a<<2)|b); printf("%d/n", t);
(分数:2.00)
A.21 √
B.11
C.6
D.1
解析:[解析] 将5变换为二进制数为101,左移2位后为10100;将1转换为二进制数为00001;将10100与00001进行按位或运算后为10101,再将其转换为十进制数为21。
3.以下是if语句的基本形式:
if(表达式)语句
其中“表达式”
(分数:2.00)
if(表达式)语句
其中“表达式”
(分数:2.00)
A.必须是逻辑表达式
B.必须是关系表达式
C.必须是逻辑表达式或关系表达式
D.可以是任意合法的表达式 √
解析:[解析] C语言中,if语句中的控制表达式可以是任意合法的表达式。如果表达式的取值为0,则表示不满足条件;如果表达式的取值为非0,则表示满足条件。
4.以下程序运行后的输出结果是
#include<stdio.h>
viod f(int *p, int *q);
main()
int m=1, n=2, *r=&m;
f(r, &n); printf("%d, %d", m, n);
void f(int *p, int *q)
P=p+1; *q=*q+1;
(分数:2.00)
#include<stdio.h>
viod f(int *p, int *q);
main()
int m=1, n=2, *r=&m;
f(r, &n); printf("%d, %d", m, n);
void f(int *p, int *q)
P=p+1; *q=*q+1;
(分数:2.00)
A.1,3 √
B.2,3
C.1,4
D.1,2
解析:[解析] 在f函数中,p=p+1;的操作改变的是p的指向;而*q=*q+1;的操作,将q所指向存储单元n中的值加1,即m的值不变,仍为1,而n的值变为3。
5.以下选项中,能用作数据常量的是
(分数:2.00)
(分数:2.00)
A.o115
B.0118
C.1.5e1.5
D.115L √
解析:[解析] 对于选项A,“o”不符合语法要求;对于选项B,以0开头代表八进制整型常量,但其后面的数字中又出现了非八进制数字8,出错;对于选项C,用指数形式表示实型常量,e后面的指数部分必须为整型数,出错;对于选项D,整数后面加字母L是长整型常量的表示形式。
6.设有定义:char s[81]; int i=10;,以下不能将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是
(分数:2.00)
(分数:2.00)
&s(s);
B.while((s[i++]=getchar())!='/n'); s[i]='/0';
C.scanf("%s", s); √
D.do scanf("%C", &s[i]); while(s[i++]!='/n'); s='/0';
解析:[解析] 在scanf中,采用“%s”格式符将整个字符串一次输入,直到遇到空格或制表符为止。对于选项C,不能正确读入带有空格的字符串。
7.以下程序运行后的输出结果是
#include<stdio.h>
main()
int a=1, b=2, C=3, d=0;
if(a==1 && b++= =2)
if(b!=2 || c--!=3) printf("%d, %d, %d/n", a, b, C);
else printf('%d, %d, %d/n", a, b, C);
else printf("%d, %d, %d/n", a, b, C);
(分数:2.00)
#include<stdio.h>
main()
int a=1, b=2, C=3, d=0;
if(a==1 && b++= =2)
if(b!=2 || c--!=3) printf("%d, %d, %d/n", a, b, C);
else printf('%d, %d, %d/n", a, b, C);
else printf("%d, %d, %d/n", a, b, C);
(分数:2.00)
A.1,2,3
B.1,3,2
C.1,3,3 √
D.3,2,1
解析:[解析] 第一条if语句的条件判断成立,并且执行b++操作后,b的值为3;第二条if语句判断,条件b!=2的值为真,不再进行c--!=3的判断,因此,c未被改变,仍然为3。
8.支持子程序调用的数据结构是
(分数:2.00)
(分数:2.00)
A.栈 √
B.树
C.队列
D.二叉树
解析:[解析] 栈支持子程序调用。栈是一种只能在一端进行插入或删除的线性表。在主程序调用子程序时要首先保存主程序当前的状态,然后转去执行子程序,最终把子程序的执行结果返回到主程序中调用子程序的位置,继续向下执行,这种调用符合栈的特点。
9.程序段:int x=12; double y=3.141593; printf("%d%8.6f", x, y);的输出结果是
(分数:2.00)
(分数:2.00)
A.123.141593 √
B.12 3.141593
C.12,3.141593
D.123.141593
解析:[解析] printf函数的两个格式控制符之间没有空格和逗号,故选项B、C不正确;输出格式控制符%m.nf表示指定输出的实型数据的宽度为m(包含小数点)并保留n位小数。当输出数据的小数位大于n时,最后一位按照四舍五入进行截取;若输出数据的小数位小于n时,在小数的最右边补0;若给出的总宽度m小于n加上整数位数和小数点,则自动突破m的限制;反之,数字右对齐,左边补空格。本题中3.141593数值长度为8,小数位数为6,因此左端没有空格。
10.将E-R图转换为关系模式时,实体和联系都可以表示为
(分数:2.00)
(分数:2.00)
A.属性
B.键
C.关系 √
D.域
解析:[解析] 数据库逻辑设计的主要工作是将E-R图转换成指定RDBMS中的关系模式。从E-R图到关系模式的转换是比较直接的,实体与联系都可以表示成关系,E-R图中的属性也可以转换成关系的属性。实体集也可以转换成关系。
11.若函数中有定义语句:int k;,则
(分数:1.00)
(分数:1.00)
A.系统将自动给k赋初值0
B.这时k中值无定义 √
C.系统将自动给k赋初值-1
D.这时k中无任何值
解析:[解析] 函数中定义的变量,如果不专门声明,属于自动变量。自动变量不会自动赋初值,此时,变量中无确定值,称变量值“无意义”。
12.下列叙述中错误的是
(分数:1.00)
(分数:1.00)
A.软件测试的目的是发现错误并改正错误 √
B.对被调试的程序进行“错误定位”是程序调试的必要步骤
C.程序调试通常也称为Debug
D.软件测试应严格执行测试计划,排除测试的随意性
解析:[解析] 软件测试的目的是暴露错误,评价程序的可靠性。软件调试的目的是发现错误
的位置,并改正错误。软件测试和调试不是同一个概念。
13.若有定义语句:double x,y, *px, *py;,执行了px=&x, py=&y;之后,正确的输入语句是
(分数:1.00)
(分数:1.00)
A.scanf("%f%f", x, y);
B.scanf("%f%f, &x, &y);
C.scanf("%lf%le", px, py); √printf函数属于
D.scanf("%lf%lf", x, y);
解析:[解析] scanf函数的格式为:scanf(控制格式,地址表列)。其中,控制格式和地址表列之间用“,”分开,地址表列应为变量的地址。在选项A、D中,地址表列表示错误;选项B中控制格式与地址表列之间缺少逗号。
14.下列叙述中正确的是
(分数:1.00)
(分数:1.00)
A.栈是“先进先出”的线性表
B.队列是“先进先出”的线性表
C.循环队列是非线性结构
D.有序性表既可以采用顺序存储结构,也可以采用链式存储结构 √
解析:[解析] 栈是“先进后出”的线性表;队列是“先进先出”的线性表;循环队列是队列的一种顺序存储结构,因此是线性结构;有序线性表既可以采用顺序存储结构,也可以采用链式存储结构。
15.耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的是
(分数:1.00)
A.提高耦合性、降低内聚性有利于提高模块的独立性
B.降低耦合性、提高内聚性有利于提高模块的独立性 √
C.耦合性是指一个模块内部各个元素间彼此结合的紧密程度
D.内聚性是指模块间互相连接的紧密程度
解析:[解析] 耦合性是模块间互相连接的紧密程度的度量,内聚性是一个模块内部各个元素间彼此结合的紧密程度的度量。较优秀的软件设计应尽量做到高内聚、低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,这样有利于提高模块的独立性。
16.若文本文件中原有内容为:hello,则运行以下程序后,文件中的内容为
#include<stdio.h>
#include<stdio.h>
main()
EILE *f;
f=fopen("", "w");
fprintf(f, "abc");
fclose(f);
(分数:1.00)
EILE *f;
f=fopen("", "w");
fprintf(f, "abc");
fclose(f);
(分数:1.00)
A.helloabc
B.abclo
C.abc √
D.abchello
解析:[解析] "w"表示建立一个供写入的文件。如果文件不存在,则系统将用在fopen调用中指定的文件名建立一个新文件;如果指定的文件已存在,则将从文件的起始位置开始写入,文件中原有的内容将全部消失。
17.以下程序运行后的输出结果是
#include<stdio.h>
void fun(int *a, int *b)
int *c;
c=a; a=b; b=c;
main()
int x=3, y-5, *p=&x, *q=&y;
fun(p, q); printf("%d, %d,", *p, *q);
fun(&x, &y); printf("%d, %d/n", *p, *q);
#include<stdio.h>
void fun(int *a, int *b)
int *c;
c=a; a=b; b=c;
main()
int x=3, y-5, *p=&x, *q=&y;
fun(p, q); printf("%d, %d,", *p, *q);
fun(&x, &y); printf("%d, %d/n", *p, *q);
(分数:1.00)
A.3,5,5,3
B.3,5,3,5 √
C.5,3,3,5
D.5,3,5,3
解析:[解析] fun函数功能是改变指针变量a和b的指向,并不能改变a和b所指向存储空间的值。因此,第一个printf语句的输出结果为“3,5”。第二个printf语句的输出结果仍为“3,5”。
18.有两个关系R、S如下:
由关系R通过运算得到关系S,则所使用的运算为
(分数:1.00)
由关系R通过运算得到关系S,则所使用的运算为
(分数:1.00)
A.
B. √
C.
D.
解析:[解析] 专门的关系运算有3种:投影、选择和连接。选择运算是从关系中出满足给定条件的那些元组,其中的条件是以逻辑表达式给出的,值为真的元组将被选取,这种运算是从水平方向抽取元组的。投影运算是从关系模式中挑选若干属性组成新的关系,这是从列的
角度进行的运算,相当于对关系进行垂直分解。连接运算是二目运算,需要两个关系作为操作对象。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论