首页 > 全部 > 二级C语言 > 国家二级C语言(编译预处理和指针)机试模拟试卷12

国家二级C语言(编译预处理和指针)机试模拟试卷12

本单篇文档共10805字,内容预览3600字,预览为有答案版,源文件无水印,下载后包含无答案空白卷版和有答案版,同时也有计算机类NCRE全国计算机二级整科真题模拟题,讲义课件,思维导图,易错高频题等下载。
二级C语言 章节练习 6768人下载
价格: 免费 原价:¥9.60
收藏

国家二级C语言(编译预处理和指针)机试模拟试卷12

选择题

1.有以下程序

#include <stdio.h>

void fun(int *a,int *b)

{ int *c;

c=a;a=b;b=c;

}

main()

{ int x=3,y=5,*p=&x,*q=&y;

fun(p,q);printf(\\(B)

A. 3,5,5,3

B. 3,5,3,5

C. 5,3,3,5

D. 5,3,5,3

解析:本题考查函数的调用与指针。p和q分别为指向x和y的指针,函数fun()的两个形参均为指针型,主要功能为交换两个指针的指向,当调用结束以后,该操作不能返回主函数。而主函数中,fun(p,q)、fun(&x,&y)的实参均为x与y的地址,因此,两者结果相同,并且两者指针指向的值不能变化。

2.有下列程序:

void f(int b[ ])

{ int I;

for(i=2;i<6;i+ +) b[i]*=2;

}

main( )

{ int a[10]={1,2,3,4,5,6,7,8,9,10},i;

f(a);

for(i=0;i<10,i+ +)printf(\\(C)

A. 1,2,3,4,5,6,7,8,9,10,

B. 1,2,3,4,10,12,14,16,9,10,

C. 1,2,6,8,10,12,7,8,9,10,

D. 1,2,6,8,10,12,14,16,9,10,

解析:函数void f(int b[ ])的功能是对数组b[ ]中第2个到第5个元素的值逐个扩大2倍。所以在main()函数中,f(a)语句的作用是对数组a[10]中从a[2]到a[5]的各个数字乘以2,因而数组a[10]的元素就变成了{1,2,6,8,10,12,7,8,9,10}。

3.有以下程序

#include <stdio.h>

int fun(char s[ ])

{ int n=0;

while(*s<=’9’&&*s>=’0’) {n=10*n+*s-’0’;s+ +;}

return(n);

}

main( )

{ char s[10]={’6’,’1’,’*’,’4’,’*’,’9’,’*’,’0’,’*’};

printf(\\(B)

A. 61490

B. 61

C. 9

D. 5

解析:在fun函数中,while循环的功能是逐个取字符数组s的字符判断其是否是数字。若是则将这些数字组成一个数保存到变量n中,并返回变量n的值。所以在主函数中调用fun(s)时,将把字符数组s中的数字组成一个数输出。因为当指针s指向数组的第3位时,即字符’*’,循环条件不成立,循环结束,返回n的值。所以输出n的值为61。

4.若有以下程序

#include <stdio.h>

void sp(int *a) {

int b=2;

a=&b;

*a = *a * 2;

printf(\\(B)

A. 4,3,4

B. 4,3,3

C. 6,3,6

D. 6,6,6

解析:主函数中定义指针变量p指向k,调用函数sp(p),将k的地址传递给形参指针a,函数转到sp运行,a指向b的地址,表达式*a = *a * 2,相当于b=b*2,得到*a的数据4输出。函数调用结束,此时a和b的空间撤销,而对实参k和p的值并没有改变,仍旧是3。

5.若有以下程序

#include <stdio.h>

int k=7;

void f(int **s) {

int *t=&k;

*s=t;

printf(\\(D)

A. 3,7,7,7,7,7

B. 7,7,7,3,3,3

C. 3,3,3,7,7,7

D. 7,7,7,3,7,7

解析:本题考查了二级指针,二级指针可以保存一级指针的地址。主函数中p指向i,r指向p,函数调用后s指向p,在f函数中t指向全局变量k=7,s指向t,同时s保存了实参p的地址,此时p也指向t,输出三个7,流程转到主函数,i的值为3,p以及r的值为7。

6.若有以下程序

#include<stdio.h>

int *f(int *s,int *t) {

int *k; if (*s < *t){

k = s; s=t; t=k; }

return s; }

main() {

int i=3, j=5, *p=&i, *q=&j, *r;

r=f(p,q);

printf(\\(D)

A. 3,5,5,3,5

B. 5,3,5,3,5

C. 5,3,3,5,5

D. 3,5,3,5,5

解析:本题考查了返回值为指针的函数,函数f的主要功能为第一个参数小于第二个参数,那么交换指针的指向,这对于实参指向的数据时没有影响的。最后返回比较大的元素的地址。主函数中p指向i,q指向j,调用r=f(p,q),返回q的地址,因此*p=3,*q=5,*r=5。

7.若有以下程序

#include<stdio.h>

void sp(int *a) {

int b=2;

*a = *a * 2;

printf(\\(A)

A. 6,4,6

B. 6,4,3

C. 6,12,12

D. 9,4,9

解析:本题考查了指针作为函数的参数,可以接收实参变量的地址,改变实参的值。主函数调用sp(&k),执行sp函数a指向向k,执行语句*a = *a * 2后a指向空间的值k的值为6,改变a的指向以后,此时a指向b,则执行*a = *a * 2以后,a指向空间b的值为4。调用结束返回主函数,输出k的值为6。

8.若有以下程序

#include <stdio.h>

int k=7,m=5;

void f(int **s) {

int *t=&k;

s=&t; *s=&m;

printf(\\(C)

A. 7,5,7,3,3,3,

B. 7,5,7,3,5,7,

C. 7,5,5,3,3,3,

D. 7,7,5,3,3,3,

解析:本题考查二级指针作为函数的参数,可以通过函数调用来改变主函数中一级指针的指向。主函数中指针变量p指向i,r指向p,调用f函数,形参指针s指向p,流程转到f函数执行,指针变量t指向k,s指向t,此时更改了s的指向,s指向了t,更改了s指向的地址空间内容为m的地址,同时t也指向变量m,因此**s的值为m的值,*t为m的值,k为7。流程返回到主函数,没有对主函数空间的数据和指向作出更改,因此全部为3。

9.若有以下程序

#include <stdio.h>

int *f(int *s, int *t) {

int k;

if (*s

本文档预览:3600字符,共10805字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载

剩余未完,查看全文
收藏
国家二级C语言(编译预处理和指针)机试模拟试卷12

推荐资源

客服

扫码添加客服微信

热线

官方客服

如遇问题,请联系客服为您解决

电话客服:

客服微信:pujinet

工作时间:9:00-18:00,节假日休息

公众号

扫码关注微信公众号