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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#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
参考技术A 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();

本回答被提问者采纳

hdu 2349 最小生成树

/*
刚開始想错了,我以为必须是相邻的点才干连接。原来无线距离能够随意连接
对最小生成树理解不够深啊
*/
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
#define N 600
struct node {
  int u,v;
}f[N];
struct nodee{
  int u,v;
  double w;
}ff[N*N];
double distance(int i,int j) {
 return sqrt((f[i].u-f[j].u)*(f[i].u-f[j].u)*1.0+1.0*(f[i].v-f[j].v)*(f[i].v-f[j].v));
}
int cmp(const void *a,const void *b) {
return (*(struct nodee *)a).w>(*(struct nodee *)b).w?1:-1;
}
int pre[N];
int find(int x) {
 if(x!=pre[x])
    pre[x]=find(pre[x]);
 return pre[x];
 }
int main() {
   int t,n,m,i,j,k,len,e;
   scanf("%d",&t);
   while(t--) {
    scanf("%d%d",&m,&n);
    for(i=0;i<n;i++)
        scanf("%d%d",&f[i].u,&f[i].v);
        len=0;
    for(i=0;i<n-1;i++)
    for(j=i+1;j<n;j++) {
       ff[len].u=i+1;
       ff[len].v=j+1;
       ff[len++].w=distance(i,j);
    }
    for(i=1;i<=n;i++)
        pre[i]=i;
    qsort(ff,len,sizeof(ff[0]),cmp);
    k=0;
    for(i=0;i<len;i++){
    int a=find(ff[i].u);
    int b=find(ff[i].v);
    if(a!=b) {
        pre[a]=b;
        k++;
        if(k==n-m)break;
    }
    }
    printf("%.2f\n",ff[i].w);
   }
return 0;
}

以上是关于#include<stdio.h> void convert(int n) int i; if((i=n/10)!=0) convert(i); putchar(n%10+’的主要内容,如果未能解决你的问题,请参考以下文章

函数打印奇怪的字符:v���� [重复]

NYOJ 会场安排问题

C语言,变量作用域的问题。。。 #include <stdio.h> int x,y,a=15,b=10; void num() x=a-b; y=a+b; v

C: print rhombus

hdu 2349 最小生成树

一个类ls函数