1、国家二级 C语言机试( C语言程序设计)模拟试卷 20及答案与解析 一、选择题 1 有以下程序 include main() int n, *p NULL; *p &n; printf(“Input n: “); scanf(“ d“, p); printf(“output n: “); printf(“ d n“, p); 该程序试图通过指针 P为变量 n读入数据并输出,但程序有多处错误,以下语句正确的是 ( A) int n, *p NULL; ( B) *p &n; ( C) scanf(“ d“, p) ( D) printf(“ d n“, p); 2 若有定义语句: double
2、a, *p a;以下叙述中错误的是 ( A)定义语句中的 *号是一个说明符 ( B)定义语句中的 P只能存放 double类型变量的地址 ( C)定义语句中 *p &a把变量 a的地址作为初值赋给指针变量 P ( D)定义语句中的 *号是一个间址运算符 3 若有以下定义 int x10, *pt x;则对 x数组元素的正确引用是 ( A) *(x 3) ( B) *&x10 ( C) *(pt 10) ( D) pt 3 4 有以下 程序 int fun1(double a)retum a* a; ) int fun2(double x,double y) double a 0, b 0; a
3、 fun1(x); b fun1(y); return(int)(a b); main() double w; w fun2(1 1, 2 0); 程序执行后输出结果是 ( A) 5 00 ( B) 5 ( C) 5 21 ( D) 0 5 有以下程序 void fun(char*S) char a10; strepy(a, “STRING“); S a; main() char*p “PROGRAM“; fun(P); 一 printf(“ s n, p); 程序运行后的输出结果是 (此处口代表空格 ) ( A) STRING口口口口 ( B) PROGRAM ( C) STRING口口口
4、( D) STRING 6 有以下程序 void fun(int n, int*s) int f; if(n=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 7 有以下程序 #include int fun(char *8) char *p s; while(*p! 0)p; return(p-s); main() printf(“ d n“, fun(“goodbey!“); 程序的输出结果是 (
5、 A) 6 ( B) 8 ( C) 0 ( D) 7 8 有以下程序 #inelude #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(“ d, “, yi); printf(“ n“); 程序的运行结果是 ( A) 1, 2, 3, 4, ( B) 1, 4, 5, 9, ( C) 1, 0, 7, 0, ( D) 3, 4,
6、 8, 10, 9 有下列程序: void f(int*q) int i 0; for(; i 5; i )(*q); main() int a5 1, 2, 3, 4, 5, i; f(a); for(i=0; i 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, B, a ( D) a,
7、 B, a, B 11 以下函数按每行 8个输出数组中的数据: void fun(int *w, int n) int i; for(i 0; i n; i ) _ printf(“ d“, wi); printf(“ n“); 下划线处应填入的语句是 ( A) if(i 8=0)printf(“ n“); ( B) if(i 8=0)continue; ( C) if(i 8=0)printf(“ n“); ( D) if(i 8=0)continue; 12 有以下程序: #include void fun(char *c) while(*c) if(*c a&*c z)*c *c一 (a
8、 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 13 有以下程序 #include void f(int *p, int *q); main() int m 1, n 2, *r &m; f(r,&n); printf(“ d, d“, m, n); void f(int *p, int *q) p p 1;
9、 *q *q 1; 程序运行后的输出结果是 ( A) 2, 3 ( B) 1, 3 ( C) 1, 4 ( D) 1, 2 14 有以下程序 #include 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(“ d, d, “, *p, *q); flun(&x, &y); printf(“ d, d n“, *p, *q); 程序运行后的输出结果是 ( A) 3, 5, 5, 3 ( B) 3, 5, 3, 5 ( C) 5, 3, 3,
10、5 ( D) 5, 3, 5, 3 15 有下列程序: void f(intb) 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 1 0, i )printf(“ d, “, ai); 程序运行后的输出结果是 ( 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
11、, 6, 8, 10, 12, 14, 16, 9, 10, 16 有以下程序 #include int fun(char S) int n 0; while(*s 9&*s n0)n 10*n *s 0; s; ) return(n); main() char s10 6, 1, *, 4, *, 9, *, 0, *; printf(“ d n“, fun(s); 程序的运行结果是 ( A) 61490 ( B) 61 ( C) 9 ( D) 5 17 若有以下程序 #include void sp(int *a) int b 2; a b; *a *a*2; printf(“ d, “,
12、 *a); main() int k 3, *p &k; sp(p); printf(“ d, d n“, k, *p); 则程序的输出结果是 ( A) 4, 3, 4 ( B) 4, 3, 3 ( C) 6, 3, 6 ( D) 6, 6, 6 18 若有以下程序 #include 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)
13、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 19 若有以下程序 #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, * &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,
14、 5, 3, 5 ( C) 5, 3, 3, 5, 5 ( D) 3, 5, 3, 5, 5 20 若有以下程序 #include 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 21 若有以下程序 #include int k 7, m 5: void
15、 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); 则程序的输出结果是 ( 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, 22 若有以下程序 #include int*f(int *s, int *t) int k; if(*s *t) k *s;
16、*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 23 有以下程序 #inchde int funa(int a, int b) return a b; ) int funb(int a, int b) return a b; int sss
17、(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) 17 ( B) 23 ( C) 24 ( D) 22 24 有以下程序 void fun(int x, int y, int *C, int *d)D) *c x y; *d xy; main() int a 4, b 3, c 0, d 0; fun(a, b, &c, &d); printf(“ d d n“, c, d); 程序的
18、输出结果是 ( A) 4 3 ( B) 3 4 ( C) 7 1 ( D) 0 0 25 有以下程序 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); printf(“ d d n“, a, b); 程序的输出结果是 ( A) 0 0 ( B) 9 9 ( C) 9 0 ( D) 0 9 26 有以下程 序 char fun(char *c) if(*c z *c A) *c A a; return *c; main() char s81, *p s; gets(
19、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 DOOR ( D) Open The Door 27 有以下程序 void swap(char*x,char*y) char t; t *x; *x *y; *y t; main() char*s1 “abc“,*s2 “123“; swap(s1, s2); printf(“ s, s n“, s1, s2); 程
20、序执行后的输出结果是 ( A) abe, 123 ( B) 123, abc ( C) 321, cba ( D) 1bc, a23 28 有以下函数 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)将 y所指字符串赋给 x所指存储空间 ( D)统计 x和 y所指字符串中相同的字符个数 29 有以下函数 int fun(char*s)char*t s; while(*t )
21、; return(t s); )该函数的功能是 ( A)比较两个字符串的大小 ( B)计算 s所指字符串的长度 ( C)计算 s所指字符串占用内存字节的个数 ( D)将 s所指字符串复制到字符串 t中 30 有以下程序 (说明:字母 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 31 有以下程序 #include voi
22、d fun(char*p) p; printf(“ s n“, *p); ) main() char*a (“Morning“,“Afternoon“,“Evening“,“Night“); fun(a); 程序的运行结果是 ( A) fternoon ( B) Morning ( C) orning ( D) Afternoon 32 有以下程序 void fun1(char *p) char *q; q p; while(*q! 0) (*q); q; main() char a “Program“), *p; p &a3; fun1(p); printf(“ s n“, a); 程序执行
23、后的输出结果是 ( A) Prphsbn ( B) Prohsbn ( C) Progsbn ( D) Program 33 有以下程序 #include void fun(char*a,char*b) while(*a=*)a; while(*b *a) b; a; main() char*s “*a*b*“, t80; fun(s, t); puts(t); 程序的运行结果是 ( A) a*b ( B) *a*b ( C) a*b* ( D) ab 34 下列函数的功能是 void fun(char *a, char *b) while(*b *a) 0)a; b; ( A)使指针 b指向
24、 a所指字符串 ( B)将 a所指字符串和 b所指字符串进行比较 ( C)将 a所指字符串赋给 b所指空间 ( D)检查 a和 b所指字符串中是否有 0 35 有以下程序 #include #include void fun(char s10, int n) char t; int i, j; for(i 0; i n 1; i ) for(j i 1; j n; j ) if(si0 sj0)t si0; si0 sj0; sj0 t; main() char ss510 “bcc“, “bbcc“, “xy“, “aaaacc“,“aabcc“; fun(ss, 5); printf(“
25、s, s n“, ss0, ss4); 程序的运行结果是 ( A) aaaacc, xy ( B) bcc, aabcc ( C) xy, aaaacc ( D) aabcc, bcc 36 有以下程序 #include void fun(char *t,char *s) while(*t! 0)t; while(*t *s )! 0); main() char ss10 “ace“,aa10 “bbxxyy“; fun(ss, aa); printf(“ s, s n“, ss, aa); 程序的运行结果是 ( A) acc, bbxxyy ( B) accxxyy, bbxxyy ( C)
26、 accbbxxyy, bbxxyy ( D) accxyy, bbxxyy 37 有以下程序 #include #include void fun(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 38 有以下程序: #include int b 2; int fu
27、n(int*k) b *k b; return(b); main() int a10 1, 2, 3, 4, 5, 6, 7, 8, i; for(i 2; i 4; i )b fun(&ai) b; printf(“ d“, b); printf(“ n“); 程序运行后的输出结果是 ( A) 8 10 ( B) 10 28 ( C) 10 12 ( D) 10 16 39 有以下程序 #include #include void fun(int *p1, int *p2, int *s) s (int*)calloc(1, sizeof(int); *s *p1 *p2; free(s);
28、 main() int a2 1, 2, b2 40, 50, *q a; fun(a, b, q); printf(” d n“, *q); 程序运行后的输出结果是 ( A) 41 ( B) 42 ( C) 0 ( D) 1 国家二级 C语言机试( C语言程序设计)模拟试卷 20答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 选项 A表示在程序中,声明定义变量语句 “int n, *p NULL; ”定义了整型变量 n和指针变量 p,并且指针变量 p初始化为空。其他的语句都是错误的。其中选项 B, &n的地址应存放到指针变量 p中,而选项 C中 数据输入项错误,选项 D输出地址信
29、息。 【知识模块】 C语言程序设计 2 【正确答案】 D 【试题解析】 在指针定义语句 double a, *p &a中,指针变量 p前面的 *号,只是一个说明符,说明变量 p是指针类型的变量。 【知识模块】 C语言程序设计 3 【正确答案】 A 【试题解析】 本题考查指针的调用。 x代表 x10数组的首地址指针, pt是指向x10数组的首地址的指针,即两者指向同一内存单元。 *(x 3)等同于 x3。 【知识模块】 C语言程序设计 4 【正 确答案】 A 【试题解析】 子函数 fun1(double a)的功能是返回 a的平方值的整数部分。子函数 fun2(doubIe x, double
30、y)的功能是返回 x的平方值的整数部分与 y的平方值的整数部分的和。又因为题中变量 w的定义为 double型,函数 fun(2)的定义为 int型,按照各类数值型数据间的混合运算,整型数据被转换为实型数据。所以双精度型变量 w的值为 5 00。 【知识模块】 C语言程序设计 5 【正确答案】 B 【试题解析】 函数 fun的主要功能是把字符串 ”STRING”, 存放到字符数组 a中, s指向该字符串,函数调用结束以后,释放 s和 a指向的空间。主函数调用fun(p),并不能更改 p的值,因此 p的指向没有改变。 【知识模块】 C语言程序设计 6 【正确答案】 D 【试题解析】 函数 fun
31、为递归调用函数,如果 n的值为 1,那么后面形参指向的空间存放 n 1,否则继续计算 fun(n 1)的值。调用分析过程如下: fun(4, x) fun(3 , x) fun(2 , x) fun(1 , x) 在回归的过程中,对于 x内的数据并没有改动。 【知识模块】 C语言 程序设计 7 【正确答案】 B 【试题解析】 函数 fun的主要功能是计算字符串中实际字符的个数,因此 ”goodbey!”含有字符为 8,返回值为 8。 【知识模块】 C语言程序设计 8 【正确答案】 C 【试题解析】 函数 fun(int aN, int b)的功能是把矩阵 aNN主对角线上的元素赋给一维数组 b
32、。在主函数中由 xN的初始化可知,其主对角线上的元素是 1, 0, 7, 0。所以当执行完函数 fun(x, y)后,一维数组元素 y中的元素值为1, 0, 7, 0。 【知识模块】 C语言程序设计 9 【正确答案】 B 【试题解析】 voidf(int *q)函数的功能是对 (*q)的值连续 5次自加 1。在 main()函数中 f(a)语句把一维数组 a5的首地址作为实参,传递给函数 f(int *q)的形参 q,然后在函数 f(int *q)内, a0连续 5次自加 1后, a0的值就变成 6。所以输出为6, 2, 3, 4, 5。 【知识模块】 C语言程序设计 10 【正确答案】 A
33、【试题解析】 本题中 fun函数的参数传递方式,形参 c是传地址,形参 d是传值 ,所以在主函数中,执行 fun时,把变量 b的地址传给了 c,把 a的值传递给了d,经过运算,输出的值为 b, B。在主函数的输出语句中,输出变量 b的值为 b,变量 a的值为 A。 【知识模块】 C语言程序设计 11 【正确答案】 A 【试题解析】 本题考查判断语句与循环语句。欲使每行输出 8个数据,则必然使用取余运算,当 i 8=0时先输出一个换行符再输出字符。选项 D中, cominue语句的作用是停止执行本次循环位于 continue后面的语句,而进入下一次循环。 【知识模块】 C语言程序设计 12 【正
34、确答案】 A 【试题解析】 子函数 fun的功能是把小写字母转换成大写字母,所以程序的输出结果为选项 A一 【知识模块】 C语言程序设计 13 【正确答案】 B 【试题解析】 本题考查函数的调用与指针。 fun()函数的作用是:使指针 p指向原来所指变量的下一个变量,使 q指针指向的值加 1。主函数中,指针 r指向 m,调用 fun()函数的结果是,使 r指向地址位于 m后面的变量,使位于 n的地址上的变量 (就是 n)的值加 1,因此,结果为 1, 3。 【知识模块】 C语言程序设计 14 【正确答案】 B 【试题解析】 本题考查函数的调用与指针。 p和 q分别为指向 x和 y的指针,函数
35、fun()的两个形参均为指针型,主要功能为交换两个指针的指向,当调用结束以后,该操作不能返回主函数。而主函数中, fun(p, q)、 fun(&x, &y)的实参均为 x与 y的地址,因此,两者结果相同,并且两者指针指向的值不能变化。 【知识模块】 C语言程序设计 15 【正确答案】 C 【试题解析】 函数 void f(int b)的功能是对数组 b中第 2个到第 5个元素的值逐个扩大 2倍。所以在 main()函数中 , f(8)语句的作用是对数组 a10中从 a2到a5的各个数字乘以 2,因而数组 a10的元素就变成了 1, 2, 6, 8, 10, 12, 7,8, 9, 10)。
36、【知识模块】 C语言程序设计 16 【正确答案】 B 【试题解析】 在 fun函数中, while循环的功能是逐个取字符数组 s的字符判断其是否是数字。若是则将这些数字组成一个数保存到变量 n中,并返回变量 n的值。所以在主函数中调用 fun(s)时,将把字符数组 s中的数字组成一个数输出。因为当指针 s指向数组的第 3位时,即字符 *,循环条件不 成立,循环结束,返回 n的值。所以输出 n的值为 61。 【知识模块】 C语言程序设计 17 【正确答案】 B 【试题解析】 主函数中定义指针变量 p指向 k,调用函数 sp(p),将 k的地址传递给形参指针 a,函数转到 sp运行, a指向 b的
37、地址,表达式 *a *a*2,相当于 b b*2,得到 *a的数据 4输出。函数调用结束,此时 a和 b的空间撤销,而对实参k和 p的值并没有改变,仍旧是 3。 【知识模块】 C语言程序设计 18 【正确答案】 D 【试题解析】 本题考查了二级指针,二级指针可以保存一级 指针的地址。主函数中 p指向 i, r指向 p,函数调用后 s指向 p,在 f函数中 t指向全局变量 k 7, s指向 t,同时 s保存了实参 p的地址,此时 p也指向 t,输出三个 7,流程转到主函数。 i的值为 3, p以及 r的值为 7。 【知识模块】 C语言程序设计 19 【正确答案】 D 【试题解析】 本题考查了返回
38、值为指针的函数,函数 f的主要功能为第一个参数小于第二个参数,那么交换指针的指向,这对于实参指向的数据时没有影响的。最后返回比较大的元素的地址。主函数中 p指向 i, q指向 j,调用 r f(P,q),返回 q的地址,因此 *p 3, *q 5, *r 5。 【知识模块】 C语言程序设计 20 【正确答案】 A 【试题解析】 本题考查了指针作为函数的参数,可以接收实参变量的地址,改变实参的值。主函数调用 sp(&k),执行 sp函数 a指向向 k,执行语句 a=a。 2后 a指向空间的值 k的值为 6,改变 a的指向以后,此时 a指向 b,则执行 a=a。 2以后, a指向空间 b的值为 4
39、。调用结束返回主函数,输出 k的值为 6。 【知识模块】 C语言程序设计 21 【正确答案】 C 【试题解析】 本题考查二级指针作为函数的参 数,可以通过函数调用来改变主函数中一级指针的指向。主函数中指针变量 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。 【知识模块】 C语言程序设计 22 【
40、正确答案】 C 【试题解析】 函数 f为返回值为指针的函数,主要功能是返回 s和 t指向空间 值大的数据的地址,同时如何 s指向空间数据大于 t指向空间的数据,那么交换。主函数 p和 q指向 i和 j,值为 3和 5, j的值大于 i的值,因此调用函数 f以后,返回 j的地址, r指向 j,同时 i和 j的值交换, i 5, j 3, p和 q的指向不变, p指向 i, q指向 j。 【知识模块】 C语言程序设计 23 【正确答案】 A 【试题解析】 函数 funa的功能计算两个数据的和, funb的功能计算两个数据的差,函数 sss中利用指向函数的指针作为函数的参数,可以在调用的时候,根据接
41、收的函数地址来决定调用那一个函数。主函数中调 用 X sss(funa, 9, 3),将funa函数的地址传递给 t,因此 sss函数成为求两个数据的和 12,继续将 funb函数地址传给 t,求两个数据差为 5,和 s累加后结果为 17。 【知识模块】 C语言程序设计 24 【正确答案】 C 【试题解析】 函数 fun有四个形参,功能是利用参数的地址传递来计算前两个参数的和与差。主函数中调用 fun函数 c计算 4 3, d计算 4-3值为 1。 【知识模块】 C语言程序设计 25 【正确答案】 B 【试题解析】 函数 fun的主要功能是交换 p和 q指向的地 址空间的数据,然后更改 p的指
42、向的地址空间数据,使之和 q指向的数据相同。主函数调用 fun后, p指向 a, q指向 b,因此 a和 b的数据全部为 9。 【知识模块】 C语言程序设计 26 【正确答案】 B 【试题解析】 函数 fun的主要功能是判断字符是否为大写字符,如果是则转换为小写字符,主函数读入大写字符串,转换成小写。 【知识模块】 C语言程序设计 27 【正确答案】 D 【试题解析】 函数 void swap(char*x, char*y)的功能是交换两个字符 *x和 *y中的内容。在主函数 中字符指针 s1指向字符串 abe, s2指向字符串 123。所以函数swap(s1, s2)的执行结果就是字符 a和
43、 1相互交换。 【知识模块】 C语言程序设计 28 【正确答案】 B 【试题解析】 在 while循环中的判断表达式为 (*x=*y)&*x! 0,所以只要字符串 x与 y的当前字符不相等时,循环就结束。 【知识模块】 C语言程序设计 29 【正确答案】 C 【试题解析】 在函数 fun(char*s)中,首先用字符指针变量 t指向 s,而循环语句while(*t );的功能是使指针变量 t指向字符串变量 s的末尾,这时退出循环,因而语句 return(t s);返回的就是字符串 s所指字符串的长度。 【知识模块】 C语言程序设计 30 【正确答案】 B 【试题解析】 程序只输出字母 ASCI
44、I值为奇数的字母,根据字母 B, Y, T, E的 ASCII值的奇偶性相应输出。 【知识模块】 C语言程序设计 31 【正确答案】 D 【试题解析】 在程序中,指针的指针变量 a和 p都是指向字符串的指针。执行fun(a)语句时, p指向的是字符串数组 a的第一个字符 串 “Morning”, p自加 1之后, *p指向了字符串数组 a的第 2个字符串 “Afternoon”。 【知识模块】 C语言程序设计 32 【正确答案】 B 【试题解析】 在函数 void fun1(char *p)中,语句 (*q)的功能是 q所指的字符加 1,变成其后面的字符; q就是指针 q指向下一个字符的位置。
45、所以在主函数中,语句 p &a3的作用是使指针 p指向字符数组 a中的第四个字符的位置,即 p指向字符 g;然后调用函数 fun1(p)后,字符 g变成 h,字符 r变成 s,字 符a变成 b,字符 m变成 n,因而字符数组 a中的内容就成 “Prohsbn”。 【知识模块】 C语言程序设计 33 【正确答案】 C 【试题解析】 主函数 main()定义了指向字符串的指针和一个字符数组,接着调用fun(s, t)函数,进行实参向形参传递,函数 fun()第一个 while语句判断 *a中的值为 “*”时继续扫描,当遇到不是 “*”时结束,接着第二个 while循环语句,将 *a中从 “a”开始
46、的后续所有字符都赋予 *b,也就是 t80中的内容为 “a*b*”。 【知识模块】 C语言程序设计 34 【正确答案】 C 【试题解析】 在 while语句的条件中是把字符 *a的值赋给字符 *b,然后再判断字符 *b的值是否等于字符串的结束字符 ( 0),当不等于结束字符 ( 0)时,把字符指针变量 a,b分别加 1,指它们的下一个字符,直到字符串 a的结束。这样程序执行的结果就是把字符串 a赋给了 b所指的存储空间。 【知识模块】 C语言程序设计 35 【正确答案】 C 【试题解析】 函数 fun(char s10,intn)通过两重 for循环语句,比较二维字符数组 s10的每个字符串的首字符大小,如果前一个字符串首字符大于后一个字符串的首字符,则交换这两个字符串的首字符。在主函数中,语句 fun(ss,5)的作用是对二维字符数组 ss510的 5个字符串的首字符进行从小到大的排序,不影响各个字符串另外的字符。所以排序结束后, 5个字符串的第一个字符依次变为 a、a、 b、 b和 x;最后输出第 1个和第 4个