国家二级C语言机试(函数和数组)模拟试卷15
选择题
1.有下列程序:
#include
/*fun函数的功能是将a所指数组元素从大到小排序*/
void fun(int*a,int n) main()
{int t,i,j; {int c[10]={1,2,3,4,5,6,7,8,9,0),i;
for(i=0;i<n-1.j++) fun(c+4,6);
for(j=i+1 j<nj++) for(i=0;i<10;i++)printf(\\(A)
A. 1,2,3,4,9,8,7,6,5,0,
B. 0,9,8,7,6,5,1,2,3,4,
C. 0,9,8,7,6,5,4,3,2,1,
D. 1,2,3,4,5,6,7,8,9,0,
解析:fun()函数的功能是对数组a[]的元素从大到小进行排序。所以在主函数执行fun(c+4,6)语句时,将从数组c的第5个元素开始的后6个元素进行从大到小排序。排序之后,数组c的内容变为{1,2,3,4,9,8,7,6,5,0}。
2.有以下程序
#include
main(){
int c[6]={10,20,30,40,50,60},*p,*s;
p=c:
s=&c[5];
printf(\\(C)
A. 50
B. 6
C. 5
D. 60
解析:主函数中指针变量p指向数组c,s保存了数组最后一个元素的地址,那么s-p为两个地址之间的元素差5。
3.以下叙述中正确的是(C)
A. 一条语句只能定义一个数组
B. 数组说明符的一对方括号中只能使用整型常量,而不能使用表达式
C. 每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元
D. 在引用数组元素时,下标表达式可以使用浮点数
解析:数组的定义格式:
类型说明符 数组名[整型常量表达式],…;
可以同时定义多个类型相同的数组,之间以逗号分隔开,数组的类型表明了数组中元素的数据类型,数组中所有元素的类型相同,数组经过定义以后就可使用,编译程序将对其分配一片连续的存储空间进行连续存储。C语言中只能单个引用数组元素而不能一次引用整个数组。引用格式为:数组名[下标],引用元素时,需要注意下标只能为整型常量或整型表达式。
4.以下叙述中正确的是
C
解析:当系统为所定义的数组在内存中开辟一串连续的存储单元时.这些存储单元中并没有确定的值,可以在定义语句中为所定义数组的各个元素赋初值。
数组初始化赋值是指在数组定义时给数组元素赋予初值。初始化赋值的一般形式为:类型说明符 数组名[常量表达式]={值,值,…,};。
需要注意的是当所赋初值多于所定义数组的元素个数时,在编译时将给出出错信息,在指定初值时,第一个初值必定赋给下标为0的元素,然后按这些数值的排列顺序赋初值,只能给元素逐个赋值,不能给数组整体赋值。如果给全部元素赋值,则在数组说明中,可以不给出数组元素的个数。
5.如果定义float a[10],x;则以下叙述中正确的是(B)
A. 表达式a+1是非法的
B. 语句a=&x:是非法的
C. 三个表达式a[1]、*(a+1)、*&a[1]表示的意思完全不同
D. 表达式*&a[1]是非法的,应该写成*(&(a[1]))
解析:定义语句“float a[10],x;”以后,数组名a表示了数组元素的首地址,是常量在程序中不能更改,因此选项A是的描述是正确的。而指向运算符和取址运算符,是互反运算符优先级相同,*&a[1]和*(&a[1])含义相同。
6.有以下程序
#include
main()
{int a[]={10,20,30,40),*p=a,i;
for(i=0;i<=3;i++){a[i]=*p;p++;}
printf(\\(B)
A. 20
B. 30
C. 10
D. 40
解析:因为指针变量p的初始值指向数组a,所以执行for循环语句后,数组a中的元素的值不变。
7.若有以下程序
main(){int i,j=0;
char a[]=\\(C)
A. Howareyou
B. Hay!
C. Howareyou!
D. How are you!
解析:主函数中利用for循环访问字符串的每一个字符,判断当前字符是否为空格,如果是空格则删除。因此删除字符串\\
8.若有以下程序
#include
main(){int i,j=0;
char a[]=\\(D)
A. Howareyou
B. Hay!
C. Howareyou!
D. ay
解析:主函数中利用for循环访问字符串a的每一个字符,判断当前字符是否为空格,如果是空格则保存该空格后面的÷个字符存放到字符数组b中。在字符串\\
9.若有以下程序#include
char*a=\\(D)
A. #you#to#China!
B. me#you#to#China!
C. #China!
D. #to#China!
解析:程序中循环部分的主要功能是,在字符串b中寻找是否含有子串a,如果含有则退出,字符指针p指向该匹配子串后面的位置,利用printf函数输出则从该位置开始一直输出到字符串b的结尾。
10.以下能正确定义二维数组是
B
解析:C语言中定义二维数组,必须指定二维数组每一维的大小。选项A没有指定数组a行的大小,错误;选项B,虽然没有指定行大小,但是可以通过大括号里面的元素个数计算出行的大小为1,因此是正确的;选项C同样没有指定行的大小,也不能通过元素个数计算行的个数,错误;选项D定义的是二行三列数组,但是后面数据是三行,超出范围,所以错。
11.若有以下说明和语句
int c[4][51,(*p)[5];
p=c;
能够正确引用c数组元素的是(D)
A. p+1
B. *(p+3)
C. *(p+1)+3
D. *(p[0]+2)
解析:本题考查数组和指针,在本题中c是二维数组,指针p指向二维数组c,p其实是指向c数组的第一行。因此选项A中p+1指向c数组的第二行;选项B中,p+3表示p指向c数组的第三行,因此*(p+3)表示取出c数组第三行首元素的地址;选项C和选项B类似,表示取出数组c第二行首元素地址然后加3;选项D中p[0]+2表示数组第一行第三列元素的地址,因此*(p[0]+2)是取出该元素的值。
12.若有定义语句:int k[2][3],*pk[3];,则以下语句中正确的是(B)
A. pk=k;
B. pk[0]=k[1][2];
C. pk=k[0];
D. ok[]=k;
解析
本文档预览:3600字符,共9419字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载