递归与进制转换

今天学到了三样东西,递归在进制转换方面的的一些应用;进制转换的快捷方法;命令行如何可以持续执行。

进制转换的快捷方法

#include<stdio.h>

int main()
{
int n;
printf("请输入十进制数:");
scanf("%d",&n);
printf("转换成八进制数是:");
printf("%o\n",n);
}

类似与这样的快捷方法应该很好用吧!
其实这因该在一开始是就想到的为什么输出总是%d呢?原来这就是十进制的输出方式,所以如果想快速的输出可以:八进制:%o; 十六进制:%x;这里和八进制和十六进制的表达式也是有些相似的。0x开都得代表十六进制,0开头的代表八进制。

递归输出进制

今天学习递归感觉到了一点神奇的东西,有点类似于栈,先进先出或者后进后出。
因为十进制转化为八进制或者二进制都是采用的求余法
在这里插入图片描述
以上图为例,因为输出的时候是24,所以必须先输出2在输出4,所以想办法在递归中让最下面的做最底层的函数,这样输出的时候就能从下往上输出了。

#include<stdio.h>
//十进制转八进制 
int Translate(int n);
int main()
{	
	
	int n;
	do{             //循环语句所用到的int型的n,必须定义在循环之前。
	printf("请输入整数n:");
	scanf("%d",&n);
	printf("转化为八进制是:");
	Translate(n);
	printf("\n");
	}while(n!=10);
		
 }  
int Translate(int n){
 	int i,j;
 	if(n==0)
 		return 0;
 	else{
 		i=n%8;//z求余取结果
 		j=n/8;//求除数,进行下一级的运算
 		Translate(j);
		printf("%d",i);
	}
}

不跳出命令行

这里就是在上面的代码中所运用到的,让主函数置于一个循环之中,只有在输入控制语句之后才会退出,这里仅仅是一点皮毛,如何用人们惯常使用的end、exit等等输入方式退出,在研究研究。

学到啦!赶紧趁热乎更一下。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//十进制转八进制 
int Translate(int n);


int main()
{	
	while(1)    //while中是一个expression,可以是值也可以是运算式,这里的1为永真式,所以会形成一个死循环
	{
		int n;
		printf("请输入整数n:");
		char buf[128];  //这里仅仅用exit测试,如果想加其他的字符串的话,用||就行
		scanf("%s",buf);
		if(!strcmp("exit",buf)) break;	//字符串专用比较方法,哎竟然给忘啦!break则是退出程序的作用
		n = atoi(buf);//字符串强制转换
		printf("转化为八进制是:");
		Translate(n);
		printf("\n");	

	}
	
	return 0;	
 } 
 
int Translate(int n){
 	int i,j;
 	if(n==0)
 		return 0;
 	else{
 		i=n%8;
 		j=n/8;
 		Translate(j);
		printf("%d",i);
	}
}

还是代码中讲解。

猜你喜欢

转载自blog.csdn.net/qq_35430109/article/details/89293700
今日推荐