二级C语言笔试-27
(总分:100.00,做题时间:90分钟)
一、选择题(总题数:40,分数:70.00)
1.以下选项中合法的标识符是


(分数: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)
 A.21 
 B.11
 C.6
 D.1
解析:[解析] 将5变换为二进制数为101,左移2位后为10100;将1转换为二进制数为00001;将10100与00001进行按位或运算后为10101,再将其转换为十进制数为21。
3.以下是if语句的基本形式:
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)
 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)
 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)
&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)
 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)
 A.栈 
 B.树
 C.队列
 D.二叉树
解析:[解析] 栈支持子程序调用。栈是一种只能在一端进行插入或删除的线性表。在主程序调用子程序时要首先保存主程序当前的状态,然后转去执行子程序,最终把子程序的执行结果返回到主程序中调用子程序的位置,继续向下执行,这种调用符合栈的特点。
9.程序段:int x=12; double y=3.141593; printf("%d%8.6f", x, y);的输出结果是


(分数: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)
 A.属性
 B.键
 C.关系 
 D.域
解析:[解析] 数据库逻辑设计的主要工作是将E-R图转换成指定RDBMS中的关系模式。从E-R图到关系模式的转换是比较直接的,实体与联系都可以表示成关系,E-R图中的属性也可以转换成关系的属性。实体集也可以转换成关系。
11.若函数中有定义语句:int k;,则


(分数:1.00)
 A.系统将自动给k赋初值0
 B.这时k中值无定义 
 C.系统将自动给k赋初值-1
 D.这时k中无任何值
解析:[解析] 函数中定义的变量,如果不专门声明,属于自动变量。自动变量不会自动赋初值,此时,变量中无确定值,称变量值“无意义”。
12.下列叙述中错误的是


(分数:1.00)
 A.软件测试的目的是发现错误并改正错误 
 B.对被调试的程序进行“错误定位”是程序调试的必要步骤
 C.程序调试通常也称为Debug
 D.软件测试应严格执行测试计划,排除测试的随意性
解析:[解析] 软件测试的目的是暴露错误,评价程序的可靠性。软件调试的目的是发现错误
的位置,并改正错误。软件测试和调试不是同一个概念。
13.若有定义语句:double x,y, *px, *py;,执行了px=&x, py=&y;之后,正确的输入语句是


(分数: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)
 A.栈是“先进先出”的线性表
 B.队列是“先进先出”的线性表
 C.循环队列是非线性结构
 D.有序性表既可以采用顺序存储结构,也可以采用链式存储结构 
解析:[解析] 栈是“先进后出”的线性表;队列是“先进先出”的线性表;循环队列是队列的一种顺序存储结构,因此是线性结构;有序线性表既可以采用顺序存储结构,也可以采用链式存储结构。
15.耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的是



(分数:1.00)
 A.提高耦合性、降低内聚性有利于提高模块的独立性
 B.降低耦合性、提高内聚性有利于提高模块的独立性 
 C.耦合性是指一个模块内部各个元素间彼此结合的紧密程度
 D.内聚性是指模块间互相连接的紧密程度
解析:[解析] 耦合性是模块间互相连接的紧密程度的度量,内聚性是一个模块内部各个元素间彼此结合的紧密程度的度量。较优秀的软件设计应尽量做到高内聚、低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,这样有利于提高模块的独立性。
16.若文本文件中原有内容为:hello,则运行以下程序后,文件中的内容为
#include<stdio.h>
main()
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);




(分数: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)
 A.
 B. 
 C.
 D.
解析:[解析] 专门的关系运算有3种:投影、选择和连接。选择运算是从关系中出满足给定条件的那些元组,其中的条件是以逻辑表达式给出的,值为真的元组将被选取,这种运算是从水平方向抽取元组的。投影运算是从关系模式中挑选若干属性组成新的关系,这是从列的
角度进行的运算,相当于对关系进行垂直分解。连接运算是二目运算,需要两个关系作为操作对象。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。