国家二级(C语言)机试模拟试卷512
选择题
1.以下对C语言中联合类型数据的正确叙述是( )。(C)
A. 定义了联合变量后,即可引用该变量或该变量中的任意成员
B. 一个联合变量中可以同时存放其所有成员
C. 联合中的各个成员使用共同的存储区域
D. 在向联合中的一个成员进行赋值时,联合中其他成员的值不会改变
解析:联合体的几个特点:①联合体所占用的内存空间为最长的成员所占用的空间;②各个成员分量全部是从低地址方向开始使用内存单元;③联合体中的空间在某一时刻只能保存某一个成员的数据;④联合体和结构体可以任意嵌套。
2.若二维数组a有m列,则在a[i][j]前的元素个数为( )。(B)
A. j*m+i
B. i*m+j
C. j*m+i+1
D. i*m+j+1
解析:二维数组的元素可以看成是按矩阵形式存放的,总是先存放第一行的元素,再存放第二行的元素。数组第一维的下标是i,说明它前面还有i行,有i*m个元素,数组第二维的下标是i,说明它前面还有j列,有j个元素,所以共有i*m+j个元素。
3.设q1和q2是指向一个int型一维数组的指针变量,k为float型变量,下列不能正确执行的语句是( )。(B)
A. k=*q1*(*q2);
B. q1=k;
C. q1=q2;
D. k=*q1+*q2;
解析:本题考查指针变量的赋值操作。选项A)是将指针q1和q2所指向的变量值相乘,然后赋给k;选项B)中,float型数据和指针型数据之间不能进行赋值运算;选项C)中,是两个指针变量之间的赋值;选项D)中,是两个指针型变量所指向的两个int型数据相加。
4.有以下程序
#include<stdio.h>
main()
{FILE*fp;int i=20,j=30,k,n;
fp=fopen(\\(A)
A. 20 30
B. 20 50
C. 30 50
D. 30 20
解析:分析程序段,首先以只写方式打开文件,利用fprintf函数将i和j的值写入到文件dl.dat中,然后关闭文件:再以只读方式打开文件,利用格式化输入函数fscanf将文件中的数据赋值给k和n,最后输出k和n的值,分别是20和30。
5.若变量已正确定义并赋值,则错误的赋值语句是( )。(D)
A. a+=a+1;
B. a=sizeof(double);
C. a=d∥c;
D. a+1=a;
解析:赋值号“=”的左边必须是一个变量名,不可以是表达式。
6.以下函数实现按每行8个输出w所指数组中的数据:
#include<stdio.h>
void fun(int*w,int n)
{int i;
for(i=0;i<n;i++)
{
______________
printf(\\(C)
A. if(i/8==0)printf(\\
B. if(i/8==0)continue;
C. if(i%8==0)printf(\\
D. if(i%8==0)continue;
解析:要按照每行8个输出数据的话,横线处语句的功能应该为:当i是8的倍数时(即i%8==0),输出一个换行符。因此C选项正确。
7.以下叙述中正确的是( )。
A
解析:考查一维数组以及字符数组的初始化。初始化的时候可以只给数组的前面一部分元素设定初值,故A)正确。若对数组全部元素赋初值时,可以不指定数组元素的个数,选项B)错。字符数组中的每个元素为一个字符,需要用单引号,选项C)错。定义字符数组时可以将字符串直接赋给该字符数组,其他情况则不可以,选项D)错。答案选A)。
8.数据结构中,与所使用的计算机无关的是数据的 ( )。(C)
A. 存储结构
B. 物理结构
C. 逻辑结构
D. 线性结构
解析:数据的逻辑结构反映的是数据元素之间的逻辑关系,与使用的计算机无关。
9.下列数据结构中,能够按照“先进后出”原则存取数据的是( )。(B)
A. 循环队列
B. 栈
C. 队列
D. 二叉树
解析:栈是按“先进后出”的原则组织数据的;队列是按“先进先出”的原则组织数据的,因此本题答案为B。
10.待排序的关键码序列为(15,20,9,30,67,65,45,90),要按关键码值递增的顺序排序,采取简单选择排序法,第一趟排序后关键码15被放到第( )个位置。(A)
A. 2
B. 3
C. 4
D. 5
解析:选择排序的基本思想是扫描整个线性表,从中选出最小的元素,将它交换到表的最前面,然后对剩下的子表采用同样的方法,直到子表为空。所以第一趟排序后,将选出最小的元素9放在第一个位置,元素15则放在第二个位置。
11.下列选项中,不能作为合法常量的是( )。(B)
A. 1.234e04
B. 1.234e0.4
C. 1.234e+4
D. 1.234e0
解析:用指数形式表示的实型常量需注意两点:①e或E后面的指数必须是整数:②指数必须是不超过数据表示范围的正负整数,并且在e或E前必须有数字。
12.有以下程序段:
#include
int a,b,c;
a=10;b=50;c=30;
if(a>b)a=b,b=c;c=a;
prinff(“a=%d b=%d c=%d\n”,a,b,c);
程序运行后的输出结果是( )。(B)
A. a=10 b=50 c=30
B. a=10 b=50 c=10
C. a=10 b=30 c=10
D. a=50 b=30 c=50
解析:本题中a>b的条件不满足,所以不执行逗号表达式a=b,b=c;的操作,而是执行c=a操作,即c的值为10。
13.有以下程序:
#include<stdio.h>
main()
{
chaur x=2,y=2,z;
z=(y<<1)&(x>>1);
pnnff(\\(B)
A. 1
B. 0
C. 4
D. 8
解析:本题考查位运算<<和&。y<<1为4,x>>1为1,二者与运算后为0,故B选项正确。
14.以下程序运行后的输出结果是( )。
#include
void reverse(int a[],int n)
{int i,t;
for(i=0;i<n/2;i++)
{t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}
}
main()
{int b[10]={10,9,8,7,6,5,4,3,2,1};int i,s=0;
reverse(b,10);
for(i=0;i<3;i++)s+=
本文档预览:3600字符,共15208字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载