c語言例項--ip地址形式輸出
阿新 • • 發佈:2019-02-08
問題:輸入一個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]); //輸出結果 }
結果如下: