程序设计竞赛.docVIP

  • 25
  • 0
  • 约5.24千字
  • 约 11页
  • 2017-08-09 发布于重庆
  • 举报
程序设计竞赛.doc

2014 年 秋季学期A卷、考查、开卷 程序设计竞赛 命题教师:陈国斌 适用班级:xxxxx 答卷说明:1.本试卷共2页,1个大题,满分100分。 2.准带的用具或资料: 学号:xxxxx 姓名:xxxxx 班别:xxxxx 题号 一 总分 评分人 得分 一、 编程题(本大题共3小题,共100分) 使用C/C++或Java语言完成以下各题设计、编程和执行,并提交报告。报告包括各题解题代码和执行过程截图。 1. 可以用一个网络地址和一个子网掩码描述一个子网。其中子网掩码包含32个二进制位,前32-n位为1,后n位为0,网络地址的前32-n位任意,后n位为0。所有前32-n位和网络地址相同的IP都属于此网络。 例如,网络地址为194.85.160.176,子网掩码为255.255.255.248,则该子网的IP地址范围是194.85.160.176~194.85.160.183。输入一些IP地址,求最小的网络(即包含IP地址最少的网络),包含所有这些输入地址。 例如,若输入3个IP地址:194.85.160.177、194.85.160.183、194.85.160.178,包含上述3个地址的最小网络的网络地址为194.85.160.176,子网掩码为255.255.255.248。(30分) 代码如下: #include iostream #include cstdio #include cmath using namespace std; int toTen(int str[]){ int i=0; for(int j=0;j8;j++){ i=i+str[j]*(int)pow(2,7-j); } return i; } void to32Ip(intsecondIp[32],int p[]){ int a[8]; for(int i=0;i4;i++){ toSecond(p[i],a); for(int j=0;j8;j++){ secondIp[i*8+j]=a[j]; } } } void toIp(int p[]){ int a[8]; for(int i=0;i4;i++){ for(int j=0;j8;j++){ a[j]=p[i*8+j]; } p[i]=toTen(a); } } void toSecond(int i,int str[]){ int count=7; while(!(i==1||i==0)){ str[count]=i%2; i=i/2; count=count-1; } for(;count0;count--){ str[count]=0; } str[0]=i; } void main(){ int i; int ip[3][4]; int secondIp1[32]; int secondIp2[32]; int secondIp3[32]; int dizhi[32]; int dizhi[32]; for(i=0;i3;i++){ scanf(%d.%d.%d.%d,ip[i][0],ip[i][1],ip[i][2],ip[i][3]); // coutip[i][0].ip[i][1].ip[i][2].ip[i][3]endl; } to32Ip(secondIp1,ip[0]); to32Ip(secondIp2,ip[1]); to32Ip(secondIp3,ip[2]); for(i=0;i32;i++){ if(!(secondIp1[i]==secondIp2[i]secondIp1[i]==secondIp3[i])) break; yanma[i]=1; dizhi[i]=secondIp1[i]; } for(;i32;i++){ yanma[i]=0; dizhi[i]=0; } toIp(yanma); toIp(dizhi); cout网络地址

文档评论(0)

1亿VIP精品文档

相关文档