#include<stdio.h> void convert(int n) { int i; if((i=n/10)!=0) convert(i); putchar(n%10+’

#include<stdio.h>
void convert(int n)
{
int i;
if((i=n/10)!=0)
convert(i);
putchar(n%10+’0’);
}
main()
{
int number;
scanf("%d",&number);
if(number<0)
{ putchar(‘-’);
number= -number;
}
convert(number);
}
从键盘输入5467, 为什么输出结果还是5467?
不是应该是764吗?
putchar(n%10+’0’);是什么意思?执行完后返回上一层继续执行?

1.第一次进入convert( int n)函数时,n=483 , i=n/10=58 非0,因此递归调用convert(48); 这时的n=483会被压入栈。

2.运算convert(48)时, n=48 , i=n/10=4非0,因此递归调用convert(4); 这时的n=48会被压入栈。

3.运算convert(4)时, n=4 , i=n/10=0,因此,输出putchar(n%10+‘0’); 4(字符4)。函数返回。

4.n=48出栈,输出putchar(n%10+‘0’); 8(字符8)。函数返回。
5.n=483出栈,输出putchar(n%10+‘0’); 4(字符4)。函数返回。

栈空,函数返回到主函数。

栈:先进后出
不懂的可以看看《数据结构C语言版》
————————————————
版权声明:本文为CSDN博主「含笠」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41348629/article/details/108157340
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-18
putchar函数(字符输出函数)的作用是向终端输出一个字符。其一般形式为 putchar(c)

n%10+’0’,就是假如n=1则,n%10+’0’ = '1'
结合起来就是向屏幕输出1
void convert(int n)
{
int i;i=n/10
if(n!=0)
{putchar(n%10+’0’);
convert(i);
}
}
这样应该可以了追问

那为什么输入5467后输出的还是5467?if语句执行后i=546,这时再执行convert(i);这里的i就相当于n,最后i=5时停止。这时输出5,但后面的467怎么来的?

追答

convert(5467)
convert(546)
convert(54)
convert(5)
putchar(5%10+’0’);
putchar(4%10+’0’);
putchar(6%10+’0’);
putchar(7%10+’0’);

这是你程序的流程,单步调试一下就清楚了

追问

就是想问一下为什么putchar(5%10+’0’);执行之后会继续执行后面的putchar(4%10+’0’);
putchar(6%10+’0’);putchar(7%10+’0’);而不是直接停止输出呢?

追答

递归函数,程序没执行完啊
下面程序调试通过!
#include "stdafx.h"

#include

void convert(int n)
{
int i;
i=n/10;
if(n!=0)
{
putchar(n%10+'0');
convert(i);
}
}

void main()
{
int number;
scanf("%d",&number);
if(number<0)
{ putchar('-');
number= -number;
}
convert(number);

getchar();
}

本回答被提问者采纳
相似回答