1、以下哪些协议不是应用层通信协议?
A、HTTP、TELNET B、FTP、SMTP C、SNMP、NBNS D、ICMP、ARP
2、Ping命令是使用以下哪个协议实现的()
A、UDP B、ARP C、IGMP D、ICMP E、SMTP
ICMP(Internet Control Message Protocol )网际控制报文协议的一个重要应用就是分组网间探测Ping,用来测试两个主机之间的连通性。Ping使用了ICMP回送请求与回送回答报文,Ping是应用层直接使用网络层ICMP的一个例子,它没有通过运输层的TCP或UDP。
3、以下哪个协议通常用来收取邮件(C)
A、SMTP B、MAIL C、POP3 D、SNMP(简单网络管理协议 属于应用层) E、ICMP
SMTP(Simple Mail Transfer Protocol)简单邮件发送协议
POP3(Post Office Protocol)邮局协议 SMTP和POP3都属于应用层协议
一个电子邮件系统具有三个主要组成构件,就是用户代理、邮件服务器以及邮件发送协议(SMTP)和邮件读取协议(POP3)
不要把SMTP和POP3协议弄混。发件人的用户代理向发送方邮件服务器发送邮件,以及发送方邮件服务器向接收方邮件服务器发送邮件,都是使用SMTP协议。而POP3协议则是用户代理从接受方邮件服务器上读取邮件的时候所使用的协议。
4、CSMA/CD发生在OSI模型中的哪一层(B)
A、物理层 B、数据链路层 C、网络层 D、传输层 E、会话层
5、
void Test(int *a,int *b)
{
int *temp;
temp=a;
a=b;
b=temp;
}
int main(void)
{
int a = 1,b = 2;
Test(&a, &b);
printf("%d %d\n",a,b);
return 0;
}
上面那段程序的输出结果为(D)
A、2 1 B、2 2 C、1 1 D、1 2
6、
int main(void)
{
int m = 0256,n = 256;
printf("%o %o\n",m,n);
return 0;
}
上面那段程序的输出结果为(C)
A、0256 0400 B、0256 256 C、256 400 D、 400 400
m的值 0256 表示的是8进制,实际上在内存里面保存的是十进制的174。题目的意思是讲174 和 256 分别是8进制的形式输出,那么输出的就是 256 和 400 了。
7、下列排序算法中,其中(D)是稳定的。
A、堆排序 、冒泡排序 B、快速排序、堆排序
C、直接选择排序、归并排序 D、归并排序、冒泡排序
8、什么函数不能声明为虚函数(AD)
A、构造函数 B、析构函数 C、成员函数 D、友元函数
因为C++不支持友元函数的继承,对于没有继承特性的函数没有虚函数的说法。
9、定义一个有10个指针的数组tmp,该指针是指向一个整形数: int *tmp[10];
10、一个指向有10个整形数数组的指针tmp: int (*tmp)[10];
11、一个指向函数的指针,该函数有一个整型参数并返回一个整型数: int (*fun)(int );
12、一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数: int (*fun[10])(int );
这个题是第9题跟第11题的一个结合。
13、下面四段代码是否有问题,如果有的话,请指出请改正。
void GetMemory(char *p)
{
p=(char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str,"Hello World");
printf("%s",str);
}
有问题,Test函数中str一直都是NULL,并没有为其分配空间,所以无法将字符串拷贝到str指向的内存空间。GetMemory函数中的p指针只是一个临时变量,并不是str指针,并没有修改str指针的指向。
char *GetMemory(void)
{
char p[]="Hello World";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf("%s",str);
}
有问题,GetMemory函数中的p数组是一个临时变量,是在栈上临时分配的,函数返回后,数组就会被系统回收的。因此输出的就是一个随机值。
void GetMemory(char **p, int num)
{
*p = (char *)malloc(num);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str,"Hello World");
printf("%s",str);
}
没有问题,完全正确,因为指针作为函数参数进行传递时,只能改变指针指向的值,而不能改变指针的指向,如果想要改变指针的指向,就要使用二级指针该操作。
char *GetMemory(void)
{
char *p = "Hello World";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
strcpy(str,"abc");
printf("%s",str);
}
有问题,GetMemory函数中的p指针指向的是一个字符串常量,返回后,str也是指向这个字符串常量,是无法修改字符串常量的值。