#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’);是什么意思?执行完后返回上一层继续执行?
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+’的主要内容,如果未能解决你的问题,请参考以下文章
C语言,变量作用域的问题。。。 #include <stdio.h> int x,y,a=15,b=10; void num() x=a-b; y=a+b; v