求教C语言大神!!!最好讲一下理由,万分感谢

阅读以下程序,输出结果为_________#include<stdio.h>#include<string.h>voidfun(chars[]);intmain(){ch... 阅读以下程序,输出结果为_________

#include<stdio.h>

#include <string.h>

void fun( char s[]);

int main()

{

char a[]="abcde";

int k;

fun(a);

puts(a);

return 0;

}

void fun( char s[])

{

int x,y;

char c;

x=0;

y=(strlen(s)-1)/2;

for( ; x<y; x++,y--)

{

c=s[y];

s[y]=s[x];

s[x]=c;

}

}
展开
 我来答
百度网友63b0960
2020-03-29 · TA获得超过1468个赞
知道小有建树答主
回答量:661
采纳率:90%
帮助的人:205万
展开全部

结果是cbade


原因如下:


首先,主函数只进行了一个fun操作,其他的就是定义和输出,所以字符串(或者说字符数组)的调整完全由fun决定


fun中首先定义了x和y,因为s的长度是5,所以y = (strlen(s) - 1) / 2=(5-1)/2=2

因此:

循环开始时,初始值是x=0,y=2,s="abcde",进入循环

第一次:0<2成立,可以进行,操作时交换了s[0]和s[2]的值,字符串变成了"cbade",结束时执行x++和y--,执行后x=1,y=1

第二次:1<1不成立,循环直接结束


所以函数返回的字符串为cbade


字符数组传递的就是地址,所以不管变量的名字如何,操作的都是那一串

百度网友e88eac6
2020-03-30 · TA获得超过2274个赞
知道小有建树答主
回答量:413
采纳率:73%
帮助的人:201万
展开全部
输出结果:cbade
由于字符数组 a[]= "abcde"; 其中包括了abcde 5个字符外,还有一个结束符 '\0',
所以 strlen(s) = 6,
y=(strlen(s)-1)/2; 属于整数除法运算,y=(6-1)/ 2=5/2=2
所以 for 循环了2次
第一次把 a[2]='c' 和 a[0]='a' 进行了交换

第二次条件不满足,未改变数组
其他位置字符未变,最后输出结果就是cbade
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2020-03-31
展开全部

函数 fun 里

x 指向 a

y 指向 c

然后 交换 

循环一次 就结束了,因为 此时 x=y,退出循环

最后结果 就是

cbade

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2020-03-29
展开全部

结果:

cbade

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式