问题:输入一个32位的二进制的数,每8位转化为一个十进制的书,将其转化为十进制的ip地址。
思路先行:第一步:总体思路:输入二进制数,然后每八个为一个小单位分开,形成一个对应的十进制数,最终形成四个ip数。
第二步:分别定义存放ip的数组,存放二进制的数组,把二进制数用字符串的形式存放。
第三步:每八个二进制数转化为一个十进制数字,这里调用转化函数bin_dec()。
第四步:二进制转化为十进制函数:递归函数。形成思路:int bin_dec(int x,int n) 先调用第一个ip实参(2,7),if(n==0) return 0;if不是0,则return x*bin_dec(x,n-1). (温馨提示:自己用小本子写写,就回发现其中的递归奥秘!!!)
代码如下:
#include <stdio.h> //引入头文件
//调用的二进制转化函数:递归函数
int bin_dec(int x,int n)
{
if(n==0)
return 1;
return x*bin_dec(2,n-1);
}
void main() // 入口函数
{
int i; //定义循环变量i
int ip[4]={0}; //定义存放ip的数组
char a[33]; //定义存放二进制数
printf("请输入二进制数:");
scanf("%s",a); //以字符串的形式读入
for(i=0;i<8;i++) //第一个IP(0-7位转换结果)
{
if(a[i]=='1')
{
ip[0] += bin_dec(2,7-i);
}
}
for(i=8;i<16;i++) //第二个IP(8-15位转换结果)
{
if(a[i]=='1')
{
ip[1] += bin_dec(2,15-i);
}
}
for(i=16;i<24;i++) //第三个IP(16-23位转换结果)
{
if(a[i]=='1')
{
ip[2] += bin_dec(2,23-i);
}
}
for(i=24;i<32;i++) //第四个IP(24-31位转换结果)
{
if(a[i]=='1')
{
ip[3] += bin_dec(2,31-i);
}
if(a[i]=='\0')
break;
}
printf("IP:%d.%d.%d.%d\n",ip[0],ip[1],ip[2],ip[3]); //输出结果
}
结果如下: