今天学到了三样东西,递归在进制转换方面的的一些应用;进制转换的快捷方法;命令行如何可以持续执行。
进制转换的快捷方法
#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);
}
}
还是代码中讲解。