国家二级C语言机试(函数和数组)模拟试卷10
选择题
1.有以下程序
#include<stdio.h>>
main()
{int a[]={10,20,30,40),*p=a,i;
for(i=0;i<=3;i++){a[i]=*p;p++;}
pfintf(\\(B)
A. 20
B. 30
C. 10
D. 40
解析:因为指针变量p的初始值指向数组a,所以执行for循环语句后,数组a中的元素的值不变。
2.若有以下程序
main(){int i,j=0;
char a[]=\\(C)
A. Howareyou
B. Hay!
C. Howareyou!
D. How are you!
解析:主函数中利用for循环访问字符串的每一个字符,判断当前字符是否为空格,如果是空格则删除。因此删除字符串”How are you!”中空格以后,字符串为How are you!。
3.若有以下程序
#include<stdio.h>
main(){int i,j=0;
char a[]=\\(D)
A. Howareyou
B. Hay!
C. Howareyou!
D. ay
解析:主函数中利用for循环访问字符串a的每一个字符,判断当前字符是否为空格,如果是空格则保存该空格后面的一个字符存放到字符数组b中。在字符串\\
4.若有以下程序#include
char*a=\\(D)
A. #you#to#China!
B. me#you#to#China!
C. #China!
D. #to#China!
解析:程序中循环部分的主要功能是,在字符串b中寻找是否含有子串a,如果含有则退出,字符指针p指向该匹配子串后面的位置,利用printf函数输出则从该位置开始一直输出到字符串b的结尾。
5.以下能正确定义二维数组是
B
解析:C语言中定义二维数组,必须指定二维数组每一维的大小。选项A)没有指定数组a行的大小,错误;选项B),虽然没有指定行大小,但是可以通过大括号里面的元素个数计算出行的大小为1,因此是正确的;选项C)同样没有指定行的大小,也不能通过元素个数计算行的个数,错误;选项D)定义的是二行三列数组,但是后面数据是三行,超出范围,所以错。
6.若有以下说明和语句
int c[4][5],(*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)是取出该元素的值。
7.若有定义语句:int k[2][3],*pk[3];,则以下语句中正确的是(B)
A. pk=k;
B. pk[0]=k[1][2];
C. pk=k[0];
D. pk[1]=k;
解析:本题考查多维数组和数组指针。k是一个二维数组,pk是一个指针数组,该数组有3个元素,每个元素都是一个指向整型对象的指针。选项A)错误,等号的左边是一个数组地址,不是变量:选项B)是把元素k[1][2]赋值给pk[0];选项C)中等号左边不是变量;选项D)类型不匹配,pk[1]是指向一个整型对象,而k是一个二维数组首地址。
8.若有定义语句:int a[3][6];,按在内存中的存放顺序,a数组的第10个元素是(B)
A. a[0][4]
B. a[1][3]
C. a[0][3]
D. a[1][4]
解析:本题考查多维数组的定义和使用。a是一个二维数组,有3行6列,即每行6个元素,a的第10个元素位于第二行的第四个位置,即a[1][3]。
9.若有定义语句:int a[2][3],*p[3];,则以下语句中正确的是(C)
A. p=a;
B. p[0]=a;
C. p[0]=a[1][2];
D. p[1]=a;
解析:本题考查多维数组和数组指针。a是一个二维数组,p是一个指针数组,该数组有3个元素,每个元素都是一个指向整型对象的指针。选项A)错误,等号的左边是一个数组地址,不是变量;选项B)数据类型不匹配,p[0]是指向一个整型对象,而a是一个二维数组首地址;选项C)正确,是把元素a[1][2]赋值给p[0];选项D)和选项B)一样属于数据类型不匹配,p[1]是指向一个整型对象,而a是一个二维数组首地址。
10.若有定义:int a[2][3];,以下选项中对a数组元素正确引用的是(D)
A. a[2][!1]
B. a[2][3]
C. a[0][3]
D. a[1>2][!1]
解析:本题考查数组的使用,C语占中数组的下标从0开始。本题中a是一个_维数组,两个下标的范围分别是0-1和0-2。选项A)中第一个下标越界,超出了范围;选项B)中第一个和第二个下标都超出了范围;选项C)中第二个下标超出范围;选项D)中,1>2的值为0,!1的值为0,因此选项D)实际是访问a[0][0]。
11.以下数组定义中错误的是
B
解析:二维数组的初始化有以下几种形式:①分行进行初始化;②不分行的初始化;③部分数组元素初始化;④省略第一维的定义,不省略第二维的定义。在选项A)中赋值号左边定义了一个3行2列的二维数组,而右边用2行3列的数字进行赋初值。所以出现了边界的越界溢出而出错。
12.有以下程序
#include<stdio.h>
#define N 4
void fun(int a[][N],int b[])
{ int i;
for(i=0;i<N;i++)b[i]=a[i][i]-a[i][N—1—i];}
void main()
{int x[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},y[N],i;
fun(x,y);
for(i=0;i<N;i++)printf(\\(B)
A. -12,-3,0,0,
B. -3,-1,1,3,
C. 0,1,2,3,
D. -3,-3,-3,-3,
解析:fun函数的功能是求出二维数组a中第i行第i个元素与第N一1一i元素的差,赋给b[i]。在主函数中,把实参二维数组x和一维数组y传递给形参a和b,最后输出一维数组y中元素的值。
13.有以下程序
#include
main(){int b[3][3]={0,1,2,0,1,2
本文档预览:3600字符,共8290字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载