编程小练习

来源:互联网 发布:js让一个div显示 编辑:程序博客网 时间:2024/06/07 00:19

  1. /* 
  2.  
  3. *Copyright(c) 2016.烟台大学计算机与控制工程学院 
  4.  
  5. *ALL rights  reserved. 
  6.  
  7. *文件名称:test.cpp 
  8.  
  9. *作者:李落才
  10.  
  11. *完成日期:2016年4月11日
  12.  
  13. *问题描述:IP地址 
  14.  
  15. */  
  16. /* 
  17. *国际规定:把所有的IP地址划分为 A,B,C,D,E 
  18.  
  19. * A类地址:范围从0-127 
  20.  
  21. * B类地址:范围从128-191 
  22.  
  23. * C类地址:范围从192-223 
  24.  
  25. * D类地址:范围从224-239 
  26.  
  27. * E类地址:范围从240-254 
  28.  
  29. *在日常网络环境中,基本是都在使用B,C两大类地址,而ADE这3类地址都不打可能被使用到。 
  30. */  
  31. #include <iostream>  
  32. using namespace std;  
  33. class IP  
  34. {  
  35. private:  
  36.     union  
  37.     {  
  38.         struct  
  39.         {  
  40.             unsigned char seg0;  
  41.             unsigned char seg1;  
  42.             unsigned char seg2;  
  43.             unsigned char seg3;  
  44.         };  //IP地址共4字节,或者看成结构体所指4部分  
  45.         unsigned int address; //或者看成一个整体  
  46.     };  
  47. public:  
  48.     IP(int=0,int=0,int=0,int=0);  //构造函数  
  49.     void showIP();  //用四段法显示IP地址  
  50.     bool sameSubnet(const IP &ip, const IP &mark);  //判断是否处于同一子网  
  51.     char whatKind();  //返回属于哪一类网络  
  52. };  
  53.   
  54. IP::IP(int s0,int s1,int s2,int s3)  
  55. {  
  56.     seg3=s0;  
  57.     seg2=s1;  
  58.     seg1=s2;  
  59.     seg0=s3;  
  60. }  
  61.   
  62. void IP::showIP()  
  63. {  
  64.     cout<<int(seg3)<<"."<<int(seg2)<<"."<<int(seg1)<<"."<<int(seg0)<<endl;  
  65.     return;  
  66. }  
  67.   
  68. bool IP::sameSubnet(const IP &ip, const IP &mark)  
  69. {  
  70.     //与子网掩码按位与,是计算机内部的操作,直接以一个整体操作更方便  
  71.     unsigned int i1, i2;  
  72.     i1=address&mark.address; //和子网掩码作逻辑与运算  
  73.     i2=ip.address&mark.address; //和子网掩码作逻辑与运算  
  74.     return (i1==i2); //与子网掩码的逻辑与运算结果相同,则属于同一子网  
  75. }  
  76.   
  77. char IP::whatKind()  
  78. {  
  79.     if(seg3<128)  
  80.         return 'A';  
  81.     else if(seg3<192)  
  82.         return 'B';  
  83.     else if(seg3<224)  
  84.         return 'C';  
  85.     else if(seg3<240)  
  86.         return 'D';  
  87.     else  
  88.         return 'E';  
  89. }  
  90.   
  91. int main()  
  92. {  
  93.     IP ip1(202,194,116,97), ip2(202,194,119,102), mark(255,255,248,0);  
  94.     cout<<"ip1: ";  
  95.     ip1.showIP();  
  96.     cout<<"ip2: ";  
  97.     ip2.showIP();  
  98.     if(ip1.sameSubnet(ip2,mark))  
  99.         cout<<"两个IP在同一子网"<<endl;  
  100.     else  
  101.         cout<<"两个IP不在同一子网"<<endl;  
  102.     cout<<"ip1属于"<<ip1.whatKind()<<"类网络"<<endl;  
  103.     return 0;  
  104. }  
0 0
原创粉丝点击