c语言问题
请看下程序:#include<stdio.h>voidget_put(){charch;ch=getchar();if(ch!='\n')get_put();putcha...
请看下程序:
#include <stdio.h>
void get_put()
{
char ch;
ch=getchar();
if (ch!='\n')
get_put();
putchar(ch);
}
main()
{
get_put();printf("\n");
}
如果我输入12345,程序会现实54321。请问这又没有循环,一个putchar不是只能输出一个字符吗?
还有个问题。这个函数的递归,是让ch不断有新的值(2覆盖1,3覆盖2,……5覆盖4,回车覆盖五)吗?
麻烦大神说下,在线等,多谢 展开
#include <stdio.h>
void get_put()
{
char ch;
ch=getchar();
if (ch!='\n')
get_put();
putchar(ch);
}
main()
{
get_put();printf("\n");
}
如果我输入12345,程序会现实54321。请问这又没有循环,一个putchar不是只能输出一个字符吗?
还有个问题。这个函数的递归,是让ch不断有新的值(2覆盖1,3覆盖2,……5覆盖4,回车覆盖五)吗?
麻烦大神说下,在线等,多谢 展开
1个回答
展开全部
先回答你第一个问题,递归函数确实是让ch变量不断获得新的值,从1到5。需要注意的是,之后每一次的赋值只在当前的大括号内有效:
void get_put()
{
char ch;
ch=getchar();
if (ch!='\n')
get_put();//这里相当于再次出现了一个函数的大括号(get_put函数),对于这个大括号以内,ch被再次赋值由1变为2,但以外(下面的putchar)ch仍为1
putchar(ch);
}
以此类推。
第一个问题,你已经注意到这是递归了,那么输入12345并按回车后,自然出现了get_put函数五层嵌套,也就有5次putchar了。
如有问题欢迎追问~
void get_put()
{
char ch;
ch=getchar();
if (ch!='\n')
get_put();//这里相当于再次出现了一个函数的大括号(get_put函数),对于这个大括号以内,ch被再次赋值由1变为2,但以外(下面的putchar)ch仍为1
putchar(ch);
}
以此类推。
第一个问题,你已经注意到这是递归了,那么输入12345并按回车后,自然出现了get_put函数五层嵌套,也就有5次putchar了。
如有问题欢迎追问~
更多追问追答
追问
你好,我还是不大懂。1)递归怎么会使1变成2,2变成3……
2)5次的putchar不是输入12345吗?怎么会反过来了。。求解,多谢了
追答
1)你输入的是12345,而getchar每次只能接收一个字符,第一层递归的getchar自然接收的是“1”,此时ch为“1”不为“\n”,所以进入第二层递归,二层递归自然要从头执行函数的,也就是说又有一个ch=getchar()可以接收下一个字符“2”因此在这一层ch就从1变成2了,以此类推一共会有5层递归,就一共有5个ch=getchar()接收12345这5个字符;
2)可能是我说的不够明白,上面其实已经解释了。程序递归中的赋值只在“本层”递归中有效,第一层递归中ch是“1”,那么自然第一层的putchar()只会输出“1”而不会受其他层的影响。至于会倒过来也是因为递归嵌套的缘故,你第5层递归ch赋值为“5”(基于上面的分析),由于输入12345后敲了个回车“\n”,递归结束并立即执行第5层函数中的最后一局getchar()(即先输出一个“5”);随后跳出了第5层嵌套来到第4层,第4层同样仅剩一句getchar()(输出“4”);再跳出到第3层。。。最后结果当然就是54321了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询