### 46家公司笔试题知识点解析 #### Sony笔试题知识点 **1. 完成下列程序** 该题目要求根据给定的输出模式完成一个程序。根据输出结果可以看出这是一个打印星号(`*`)和点(`.`)组成的图案的问题。 **关键知识点:** - **循环控制**: 使用嵌套循环来控制每行输出的字符数量。 - **条件判断**: 根据不同的行数输出不同数量的星号或点。 **示例代码解析:** ```c #include<stdio.h> #define N 8 int main() { int i, j, k; for (i = 0; i < N; i++) { for (j = 0; j < i + 1; j++) { if (j == 0 || j == i) { printf("*"); } else { printf("."); } } printf("\n"); } // 输出两行空白 printf("\n\n"); for (i = 0; i < N; i++) { for (j = 0; j < i + 1; j++) { if (j == 0 || j == i) { printf("*"); } else { printf(".."); } } printf("\n"); } // 输出一行全星号 printf("\n"); for (i = 0; i < N; i++) { printf("*"); } printf("\n"); return 0; } ``` **2. 完成程序,实现对数组的降序排序** 该题目要求实现一个对整型数组进行降序排序的函数。 **关键知识点:** - **排序算法**: 可以使用冒泡排序、选择排序或插入排序等基本排序算法。 - **数组操作**: 需要遍历数组比较元素大小并交换位置。 **示例代码解析:** ```c #include<stdio.h> void sort() { int array[] = {45, 56, 76, 234, 1, 34, 23, 2, 3}; int n = sizeof(array) / sizeof(array[0]); int temp; for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (array[j] < array[j + 1]) { temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } } } int main() { int array[] = {45, 56, 76, 234, 1, 34, 23, 2, 3}; sort(); for (int i = 0; i < 9; i++) { printf("%d ", array[i]); } return 0; } ``` **3. 费波那其数列** 该题目要求编写程序求解斐波那契数列的第10项。 **关键知识点:** - **递归**: 递归是一种常用的方法,但可能会导致栈溢出。 - **迭代**: 迭代方法更高效,避免了递归的开销。 **示例代码解析:** ```c #include<stdio.h> int Pheponatch(int N) { if (N <= 1) return N; int a = 0, b = 1, c; for (int i = 2; i <= N; i++) { c = a + b; a = b; b = c; } return c; } int main() { printf("The 10th is %d\n", Pheponatch(10)); return 0; } ``` **4. 下列程序运行时会崩溃,请找出错误并改正,并且说明原因** 该题目要求找出并修正一个二叉树插入操作中的错误。 **关键知识点:** - **指针管理**: 需要正确管理指针,避免野指针或内存泄漏等问题。 - **二叉树插入**: 插入逻辑应确保新节点被正确连接到树中。 **示例代码解析:** ```c #include<stdio.h> #include<malloc.h> typedef struct TNode { TNode *left; TNode *right; int value; } TNode; TNode *root = NULL; void append(int N) { TNode *NewNode = (TNode *)malloc(sizeof(TNode)); NewNode->value = N; NewNode->left = NULL; NewNode->right = NULL; if (root == NULL) { root = NewNode; return; } TNode *temp = root; while ((N >= temp->value && temp->left != NULL) || (N < temp->value && temp->right != NULL)) { if (N >= temp->value) { temp = temp->left; } else { temp = temp->right; } } if (N >= temp->value) { temp->left = NewNode; } else { temp->right = NewNode; } } int main() { append(63); append(45); append(32); append(77); append(96); append(21); append(17); return 0; } ``` **修正说明:** - 原始代码中,`append` 函数的 while 循环条件不正确,修改后的代码修复了这一问题。 - 添加了对 `NewNode` 的左右子节点初始化操作。 #### 华为笔试题知识点 **1. OSI的七层网络结构图和TCP/IP的五层结构图** - **OSI模型**: 应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。 - **TCP/IP模型**: 应用层、传输层、网络层、网络接口层。 **2. IP协议定义** - **定义**: IP协议是互联网协议,属于网络层。 - **作用**: 负责数据包的寻址和路由选择。 - **TCP与UDP**: TCP是面向连接的协议,提供可靠的数据传输服务;UDP是无连接的协议,不保证数据传输的可靠性。 **3. 交换机和路由器实现原理** - **交换机**: 工作在数据链路层,根据MAC地址转发数据帧。 - **路由器**: 工作在网络层,根据IP地址进行路由选择和数据包转发。 **4. C++的类和C里面的struct区别** - **默认访问权限**: C++中的类默认成员权限为私有(`private`),而C中的结构体默认为公共(`public`)。 - **继承**: C++支持类的继承,而C中的结构体不支持。 **5. 析构函数和虚函数用法及作用** - **析构函数**: 用于释放对象占用的资源。 - **虚函数**: 实现多态性,使基类指针可以调用派生类的函数。 **6. 全局变量和局部变量的区别** - **作用域**: 全局变量在整个程序中有效,局部变量仅在其声明的作用域内有效。 - **生命周期**: 全局变量生命周期贯穿整个程序执行过程,局部变量在函数调用结束时销毁。 **7. 8086系统** - **位数**: 8086是一个16位系统。 - **数据总线**: 采用16位宽的数据总线。 #### 联想笔试题知识点 **1. 设计函数int atoi(char\*s)** - **功能**: 将字符串转换为整数。 - **关键**: 处理正负号、忽略前导空白字符。 **2. int i=(j=4,k=8,l=16,m=32);printf(“%d”,i);输出是多少?** - **输出**: `32` - **解释**: 表达式从右向左计算,最后赋值给 `i`。 **3. 解释局部变量、全局变量和静态变量的含义** - **局部变量**: 在函数内部声明,作用域限制在该函数内。 - **全局变量**: 在所有函数外部声明,可以在任何地方访问。 - **静态变量**: 生命周期贯穿整个程序,但作用域取决于声明的位置。 **4. 解释堆和栈的区别** - **栈**: 动态分配,自动管理,用于存储局部变量等。 - **堆**: 动态分配,手动管理,用于存储动态分配的对象。 **5. 论述含参数的宏与函数的优缺点** - **宏**: 编译时替换,不会消耗栈空间,但无法做类型检查。 - **函数**: 运行时调用,消耗栈空间,但可以进行类型检查和调试。 #### 普天C++笔试题知识点 **1. 实现双向链表删除一个节点P,在节点P后插入一个节点** - **删除节点**: 更新前后节点的指针指向。 - **插入节点**: 相似地更新前后节点的指针指向。 **2. 写一个函数,将其中的\t都转换成4个空格** - **函数**: 使用字符串操作函数实现。 **3. Windows程序的入口是哪里?写出Windows消息机制的流程** - **入口**: `WinMain` 或 `wWinMain`。 - **消息机制**: 消息队列、消息循环、窗口过程函数。 **4. 如何定义和实现一个类的成员函数为回调函数** - **定义**: 使用函数指针或委托。 - **实现**: 在类的成员函数中接受一个函数指针或委托作为参数。 **5. C++里面是否支持多重继承** - **支持**: C++支持多重继承,但需要注意解决菱形继承问题等陷阱。 以上是对给定文件中的笔试题目的详细知识点解析。
- 粉丝: 3
- 资源: 14
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于深度学习的火焰场景识别matlab仿真,包括程序,中文注释,仿真操作步骤
- 机械臂RLS控制程序matlab simulink
- bellsoft-jdk8u432+7-windows-amd64.msi
- android 移动应用与开发
- 运动物体识别 opencv python
- 技术资料分享uCOS-II信号量集很好的技术资料.zip
- 技术资料分享ucOS-II入门教程(任哲)很好的技术资料.zip
- 技术资料分享UCOSII 2.90 ReleaseNotes很好的技术资料.zip
- 技术资料分享Ucos-II-中文注释版很好的技术资料.zip
- 技术资料分享uCGUI的性能与资源占用很好的技术资料.zip