问答题
题1:将网络物理地址转换为IP地址的协议是?
A: IP
B: ICMP
C: ARP
D: RARP
提示:题目中说的是将物理地址转换为IP地址,而不是将 IP 地址转换为物理地址,ARP 是将 IP 地址解析物理地址,RARP 是反向解析,也就是物理地址转换 IP 地址;
ICMP 是属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息
题2:某IP地址 192.168.48.10,掩码为255.255.255.128,其所在的子网为?广播地址为?有效的主机IP地址范围从 ?到?
提示:子网是掩码和 IP 地址进行按位与(&)之后所得出的地址,广播地址是主机地址全为 1 的时候;由于掩码的后八位是 128 ,所以主机地址占 7 位,那么全为 1 的时候是主机地址是 127,所以有效的主机地址为后七位是 0000001 - 1111110
编程题
题1:简单错误记录
开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号处理:
-
记录最多 8 条错误记录,循环记录,对相同的错误记录(净文件名称和行号完全匹配)只记录一条,错误计数增加
-
超过 16 个字符的文件名称,只记录文件的最后有效 16 个字符
-
输入的文件可能带路径,记录文件名称不能带路径
输入描述:一行或多行字符串,每行包括带路径文件名称,行号,以空格隔开
输出描述:将所有的记录统计并将结果输出,格式:文件名 代码行数 数目,一个空格隔开,如:
示例:
输入
E:\V1R2\product\fpgadrive.c 1325
输出
fpgadrive.c 1325 1
提示:通过一个结构体来保存一个对象,一个对象中包含文件名,错误行数,错误次数这三个成员
最多纪录 8 次,循环纪录指的是如果对象少于 8 个则都输出,如果大于 8 个,输出最后 8 个对象
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
// 获取文件名
string getFileName(string path) {
int pos = path.rfind('\\');
return path.substr(pos + 1);
}
// 截取文件名后 16 位
string modifyName(string name) {
if (name.size() > 16) {
name = name.substr(name.size() - 16);
}
return name;
}
struct ErrRecord {
string file;
int lineNo;
int count;
// 构造函数
ErrRecord(string file, int lineNo) {
this->file = file;
this->lineNo = lineNo;
count = 1;
}
// 文件名相等的规则
bool operator==(const ErrRecord & a) {
return (file == a.file) && (lineNo == a.lineNo);
}
};
int main(