for(int j=0;j
cout<<*pc <<"\t"; cout<<(int)*pc <<"\t";
}
}
a、4 3 2 1 b、1 2 3 4.
c、3 4 2 1 d、 2 1 4 3
8、在 SUN SPARC 工作站上运行上面的程序结果为__
9、不是建立函数的目的选项是:
a、提高程序的运行效率
b、提高程序可读性
c、减少程序篇幅
d、减少程序文件所占内存
10、函数原型为 void func();以下哪个函数指针类型定义是正确的
a、typedef FUNC void (*) ()
b、typedef void FUNC()
c、typedef void (*FUNC)();
d、typedef FUNC void();
11、下列函数中,可作为虚函数的是————
a、全局函数 b、构造函数
c、静态全局函数 d、析构函数
12、对静态成员不正确的描述是——
a、静态成员不属于对象,是类的共享成员
b、要在类外定义初始化
c、调用时,要通过类或对象激活,所以静态成员函数拥有 this 指针
d、非静态成员函数也可以操作静态数据成员
13、在创建派生对象时,构造函数的执行对象是——
a、对象成员构造函数、基类构造函数、派生类本身的构造函数
b、派生类本身的构造函数、基类构造函数、对象成员构造函数
c、基类构造函数、派生类本身的构造函数、对象成员构造函数
d、基类构造函数、对象成员构造函数、派生类本身的构造函数
14、假设 V 为抽象类,下列声明哪个正确
a、V fun(int) b、 V *p
c、int fun(V) d、V Obj
15、假设已定义变量 float data;
以二进制方式把 data 值写入输出文件流对象 outfile 中去,正确的是:
a、outfile.write((float *)&data, sizeof(float));
b、outfile.write((float *)&data, data);
c、outfile.write((char *)&data, sizeof(float));
d、outfile.write((char *)&data, data);
16、如下类定义:
class Foo {
public:
Foo(int v):value(v) {} //a
~Foo() {} //b
private:
Foo() {} //c
int value=0; //d
};
有错误的是____
17、若执行语句: Point a(2), b[3], *c[4];
则 Point 类的构造函数被调用几次
a、1 b、2 c、3 d、4
18、下列关于栈的叙述正确的是
a、在栈中只能插入数据 b、只能删除数据
c、栈是先进先出的线性表 d、是先进后出的线性表
19、一个队列入列顺序是 1,2,3,4,则输出顺序是
a、4321 b、1234 c、1432 d、3241
20、若进栈顺序为 1,2,3,4,假定进栈和出栈可以穿插进行,则可能的出栈顺
序为:
a、2413 b、3142 c、3412 d、1234
21、算法的空间复杂度指
a、算法程序的长度
b、算法程序的指令条数
c、算法程序占的存储空间
d、算法执行过程中所需的存储空间
22、某数列有 1000 个各不相同的单元,有低到高排列,要对该数进行二分法检索
,最坏的情况下,需要检查多少个单元
a、1000 b、10 c、100 d、500
23、已知数组 A 中,每个元素 A[I][J]在存储时要占 3 个字节,设 I 从 0 变到 4,J 从 0
到 9,分配内存从地址 SA 开始连续按行存储分配的。问:A[4][7]的起始地址为:
a、SA 84 b、SA 99
c、SA 120 d、SA 141
24、使用双向链表存放数据的优点是
a、提高检索速度 b、方便的插入和删除数据
c、节约存储空间 d、很快回收存储空间
25、若某链表最常用的操作是在最后一个结点之后插入一个结点并删除最后一个
结点,则采用____存储方式最省时间
a、单链表 b、双链表
c、带头节点的双循环链表
d、单循环链表
26、在理想情况下,散列表中查找元素所需比较次数为:
a、n b、0 c、n/2 d、1
27、Ethernet 属于数据链路层协议
28、普通交换机和路由器工作在
a、数据链路层和传输曾
b、链路层和网络层
c、都是网络层
d、网络层和传输层
29、以太网的 MTU 值为
a、500 b、1492 c、1500 d、1982
30、在一个 Windows SDK 的基本应用程序框架中,有如下消息循环:
while(GetMessage(&Msg,NULL,0,0) {
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
下面哪个消息使得该消息循环退出运行,从而终止整个应用程序的运行
a、WM_DESTROY b、WM_QUIT
c、WM_CLOSR d、WM_CREATE
31、进程和线程最主要的区别:
a、CPU 调度方式不同 b、优先级不同
c、程序入口不同 d、进程有独立的地址空间,线程共享地址空间
32、以下哪项不适合用于进程间通讯
a、socket b、Pipe
c、共享内存 d、全局变量
第二部分简答:
1、在多任务操作系统中,进程的状态 ready, run, pend, zombie 的含义和相互的
迁移条件。
2、VC 中,如何调用操作系统的函数。
3、TCP/IP 模型中,画出分层协议并解释。ARP 是什么作用。
4、双向循环链表,删除两个链表 data 值相同的结点。写程序。
5、不改变其他位的值,写一段程序分别将 char 型变量 a 的 bit3 置位和复位。
第三部分编程:
1、改错
char *string_test()
{
char *a="1234567890";
char c[10];
int *b;
b=malloc(sizeof(a));
strcpy(b,a);
strncpy(&c,a,10);
printf("%s\n",c);
return b;
}
main()
{
char *b=string_test();
printf("%s\n",b);
return;
}
参考答案:
char *string_test()
{
char *a="1234567890";
char c[11];
char *b;
b=(char *)malloc(strlen(a) 1);
strcpy(b,a);
strncpy(c,a,11);
printf("%s\n",c);
return b;
}
int main()
{
char *b=string_test();
printf("%s\n",b);
free(b);
return 0;
}
2、用标准 C 实现 strcat 和 memmove 函数
char *strcat(char *dest, const char *src)
char *strcat(char * dst, const char * src)
{
char *cp=dst;
while(*cp)
cp ;
while(*cp =*src )
NULL;
return dst;
}
char *strcpy(char *dest, const char *srce)
{
char *addr=dest;
while((*dest =*srce )!='\0')
NULL;
return addr;
}
void *memmove(void *dest, const void *src, size_t count)
void* memmove(void* dest, void* source, size_t count)
{
void* ret = dest;
if (dest <= source || dest >= (source count))
{
while (count --)
*dest = *source ;
}
else
{
dest = count - 1;
source = count - 1;
while (count--)
*dest-- = *source--;l
}
return ret;
}
ps: void* memcpy(void* dest, void* source, size_t count)
{
void* ret = dest;
//copy from lower address to higher address
while (count--)
*dest = *source ;
return ret;
}
3、设计一个 linux 或者 windows 下 c 语言,基于 TCP 的多线程服务器和客户端发送程
序。(1)对服务器程序,收到客户端字符串后,用 printf()显示。要求对客户端的
报文处理采用多线程并发处理方式。
(2)对客户端程序,接收来自键盘的字符串,发给指定的 IP 服务器。