
笔试题答案.doc
17页一、Sony 公司笔试题1、打印以下信息**.*.*..*..*..*...*...*...*...*....*....*....*....*....*.....*.....*.....*.....*.....*.....*......*......*......*......*......*......*......*.......*.......*.......*.......*.......*.......*.......*.......view plaincopy to clipboardprint?#include #define N 8 int main() { int i,j,k; for(i=0;i#define N 8int main(){int i,j,k;for(i=0;i void sort(); void print();//为本人后面所加函数 int array[]={45,56,76,234,1,34,23,2,3}; int main() { sort(); print(); return 0; } void sort() { for(int j=0;jvoid sort();void print();//为本人后面所加函数int array[]={45,56,76,234,1,34,23,2,3};int main(){sort();print();return 0;}void sort(){for(int j=0;j int Pheponatch(int); int main() { printf("The 10th is %d",Pheponatch(10)); printf("\n"); return 0; } int Pheponatch(int N) { if((N==1)||(N==2)) { return 1; } else return (Pheponatch(N-1)+Pheponatch(N-2)); } #includeint Pheponatch(int);int main(){printf("The 10th is %d",Pheponatch(10));printf("\n");return 0;}int Pheponatch(int N){if((N==1)||(N==2)){return 1;}elsereturn (Pheponatch(N-1)+Pheponatch(N-2));}4.下列程序运行时会崩溃,请找出错误并改正,并且说明原因。
注意:由于测试环境为 VC++6.0,所以对原题的语法进行了一定的修改view plaincopy to clipboardprint?#include #include typedef struct node{ struct node* left; struct node* right; int value; } TNode; TNode* root=NULL; void append(int N); int main() { append(63); append(45); append(32); append(77); append(96); append(21); append(17); // Again, 数字任意给出 return 0; } void append(int N) { TNode* NewNode=(TNode *)malloc(sizeof(TNode)); NewNode->value=N; if(root==NULL) { root=NewNode; return; } else { TNode* temp; temp=root; while((N>=temp->value && temp->left!=NULL) || (Nvalue && temp->right!=NULL)) { while(N>=temp->value && temp->left!=NULL) temp=temp->left; while(Nvalue && temp->right!=NULL) temp=temp->right; } if(N>=temp->value) temp->left=NewNode; else temp->right=NewNode; return; } } #include #include typedef struct node{struct node* left;struct node* right;int value;} TNode;TNode* root=NULL;void append(int N);int main(){append(63);append(45);append(32);append(77);append(96);append(21);append(17); // Again, 数字任意给出return 0;}void append(int N){TNode* NewNode=(TNode *)malloc(sizeof(TNode));NewNode->value=N;if(root==NULL){root=NewNode;return;}else{TNode* temp;temp=root;while((N>=temp->value && temp->left!=NULL) || (Nvalue && temp->right!=NULL)){while(N>=temp->value && temp->left!=NULL)temp=temp->left;while(Nvalue }if(N>=temp->value)temp->left=NewNode;elsetemp->right=NewNode;return;}}错误在于:结构体在使用之前需要清零,否则运行时会崩溃。
修改后的部分代码如下:view plaincopy to clipboardprint?TNode* NewNode=(TNode *)malloc(sizeof(TNode)); NewNode->value=N; NewNode->left=NULL; NewNode->right=NULL; TNode* NewNode=(TNode *)malloc(sizeof(TNode));NewNode->value=N;NewNode->left=NULL;NewNode->right=NULL;二、华为公司笔试题1、请你分别画出 OSI 的七层网络结构图和 TCP/IP 的五层结构图7 应用层 5 应用层6 表示层 4 传输层5 会话层 3 网络层4 传输层 2 数据链路层3 网络层 1 物理层2 数据链路层 1 物理层2.请你详细地解释一下 IP 协议的定义,在哪个层上面?主要有什么作用?TCP 与 UDP 呢?IP 协议(Internet Protocol)又称互联网协议,是支持网间互连的数据报协议,它与 TCP 协议(传输控制协议)一起构成了 TCP/IP 协议族的核心。
它在网络层主要是用于路由数据包及主机之间寻址 TCP 与 UDP 在传输层的协议3、请问交换机和路由器各自的实现原理是什么?分别在哪个层次上面实现的?交换机(二层交换)的工作原理和网桥一样,它的各个端口都具有桥接功能,每个端口可以连接一个 LAN 或一台高性能网站或服务器,交换机按每一个包中的 MAC 地址相对简单地决策信息转发路由器转发 IP 分组时,只根据 IP 分组目的 IP 地址的网络号部分,选择合适的端口,把 IP 分组送出去同主机一样,路由器也要判定端口所接的是否是目的子网,如果是,就直接把分组通过端口送到网络上,否则,也要选择下一个路由器来传送分组交换机一般用于 LAN-WAN 的连接,交换机归于网桥,是数据链路层的设备,有些交换机也可实现第三层的交换路由器用于 LAN-WAN 之间的连接,可以解决异性网络之间转发分组,作用于网络层4、请问 C++的类和 C 里面的 struct 有什么区别?(1) C++类中属性默认访问类型为 private,而 C 中的 struct 没有访问类型(2) C++类可以有继承,虚函数,多态,而 C 中 struct 没有 (3) C 语言 struct 里面不可以有函数,只能有变量。
C++给 C 中的 struct 功能扩展了5、请讲一讲析构函数和虚函数的用法和作用(1) 析构函数是特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也没有重载,只有在类对象的生命期结束的时候,由系统自动调用主要用途就是自动获取资源,可以完成所需的资源回收,作为类构造函数的补充使用方法:在定义的时候用~标识即可2) 虚函数是 C++多态的一种表现:例如:子类继承了父类的一个函数(方法) ,而我们把父类的指针指向子类,则必须把父类的该函数(方法)设为 virtual(虚函数)使用虚函数,我们可以灵活的进行动态绑定,当然是以一定的开销为代价使用方法:使用 virtual 关键字即可6、全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?全局变量和局部变量的区别是在存储器中位置不同,具体说,全局变量存储在数据段中,局部变量都有可能,一般来说在堆栈段;编译器根据语法进行判断操作系统可以根据存储位置进行判断7、8086 是多少位的系统?在数据总线上是怎么实现的?8086 是 16 微处理器,内部及对外有 16 位数据通路,8080/8085 只有 8 位 8086 寻址空间1MB,8080/8085 为 64KB。
8086 有一个初级流水线结构,内部操作与对外操作具有并行性,8085 无 8086 是个里程碑8086 的机器字长是 16 位,8086 使用 40 个引脚的 16 个做地址/数据复用引腿来传输数据,一次读写过程由一个基本总线周期完成,它由 4 个时钟(CLK)周期组成,按时间顺序定义为 T1、T2 、T3、T4在 T1 期间 8086 发出访问目的地的地址信号和地址锁存选通信号ALE;T2 期间发出读写命令信号 RD、WR 及其它相关信号;T3 期间完成数据的访问;T4结束该总线周期可见,地址与数据信号不会同时出现在一个时钟(CLK)周期,二者可以分时复用同一组引线 三、联想公司笔试题1、设计函数 int atoi(char *s):字符串转化为数字view plaincopy to clipboardprint?#include #include int atoi(char*); int main() { char * s="43"; printf("%d\n",atoi(s)); return 0; } int atoi (char s[]) { int i,n,sign; for(i=0;isspace(s[i]);i++)//跳过空白符 ; sign=(s[i]=='-')?-1:1; if(s[i]=='+'||s[i]==' -')//跳过符号 i++; for(n=0;isdigit(s[i]);i++) n=10*n+(s[i]-'0');//将数字字符转换成整形数字 return sign *n; } #include#include int atoi(。
