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));   /* 递归处理右子序列 */
		}
	}
}

答案:

  1. 第20行,应该是 t = *i; *i = *j; *j = t;
  2. 第27行,应该是 int *right = i+1;
  3. 第30行,应该是 qsort(right, (&a[size-1]-i));

猜你喜欢

转载自blog.csdn.net/luckydarcy/article/details/127500932