[计算机类试卷]国家二级C语言机试(编译预处理和指针)模拟试卷1及答案与解析.doc

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

1、国家二级 C语言机试(编译预处理和指针)模拟试卷 1及答案与解析 一、选择题 1 以下叙述中正确的是 ( A)在 C语言中,预处理命令行都以 ”#”开头 ( B)预处理命令行必须位于 C源程序的起始位置 ( C) #include必须放在 C程序的开头 ( D) C语言的预处理不能实现宏定义和条件编译的功能 2 以下关于宏的叙述中正确的是 ( A)宏定义必须位于源程序中所有语句之前 ( B)宏名必须用大写字母表示 ( C)宏调用比函数调用耗费时间 ( D)宏替换没有数据类型限制 3 设有宏定义: #define IsDIV(k, n)(k n=1)?1: 0)且变量 m已正确定义并赋值,则宏调

2、用: IsDIV(m, 5)&IsDIV(m, 7)为真时所要表达的是 ( A)判断 m是否能被 5和 7整除 ( B)判断 m被 5或者 7整除是否余 1 ( C)判断 m被 5和 7整除是否都余 1 ( D)判断 m是否能被 5或者 7整除 4 有以下程序 #include #define f(x)x*x*x main() int a=3, s, t; s=f(a+1); t=f(a+1); printf(“ d, d n“, s, t); ) 程序运行后的输出结果是 ( A) 10, 10 ( B) 10, 64 ( C) 64, 10 ( D) 64, 64 5 以下叙述中错误的是 (

3、 A)预处理命令行的最后不能以分号表示结束 ( B) C程序对预处理命令行的处理是在程序执行的过程中进行的 ( C) #define MAX是合法的宏定义命令行 ( D)在程序中凡是以 “#”开始的语句行都是预处理命令行 6 若有以下程序 #define S(x)x*x #define T(x)S(x)*S(x) main() int k=5, j=2; printf(“ d, d n“, S(k+j), T(k+j); 则程序的输出结果是 ( A) 17, 37 ( B) 49, 2401 ( C) 17, 289 ( D) 49, 289 7 有以下程序 #inc lude #define

4、 SUB(X, Y)(X+1)*Y main() int a=3, b=4; printf(“ d n“ SUB(a+, b+); 程序运行后的输出结果是 ( A) 20 ( B) 12 ( C) 16 ( D) 25 8 有以下程序 #inc lude #define SQR(X) X*X main() int a=10, k=2, m=1; a =SQR(k+m) SQR(k+m); printf(“ d n”, a); 程序的输出结果是 ( A) 0 ( B) 1 ( C) 9 ( D) 10 9 有以下程序 #include #include int fun(int n) int*p;

5、 p=(int*)malloc(sizeof(int); *p=n; returb*p; main() int a; a=fun(10); printf(“ d n“, a+fun(10); 程序的运行结果是 ( A) 10 ( B) 20 ( C) 0 ( D)出错 10 有以下程序 void fun(int*p1, int*p2, int*s) s=(int*)malloc(sizeof(int); *s=*p1+*(p2+); main() int a2=1, 2, b2=10, 20, *s=a; fun(a,b, s); printf(“ d n“, *s); 程序运行后的输出结果是

6、 ( A) 10 ( B) 11 ( C) 2 ( D) 1 11 有以下程序 void funf double*p1, double*p2, double*S) s=(double*)calloc(1, sizeof(double); *s=*p1+*(p2+1); main() double a2=1 1, 2 2), b2=10 0, 20 0), *s=a; fun(a, b, s); printf(“ 5 2f n“, *s); ) 程序的输出结果是 ( A) 1 10 ( B) 11 10 ( C) 12 10 ( D) 21 10 12 设有定义语句 int(*f)(int);则

7、以下叙述正确的是 ( A) f是基类型为 int的指针变量 ( B) f是指向 int类型一维数组的指针变量 ( C) f是指向函数的指针变量,该函数具有一个 int类型的形参 ( D) f是函数名,该函数的返回值是基类型为 int类型的地址 13 以下叙述中正确的是 ( A)函数的类型不能是指针类型 ( B)函数的形参类型不能是指针类型 ( C)基类型不同的指针变量可以相互混用 ( D)设有指针变量为 double*p,则 p+1将指针 P移动 8个字 节 14 设有定义: int x=0, *p;紧接着的赋值语句正确的是 ( A) *p=NULL; ( B) p=NULL; ( C) p=

8、x; ( D) *p=x; 15 设已有定义: float x;则以下对指针变量 P进行定义且赋初值的语句中正确的是 ( A) int*p=(float)x; ( B) float*p=&x; ( C) float p=&x; ( D) float*p=1024; 16 下面选项中的程序段,没有编译错误的是 ( A) char*sp, s10; sp=“Hello“; ( B) char*sp, s10; s=“Hello“; ( C) char str110=“computer“, str210; str2=str1; ( D) char mark; mark=“PROGRAM“; 17 有

9、以下程序 main() int a=1, b=3, c=5; int*p1=&a, *p2=&b, *p=&c; *P=*p1*(*p2); printf(“ d n“, c); ) 执行后的输出结果是 ( A) 2 ( B) 3 ( C) 1 ( D) 4 18 若有定义语句: int year=2009, *p=&year;以下不能使变量 year中的值增至2010的语句是 ( A) (*p)+; ( B) +(*p); ( C) *p+; ( D) *p+=1; 19 以下叙述中正确的是 ( A)如果 p是指针变量,则 *p表示变量 p的地址值 ( B)如果 p是指针变量,则 &p是不合

10、法的表达式 ( C)在对指针进行加、减算术运算时,数字 1表示 1个存储单元的长度 ( D)如果 P是指针变量,则 *p+1和 *(p+1)的效果是一样的 20 设有定义: char*c;以下选项中能够使 c正确指向一个字符串的是 ( A) char str=“string“; c=str; ( B) scanf(“ s“, c); ( C) c=getchar(); ( D) *c=“string“; 21 若有定义语句: double a, *p=&a;以下叙述中错误的是 ( A)定义语句中的 *号是一个说明符 ( B)定义语句中的 p只能存放 double类型变量的地址 ( C)定义语句

11、中 *p=&a把变量 a的地址作为初值赋给指针变量 p ( D)定义语句中的 *号是一个问址运 算符 22 有以下程序 int funl(double a)return a*=a; int fun2(double x,double y) double a=0, b=0; a=funI(x); b=fun1(y); retum(int)(a+b); main() double w; w=fun2(1 1, 2 0); 程序执行后输出结果是 ( A) 5 00 ( B) 5 ( C) 5 21 ( D) 0 0 23 有以下程序 void fun(int n, int*s) int f= if(n

12、=1)*s=n+1; elsefun(n-1, &f); *s=f; main() int x=0: fun(4, &x); printf(“ d n“, x); 程序运行后的输出结果是 ( A) 1 ( B) 3 ( C) 4 ( D) 2 24 有以下程序 #include #define N 4 void fun(int aN, int b) int i; for(i=0; i N; i+)bi=aii; main() int xN=1, 2, 3), 4), 5, 6, 7, 8), 9, 10, yN, i; fun(x, y); for(i=0; i N; i+) printf(“

13、 d“, yi); printf(“ n“); 程序的运行结果是 ( A) 1, 2, 3, 4, ( B) 1, 4, 5, 9, ( C) 1, 0, 7, 0, ( D) 3, 4, 8, 10, 25 有以下程序 #include void fun(char*c, int d) *c=*c+1; d=d+1; printf(“ c, c, “, *c, d); main() char b=a, a=A; fun(&b, a); printf(“ c, c n“, b, a); 程序 运行后的输出结果是 ( A) b, B, b, A ( B) b, B, B, A ( C) a, B,

14、 B, a ( D) a, B, a, B 26 有以下程序: #include void fun(char*c) while(*c) if(*c =a&*c =z)*c=*c-(a-A); c+; void main() char s81; gets(s); fun(s); puts(s); 当执行程序时从键盘上输入 Hello Beijing,则程序的输出结果是 ( A) HELLO BEIJING ( B) Hello Beijing ( C) hello Beijing ( D) hELLO Beijing 27 有以下程序 #include void fun(int*a,int*b)

15、 int*c; c=a; a=b; b=c; main() int x=3, y=5, *p=&x, *q=&y; fun(p, q); printf(“ d, d, “, *p, *q); fun(&x, &y); printf(“ d, d n“, *p, *q); 程序运行后的输出结果是 ( A) 3, 5, 5, 3 ( B) 3, 5, 3, 5 ( C) 5, 3, 3, 5 ( D) 5, 3, 5, 3 28 有以下程序 #include int fun(char S) int n=0; while(*s =9&*s =0)n=10*n+*s-0; s+; ) return(n

16、); main() char si10=6, 1, *, 4, *, 9, *, 0, *); printf(“ d n“, fun(s); 程序的运行结果是 ( A) 61490 ( B) 61 ( C) 9 ( D) 5 29 若有以下程序 #include stdio h int k=7; void f(int*s) int*t=&k; *s=t; printf(“ d, d, d, “, k, *t, *s); main() int i=3, *p=&i, *r=&p; f(r); printf(“ d, d, d n“, i, *p, *r); 则程序的输出结果是 ( A) 3, 7

17、, 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 30 若有以下程序 #include stdio h void sp(int*a) int b=2; *a=*a*2; printf(“ d, “, *a); a=&b: *a=*a*2: printf(“ d, “, *a): main() int k=3; sp(&k); printf(“ d n“, k); 则程序的输出结果是 ( A) 6, 4 6 ( B) 6, 4, 3 ( C) 6, 12, 12 ( D) 9, 4, 9

18、31 若有以下程序 #include 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, d, d, d, d n“, i, j, *P, *q, *r); 则程序的输出结果是 ( A) 3, 5, 5, 3, 5 ( B) 3, 5, 3, 5, 5 ( C) 5, 3, 5, 3, 5 ( D) 5, 3, 3, 5, 5 32 有以下程序 void fun(int X, int y, i

19、nt*c, int*d) *c=x+y; *d=x-y; ) main() int a=4, b=3, c=0, d=0; fun(a, b, &c, &d); printf(“ d d n“, c, d); ) 程序的输出结果是 ( A) 4 3 ( B) 3 4 ( C) 7 1 ( D) 0 0 33 有以下程序 char fun(char*c) if(*c =Z&*c =A) *c-=A-a: return*c; main() char s81, *p=s; gets(s); while(*P) *P=fun(p); putchar(*P); p+; ) printf(“ n“); 若

20、运行时从键盘上输入 OPEN THE DOOR,程序的输出结果是 ( A) oPEN tHE dOOR ( B) open the door ( C) OPEN THE DOOR ( D) Open The Door 34 有以下函数 int fun(char*x, char*y) int n=0: while(*x=*y)&*x!= 0) x+; y+; n+; return n; ) 函数的功能是 ( A)查找 x和 Y所指字符串中是否有 0 ( B)统计 X和 Y所指字符串中最前面连续相同的字符个数 ( C)将 v所指字符串赋给 x所指存储空间 ( D)统计 X和 Y所指字符串中相同的字

21、符个数 35 有以下程序 (说明:字母 A的 ASCII码值是 65) void fun(char*s) while(*s) if(*s 2) printf(“ c“, *s); s+; ) main() char a=“BYTE“; fun(a); printf(“ n“); ) 程序运行后的输出结果是 ( A) BT ( B) YE ( C) YT ( D) BY 36 有以下程序 void funl(char*p) char*q; q=p; while(*q!= 0) (*q)+; q+; ) main() char a=“Program“), *p; p=&a3; fun1(p); p

22、rintf(“ s n“, a); 程序执行后的输出结果是 ( A) Prphsbn ( B) Prohsbn ( C) Progsbn ( D) Program 37 下列函数的功能是 void fun(char*a,char*b)while(*b=*a)!= 0)a+; b+; ( A)使指针 b指向 a所指字符串 ( B)将 a所指字符串和 b所指字符串进行比较 ( C)将 a所指字符串赋给 b所指空间 ( D)检查 a和 b所指字符串中是否有 0 38 有以下程序 #include void fun(char*t, char*S) while(*t!=0)t+; while(*t+=*

23、s+)!=0); main() char ss10=“acc“, aa10=“bbxxyy“; fun(ss, aa); printf(“ s, s n“, ss, aa); 程序的运行结果是 ( A) acc bbxxyy ( B) accxxyy, bbxxyy ( C) accbbxxyy, bbxxyy ( D) accxyy, bbxxyy 39 有以下程序: #include int b=2: int fun(int*k) b=*k+b; retum(b); main() int at10=1, 2, 3, 4, 5, 6, 7, 8), i; for(i=2; i 4; i+)b

24、=fun(&ai)+b; printf(“ d“, b); printf(“ n“); 程序运行后的输出结果是 ( A) 8 10 ( B) 10 28 ( C) 10 12 ( D) 10 16 国家二级 C语言机试(编译预处理和指针)模拟试卷 1答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 在 C语言中,凡是以 “#”号开头的行,都称为 “编译预处理 ”命令行。预处理命令可以放在程序中的任何位置,其有效范围是从定义开始到文件结束。预处理命令有宏定义、文件包含和条件编译三类。 #include 命令行表示程序中要引用 C标准函数库中的标准输入输出函数。 【知识模块】 编译预处理

25、和指针 2 【正确答案】 D 【试题解析】 本题考查宏 替换的规则。宏替换分为简单的字符替换和带参数的宏替换两类。使用宏时应注意以下几点: 宏定义仅仅是符号替换,不是赋值语句,因此不做语法检查; 为了区别程序中其他的标识符,宏名的定义通常用大写字母,但不是必须用大写; 双引号中出现的宏名不替换; 使用宏定义可以嵌套,即后定义的宏中可以使用先定义的宏。 【知识模块】 编译预处理和指针 3 【正确答案】 C 【试题解析】 本题考查宏定义和三目运算符。三目运算符的格式为: test?语句1:语句 2其中, test可以 是任何 Boolean表达式。语句 1,当 test是 true时执行该语句,可

26、以是复合语句:语句 2,当 test是 false时执行该语句,可以是复合语句。 isDIV(k, n)要表达的是当 k除 n的余数是 1时表达式的值为 1,否则为 0,所以题中要表达的是 m被 5和 7整除是否都余 1。 【知识模块】 编译预处理和指针 4 【正确答案】 B 【试题解析】 根据题目中宏 fix)的定义, f(a+1)=a+1*a+1*a+1=a+a+a+1=10,而f(a+1)=(a+1)*(a+1)*(a+1)=4*4*4=64。 【知识模块】 编译预处理和指针 5 【正确答案】 B 【试题解析】 预处理命令行是以 “#”开始的语句,预处理命令行的最后不能以分号表示结束,预

27、处理命令行。其中宏定义的字符替换的定义格式为: #define标识符字符串,预处理命令行是在系统对源程序进行编译之前进行处理的,不是在程序执行的过程中。 【知识模块】 编译预处理和指针 6 【正确答案】 A 【试题解析】 本题考查了宏替换,宏替换就是简单的字符替换,不会进行语法错误检查也不会进行运算。 S(k+j)宏展开以后为 k+j*k+j,值为 17, T(k+j)宏展开以后为 k+j*k+j*k+j*k+j,值为 37。 【知识模块】 编译预处理和指针 7 【正确答案】 C 【试题解析】 宏展开的结果 (a+1)*b+,后缀自加表达式参加运算,先用 a和b的初值得到表达式的值,进行计算,

28、然后 a和 b在自加。因此计算结果为 16。 【知识模块】 编译预处理和指针 8 【正确答案】 B 【试题解析】 SQR(k+m)宏展开以后为 k+m*k+m,值为 5,表达式 a=SQR(k+m) SQR(k+m)为 a=a (5+5),表达式值为 1。 【知识模块】 编译预处理和指针 9 【正确答案】 B 【试题解析】 函数 fun(intn)的功能是在内存中每次动态的申请一个整型变量的存储空间,把整型变量 n的值存入这个存储空间中。所以当在主函数中执行输出语句时, a+fun(10)的值等于 20。 【知识模块】 编译预处理和指针 10 【正确答案】 D 【试题解析】 主函数中定义指针

29、s指向数组 a,调用 fun函数,首先是实参传给形参,因此 p1指向 a, p2指向 b, s指向 a,即 *s的值为 1。流程到调用函数 fun执行 ,首先更改 s的指向为新分空间的首地址,表达式 *s=*p1+*(p2+),取 p1指向数据位 1,加上 p2指向数据 10, p2后移,存放到 s指向的空间中 11流程结束,形参 s和 p1, p2撤销,存入 s指向空间的数据丢失,主函数输出 s指向数据仍然是 1。 【知识模块】 编译预处理和指针 11 【正确答案】 A 【试题解析】 ANSIC标准规定 calloc函数返回值的类型为 void*。具体使用格式为: calloc(n,size

30、)。该函数用来给 n个同一类型的数据项分配连续的存储空间,每个数据项的长度为 size个字节。若分配成功,函数返回存储空间的首地址;否则返回空。通过调用 calloc函数所分配的存储单元,系统自动置初值 0。 主函数中定义数组 a, b,以及指针 s指向数组 a,调用 fun函数,实参 a和 b,以及 s的值传递给相对应形参 p1, p2,以及 s,在 fun函数中更改 s的指向,以及指向的数据,但是函数调用结束以后,形参空间撤销,这项改变对于实参没有影响,因此实参 s指向值不变,仍然为 1 1。 【知识模块】 编译预处理和指针 12 【正确答案】 C 【试题解析】 定义语句 int(*f)(

31、int)中 f是指向函数的指针变量,该函数中也只有一个 int型的形参。 【知识模块】 编译预处理和指针 13 【正确答案】 D 【试题解析】 在对指针进行加、减算术运算时,数字 1表示 1个存储单元的长度,而 double类型数据在内存中占 8个字节,因此移动一次移动 8个字节。其他三个都不正确。 【知识模块】 编译预处理和指针 14 【正确答案】 B 【试题解析】 定义指针变量时,必须将指针变量初始化为 NULL(为空 ),否则,如果不赋给它地址,系统会随机给它分配一个地址。 【知识模块】 编译预处理和指针 15 【正确答案】 B 【试题解析】 定义指针变量的一般形式为:类型名 *指针变量

32、名 1, *指针变量名 2, ;。对一个指针变量赋值要通过求地址运算符 (&)获得变量的地址值,然后把此地址值赋给指针变量。因而在选项 A)的表达式中,赋值号的左边表示定义了指针变量 p,而右边表示求变量 x的地址值。 【知识模块】 编译预处理和指针 16 【正确答案】 A 【试题解析】 选项 B)中数组名为常量,不能赋值,选项 C)字符数组之间无法完成赋值操作,选项 D)和选项 B)相同,无法对数组 进行赋值。 【知识模块】 编译预处理和指针 17 【正确答案】 B 【试题解析】 程序使整型指针 p1、 p2、 p3指向 a、 b、 c值所存放的地址空间。然后再将指针变量 *p1、 *p2中

33、的值的乘积赋给指针变量 *p,即赋给变量 c,输出 c的值 3。 【知识模块】 编译预处理和指针 18 【正确答案】 C 【试题解析】 由于自加运算符 +的运算级高于间接运算 *的运算级,所以选项 A)的表达式 *p+不能使变量 year中的值增至 2010。 【知识模块】 编译预处理和指针 19 【正确答 案】 C 【试题解析】 移动指针是对指针变量加上或减去一个整数,或通过赋值运算,使指针变量指向相邻的存储单元。因此,只有当指针指向一串连续的存储单元时,指针的移动才有意义。当指针指向一串连续的存储单元时,可以对指针变量进行加上或减去一个整数的运算,也可以对指向同一串连续存储单元的两个指针进

34、行相减的运算。除此之外,不可以对指针进行任何其他的算术运算。 C语言提供了一个间接访问运算符 (*),又称间址运算符,它是一个单目运算符,优先级比较高,高于普通的算术运算符,但是低于 ()运算符,因此 *p+1和 *(p+1)的含义是不一样。当指针变量中存放了一个确切的地址值时,就可以用 “间接访问运算符 ”通过指针来引用该地址的存储单元。 【知识模块】 编译预处理和指针 20 【正确答案】 A 【试题解析】 在题目的题干中定义了字符指针变量 c,在选项 A)中,首先定义字符数组 s行,然后再把字符数组 str的首地址赋给字符指针变量 c。所以选项 A)是正确的。在选项 D)中,如果在定义字符

35、指针 c时,同时给 c赋初值时,这样的表达式是正确的。而本题不是在定义指针 c时,同时给 c赋初值。 【知识模块】 编译预处理和指针 21 【正确答案】 D 【试题解析】 在指针定义语句 double a, *p=&a中,指针变量 p前面的 *号,只是一个说明符,说明变量 p是指针类型的变量。 【知识模块】 编译预处理和指针 22 【正确答案】 A 【试题解析】 子函数 fun1(dlouble a)的功能是返回 a的平方值的整数部分。子函数 fun2(double x,double y)的功能是返回 x的平方值的整数部分与 y的平方值的整数部分的和。又因为题中变量 w的定义为 double型

36、,函数 fun(2)的定义为 int型,按照各类数值型数 据间的混合运算,整型数据被转换为实型数据。所以双精度型变量 w的值为 5 00。 【知识模块】 编译预处理和指针 23 【正确答案】 D 【试题解析】 函数 fun为递归调用函数,如果 n的值为 1,那么后面形参指向的空间存放 n+1,否则继续计算 fun(n-1)的值。调用分析过程如下: fun(4, &x)-fun(3 , &x)-fun(2 , &x)-fun(1 , &x) 在回归的过程中,对于 x内的数据并没有改动。 【知识模块】 编译预处理和指针 24 【正确答案】 C 【试题解析】 函数 fun(int aN,intb)的

37、功能是把矩阵 aNN主对角线上的元素赋给一维数组 b。在主函数中由 xN的初始化可知,其主对角线上的元素是1, 0, 7, 0。所以当执行完函数 fun(x,y)后,一维数组元素 y中的元素值为 1,0, 7, 0。 【知识模块】 编译预处理和指针 25 【正确答案】 A 【试题解析】 本题中 fun函数的参数传递方式,形参 c是传地址,形参 d是传值,所以在主函数中,执行 fun时,把变量 b的地址传给了 c,把 a的值传递给了d,经过运 算,输出的值为 b, B。在主函数的输出语句中,输出变量 b的值为 b,变量 a的值为 A。 【知识模块】 编译预处理和指针 26 【正确答案】 A 【试

38、题解析】 子函数 fun的功能是把小写字母转换成大写字母,所以程序的输出结果为选项 A)。 【知识模块】 编译预处理和指针 27 【正确答案】 B 【试题解析】 本题考查函数的调用与指针。 p和 q分别为指向 x和 y的指针,函数 fun()的两个形参均为指针型,主要功能为交换两个指针的指向,当调用结束以后,该操作不能返回主函数。而主函数中, fun(p, q)、 fun(&x, &y)的实参均为 x与 y的地址,因此,两者结果相同,并且两者指针指向的值不能变化。 【知识模块】 编译预处理和指针 28 【正确答案】 B 【试题解析】 在 fun函数中, while循环的功能是逐个取字符数组 s

39、的字符判断其是否是数字。若是则将这些数字组成一个数保存到变量 n中,并返回变量 n的值。所以在主函数中调用 fun(s)时,将把字符数组 s中的数字组成一个数输出。因为当指针 s指向数组的第 3位时,即字符 *,循环条件不成立,循环结束,返回 n的值。所以输出 n的值为 61。 【知识模块】 编译预处理和指针 29 【正确答案】 D 【试题解析】 本题考查了二级指针,二级指针可以保存一级指针的地址。主函数中 p指向 i, r指向 p,函数调用后 s指向 p,在 f函数中 t指向全局变量 k=7, s指向 t,同时 s保存了实参 p的地址,此时 p也指向 t,输出三个 7,流程转到主函数, i的

40、值为 3, p以及 r的值为 7。 【知识模块】 编译预处理和指针 30 【正确答案】 A 【试题解析】 本题考查了指针作为函数的参数,可以接收实参变量的地址,改变实参的值。主函数调用 sp(&k),执行 sp函数 a指向向 k,执行语句 *a=*a*2后 a指向空间的值 k的值为 6,改变 a的指向以后,此时 a指向 b,则执行 *a=*a*2以后, a指向空间 b的值为 4。调用结束返回主函数,输出 k的值为 6。 【知识模块】 编译预处理和指针 31 【正确答案】 C 【试题解析】 函数 f为返回值为指针的函数,主要功能是返回 s和 t指向空间值大的数据的地址,同时如何 s指向空间数据大

41、于 t指向空间的数据,那么交换。主函数 p和 q指向 j和 j,值为 3和 5, j的值大于 i的值,因此调用函数 f以后,返回 j的地址, r指向 j,同时 i和 j的值 交换, i=5, j=3, p和 q的指向不变, p指向i, q指向 j。 【知识模块】 编译预处理和指针 32 【正确答案】 C 【试题解析】 函数 fun有四个形参,功能是利用参数的地址传递来计算前两个参数的和与差。主函数中调用 fun函数 c计算 4+3, d计算 4 3值为 1。 【知识模块】 编译预处理和指针 33 【正确答案】 B 【试题解析】 函数 fun的主要功能是判断字符是否为大写字符,如果是则转换为小写

42、字符,主函数读入大写字符串,转换成小写。 【知识模块】 编译预处理和指针 34 【正确答案】 B 【试题解析】 在 while循环中的判断表达式为 (*x=*y)&*x!= 0,所以只要字符串 x与 y的当前字符不相等时,循环就结束。 【知识模块】 编译预处理和指针 35 【正确答案】 B 【试题解析】 程序只输出字母 ASCII值为奇数的字母,根据字母 B, Y, T, E的 ASCII值的奇偶性相应输出。 【知识模块】 编译预处理和指针 36 【正确答案】 B 【试题解析】 在函数 void funl(char*p)中,语句 (*q)+的功能是 q所指的字 符加1,变成其后面的字符; q+

43、就是指针 q指向下一个字符的位置。所以在主函数中,语句 p=&a3的作用是使指针 p指向字符数组 a中的第四个字符的位置,即p指向字符 g;然后调用函数 fun1(p)后,字符 g变成 h,字符 r变成 s,字符 a变成 b,字符 m变成 n,因而字符数组 a中的内容就成 “Prohsbn”。 【知识模块】 编译预处理和指针 37 【正确答案】 C 【试题解析】 在 while语句的条件中是把字符 *a的值赋给字符 *b,然后再判断字符 *b的值:是否 等于字符串的结束字符 ( 0),当不等于结束字符 ( 0)时,把字符指针变量 a,b分别加 1,指它们的下一个字符,直到字符串 a的结束。这样

44、程序执行的结果就是把字符串 a赋给了 b所指的存储空间。 【知识模块】 编译预处理和指针 38 【正确答案】 C 【试题解析】 fun函数中,第 1个 while循环语句使指针 t指向字符串的末尾,第 2个 while循环语句实现了字符串 t和 s的连接。主函数中语句 fun(ss,aa)的功能是将字符串 aa连接到字符串 ss的末尾。 【知识模块】 编译预处理和指针 39 【正确答案】 B 【试题解析】 i=2时, fun(&a2)返回值是 b=b+a1=2+3=5,b=b+b=5+5=10; i=3时, fun(&a【 3】 )返回值是 b=b+a3=10+4=14, b=b+b=14+14=28。 【知识模块】 编译预处理和指针

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

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

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