猴哥又做梦了

2020年1月17日 842点热度 0人点赞 0条评论

猴哥又做梦了

时间: 1ms        内存:128M

描述:

    话说上次猴哥做梦梦到Z老师,Z老师紧接着就被来考查的专家抽中了说课,让Z老师好一顿忙活...
本来以为这只是个巧合,谁成想前几天猴哥又梦到了Z老师,这下可更坏了,Z老师实验室的路由器全瘫痪了.Z老师不干了,非让猴哥给他修路由器,机智的猴哥马上就诊断出是路由器的程序出了问题,可是他眼下要为学弟们准备假期计划,近几天抽不出时间重写路由器的程序。于是猴哥就发了email向你求助,并承诺搞定了这件大事就请你吃大餐~
    猴哥的email:(客套话省略2000字)...路由器中有一张路由表,表中是目的网络,子网掩码(如255.255.255.0),下一跳地址三项,给路由器发过来一个IP地址,如10.10.46.8,此IP地址的二进制形式(用“.”分隔的每一个十进制数转换为一个八位二进制数)为:00001010 00001010 00101110 00001000 ,用二进制的IP和二进制的子网掩码相与,得到的结果按每八位转换回十进制,就是IP对应的目的网络地址。请编程求给定IP与子网掩码对应的目的网络地址。
举个例子: IP: 00001010 00001010 00101110 00001000
         子网掩码: 11111111 11111111 11111111 00000000
                 ==   : 00001010 00001010 00101110 00000000
      十进制表示: 10       10       46       0
只修提交需要修改部分的代码,猴哥在此谢过~

#include <stdio.h>
unsigned char andoper(unsigned char c1,unsigned char c2)
{
    return c1&c2;
}
int main()
{
    int i,j,N,num;
    unsigned char ipaddr[4],netmask[4],netaddr[4];
    scanf("%d",&N);
    for(i=0; i<N; i++)
    {
        for(j=0; j<4; j++)
        {
            scanf("%d",&num);
            ipaddr[j]=num;
        }
        for(j=0; j<4; j++)
        {
            scanf("%d",&num);
            netmask[j]=num;
        }
/*****修改的起始行******/
        for(j=0; j<4; j++)
            netaddr[i] = andoper(ipaddr[j],netmask[j]);
        for(j=0; j<3; i++)
            printf("%d.",netaddr[j]);
        printf("%d\n",netaddr[j]);
/*****修改的终止行*****/
    }
    return 0;
}

输入:

首先输入一个数字N,代表用例的个数(n<100),接下来输入样例中第一行为四个十进制数(<=255)代表IP地址,第二行为四个十进制数(<=255)代表子网掩码,十进制数用空格分隔。

输出:

输出用“.”分隔的十进制目的网络(如10.10.46.0)

示例输入:

2
128 96 39 10
255 255 255 128

128 96 40 12
255 255 255 128

示例输出:

128.96.39.0
128.96.40.0

提示:

参考答案:

解锁文章

没有看到答案?微信扫描二维码可免费解锁文章

微信扫描二维码解锁

使用微信扫描二维码打开广告页面后可以立即关闭,再刷新此页面即可正常浏览此文章

所跳转广告均由第三方提供,并不代表本站观点!

已经扫描此二维码?点此立即跳转

code

这个人很懒,什么都没留下

文章评论