[计算机类试卷]国家二级C语言机试(指针)模拟试卷2及答案与解析.doc

上传人:deputyduring120 文档编号:498011 上传时间:2018-11-30 格式:DOC 页数:27 大小:66.50KB
下载 相关 举报
[计算机类试卷]国家二级C语言机试(指针)模拟试卷2及答案与解析.doc_第1页
第1页 / 共27页
[计算机类试卷]国家二级C语言机试(指针)模拟试卷2及答案与解析.doc_第2页
第2页 / 共27页
[计算机类试卷]国家二级C语言机试(指针)模拟试卷2及答案与解析.doc_第3页
第3页 / 共27页
[计算机类试卷]国家二级C语言机试(指针)模拟试卷2及答案与解析.doc_第4页
第4页 / 共27页
[计算机类试卷]国家二级C语言机试(指针)模拟试卷2及答案与解析.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、国家二级 C语言机试(指针)模拟试卷 2及答案与解析 一、选择题 1 若有定义: int w35; 则以下不能正确表示该数组元素的表达式是( )。 ( A) *(w+1)4 ( B) *(*w+3) ( C) *(*(w+1) ( D) *( 以下不能使变量 year中的值增至 2010的语句是( )。 ( A) *p+; ( B) (*p)+; ( C) +(*p); ( D) *p+=1; 3 若在 定义语句: int a,b,c,*p= 接着执行以下选项中的语句,则能正确执行的语句是( )。 ( A) scanf(“%d“,p); ( B) scanf(“%d%d%d“,a,b,c);

2、( C) scanf(“%d“,a,b,c); ( D) scanf(“%d“, 4 若有以下程序 #include void sp(int *a) int b=2; a= *a = *a * 2; printf(“%d,“, *a); main() int k=3, *p= sp(p); printf(“%d,%dn“, k, *p); 则程序的输出结果是( )。 ( A) 4,3,3 ( B) 4,3,4 ( C) 6,3,6 ( D) 6,6,6 5 若有以下程序 #include int k=7; void f(int *s) int *t= *s=t; printf(“%d,%d,%

3、d,“, k, *t, *s); main() int i=3,*p= f(r); printf(“%d,%d,%dn“, i, *p, *r); 则程序的输出结果是( )。 ( A) 7,7,7,3,7,7 ( B) 3,7,7,7,7,7 ( C) 7,7,7,3,3,3 ( D) 3,3,3,7,7,7 6 若有以下程序 #include int *f(int *s,int *t) int *k; if (*s void sp(int *a) int b=2; *a = *a * 2; printf(“%d,“, *a); a= *a = *a * 2; printf(“%d,“, *a

4、); main() int k=3; sp( printf(“%dn“, k); 则程序的输出结果是( )。 ( A) 6,4,6 ( B) 6,4,3 ( C) 6,12,12 ( D) 9,4,9 8 若有以下程序 #include int k=7,m=5; void f(int *s) int *t= s= *s= printf(“%d,%d,%d,“, k, *t, *s); main() int i=3,*p= f(r); printf(“%d,%d,%dn“, i, *p, *r); 则程序的输出结果是( )。 ( A) 7,5,5,3,3,3, ( B) 7,5,7,3,3,3,

5、 ( C) 7,5,7,3,5,7, ( D) 7,7,5,3,3,3, 9 若有以下程序 #include int *f(int *s, int *t) int k; if (*s main() int y=1,x,a=2,4,6,8,10,*p; p= for( x=0; x void fun( int *s,int n, int *k ) int i; for( i=0 ,*k=i; i s*k ) _ ; main() int a5=1,6,2,8,0, k; fun( a, 5, printf(“%d %dn“, k, ak ); 在横线处应填入的内容是( )。 ( A) *k=i

6、( B) k=i ( C) *k=i-s ( D) k=i-s 12 有以下程序 #include main() int a34= 1,3,5,7,9,11,13,15,17,19,21,23, (*p)4=a,i,j,k=0; for( i=0; i main() int c6=10,20,30,40,50,60, *p,*s; p = c; s = printf(“%dn“, s-p ); 程序运行后的输出结果是( )。 ( A) 5 ( B) 50 ( C) 6 ( D) 60 14 有以下程序 #include main() int a5=2,4,6,8,10, *p,*k; p =

7、a; k = printf(“%d “, *( p+ ) ); printf(“%dn“, *k ); 程序运行后的输出结果是( )。 ( A) 2 4 ( B) 4 4 ( C) 2 2 ( D) 4 6 15 有以下程序 #include main() int aa33= 2,4,6 , i, *p = for ( i=0; i int fun( int *s,int n ) int i , k; for( i=0 , k=i; i sk ) _; return ( k ) ; 在横线处应填入的内容是( )。 ( A) k = i ( B) i = k ( C) k+ ( D) +k 17

8、 有以下程序 #include int *f(int *s,int *t) if (*s main() int a10 = 11,12,13,14,15,16,17,18,19,20 ,*p=a,i=9 ; printf( “%d,%d,%dn“,a p-a , pi,*( 程序运行后的输出结果是( )。 ( A) 11,20,20 ( B) 12,20,20 ( C) 11,19,19 ( D) 12,19,20 21 有以下程序 #include void fun( int *s, int t, int *k ) int p; for( p=0, *k=p; ps*k ) *k = p;

9、main() int a10 = 11,12,13,14,15,16,20,18,19,10 ,k ; fun( a,10, printf( “%d,%dn“,k, ak ); 程序运行后的输出结果是( )。 ( A) 6,20 ( B) 10,9 ( C) 7,20 ( D) 10,10 22 以下选项中,不能对主函数中变量 i和 j的值进行交换的程序是( )。 ( A) #include void swap( int *p,int *q) int *t; *t=*p; *p=*q; *q=*t; main() int i=10,j=20, *a= swap(a,b); printf(“i=

10、%d j= %dn“, i,j ); ( B) #include void swap( int *p,int *q) int t; t=*p; *p=*q; *q=t; main() int i=10,j=20, *a= swap(a,b); printf(“i=%d j= %dn“, i,j ); ( C) #include #include void swap( int *p,int *q) int *t; t=(int *)malloc(sizeof(int); *t=*p; *p=*q; *q=*t; free(t); main() int i=10,j=20; swap( print

11、f(“i=%d j= %dn“, i,j ); ( D) #include void swap( int *p,int *q) int t; t=*p; *p=*q; *q=t; main() int i=10,j=20 , *x= swap(x,y); printf(“i=%d j= %dn“, i,j ); 23 有以下程序 #include main() int a10 = 1,3,5,7,11,13,17 , *p=a; printf(“%d,“, *( p+ ); printf(“%dn“, *( +p ); 程序运行后的输出结果是( )。 ( A) 1,5 ( B) 3,5 ( C

12、) 3,7 ( D) 1,3 24 有以下程序 #include main() int *p, x=100; p= x=*p+10; printf(“%dn“, x); 程序运行后的输出结果是( ) ( A) 110 ( B) 120 ( C) 100 ( D) 90 25 有以下程序 #include void fun( int x, int y, int *z ) *z = y-x; main() int a, b, c; fun(10,5, fun(7,a, fun(a,b, printf(“%d,%d,%dn“, a,b,c ); 程序运行后的输出结果是( )。 ( A) -5,-12

13、,-7 ( B) 5,2,3 ( C) -5,-12,-17 ( D) 5,-2,-7 26 有以下程序 #include void fun( int *s, int n1, int n2 ) int i,j,t; i=n1; j=n2; while( i int change(int* data) return (*data) +; main() int data = 123; change( printf(“%d,“, data); data = change( printf(“%d,“, data); printf(“n“); 程序 运行后的输出结果是( )。 ( A) 124,124,

14、 ( B) 123,124, ( C) 124,123, ( D) 123,123, 28 有如下程序 #include void change(int* array, int len) for (; len=0; len-) arraylen += 2; main() int i, array5 = 1,2; change(array, 4); for (i=0; i main() char* p1 = 0; int* p2 = 0; double* p3 = 0; printf(“%d,%d,%dn“, sizeof(p1), sizeof(p2), sizeof(p3); 程序运行后的输

15、出结果是( )。 ( A) 4,4,4 ( B) 1,4,8 ( C) 0,0,0 ( D) 1,2,4 32 有如下程序 #include main() int i, *ptr; int array3 = 8,2,4; for (ptr=array, i=0; i void fun(int *x,int s,int e) int i,j,t; for(i=s,j=e; i main() int s32= 1,2,3,4,5,6,*ps3,k; for(k=0;k3;k+) psk=sk; printf(“%d “,*(psk+1); 程序的运行结果是( )。 ( A) 2 4 6 ( B)

16、1 3 5 ( C) 1 2 3 ( D) 4 5 6 国家二级 C语言机试(指针)模拟试卷 2答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 若要访问第二行第五列的元素需要用 (*(w+1)4,选项 A)少了一个圆括号,如果不加圆括号,根据结合性, (w+1)会先和 4结合,这是没有意义的,所以答案选 A)。 【知识模块】 指针 2 【正确答案】 A 【试题解析】 考查指针的用法。指针变量存储的是其指向的变量的地址, *p表示的是 p指向的变量的值,自加运算符( +)的优先级要高于取值运算符( *)的优先级, *p+表示的是先将指针 p指向下一个地址然后再取该地址的值,所以得到的

17、结果并不是把 year的值增至 2010选项 A)错误,答案选 A)。 【知识模块】 指针 3 【正确答案】 A 【试题解析】 scanf函数的一般形式为 scanf(“格式控制字符串 “,输入项 1,输入项2,) ,其中,输入项由地址运算符 “*s=t;“同样使得 *s、 *t、 k等价,所以刚开始输出 3个 7,函数调用结束之后 *p与 *r的值均为 7, i不变,答案选 A。 【知识模块】 指针 6 【正确答案】 A 【试题解析】 考查指针与函数。被调函数为指针型函数,返回的是 s这一指针型数据。虽然该函数进行的是地址传参,但只是改变了指针的指向,对原指向的数据并没有改变。并且若以指针作

18、为操作单元,不涉及其指向的数据时,该函数仍然可以看做是值传递,即形参指针指向的变化不会影响到实参指针的指向。 if语句将 s指向 *s、 *t较大的数据 的地址并返回。所以函数调用结束之后, i、 j值不变,p的指向不变, r的指向和 q的指向一致,输出结果为: 3,5,3,5,5,答案选 A。 【知识模块】 指针 7 【正确答案】 A 【试题解析】 考查地址传参。地址传参过程中,实参和形参指向同一段地址空间,所以指向的变量的变化保持同步,但是指向的地址空间实参不会随着形参的变化而变化。函数 sp()中, *a为 3,所以第一次输出值为 6;之后 *a指向变量 b的地址,所以输出结果为 4,

19、*a指向的变化不能改变 k的地址,所以 k值为 6,答案选 A。 【知识模块】 指针 8 【正确答案】 A 【试题解析】 本题考查指向指针的指针。函数 f()中,语句 “s=“将 s指向了指针 t的地址,即 *s与 t等价,而语句 “*s=“相当于 “t=“使得 *p、 *r、 i三者等价。函数 f()以二级指针 r作为实参,内部重新改变了形参 s的指向后再进行操作,由于形参只是实参的一个副 本,形参指针指向的变化不会影响到实参指针的指向,所以实参 r的指向没有变化,输出结果为 3,3,3,答案选A。 【知识模块】 指针 9 【正确答案】 A 【试题解析】 考查指针与函数。该函数进行的是地址传

20、参,形参和实参指向的变量的值保持一致。函数 f()中,如果 (*s *t)则将指针 s、 t中指向的变量的数据进行交换, s指向的地址中存放的是值较大的数据。函数调用结束后, p、 q指向的值发生了改变, r和 p的指向保持一致,所以答案选 A。 【知识模块】 指针 10 【正确答案】 A 【试 题解析】 考查指针与一维数组。语句 p = 意味着将指针 p指向数组 a的第二个元素, p+1则是指向数组 a的第三个元素,同理, p+x则是指向数组 a的第 x+2个元素, x的取值为 0、 1、 2,然后用 y和对应数组的元素累加, y=1,即是 1+2+4+6+8=19,结果选 A)。 【知识模

21、块】 指针 11 【正确答案】 A 【试题解析】 该代码段的逻辑是循环判定 s中的值,如果大于 s*k则用 *k记录当前的元素下标,记录当前下标的语句应为 “*k=i“,表示把 i的值赋给了 k指向的变量的值,答案选 A。 【知识模块】 指针 12 【正确答案】 A 【试题解析】 考查行指针。 (*p)4表示一个能存放四个整型元素首地址的一维数组的首地址。所以 “k=k+*(*(p+i)+j)“中 k累加的是数组中第 i行第 j列的元素。两层循环中 i从 0到 2, j从 0到 1,所以累加的值为 1、 3、 9、 11、 17、 19,答案选A。 【知识模块】 指针 13 【正确答案】 A

22、【试题解析】 考查指针与一维数组。语句 p = c;意味着将指针 p指向数组 c的第一个元素,语句 s = 意味着将指针 s指向数组 c的第 6个元素,指针 s与指针 p之间隔了 5个元素,结果选 A)。 【知识模块】 指针 14 【正确答案】 A 【试题解析】 在该程序中, a是 int类型的一维数组, p为基本类型为 int的指针变量,指向数组 a的第一个元素; k为二级指针,指向指针 p。输出 *(p+)时,自加运算符后置即先输出 p指向的值后 p再向后移动一位,所以第一次输出的结果为 2。 k指向指针 p, *k与 *p等价,第二次输出结果为 4,答案选 A。 【知识模块】 指针 15

23、 【正确答案】 A 【试题解析】 定义二维数组的语句为 “int aa33= 2,4,6 “表明aa00=2, aa10=4, aa20=6,指针 p指向二维数组 aa的第一个元素。第一次循环, i值为 0,则计算 aa01的值为 *p+1=aa00+1=3,输出 *p的值为 2;第二次循环, p指针移动,指向 aa01,输出结果为 3。答案选 A。 【知识模块】 指针 16 【正确答案】 A 【试题解析】 该代码段的逻辑是循环判定 s中的值,如果大于 sk则用 k记录当前的元素下标,记录当前下标的语句应 为 “k=i“,答案选 A。 【知识模块】 指针 17 【正确答案】 A 【试题解析】

24、考查指针与函数。该函数进行的是地址传参,形参和实参指向的变量的值保持一致。函数 f()中, (*s *t)成立,则将 *s=*t;, *s与 *t的值均为 5,返回值为 5,即 r=5。函数调用结束后, p、 q指向的值也均为 5,所以答案选 A。 【知识模块】 指针 18 【正确答案】 A 【试题解析】 考查指针数组的定义。说明语句 “int *ptr10;“定义了一个具有 10个元素的一维数组,每个元素都只能 存放指针,这些指针的基类型必须为整型,选项 A)描述正确,答案选 A)。 【知识模块】 指针 19 【正确答案】 A 【试题解析】 数组名表示该数组的首地址, *(a+i)表示的是数

25、组 a中第二个元素的值,取值运算符 *只能对地址取值,不能作用于变量上,选项 A)错误; a表示数组 a的第一个元素的地址, *p=a则将 p指向了数组 a的第一个元素的地址, p-a=0,所以 ap-a即为 a0, pi相当于 ai,选项 B)、 C)正确;取地址运算符“表示将 p指向变量 x的地址,用取值运算符 *对指针p取值能够得到 p指向的变量 x的值,所以输出的结 果为 100+10=110,答案选A。 【知识模块】 指针 25 【正确答案】 A 【试题解析】 函数 fun()返回的是 y-x的值并存放在指针变量 z指向的变量中。所以函数 fun(10,5,调用结束后, a=-5;函

26、数 fun(7,a,调用结束后, b=-5-7=-12;函数 fun(a,b,调用结束后, c=-12-(-5)=-7,答案选 A。 【知识模块】 指针 26 【正确答案】 A 【试题解析】 函数 fun()的功能是将数组 s中下标为 n1和 n2之间的数据 逆序,所以调用语句 fun( p,0,3 ); fun( p,4,9 ); fun( p,0,9 );结束后,是先将数组 p中下标为0至 3之间的元素逆序,然后将下标为 4至 9之间的元素逆序,再将整个数组逆序,答案选 A。 【知识模块】 指针 27 【正确答案】 A 【试题解析】 函数 change()为中先获取指针 data指向的变量

27、的数值并返回之后该数值再自增。函数为地址传参,形参与实参的变化保持同步,所以调用语句“change(“执行完毕后, data的值为 123+1=124,调用语句 “data = change(“,函数 change()将返回值赋值给 data,返回的是变化之前的数据,所以输出结果仍然是 124,答案选 A。 【知识模块】 指针 28 【正确答案】 A 【试题解析】 函数 change()的功能是把数组 array中前 len个元素均加 2,数组定义语句 “array5 = 1,2;“定义数组的前两个元素分别为 1、 2,其余元素为 0,调用 change()函数结束后, array=3,4,2

28、,2,2,所以输出答案为 A)。 【知识模块】 指针 29 【正确答案】 A 【试题解析】 数组说明符的方括号中可以用整型常量或者整型表达式,选项 B)错误;数组的下限只能为 0,不能为负值,选项 C)错误;引用数组元素的时候只能用整型数据而不能用浮点数据,选项 D)错误;选项 A)描述正确,答案选A)。 【知识模块】 指针 30 【正确答案】 A 【试题解析】 数组名表示该数组的首地址,是一个地址常量,作为函数参数时传递的是数组的首地址,属于地址传参,所以答案选 A。 【知识模块】 指针 31 【正确答案】 A 【试题解析】 指针变 量存放的只是对应变量的地址,所以其占用的字节数都是一样的,

29、在 32位的计算机上规定一个指针变量占用的内存为 32位,即 4个字节,所以答案选 A。 【知识模块】 指针 32 【正确答案】 A 【试题解析】 考查指针与一维数组。语句 “ptr=array“将指针 ptr指向了数组array的首地址,所以 *ptr与 a0等价。输出语句中 “*ptr+“自加运算符后置,所以先输出 ptr指向的变量的值,再让 ptr自加 1,即指向数组 array中下一个元素的地址,该程序输出数组前两个元素的值,答案选 A。 【 知识模块】 指针 33 【正确答案】 A 【试题解析】 p为一个指针,只能把一个地址赋值给它,选项 A)错误,答案选A)。 【知识模块】 指针

30、34 【正确答案】 A 【试题解析】 函数 fun()的功能是将数组 x中下标为 s和 e之间的元素逆序,所以调用函数 fun(m,0,3)后, m=3,2,1,0,4,5,6,7,8,9;调用函数 fun(m+4,0,5)后,m=3,2,1,0,9,8,7,6,5,4;调用函数 fun(m,0,9)后, m=4,5,6,7,8,9,0,1,2,3。答案选A。 【知识模块】 指针 35 【正确答案】 A 【试题解析】 考查行指针。 (*ps)3表示一个能存放三个整型元素首地址的一维数组的首地址。 “psk=sk;“表示将 ps指向 s的第 k行数据,所以 “printf(“%d “,*(psk+1);“输出的是二维数组 s中的第二列数据,答案选 A。 【知识模块】 指针

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1