求c语言大神详细说明这个程序(输入字符串,然后反向输出)
#include<stdio.h>voidreverse(){charc;if((c=getchar())!='\n')reverse();if(c!='\n')putc...
#include <stdio.h>
void reverse()
{
char c;
if((c = getchar()) != '\n')
reverse();
if(c != '\n')
putchar(c);
}
void main()
{
reverse();
printf("\n");
} 展开
void reverse()
{
char c;
if((c = getchar()) != '\n')
reverse();
if(c != '\n')
putchar(c);
}
void main()
{
reverse();
printf("\n");
} 展开
2个回答
展开全部
//原程序:
#include <stdio.h>
void reverse()
{
char c;
if((c = getchar()) != '\n') /*c =getchar()先把键入的一个字符赋值给c,再判断 键入的是否为回车*/
reverse(); /*若当前键入不是回车,再次调用一次自定义函数,注 意此时第一次调用还没有结束;若当前键入回车,即 输入字符串结束符时,则无任何操作,进入下一轮判 断*/
if(c != '\n') /* 如果当前不是回车就输出当前的字符。由于最后一 个字符必定是回车所以最后一次调用相当于无任何 操作,此时函数并不是结束,而是返回上一层调用 点即倒数第二次调用,去执行上次未执行的语句if (c != '\n') putchar(c);这时就输出了倒数第一 个非空字符,此后再返回倒数第三次调用的断点输 出倒数第二个非空字符,以此类推……实现倒序输 出。*/
putchar(c);
}
void main()
{
reverse(); //程序开始,第一次调用自定义函数reverse()
printf("\n");
}
//我的程序:
#include<stdio.h>
#include<string.h>
void main()
{
char a[100];
int i,j;
printf("请输入一个字符串:");
scanf("%s",&a);
j=strlen(a);
printf("它的倒序字符串为:");
for(i=j-1;i>=0;i--)
printf("%c",a[i]);
printf("\n");
}
展开全部
reverse()函数有递归调用,当你输入abcdef时,
第1次调用:c=a,
第2次调用:c=b,
第3次调用:c=c,
第4次调用:c=d,
第5次调用:c=e,
因为前面的调用必须在后面的调用执行完后才执行putchar(c);所以
最后一次调用并输出:e,然后返回上一层调用,输出d,再返回上一层调用,输出c,依次类推,
第1次调用:c=a,
第2次调用:c=b,
第3次调用:c=c,
第4次调用:c=d,
第5次调用:c=e,
因为前面的调用必须在后面的调用执行完后才执行putchar(c);所以
最后一次调用并输出:e,然后返回上一层调用,输出d,再返回上一层调用,输出c,依次类推,
追问
还是有点不明白,
第1次调用:c=a,
第2次调用:c=b,
第3次调用:c=c,
第4次调用:c=d,
第5次调用:c=e,
第6次调用:c='\n'
之后执行
if(c != '\n')
putchar(c);
应该是什么都没有啊
希望解答,刚开始学c语言,很多不懂
追答
第六次因为c=‘\n’了,不满足while的条件,所以没执行while‘循环了,也就是没继续调用reverse()了, 而是执行下一句putchar(c);执行完之后返回上一层调用。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询