1024 程序员节闯关题目 :>_<:
Posted 阿基米东
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1024 程序员节闯关题目 :>_<:相关的知识,希望对你有一定的参考价值。
背景:今天是 1024 程序员节,应公司人力资源中心的要求,设计了一套闯关题目(奖品丰厚),供大家竞赛。由于时间仓促,准备得不够充分,而且我司以嵌入式开发为主,因此试题部分代码为 C 语言,请大家见谅啦。
PS. 前面几道题目涉及一些计算机历史人物,旨在向伟大的计算机先驱(程序员)致敬!
1、世界上第一台具有存储功能的计算机是( )。
- A. ABC 计算机(Atanasoff-Berry Computer)
- B. ENIAC
- C. Macintosh
- D. 103 机
2、历史上第一位程序员是( )。
- A. Ada Lovelace
- B. Margaret Hamilton
- C. Bill Gates
- D. Alan Turing
3、贝尔实验室(The Bell Labs)美国电报电话公司(AT&T)的研发机构,在计算机发展史上有着非常重要的地位,曾诞生过 9 个诺贝尔奖和 5 个图灵奖,请问以下哪位程序员没有在贝尔实验室工作过?
- A. Ken Thompson
- B. Brian Kernighan
- C. Tim Berners-Lee
- D. Dennis Ritchie
4、以下哪位被称为“C语言之父”( )。
- A. 谭浩强
- B. Brian Kernighan
- C. P. J. Plauger
- D. Dennis Ritchie
5、以下哪位被称为“自由软件之父”( )。
- A. Andrew S. Tanenbaum
- B. Linus Torvalds
- C. Richard Stallman
- D. Eric Raymond
6、以下哪个不是计算机基本组成的必要元素( )。
- A. 运算器
- B. 控制器
- C. 存储器
- D. 传感器
7、GPS 卫星定位至少需要( )颗卫星才能定位?
- A. 3
- B. 4
- C. 5
- D. 6
8、如果 A=11001010B,B=00001111B,C=01011100B,那么 A ∨ B ∧ C 等于( )。
- A. 01001100
- B. 00001111
- C. 01011100
- D. 11001110
9、已知循环队列存储在一维数组 A[0…n-1] 中,且队列非空时 front 和 rear 分别指向队头元素和队尾元素。若初始时队列为空,且要求第 1 个进入队列的元素存储在 A[0] 处,则初始时 front 和 rear 的值分别是( )。
- A. 0,n-1
- B. n-1,n-1
- C. n-1,0
- D. 0,0
10、根节点深度为 0,一棵深度为 h 的满 k(k>1)叉树,即除最后一层无任何子节点外,每一层上的所有结点都有 k 个子结点的树,共有( )个结点。
- A. (k^(h+1) - 1) / (k - 1)
- B. k^(h-1)
- C. k^h
- D. (k^(h-1)) / (k - 1)
11、为了统计一个非负整数的二进制形式中 1 的个数,代码如下:
int CountBit(int x)
int ret = 0;
while (x)
ret++;
___________;
return ret;
则空格内要填入的语句是( )。
- A. x >>= 1
- B. x &= x - 1
- C. x |= x >> 1
- D. x <<= 1
12、李工一家要去澳洲旅游,一共乘坐三趟飞机才能到达目的地,其中第 1 个航班准点的概率是 0.9,第 2 个航班准点的概率为 0.8,第 3 个航班准点的概率为 0.9。如果存在第 i 个 (i=1,2) 航班晚点,第 i+1 个航班准点,则李工将赶不上第 i+1 个航班,旅行失败;除了这种情况,其他情况下旅行都能成功。请问李工此次旅行成功的概率是( )。
- A. 0.648
- B. 0.5
- C. 0.72
- D. 0.74
13、如果在某个进制下等式 7*7 = 41 成立,那么 12 * 12 = ( )也成立。
- A. 100
- B. 144
- C. 164
- D. 196
14、一颗二叉树的前序遍历序列是 ABCDEFG,后序遍历序列是 CBFEGDA,则根节点的左子树的节点个数可能是( )。
- A. 0
- B. 2
- C. 4
- D. 6
15、strlen 是一个 C 库函数,它的作用是计算字符串的长度,下面 strlen 函数实现中包含 1 个隐藏的 Bug,请找出并修复它。(需填写行号和正确代码)
int strlen(const char* str)
assert(str != NULL);
int len;
while((*str++) != '\\0')
++len;
return len;
答案:第4行,应该是 int len = 0;
16、快速排序法是 Tony Hoare 提出的一种排序算法,它采用了一种分治的策略,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列的目的。下面是 C 语言实现的一个快速排序算法函数,用于对一个大小为 size 的整型数组 a 进行排序,其中包含 3 个隐藏的 Bug,请找出它们并修复。(需填写行号和正确代码)
static void qsort(int* a, const unsigned int size)
assert(a);
if(size < 2) return;
int base = a[0]; /* 以序列中的第一个数为基准值 */
int *i = &a[0]; /* 指针变量i指向第一个 */
int *j = &a[size-1]; /* 指针变量j指向最后一个 */
int t;
static unsigned int round = 0;
while(i != j)
while(*j >= base && j > i) j--; /* 先从右往左找小于base的数 */
while(*i <= base && i < j) i++; /* 再从左往右找大于base的数 */
if(i < j) /* 如果i和j没有重合则交换位置 */
t = *i; i = j; *j = t;
else /* 如果i和j重合则将基准数归位 */
t = *i; *i = a[0]; a[0] = t;
int *left = &a[0]; /* 左子序列 */
int *right = i; /* 右子序列 */
qsort(left, (i-&a[0])); /* 递归处理左子序列 */
qsort(right, (&a[size]-i)); /* 递归处理右子序列 */
答案:
- 第20行,应该是
t = *i; *i = *j; *j = t;
- 第27行,应该是
int *right = i+1;
- 第30行,应该是
qsort(right, (&a[size-1]-i));
以上是关于1024 程序员节闯关题目 :>_<:的主要内容,如果未能解决你的问题,请参考以下文章