您的位置:首页 > 其它

经典笔试题目

2007-12-16 23:31 330 查看
char *strcpy(char *des, const char *src){
assert( (des != NULL) && (src != NULL) );
char *add = des;
while ( (*des++ = *src++) != '/0' ) ;
return des;
}
###########################################################################
void *memcpy(void *pvTo, const void *pvFrom, size_t size)
{
assert( (pvTo != NULL) && (pvFrom != NULL) );
byte *pbTo = (byte *) pvTo; /
byte *pbFrom = (byte *) pvFrom;
while(size-- > 0 ){
*pbTo ++ = *pbFrom ++ ;
}
return pvTo;
}
###########################################################################
void* memmove(void* dest, void* source, size_t count) {
void* ret = dest;
if (dest <= source || dest >= (source + count))
{
//Non-Overlapping Buffers
//copy from lower addresses to higher addresses
while (count --)
*dest++ = *source++;
}
else
{
//Overlapping Buffers
//copy from higher addresses to lower addresses
dest += count - 1;
source += count - 1;
while (count--)
*dest-- = *source--;
}
return ret;
}
###########################################################################
int my_atoi(const char *str) {
//atoi()会扫描参数nptr字符串,跳过前面的空格字符
//直到遇上数字或正负符号才开始做转换,而再遇到非
//数字或字符串结束时('')才结束转换,并将结果返回
long int v=0;
int sign = 0;
while ( *str == ' ') str++;
if(*str == '-'||*str == '+')
sign = *str++;
while (isdigit(*str))
{
v = v*10 + *str - '0';
str++;
}
return sign == '-' ? -v:v;
}
###########################################################################
char* myitoa(int value,char* str,int radix) {
static char szMap[] = {
'0', '1', '2', '3', '4', '5',
'6', '7', '8', '9', 'a', 'b',
'c', 'd', 'e', 'f', 'g', 'h',
'i', 'j', 'k', 'l', 'm', 'n',
'o', 'p', 'q', 'r', 's', 't',
'u', 'v', 'w', 'x', 'y', 'z'
}; // 字符映射表
int nCount = -1, nIndex;
char *pStr = str, nTemp;
if ( radix >= 2 && radix <= 36 )
{ // 限制radix必须在2到36之间
if ( value < 0 && radix == 10 )
{ // 如果是负数就在首位添加负号,并将字符串前移
*pStr++ = '-';
value = -value; //转为正数,
}
unsigned int nValue = *(unsigned*)&value;
do { // 循环转换每一个数字,直到结束
pStr[++nCount] = szMap[nValue%radix];
nValue /= radix;
} while(nValue >0); // 转换结束后字符串是翻的
nIndex = ( nCount+1) / 2; // 计算出一半的长度
while(nIndex-- > 0) { // 将字符串的字符序翻转
nTemp = pStr[nIndex];
pStr[nIndex ] = pStr[nCount-nIndex];
pStr[nCount-nIndex] = nTemp;
}
}
pStr[nCount+1]='/0'; // 置结束符
return str;
}
######################如何实现单链表逆置##############################
定义一个节点结构:
struct node
{
int date;//可能使用其它类型或结构
node *next;
};

假设你的链表已经存在,为L
node *curnode = L;//当前节点,指向开始
node *temp=curnode->next;//临时节点
curnode->next=NULL;
L=curnode;
//先将指针指向队尾
while(temp != NULL)
{
curnode=temp;
temp =curnode->next;
curnode->next=L;
L=curnode;
}

1.先序遍历非递归算法
#define maxsize 100
typedef struct
{
Bitree Elem[maxsize];
int top;
}SqStack;

void PreOrderUnrec(Bitree t)
{
SqStack s;
StackInit(s);
p=t;

while (p!=null || !StackEmpty(s))
{
while (p!=null) //遍历左子树
{
visite(p->data);
push(s,p);
p=p->lchild;
}//endwhile

if (!StackEmpty(s)) //通过下一次循环中的内嵌while实现右子树遍历
{
p=pop(s);
p=p->rchild;
}//endif

}//endwhile

}//PreOrderUnrec

2.中序遍历非递归算法
#define maxsize 100
typedef struct
{
Bitree Elem[maxsize];
int top;
}SqStack;

void InOrderUnrec(Bitree t)
{
SqStack s;
StackInit(s);
p=t;
while (p!=null || !StackEmpty(s))
{
while (p!=null) //遍历左子树
{
push(s,p);
p=p->lchild;
}//endwhile

if (!StackEmpty(s))
{
p=pop(s);
visite(p->data); //访问根结点
p=p->rchild; //通过下一次循环实现右子树遍历
}//endif

}//endwhile

}//InOrderUnrec

3.后序遍历非递归算法
#define maxsize 100
typedef enum{L,R} tagtype;
typedef struct
{
Bitree ptr;
tagtype tag;
}stacknode;

typedef struct
{
stacknode Elem[maxsize];
int top;
}SqStack;

void PostOrderUnrec(Bitree t)
{
SqStack s;
stacknode x;
StackInit(s);
p=t;

do
{
while (p!=null) //遍历左子树
{
x.ptr = p;
x.tag = L; //标记为左子树
push(s,x);
p=p->lchild;
}

while (!StackEmpty(s) && s.Elem[s.top].tag==R)
{
x = pop(s);
p = x.ptr;
visite(p->data); //tag为R,表示右子树访问完毕,故访问根结点
}

if (!StackEmpty(s))
{
s.Elem[s.top].tag =R; //遍历右子树
p=s.Elem[s.top].ptr->rchild;
}
}while (!StackEmpty(s));
}//PostOrderUnrec

#############################################################################################################################
软交换是实现传统程控交换机的“呼叫控制”功能的实体,但传统的“呼叫控制”功能是和业务结合在一起的,不同的业务所需要的呼叫控制功能不同,而软交换是与业务无关的,这要求软交换提供的呼叫控制功能是各种业务的基本呼叫控制

#############################################################################################################################
CDMA是码分多址的英文缩写(Code Division Multiple Access),它是在数字技术的分支--扩频通信技术上发展起来的一种崭新而成熟的无线通信技术。CDMA技术的原理是基于扩频技术,即将需传送的具有一定信号带宽信息数据,用一个带宽远大于信号带宽的高速伪随机码进行调制,使原数据信号的带宽被扩展,再经载波调制并发送出去。接收端使用完全相同的伪随机码,与接收的带宽信号作相关处理,把宽带信号换成原信息数据的窄带信号即解扩,以实现信息通信

#############################################################################################################################
SDMA是空分复用接入(Space Division Multiple Access)是一种卫星通信模式,它利用碟形天线的方向性来优化无线频域的使用并减少系统成本。这种技术是利用空间分割构成不同的信道。举例来说,在一颗卫星上使用多个天线,各个天线的波束射向地球表面的不同区域。地面上不同地区的地球站,它们在同一时间、即使使用相同的频率进行工作,它们之间也不会形成干扰。空分多址(SDMA)是一种信道增容的方式,可以实现频率的重复使用,充分利用频率资源。空分多址还可以和其它多址方式相互兼容,从而实现组合的多址技术,例如空分•码分多址

#############################################################################################################################
FDMA是数据通信中的一种技术,即不同的用户分配在时隙相同而频率不同的信道上。按照这种技术,把在频分多路传输系统中集中控制的频段根据要求分配给用户。同固定分配系统相比,频分多址使通道容量可根据要求动态地进行交换。

在FDMA系统中,分配给用户一个信道,即一对频谱,一个频谱用作前向信道即基站向移动台方向的信道,另一个则用作反向信道即移动台向基站方向的信道。这种通信系统的基站必须同时发射和接收多个不同频率的信号,任意两个移动用户之间进行通信都必须经过基站的中转,因而必须同时占用2个信道(2对频谱)才能实现双工通信。

以往的模拟通信系统一律采用FDMA。频分多址(FDMA)是采用调频的多址技术。业务信道在不同的频段分配给不同的用户。如TACS系统、AMPS系统等。频分多址是把通信系统的总频段划分成若干个等间隔的频道(也称信道)分配给不同的用户使用。这些频道互不交叠,其宽度应能传输一路数字话音信息,而在相邻频道之间无明显的串扰。

#############################################################################################################################
TDMA:Time Division Multiple Access 时分多址
时分多址是把时间分割成周期性的帧(Frame)每一个帧再分割成若干个时隙向基站发送信号,在满足定时和同步的条件下,基站可以分别在各时隙中接收到各移动终端的信号而不混扰。同时,基站发向多个移动终端的信号都按顺序安排在予定的时隙中传输,各移动终端只要在指定的时隙内接收,就能在合路的信号中把发给它的信号区分并接收下来。
TDMA较之FDMA具有通信口号质量高,保密较好,系统容量较大等优点,但它必须有精确的定时和同步以保证移动终端和基站间正常通信,技术上比较复杂
#############################################################################################################################
FDMA、TDMA和CDMA的区别
频分多址(FDMA)是采用调频的多址技术。业务信道在不同的频段分配给不同的用户。如TACS系统、AMPS系统等。
时分多址(TDMA)是采用时分的多址技术。业务信道在不同的时间分配给不同的用户。如GSM、DAMPS等。
CDMA(码分多址)是采用扩频的码分多址技术。所有用户在同一时间、同一频段上,根据不同的编码获得业务信道。

目前的数字移动通信网的主要多址方式是FDMA、TDMA系统(GSM,DAMPS)。在频谱效率上约是模拟系统的3倍,容量有限;在话音质量上13kbit/s编码也很难达到有线电话水平、FTDMA系统的业务综合能力较高,能进行数据和话音的综合,但终端接入速率有限(最高9.6kbit/s TDMA系统无软切换功能,因而容易掉话,影响服务质量z;TDMA系统的国际漫游协议还有待进一步的完善和开发。因而TDMA并不是现代蜂窝移动通信的最佳无线接入,而CDMA码分多址技术完全适合现代移动通信网所要求的大容量、高质量、综合业务、软切换、国际漫游等
#############################################################################################################################
GSM全名为:Global System for Mobile Communications,中文为全球移动通讯系统
1.频谱效率。由于采用了高效调制器、信道编码、交织、均衡和语音编码技术,使系统具有高频谱效率。
2.容量。由于每个信道传输带宽增加,使同频复用栽干比要求降低至9dB,故GSM系统的同频复用模式可以缩小到4/12或3/9甚至更小(模拟系统为7/21);加上半速率话音编码的引入和自动话务分配以减少越区切换的次数,使GSM系统的容量效率(每兆赫每小区的信道数)比TACS系统高3~5倍。
3.话音质量。鉴于数字传输技术的特点以及GSM规范中有关空中接口和话音编码的定义,在门限值以上时,话音质量总是达到相同的水平而与无线传输质量无关。
4.开放的接口。GSM标准所提供的开放性接口,不仅限于空中接口,而且报刊网络直接以及网络中个设备实体之间,例如A接口和Abis接口。
5. 安全性。通过鉴权、加密和TMSI号码的使用,达到安全的目的。鉴权用来验证用户的入网权利。加密用于空中接口,由SIM卡和网络AUC的密钥决定。TMSI是一个由业务网络给用户指定的临时识别号,以防止有人跟踪而泄漏其地理位置。
6.与ISDN、PSTN等的互连。与其他网络的互连通常利用现有的接口,如ISUP或TUP等。
7.在SIM卡基础上实现漫游。漫游是移动通信的重要特征,它标志着用户可以从一个网络自动进入另一个网络。GSM系统可以提供全球漫游,当然也需要网络运营者之间的某些协议,例如计费
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: