国家二级(C语言)机试模拟试卷493
选择题
1.表达式:(int)((double)9/2)—(9)%2的值是( )。(B)
A. 0
B. 3
C. 4
D. 5
解析:运算符“/”和“%”的优先级高于“—”,所以先进行除法和求余运算,再进行减法运算。强制类型转换表达式的形式:(类型名)(表达式)。“9/2”结果为4,转换成double类型再转换成int类型结果依然为4,(9)%2的结果为1,4—1的最后结果为3。
2.下列数据结构中,能够按照“先进后出”原则存取数据的是( )。(B)
A. 循环队列
B. 栈
C. 队列
D. 二叉树
解析:栈是按照“先进后出”原则在表特定的一端进行插入和删除运算操作的线性表。
3.下列叙述中正确的是( )。(A)
A. 程序执行的效率与数据的存储结构密切相关
B. 程序执行的效率只取决于程序的控制结构
C. 程序执行的效率只取决于所处理的数据量
D. 以上说法均错误
解析:程序执行的效率与数据的存储结构、数据的逻辑结构、程序的控制结构、所处理的数据量等有关。
4.下列叙述中正确的是( )。(D)
A. 所有数据结构必须有根结点
B. 所有数据结构必须有终端结点(即叶子结点)
C. 只有一个根结点,且只有一个叶子结点的数据结构一定是线性结构
D. 没有根结点或没有叶子结点的数据结构一定是非线性结构
解析:D项正确,线性结构的特点是:①集合中必存在“第一个元素”且惟一;②集合中必存在“最后一个元素”且惟一;③除最后一个元素外,其他数据元素均有惟一的“后继”;④除第一个元素外,其他数据元素均有惟一的“前驱”。所以没有根结点或没有叶子结点的数据结构一定是非线性结构。AB两项错误,不是所有数据结构都必须有根结点和叶子结点;C项错误,数据结构中若有中间结点不满足只有一个前件或者后件的条件,就不是线性结构。
5.有下列程序,其中%u表示按无符号整数输出。
main()
{ unsigned int x=0xFFFF;
/*x的初值为十六进制数 */
printf(’’%u\n’’,x);
}
程序运行后的输出结果是( )。(B)
A. -1
B. 65535
C. 32767
D. 0xFFFF
解析:“%u”格式符表示以十进制形式输出无符号整形变量。本题中无符号整形变量x=0xFFFF表示的是十六进制无符号整型变量的最大值65535,所以最后输出的结果为65535。
6.下面程序运行后的输出结果是( )。
#include<stdio.h>
main()
{ int a[5]={1,0,4,2,0},b[5]={1,2,3,4,5),i,s=0;
for(i=0;i<5;i++)s=s+b[a[i]];
printf(\\(A)
A. 12
B. 15
C. 11
D. 8
解析:这道题目是计算机一维数组b中某些元素的和。这些元素的下标值是一维数组a中元素值。s=0+b[1]+b[0]+b[4]+b[2]+b[0]=2+1+5+3+1=12。
7.已知下列函数定义:
fun(int*b,int c,int n,int data)
{int k:
for(k=0;k<m*n;k++)
{*b=data;
b++;}
}
则调用此函数的正确写法是(假设变量a的说明为int a[50])( )。(D)
A. fun(*a,4,5,1);
B. fun(&a,4,5,1);
C. fun((int*)a,4,5,1);
D. fun(a,4,5,1);
解析:本题考查函数调用时的参数传递。fun函数的调用形式为fun(int *b,int m,int n,int data),而调用数组时,用数组名表示一个指向数组第一个元素的指针,因此调用时的形式为。fun(a,4,5,1)。
8.有以下程序:
#include<stdio.h>
#define PT 3.5;
#define S(x) PT*x*x;
main()
{int a=1,b:2;printf(\\(C)
A. 7.5
B. 31.5
C. 程序有错无输出结果
D. 14.0
解析:宏定义不是C语句,末尾不需要有分号。所以语句printf(\\
9.下列关于线性链表的叙述中,正确的是( )。(C)
A. 各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致
B. 各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续
C. 进行插入与删除时,不需要移动表中的元素
D. 以上三种说法都不对
解析:一般来说,在线性表的链式存储结构中,各数据结点的存储序号是不连续的,并且各节点在存储空间中的位置关系与逻辑关系也不一致。线性链表中数据的插入和删除都不需要移动表中的元素,只需改变节点的指针域即可。故C选项正确。
10.下列叙述中错误的是( )。(C)
A. C语句必须以分号结束
B. 复合语句在语法上被看作一条语句
C. 空语句出现在任何位置都不会影响程序运行
D. 赋值表达式末尾加分号就构成赋值语句
解析:C语言规定每条语句和数据定义的最后必须有一个分号,分号是C语句的必要组成部分。复合语句也称为“语句块”,其形式如下:{语句1;语句2;……语句n;},即用一对大括号把若干语句括起来构成一个语句组。一个复合语句在语法上视为一条语句,在一对花括号内的语句数量不限。一个赋值表达式的最后加一个分号就成为一条语句,即赋值语句。空语句是只有一个分号的语句,它什么也不做,程序设计中有时需要加一个空语句来表示存在一条语句,但随意加分号会导致逻辑上的错误,而且这种错误十分隐蔽,编辑器也不会提示逻辑错误,需要慎用。
11.有下列程序:
main()
{int m,n,p;
scanf(\\(A)
A. m=123n=456p=789
B. m=123 n=456 p=789
C. m=123,n=456,p=789
D. 123 456 789
解析:scanf()函数中格式控制字符串是为了输入数据用的,无论其中有什么字符,在输入数据时,按照一一对应的位置原样输入这些字符。
12.有以下程序:
#include <stdio.h>
int f( int x,int y)
{ return((y-x)*x); }
main()
{ int a=3,b=4,c=5,d;
d=f(f(a,b),f(a,c));
printf(\\(D)
A. 7
B. 10
C. 8
D. 9
本文档预览:3600字符,共16274字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载