• 【C/C++笔试练习】OSI分层模型、源端口和目的端口、网段地址、SNMP、状态码、tcp报文、域名解析、HTTP协议、计算机网络、美国节日、分解因数


    C/C++笔试练习

    选择部分

    (1)OSI分层模型

      在OSI分层模型中,把传输的比特流划分为帧,是哪一层的功能()

      A.物理层
      B.网络层
      C.数据链路层
      D.传输层

      答案:C

    在这里插入图片描述

      

    (2)源端口和目的端口

      下面关于源端口地址和目标端口地址的描述中,正确的是()

      A.在TCP/UDP传输段中,源端口地址和目的端口地址是不能相同的
      B.在TCP/UDP传输段中,源端口地址和目的端口地址必须是相同的
      C.在TCP/UDP传输段中,源端口地址和目的端口地址是可以相同的
      D.以上描述均不正确

      答案:A

      数据的五元组信息:{源IP,源端口,目的IP,目的端口,协议}。

      源IP:描述数据从那个主机上产生

      目的IP:描述数据去往那个主机。

      源端口:描述数据从源主机的那个进程产生

      目的端口:描述数据去往目的主机那个进程

      协议:双方网络通信使用的网络协议。

      

    (3)网段地址

      网段地址154.27.0.0的网络。若不做子网划分,能支持()台主机

      A.254
      B. 1024
      C.65534
      D.16777206

      答案:C

      154.27.0.0 是B类IP地址,则有16位主机号 ,不做子网划分,则主机号个数为2^16个(65536),除去全0(网段号)和全1号码(广播号)可以支持65534台主机。 故选C。

      

    (4)SNMP

      SNMP使用UDP161和162端口,则该协议属于TCP/IP模型中的()

      A.网络层
      B.数据链路层
      C.应用层
      D.传输层

      答案:C

      简单网络管理协议(SNMP) 是TCP/IP协议簇的一个应用层协议。

    在这里插入图片描述

      

    (5)状态码

      HTTP协议中,状态码500的意思为()

      A.重定向
      B.访问被拒绝
      C.未找到请求的内容
      D.服务器内部有错误

      答案:D

    在这里插入图片描述
    在这里插入图片描述

      

    (6)tcp报文

      主机A向主机B连续发送了两个TCP报文段,其序号分包是70和100,如果A发送的第一个报文段丢失了,但第二个报文段达到了B,B在第二个报文段到达后向A发送确认,那么这个确认号是多少?

      A.100
      B. 101
      C.70
      D.71

      答案:C

    在这里插入图片描述

      

    (7)域名解析

      每个IP地址都可以有一个主机名,通过主机名得到该主机对应ip地址的过程叫()

      A. ip地址解析
      B.域名解析
      C.域名编译
      D. ip地址编译

      答案:B

      主机名本质上就是域名,例如:www.baidu.com,本质上该域名会被解析成为IP地址, 这个过程称之为域名解析

    在这里插入图片描述

      

    (8)HTTP协议

      以下说法不正确的是()

      A.HTTP是一种请求/响应式的协议
      B.HTTP请求消息中Accept表示浏览器可接受的MIME类型
      C.HTTP请求消息中Accept-Encoding表示浏览器能够进行解码的数据编码方式
      D.HTTP请求消息中Css表示初始URL中的主机和端口

      答案:D

    在这里插入图片描述

    在这里插入图片描述

      MIME(Multipurpose lnternet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开D选项: html本身就有一个href标签可以实现,href标签为页面上的所有链接规定默认地址或默认目标。

    在这里插入图片描述

      

    (9)计算机网络

      关于计算机网络,下列描述当中,正确的是()

      A.在同一信道上同一时刻,可进行双向数据传送的通信方式是半双工
      B. TCP协议是无连接的;UDP协议是面向连接的
      C.假设一个主机的ip地址为192.168.8.123,而子网掩码为255.255.255.248,那么该主机的网络号是192.168.8.120
       D.计算机网络中的OSI结构分别是:物理层,数据链路层,传输层,会话层,表示层,应用层

      答案:C

      A 在同一信道上同一时刻,可进行双向数据传送的通信方式是全双工

      B TCP是面向连接,UDP是无连接

      C网络号=ip地址 &子网掩码

    192.168.9.123(01111011)
    &
    255.255.255.248(11111000)
    =
    192.168.9.120 (01111000)
    
    • 1
    • 2
    • 3
    • 4
    • 5

      D 计算机网络中的OSI结构分别是:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层

      

    (10)状态码

      下列关于http状态码描述正确的是()

      A.404读取浏览器缓存,502错误网关
      B. 404找不到资源,403服务器错误
      C.500服务器错误,304读取浏览器缓存
      D.304服务器错误,200请求成功

      答案:C

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

                

    编程题 day31

    美国节日

      解题思路:题目表述很明白,难点在于我们要求一个月第N个星期W。那么面对这个问题,我们拆解的思路是,首先,我们要想找到一个月第N个星期W,一定需要一个参照物,最好的目标当然是这个月的第一天。拿到参照物后,我要能得到参照物的星期数,然后就能得到结果了。所以这个题有两个难点:判断某个月的1号到底是周几,然后根据这个星期数得到这个月第N个星期W。这两个功能写成函数,即可通过反复调用拿到结果。问题被拆解成如下:
      (1)如何根据(年、月、日)计算出这天是星期几
      (2)根据每月的1号是星期几,找到本月的第 n 个星期 X
      (3)根据 6月1日星期几,找到五月的最后一个星期一
      (4)输入有多组
      (5)每组输出之后都需要跟一个空行

    美国节日

    #include 
    #include 
    using namespace std;
    
    bool isLeapYear(int y) 
    {
        return y % 400 == 0 || (y % 100 != 0 && y % 4 == 0);
    }
    
    int DAYS[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    // 求解 y,m,d 这一年过了多少天
    int nDays(int y, int m, int d) 
    {
        int n = d;
    	// m = 10
    	// [1, 9]
    	// [0, 8]
        for (int i = 0; i < m - 1; i++) 
        {
            n += DAYS[i];
        }
        if (m > 2 && isLeapYear(y)) 
        {
            n++;
        }
        return n;
    }
    
    // 传入 y,m,d 计算从基准日期,到带计算日期过了多少天。
    // 算出这个天数的 MOD 7 的同余数
    int diff(int y, int m, int d) 
    {
        return (y - 1) + (y - 1) / 4 - (y - 1) / 100 + (y - 1) / 400 + nDays(y, m, d);
    }
    
    // 传入 y,m,d,计算周几
    int week(int y, int m, int d) 
    {
        int w = diff(y, m, d) % 7;
        if (w == 0) 
        {
            w = 7;
        }
        return w;
    }
    
    // 已知当月1日是星期 w,计算第 n 个星期 e 是几号
    int m1(int w, int n, int e) 
    {
        return 1 + (n - 1) * 7 + (7 - w + e) % 7;
    }
    
    // 已知6月1日是星期w,计算5月的最后一个星期一
    int m2(int w) 
    {
        int d = (w == 1 ? 7 : w - 1);
        return 32 - d;
    }
    
    int main() {
        int y;
        while (cin >> y) 
        {
            /*
            * 1月1日:元旦
            * 1月的第三个星期一:马丁·路德·金纪念日
            * 2月的第三个星期一:总统节
            * 5月的最后一个星期一:阵亡将士纪念日
            * 7月4日:美国国庆
            * 9月的第一个星期一:劳动节
            * 11月的第四个星期四:感恩节
            * 12月25日:圣诞节
            */
            printf("%d-01-01\n", y);
            int w;
            w = week(y, 1, 1);
            printf("%d-01-%02d\n", y, m1(w, 3, 1));
            w = week(y, 2, 1);
            printf("%d-02-%02d\n", y, m1(w, 3, 1));
            w = week(y, 6, 1);
            printf("%d-05-%02d\n", y, m2(w));
            printf("%d-07-04\n", y);
            w = week(y, 9, 1);
            printf("%d-09-%02d\n", y, m1(w, 1, 1));
            w = week(y, 11, 1);
            printf("%d-11-%02d\n", y, m1(w, 4, 4));
            printf("%d-12-25\n\n", y);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89

      

    分解因数

    分解因数
    在这里插入图片描述

      解题思路:看到短除法后,我们很清楚的知道,要想求出它的每一个质因数,我们需要用质数去试除。90能被2整除,那就拿商继续除以2,除不尽就换3,一直到除到质数为止。基础代码框架类似判断质数,只是被判断的数字在过程中不断被除,最终循环结束的时候,那个被处理过的数字,就是最后一个质因数。以下代码注释以90为例。

    #include 
    #include 
    #include 
    using namespace std;
    
    void factorization(int a, vector<int>& factors) 
    {
        factors.clear();
        for (int i = 2; a > 1 && i * i <= a; i++) 
        {
            while (a % i == 0) {
                factors.push_back(i);
                a = a / i;
            }
        }
        if (a > 1) 
        {
      		// 处理素数的情况
            factors.push_back(a);
        }
    }
    
    int main() 
    {
        vector<int> factors;
        int a;
        while (cin >> a) 
        {
            factorization(a, factors);
            printf("%d = ", a);
            for (vector<int>::const_iterator p = factors.begin(); p != factors.end(); ++p) 
            {
                printf("%d", *p);
                if (p != factors.end() - 1) 
                {
                    printf(" * ");
                }
            }
            printf("\n");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

                

  • 相关阅读:
    022python - http请求(理论)
    基本代码讲解
    FFmpeg编程录制音频(Mac OS)
    【HUAWEI】VLAN+OSPF+单臂路由
    新上线软件需不需要防御?
    【无标题】
    .NET周刊【6月第5期 2024-06-30】
    卷积相关知识
    Linux进程
    Delphi中关于PChar、Char数组、string[](ShortString)及结构体长度及占用空间的一些特性说明和测试
  • 原文地址:https://blog.csdn.net/Crocodile1006/article/details/138201069