设为首页 加入收藏

TOP

2006年12月中兴笔试,最后的大题
2014-11-01 15:00:04 来源: 作者: 【 】 浏览:35
Tags:2006年 12月 中兴 笔试 最后

排序及查找方法


#include
#include
#define N 11
/*用监视哨查找*/
int search(int array[],int n,int k)
{int i;
i=n-1;
array[0]=k;
while(array[i]!=k) i–;
return(i);
}
/*折半查找法*/
int halfsearch(int array[],int n,int k)
{int i,j,mid;
i=1;j=n;
while(i<=j)
{mid=(i+j)/2;
if(k==array[mid]) return(mid);
else if(k else i=mid+1;
}
return(0);
}


/*冒泡排序法*/
void mpsort(int array[])
{int i,j,a;
a=0;
for(i=1;i for(j=i+1;j if(array[i]>array[j])
{a=array[i];
array[i]=array[j];
array[j]=a;}
}
/*直接插入排序*/
void insertsort(int array[])
{int i,j;
for(i=2;i {array[0]=array[i];
j=i-1;
while(array[0] {array[j+1]=array[j--];
array[j+1]=array[0];
}
}
}
/*建立*/
void creat(int array[])
{int i;
printf(“enter the array:\n”);
for(i=1;i scanf(“%d”,&array[i]);
}


/*显示*/
void print(int array[])
{int i;
printf(“The numbers after sort is:\n”);
for(i=1;i printf(“%d “,array[i]);
printf(“\n”);
}
main()
{int a[11],i,x,chang;
/*printf(“enter the array\n”);
for(i=1;i<11;i++)
scanf(“%d”,&a[i]);*/


aga:
printf(“\nchang:1: use watching method finding\n 2:use half method finding\n 3: use directness intsert method sort\n 4:use bubble up method sort\n 5:exit\n”);
scanf(“%d”,&chang);
switch (chang)
{case 1:
{creat(a);
printf(“Please int the search number:\n”);
scanf(“%d”,&x);
printf(“The number station is:%d\n”,search(a,N,x));
goto aga;
}
case 2:
{ creat(a);
insertsort(a);
print(a);
printf(“Please int the search number:\n”);
scanf(“%d”,&x);
printf(“The number station is:%d\n”,halfsearch(a,N,x));
goto aga;
}
case 3:
{creat(a);
insertsort(a);
print(a);
goto aga;
}


case 4:
{creat(a);
mpsort(a);
print(a);
goto aga;
}


case 5:{ printf(“exit!\n”);break;}
default:{printf(“Error!\n”); goto aga;}
}
}

二、线性链表的存储实现


struct LNODE{


ElemType data;


struct LNODE *next;


};


typedef struct LNODE LNode;


typedef struct LNODE * LinkList;


1初始化操作


Status Init_L(LinkList L){


if (L=(LinkList *)malloc(sizeof(LNode)))


{L->next=NULL;return 1;}


else return 0;


}


2插入操作


Status ListInsert_L(LinkList &L,int i,ElemType e){


p=L,j=0;


while(p&&jnext;++j;}


if(!p||j>i-1) return ERROR;


s=(LinkList)malloc(sizeof(LNode));


s->data=e;s->next=p->next;


p->next=s;


return OK;


}//ListInsert_L



3删除操作


Status ListDelete_L(LinkList &L,int i,ElemType &e){


p=L,j=0;


while(p&&jnext;++j;}


if(!p->next||j>i-1) return ERROR;


q=p->next;p->next=q->next;


e=q->data;free(q);


return OK;


}//ListDelete_L



4取某序号元素的操作


Status GetElem_L(LinkList &L,int i,ElemType &e){


p=L->next,j=1;


while(p&&jnext;++j;}


if(!p||j>i) return ERROR;


e=p->data;


return OK;


}//GetElem_L


5归并两个单链表的算法


void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc){


//已知单链线性表La和Lb的元素按值非递减排列


//归并后得到新的单链线性表Lc,元素也按值非递减排列


pa=La->next;pb=Lb->next;


Lc=pc=La;


while(pa&&pb){


if(pa->data<=pb->data){


pc->next=pa;pc=pa;pa=pa->next;


}else{pc->next=pb;pc=pb;pb=pb->next;}


}


pc->next=pa pa:pb;


free(Lb);


}//MergeList_L




头指针与头结点的区别:


头指针只相当于结点的指针域,头结点即整个线性链表的第一个结点,它的数据域可以放数据元素,也可以放线性表的长度等附加信息,也可以不存储任何信息。


第一部分 数据结构和算法


1. 假设执行语句S的时间为O(1),则执行下列程序短的时间为()


for(i=1;i<=n;i++)


for(j=I;j<=n;j++)


S;


A. O(n) B. O(n2) C. O(n*i) D. O(n+1)


2. 二位数组A[10…20,5…10]采用行序为主序方式存储,每个数据元素占4个存储单元,且A[10][5]的存储地址是1000,则A[18][9]的地址是()


A. 1208 B.1212 C. 1368 D. 1364


3. 设栈最大长度为3,入栈序列为1,2,3,4,5,6,则不可能得出栈序列是() A. 1,2,3,4,5,6 B. 2,1,3,4,5,6 C. 3,4,2,1,5,6 D. 4,3,2,1,5,6 4. 设有98个已排序列元素,采用二分法查


取自”http://wiki.xyzp.net/%E4%B8%AD%E5%85%B42005%E6%A0%A1%E5%9B%AD%E6%8B%9B%E8%81%98%E7%AC%94%E8%AF%95.htm


似乎不难,可我还没找到。


头几天参加了中兴的笔试,做的不好,勉强是个合格,就这么黄了。


依稀记得几道题,公共题50分,C++和JAVA二选一50分。 其实一直就在用C,一看没有C心里还霍霍的,我当然选的C++


我做的C卷:


公共题:


1、数据库中 XXX 和XXX操作可恢复数据库。undo redo 吧?


2、数据库的核心是XX。


3、头文件中<> 和“”的区别?


4、定义一个宏,输入两个参数,输出积。


3、简述电路交换和分组交换的区别及优缺点。


4、


C++


大约4个选择题,一个6分。数组的操作,在内存中的分配(注意下标从0开始),大题:


1、18分的题:


char *GetMemory(void)
{
char p[] = “hello world”;
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
请问运行Test 函数会有什么样的结果?


答:可能是乱码。
因为GetMemory 返回的是指向“栈内存”
的指针,该指针的地址不是 NULL,但其原
现的内容已经被清除,新内容不可知。


还有一个比较简单,不写了。


2、析构函数什么时候运行,实现什么功能?


7、全局变量和局部变量的区别。


仔细看看林锐的《高质量程序指南》基本不会有大问题。可惜啊,大意了…鄙视中


取自”http://wiki.xyzp.net/%E6%89%BE%E5%B7%A5%E4%BD%9C…%E4%B8%AD%E5%85%B4%E7%AC%94%E8%AF%95%E9%A2%98%E7%9B%AE2006.htm


1.对数据库的一张表进行操作,同时要对另一张表进行操作,如何实现


答案:将操作多个表的操作放入到事务中进行处理


2.TCP/IP 建立连接的过程 (3-way shake)


答案: 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。


第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;


第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;


第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。


3.ICMP是什么协议,处于哪一层


答案:Internet控制报文协议,处于网络层(IP层)


4.触发器怎么工作的


答案:触发器主要是通过事件进行触发而被执行的,当对某一表进行诸如UPDATE、 INSERT、 DELETE 这些操作时,数据库就会自动执行触发器所定义的SQL 语句,从而确保对数据的处理必须符合由这些SQL 语句所定义的规则。


5.winsock建立连接的主要实现步骤


答案:服务器端:socker()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接。客户端:socker()建立套接字,连接(connect)服务器,连接上后使用send()和recv(),在套接字上写读数据,直至数据交换完毕,closesocket()关闭套接字。


服务器端:accept()发现有客户端连接,建立一个新的套接字,自身重新开始等待连接。该新产生的套接字使用send()和recv()写读数据,直至数据交换完毕,closesocket()关闭套接字。


6.动态连接库的两种方式


答案:调用一个DLL中的函数有两种方法:


1.载入时动态链接(load-time dynamic linking),模块非常明确调用某个导出函数,使得他们就像本地函数一样。这需要链接时链接那些函数所在DLL的导入库,导入库向系统提供了载入DLL时所需的信息及DLL函数定位。


2.运行时动态链接(run-time dynamic linking),运行时可以通过LoadLibrary或LoadLibraryEx函数载入DLL。DLL载入后,模块可以通过调用GetProcAddress获取DLL函数的出口地址,然后就可以通过返回的函数指针调用DLL函数了。如此即可避免导入库文件了。


7.IP组播有那些好处


答案:Internet上产生的许多新的应用,特别是高带宽的多媒体应用,带来了带宽的急剧消耗和网络拥挤问题。组播是一种允许一个或多个发送者(组播源)发送单一的数据包到多个接收者(一次的,同时的)的网络技术。组播可以大大的节省网络带宽,因为无论有多少个目标地址,在整个网络的任何一条链路上只传送单一的数据包。所以说组播技术的核心就是针对如何节约网络资源的前提下保证服务质量。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇列举Window对象的属性 下一篇天下互联面试经历

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: