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

阅读以下程序,输出结果为_________

#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;

}

}

结果是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


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

温馨提示:内容为网友见解,仅供参考
第1个回答  2020-03-30
输出结果: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本回答被提问者采纳
第2个回答  2020-03-31

函数 fun 里

x 指向 a

y 指向 c

然后 交换 

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

最后结果 就是

cbade

第3个回答  2020-03-29

结果:

cbade

求教C语言大神!!!最好讲一下理由,万分感谢
首先,主函数只进行了一个fun操作,其他的就是定义和输出,所以字符串(或者说字符数组)的调整完全由fun决定 fun中首先定义了x和y,因为s的长度是5,所以y = (strlen(s) - 1) \/ 2=(5-1)\/2=2 因此:循环开始时,初始值是x=0,y=2,s="abcde",进入循环 第一次:0<2成立,可以进行,...

...理解这个代码,求大神指教,最好能详细一点。万分感谢!!!
j <= sqrt(i); ++j) { \/\/从2~根号i检查就够了,因为因子必定是成对出现的if(i % j == 0) { \/\/如果j是i的较小的一个因子sum += j; \/\/累加jtemp = i \/ j; \/\/找出i的另一个因子 if(temp > j && temp < i) \/\/如果j与temp不相重sum += temp; \/\/就加入另...

C语言选择哈,并解释下,万分感谢。
if(item>=6)break;item不是已经是6了么,应该已经跳出循环体了啊,为什么还会输出15!!它输出15的时候,是item=4的时候进入的循环,然后++,item=5;因为item=4的时候进入循环。item++;item=5了。所以sum+=5;前面已经有1,2,3,4,加到sum了,所以 sum+=5;sum=15了,item=5进入循环,不会输...

C语言程序设计,求答案。万分感谢!
第一题的:include<stdio.h> int main(){ char c;scanf("%c",&c);if('a'<=c&&c<='z')printf("%c\\n",char(c-32));else if('A'<=c&&c<='Z')printf("%c\\n",char(c+32));else printf("what you input is not a letter! ");return 0;} 第二题的:include<stdio.h> ...

C语言。求大神解释一下x=fun(&a[1],n-1)这条,万分感谢!!
if(n==1) return a[0];else x=fun(&a[1],n-1);return x

关于c语言程序设计的问题求大神帮忙!万分感谢!
答:编制并运行程序的“四步曲”让我们用VC6先来编制一个最简单的程序,其功能是向屏幕上输出一个字符串“Hello World”。程序虽小,但与编制运行大程序的整个过程是相同的,都包含如下所谓的“四步曲”:(1)编辑(把程序代码输入,交给计算机)(2)编译(成目标程序文件.obj)编译是把高级语言变成计算机...

C语言程序中fun函数求解读,求大神附图讲解。万分感谢
\/\/函数用来反转链表 NODEfun(NODEh)NODEp,*q,*r;p=;\/指向链表的第一个结点 if(p=ULL)eturnULL;q-next;\/指向p的下一个结点 p-nextULL;\/第一个结点(反转后的最后结点)指向NULL while(q)r-next;\/时指针用来记录待要反转的结点 q-next;\/转q结点 p;\/指向刚反转的结点 q;\/指向待要反转的...

请求C语言的老师支高招啊。高分奖励!帮帮小弟呀!万分感谢
下面就是我给出的程序,任给一个3×3的矩阵都可以算出其对角线元素之和:include "stdio.h"include "conio.h"main(){ int i,j,b,aa[3][3],count=0,s=0;for(i=0;i<=2;i++)for(j=0;j<=2;j++){ scanf("%d",&b);aa[i][j]=b;} \/*输入3×3的矩阵*\/ for(i=0;i...

...求解方程组的,急啊,哪位高手帮下咯,万分感谢
;exit(1);} nu++;} while(fabs(dx)>1e-6);return x;} void main(){ int i;float *x;float c[12]={5,2,1,8,2,8,-3,21,1,-3,-6,1};float *GauseSeidel(float *,int);x=GauseSeidel(c,3);for(i=0;i<=2;i++)printf("x[%d]=%f\\n",i,x[i]);getch();} ...

一个c语言问题,万分感谢
您好,很高兴能为您解决问题。这儿得跟您说一声了。宏有个特性:他在用的时候C语言会直接把宏的名称替换成宏对应的值。外面不会加括号。所以v = LENGTH * 20是这样的:v = WIDTH + 40 * 20,进一步替换就是这样的:v = 80 + 40 * 20,那么直接算出80+40*20的值即可:= 80 + 800 = ...

相似回答