有以下程序:#include <string .h>void f(char *s, char *t){ char k; k=*s; *s=*t; *t=k; s++; t- -; if(*s) f(s, t);}m

admin2009-01-15  24

问题 有以下程序:#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

答案2

解析 本题定义的函数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。
转载请注明原文地址:https://kaotiyun.com/show/OmXp777K
0

最新回复(0)