1. 程式人生 > >c語言例項--ip地址形式輸出

c語言例項--ip地址形式輸出

問題:輸入一個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]);      //輸出結果
}

結果如下: