46家公司的笔试题集锦:编程与算法挑战

需积分: 3 12 下载量 191 浏览量 更新于2024-08-01 收藏 352KB DOC 举报
"收集46家公司笔试题" 这篇资料包含了46家公司的笔试题,旨在帮助准备面试的求职者提升技能和熟悉常见的编程题目。以下是其中几道题目的详细解析: 1. Sony笔试题 - 完成程序 这是一个C语言程序,目标是输出一个星号(*)组成的图形。题目要求填充缺失的代码部分。根据已给出的图形,可以看出每一行的星号数量是逐渐增加的,然后在达到峰值后逐渐减少。因此,`for`循环里的条件应该是基于当前行数(`i`)计算出星号的数量。同时,`printf`函数需要正确地输出星号。完整的程序应该是: ```c #include<stdio.h> #define N 8 int main() { int i; int j; int k; for(i=0; i<N; i++) { for(j=0; j<(N-i); j++) printf(" "); for(k=0; k<(2*i+1); k++) printf("*"); printf("\n"); } return 0; } ``` 2. 完成程序,实现对数组的降序排序 这是一个C语言的排序问题,要求使用`sort()`函数对整型数组进行降序排列。可以使用冒泡排序、选择排序或快速排序等算法。这里以冒泡排序为例给出解决方案: ```c #include<stdio.h> void sort(); int main() { int array[] = {45, 56, 76, 234, 1, 34, 23, 2, 3}; // 数字任意给出 sort(array, sizeof(array) / sizeof(array[0])); return 0; } void sort(int arr[], int n) { for(int i = 0; i < n - 1; i++) { for(int j = 0; j < n - i - 1; j++) { if(arr[j] < arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } ``` 3. 费波那契数列 费波那契数列的定义是:每个数是前两个数的和。第10项可以通过递归或循环来计算。这里展示一个非递归的解决方案,因为递归在处理大数时可能会导致栈溢出: ```c #include<stdio.h> int Pheponatch(int N) { int fib[N + 2]; fib[0] = 1; fib[1] = 1; for(int i = 2; i <= N; i++) fib[i] = fib[i - 1] + fib[i - 2]; return fib[N]; } int main() { printf("The 10th term is %d", Pheponatch(10)); return 0; } ``` 4. 程序崩溃分析 这是一段C语言代码,用于创建一个二叉树结构。问题在于,`append`函数未定义,且`root`变量在全局作用域初始化为`NULL`。为了使程序正常运行,我们需要定义`append`函数以插入节点,并确保它正确地操作`root`指针。例如: ```c #include<stdio.h> #include<malloc.h> typedef struct { 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; } else { // 实现插入逻辑,这里简化为只插入根节点 newNode->left = root; root = newNode; } } int main() { append(63); // ... } ``` 这些题目涵盖了基本的C语言编程、图形打印、数组排序、递归与循环、以及数据结构(二叉树)等知识。通过解答这些题目,求职者可以提升自己的编程技能,更好地应对实际的笔试挑战。