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

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

1、国家二级 C语言机试(编译预处理和指针)模拟试卷 7及答案与解析 一、选择题 1 有以下程序: #include stdio h void main() void fun(char*c) char s81; while(*c) gets(s); fun(s); puts(s); if(*c =a&*c =z)*c=*c (a A); c+: 当执行程序时从键盘上输入 Hello Beijing回车,则程序的输出结果是 ( A) HELLO BEIJING ( B) Hello Beijing ( C) hello Beijing ( D) hELLO Beijing 2 有以下程序 #incl

2、ude stdio h void f(int*p, int*q) void f(int*p, int*q); main() p=p+1; *q=*q+1; int m=1, n=2, *r=&m; f(r, &n); printf(“ d, d“, m, n); 程序运行后的输出结果是 ( A) 2, 3 ( B) 1, 3 ( C) 1, 4 ( D) 1, 2 3 有以下程序 #include stdio h main() void fun(int*a, int*b) int x=3, y=5, *p=&x, *q=&y; int*c; fun(p, q); printf(“ d, d,

3、“, *p, *q); c=a; a=b; b=c; 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 4 有下列程序: void f(int b) int I; for(i=2; i 6; i+)bi*=2; main() int a10=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, i; f(a); for(i=0; i 10, i+)printf(“ d, “, ai); 程序运行后的输出结果

4、是 ( 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, 5 有以下程序 #include stdio h int fun(char s) main() int n=0; char s10=6, 1, *, 4, *, 9, *, 0, *; while(*s =9&*s =0) printf(“ d n“, fun(s); n=10*n+*s

5、 0; s+; return(n); 程序的运行结果是 ( A) 61490 ( B) 61 ( C) 9 ( D) 5 6 若有以下程序 #include stdio h void sp(int*a) int b=2; main()int k=3, *p= k; a=&b; sp(p); *a=*a*2; printf(“ d, d n“, k, *p); printf(“ d, “, *a); 则程序的输出结果是 ( A) 4, 3, 4 ( B) 4, 3, 3 ( C) 6, 3, 6 ( D) 6, 6, 6 7 若有以下程序 #include stdio h int k=7: vo

6、id 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, 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 8 若有以下程序 #include stdio h int*f(int*s, int*t)int*k; if(*s *t) k=s; s=t; t=

7、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) 5, 3, 5, 3, 5 ( C) 5, 3, 3, 5, 5 ( D) 3, 5, 3, 5, 5 9 若有以下程序 #include stdio h main()int k=3; void sp(int*a)int b=2; sp(&k); *a=*a*2; printf(“ d n“, k); print

8、f(“ d, “, *a); a= b; *a=*a*2; pfintf(“ d, “, *a); 则程序的输出结果是 ( A) 6, 4, 6 ( B) 6, 4, 3 ( C) 6, 12, 12 ( D) 9, 4, 9 10 若有以下程序 #include stdio h int k=7, m=5; void f(int*s)int*t=&k; s=&t; *s=&m; 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); 则程序的输出结果

9、是 ( 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, 11 若有以下程序 #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, d, d, d, d n“, i, j, *p, *q, *r); 则程序的输出结果是 ( A) 3, 5

10、, 5, 3, 5 ( B) 3, 5, 3, 5, 5 ( C) 5, 3, 5, 3, 5 ( D) 5, 3, 3, 5, 5 12 有以下程序 #include stdio h int funa(int a, int b)return a+b; int funb(int a, int b)return a-b; int sss(int(*t)(), int x, int y)return(*t)(x, y); main()int x; x=sss(funa, 9, 3); x+=sss(funb, 8, 3); printf(“ d n“, x); 程序运行后的输出结果是 ( A) 1

11、7 ( B) 23 ( C) 24 ( D) 22 13 有以下程序 void fun(int x, int y, int*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 14 有以下程序 void fun(int*p, int*q)int t; t=*p; *p=*q; *q=t; *q=*p; main()int a=0, b=9; fun(&a, &b

12、); printf(“ d d n“, a, b); 程序的输出结果是 ( A) 0 0 ( B) 9 9 ( C) 9 0 ( D) 0 9 15 有以下程序 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“); 若运行时从键盘上输入 OPEN THE DOOR,程序的输出结果是 ( A) oPEN tHE dOOR ( B) open the door ( C) OPEN THE

13、DOOR ( D) Open The Door 16 有以下程序 void swap(char*x, char*y) main() char t; char*s1=“abc“, *s2=“123“; t=*x; *x=*y; *y=t; swap(s1, s2); printf(“ s, s n“,s1, s2); 程序执行后的输出结果是 ( A) abc, 123 ( B) 123, abc ( C) 321, cba ( D) 1bc, a23 17 有以下函数 int fun(char*x, char*y)int n=0; while(*x=*y)&*x!= 0) x+; y+; n+;

14、 return n; 函数的功能是 ( A)查找 x和 y所指字符串中是否有 0 ( B)统计 x和 y所指字符串中最前面连续相同的字符个数 ( C) 将 y所指字符串赋给 x所指存储空间 ( D)统计 x和 y所指字符串中相同的字符个数 18 有以下函数 int fun(char*s)char*t=s; while(*t+); return(t-s); )该函数的功能是 ( A)比较两个字符串的大小 ( B)计算 s所指字符串的长度 ( C)计算 s所指字符串占用内存字节的个数 ( D)将 s所指字符串复制到字符串 t中 19 有以下程序 (说明:字母 A的 ASCII码值是 65) voi

15、d 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 20 有以下程序 #include stdio h void fun(char*p) +p; printf(“ s n“, *p); main() char*a=(“Morning“,“Afternoon“,“Evening“,“Night“); fun(a); 程序的运行结果是 ( A) fternoon ( B)

16、 Morning ( C) orning ( D) Afternoon 21 有以下程序 void fun1(char宰 P) main() char*q; char a=“Program“), *p; q=p; p=&a3; fun1(p); printf(“ s n“, a); while(*q!= 0) (*q)+; q+; 程序执行后的输出结果是 ( A) Prphsbn ( B) Prohsbn ( C) Progsbn ( D) Program 22 有以下程序 #include stdio h main() void fun(char*a, char*b) char*s=“*a*

17、b*“, t80; while(*a=*)a+; fun(s, t); puts(t); while(*b=*a)b+; a+; 程序的运行结果是 ( A) a*b ( B) *a*b ( C) a*b* ( D) ab 23 下列函数的功能是 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 24 有以下程序 #include stdio h #include strin

18、g h void fun(char s10, int n) char t; int i, j; for(i=0; i n 1; i+) for(j=i+l j n; j+) if(si0 sj0)t=si0; si0=sj0; sj0=t; main() char ss510=“bcc“, “bbcc“, “xy“, “aaaacc“, “aabcc“; fun(ss, 5); printf(“ s, s n“, ss0, ss4); 程序的运行结果是 ( A) aaaacc, xy ( B) bcc, aabcc ( C) xy, aaaacc ( D) aabcc, bcc 25 有以下程

19、序 #include stdio h main() void fun(char*t,char*s) char ss10=“acc“, aa10=“bbxxyy“; while(*t!=0)t+; fun(ss, aa); printf(“ s, s n“, ss, aa); while(*t+=*s+)!=0); 程序的运行结果是 ( A) acc, bbxxyy ( B) accxxyy, bbxxyy ( C) accbbxxyy, bbxxyy ( D) accxyy, bbxxyy 26 有以下程序 #include stdio h #include string h void fun

20、(char*w, int m) char s, *p1, *p2; p1=w; p2=w+m 1; while(p1 p2)s=*p1; *p1=*p2; *p2=s; p1+; p2-; main() char a=“123456“; fun(a, strlen(a); puts(a); ( A) 116611 ( B) 161616 ( C) 654321 ( D) 123456 27 有以下程序: #include stdio h int b=2: int fun(int*k) b=*k+b; return(b); main() int a10=1, 2, 3, 4, 5, 6, 7,

21、8, i; for(i=2; i 4; i+)b=fun(&ai)+b; printf(“ d“5b); printf(“ n“): 程序运行后的输出结果是 ( A) 8 10 ( B) 10 28 ( C) 10 12 ( D) 10 16 28 有以下程序 #include stdio h #include string h void fun(int*p1, int*p2, int*s) s=(int*)calloc(1, sizeof(int); *s=*p1+*p2; free(s); main() int a2=1, 2, b2=40, 50, *q=a; fun(a, b, q);

22、 printf(“ d n“, *q); 程序运行后的输出结果是 ( A) 41 ( B) 42 ( C) 0 ( D) 1 国家二级 C语言机试(编译预处理和指针)模拟试卷 7答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 子函数 fun的功能是把小写字母转换成大 写字母,所以程序的输出结果为选项 A)。 【知识模块】 编译预处理和指针 2 【正确答案】 B 【试题解析】 本题考查函数的调用与指针。 fun()函数的作用是:使指针 p指向原来所指变量的下一个变量,使 q指针指向的值加 1。主函数中,指针 r指向 m,调用 fun()函数的结果是,使 r指向地址位于 m后面的变量,

23、使位丁 n的地址上的变量 (就是 n)的值加 1,因此,结果为 1, 3。 【知识模块】 编译预处理和指针 3 【正确答案】 B 【试题解析】 本题考查函数的调用与指针。 p和 q分别为指向 x和 y的指针,函数 fun()的两个形参均为指针型,主要功能为交换两个指针的指向,当调用结束以后,该操作不能返回主函数。而主函数中, fun(p, q)、 fun(&x, &y)的实参均为 x与 y的地址,因此,两者结果相同,并且两者指针指向的值不能变化。 【知识模块】 编译预处理和指针 4 【正确答案】 C 【试题解析】 函数 void f(int b)的功能是对数组 b中第 2个到第 5个元素的值逐

24、个扩大 2倍。所以在 main()函数中, f(a)语句的作用是对数组 a10中从 a2到a5的各个数字乘以 2,因而数组 a10的元素就变成了 1, 2, 6, 8, 10, 12, 7,8, 9, 10。 【知识模块】 编译预处理和指针 5 【正确答案】 B 【试题解析】 在 fun函数中, while循环的功能是逐个取字符数组 s的字符判断其是否是数字。若是则将这些数字组成一个数保存到变量 n中,并返回变量 n的值。所以在主函数中调用 fun(s)时,将把字符数组 s中的数字组成一个数输出。因为当指针 s指向数组的第 3位时,即字符 *,循环条件不成立,循环结束,返回 n的值。所以输出

25、n的值为 61。 【知识模块】 编 译预处理和指针 6 【正确答案】 B 【试题解析】 主函数中定义指针变量 p指向 k,调用函数 sp(p),将 k的地址传递给形参指针 a,函数转到 sp运行, a指向 b的地址,表达式 *a=*a*2,相当于b=b*2,得到 *a的数据 4输出。函数调用结束,此时 a和 b的空间撤销,而对实参k和 p的值并没有改变,仍旧是 3。 【知识模块】 编译预处理和指针 7 【正确答案】 D 【试题解析】 本题考查了二级指针,二级指针可以保存一级指针的地址。主函数中 p指向 i, r指向 p,函数调用后 s指向 p,在 f函数中 t指 向全局变量 k=7, s指向

26、t,同时 s保存了实参 p的地址,此时 p也指向 t,输出三个 7,流程转到主函数, i的值为 3, p以及 r的值为 7。 【知识模块】 编译预处理和指针 8 【正确答案】 D 【试题解析】 本题考查了返回值为指针的函数,函数 f的主要功能为第一个参数小于第二个参数,那么交换指针的指向,这对于实参指向的数据时没有影响的。最后返回比较大的元素的地址。主函数中 p指向 i, q指向 j,调用 r=f(p, q),返回 q的地址,因此 *p=3, *q=5, *r=5。 【知识模块】 编译预处理和指针 9 【正确答案】 A 【试题解析】 本题考查了指针作为函数的参数,可以接收实参变量的地址,改变实

27、参的值。主函数调用 sp(&k),执行 sp函数 a指向向 k,执行语句 *a=*a*2后 a指向空间的值 k的值为 6,改变 a的指向以后,此时 a指向 b,则执行 *a=*a*2以后, a指向空间 b的值为 4。调用结束返回主函数,输出 k的值为 6。 【知识模块】 编译预处理和指针 10 【正确答案】 C 【试题解析】 本题考查二级指针作为函数的参数,可以通过函数调用来改变主函数中一级指针的指向。主函数中指针变量 p指向 i, r指向 p,调用 f函数,形参指针 s指向 p,流程转到 f函数执行,指针变量 t指向 k, s指向 t,此时更改了 s的指向, s指向了 t,更改了 s指向的地

28、址空间内容为 m的地址,同时 t也指向变量m,因此 *s的值为 m的值, *t为 m的值, k为 7。流程返回到主函数,没有对主函数空间的数据和指向作出更改,因此全部为 3。 【知识模块】 编译预处理和指针 11 【正确答案】 C 【试题解析】 函数 f为返回值为指针的函数,主要功能是返回 s和 t指向空间值大的数据的地址,同时如何 s指向空间数据大于 t指向空间的数据,那么交换 。主函数 p和 q指向 i和 j,值为 3和 5, j的值大于 i的值,因此调用函数 f以后,返回 i的地址, r指向 j,同时 i和 j的值交换, i=5, j=3, p和 q的指向不变, p指向i, q指向 j。

29、 【知识模块】 编译预处理和指针 12 【正确答案】 A 【试题解析】 函数 funa的功能计算两个数据的和, funb的功能计算两个数据的差,函数 sss中利用指向函数的指针作为函数的参数,可以在调用的时候,根据接收的函数地址来决定调用那一个函数。主函数中调用 x=sss(funa, 9, 3),将 funa函数的地址传递给 t,因此 sss函数成为求两个数据的和 12,继续将 funb函数地址传给 t,求两个数据差为 5,和 s累加后结果为 17。 【知识模块】 编译预处理和指针 13 【正确答案】 C 【试题解析】 函数 fun有四个形参,功能是利用参数的地址传递来计算前两个参数的和与差

30、。主函数中调用 fun函数 c计算 4+3, d计算 4 3值为 1。 【知识模块】 编译预处理和指针 14 【正确答案】 B 【试题解析】 函数 fun的主要功能是交换 p和 q指向的地址空间的数据,然后更改 p的指向的地址空间数据,使之和 q指向的数据 相同。主函数调用 fun后, p指向 a, q指向 b,因此 a和 b的数据全部为 9。 【知识模块】 编译预处理和指针 15 【正确答案】 B 【试题解析】 函数 fun的主要功能是判断字符是否为大写字符,如果是则转换为小写字符,主函数读入大写字符串,转换成小写。 【知识模块】 编译预处理和指针 16 【正确答案】 D 【试题解析】 函数

31、 void swap(char*x,char*y)的功能是交换两个字符 *x和 *y中的内容。在主函数中字符指针 s1指向字符串 abc, s2指向字符串 123。所以函数swap(s1, s2)的执行结果就是字符 a和 1相互交换。 【知识模块】 编译预处理和指针 17 【正确答案】 B 【试题解析】 在 while循环中的判断表达式为 (*x=*y)&*x!= 0,所以只要字符串 x与 y的当前字符不相等时,循环就结束。 【知识模块】 编译预处理和指针 18 【正确答案】 C 【试题解析】 在函数 fun(char*s)中,首先用字符指针变量 t指向 s,而循环语句while(*t+);的

32、功能是使指针变量 t指向字符串变量 s的末尾,这 时退出循环,因而语句 return(t-s);返回的就是字符串 s所指字符串的长度。 【知识模块】 编译预处理和指针 19 【正确答案】 B 【试题解析】 程序只输出字母 ASCII值为奇数的字母,根据字母 B, Y, T, E的 ASCII值的奇偶性相应输出。 【知识模块】 编译预处理和指针 20 【正确答案】 D 【试题解析】 在程序中,指针的指针变量 a和 p都是指向字符串的指针。执行fun(a)语句时, p指向的是字符串数组 a的第一个字符串 “Morning”, p自加 1之后, *p指向了字符串 数组 a的第 2个字符串 “Afte

33、rnoon”。 【知识模块】 编译预处理和指针 21 【正确答案】 B 【试题解析】 在函数 void fun1(char*p)中,语句 (*q)+的功能是 q所指的字符加1,变成其后面的字符; q+就是指针 q指向下一个字符的位置。所以在主函数中,语句 p=&a3的作用是使指针 p指向字符数组 a中的第四个字符的位置,即p指向字符 g;然后调用函数 fun1(p)后,字符 g变成 g,字符 h,变成 s,字符a变成 b,字符 m变成 n,因而字符 数组 a中的内容就成 “Prohsbn”。 【知识模块】 编译预处理和指针 22 【正确答案】 C 【试题解析】 主函数 main()定义了指向字

34、符串的指针和一个字符数组,接着调用fun(s, t)函数,进行实参向形参传递,函数 fun()第一个 while语句判断 *a中的值为 “*”时继续扫描,当遇到不是 “*”时结束,接着第二个 while循环语句,将 *a中从 “a”开始的后续所有字符都赋予 *b,也就是 t80中的内容为 “a*b*”。 【知识模块】 编译预处理和指针 23 【正确答案】 C 【试题解析】 在 while语句的条件中是把字符 *a的值赋给字符 *b,然后再判断字符 *b的值是否等于字符串的结束字符 ( 0),当不等于结束字符 ( 0)时,把字符指针变量 a, b分别加 1,指它们的下一个字符,直到字符串 a的结

35、束。这样程序执行的结果就是把字符串 a赋给了 b所指的存储空间。 【知识模块】 编译预处理和指针 24 【正确答案】 C 【试题解析】 函数 fun(char s10, int n)通过两重 for循环语句,比较二维字符数组 s10的每个字符串的首字符大 小,如果前一个字符串首字符大于后一个字符串的首字符,则交换这两个字符串的首字符。在主函数中,语句 fun(ss, 5)的作用是对二维字符数组 ss510的 5个字符串的首字符进行从小到大的排序,不影响各个字符串另外的字符。所以排序结束后, 5个字符串的第一个字符依次变为 a、a、 b、 b和 x;最后输出第 1个和第 4个字符串。 【知识模块

36、】 编译预处理和指针 25 【正确答案】 C 【试题解析】 fun函数中,第 1个 while循环语句使指针 t指向字符串的末尾,第 2个 while循环语句实现了字符串 t和 s的连接。主函数中语句 fun(ss,aa)的功能是将字符串 aa连接到字符串 ss的末尾。 【知识模块】 编译预处理和指针 26 【正确答案】 C 【试题解析】 函数 fun的功能是将字符串 w中的元素从大到小进行排列,所以在主函数中调用函数 fun后,字符串 a的元素从大到小进行了排列。 【知识模块】 编译预处理和指针 27 【正确答案】 B 【试题解析】 i=2时, nm(&a2)返回值是 b=b+a1=2+3=5, b=b+b=5+5=10;i=3时, fun(&a3)返回值是 b=b+a3=10+4=14, b=b+b=14+14=28。 【知识模块】 编译预处理和指针 28 【正确答案】 A 【试题解析】 主函数定义数组 a, b, q指向数组 a,调用 fun函数以后形参接收实参的数据, p1和 p2指向数组 a和 b,同时 s指向数组 a,在 fun函数中改变了 s的指向和赋值,但是在程序调用结束之间形参空间全部释放,因此对于 s的指向改动不会对主函数参数构成影响。因此主函数中数去 *q的值仍然为 1。 【知识模块】 编译预处理和指针

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

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

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