问题
单项选择题
有以下程序:
#include <string .h>
void f(char *s, char *t)
char k;
k=*s; *s=*t; *t=k;
s++;t- -;
if(*s) f(s, t);main()
char str[10]="abcdefg",*p;
p=str+strlen(str)/2+ 1;
f(p,p-2);
printf("%s\n", str);程序运行后的输出结果是( )。
A.abcdcfg
B.gfedcba
C.gbcdefa
D.abedcfg
答案
参考答案:B
解析: 本题定义的函数f()是一个递归函数。它先交换两个字符指针所指的内容,然后将第 1个指针往后移动—位,第2个指针往前移动一位,如果第1个指针所指内容不是字符串结束标志,则递归调用自身。主函数中首先定义了—个字符数组sir[10]=“ahcdeft”然后定义了一个字符指针 p=str+ strlen(str)/2+1,即让p指向str+4(或&str[4])的位置。然后调用f(p,p-2);,这使得p所指的str[4]及其以后的2个位置str[5]、str[6]中的内容同p-2所指的str[p]及其以前的2个位置str[1]、str[0]中的内容互相交换。即让整个字符串逆序。所以本题应该选择B。