以下问题已在 GATE CS 考试中提出。
1. 考虑以下 C函数。
float f(float x, int y)
{
float p, s; int i;
for (s=1, p=1, i=1; i < y; i ++)
{
p*= x/i;
s+=p;
}
return s;
}
对于较大的 y 值,函数f 的返回值最接近(GATE CS 2003)
a) x^y
b) e^x
c) ln(1 + x)
d) x^x
答案(二)
函数f() 是泰勒级数的实现,用于计算 e^x
e^x = 1 + x + x^2/2! + x^3/3! + ---
More is the value of y 更精确的 e^x 值将由 f() 返回
参考:
http://en.wikipedia.org/wiki/E_%28mathematical_constant%29
2. 在最坏的情况下,为给定元素搜索长度为 n 的单向链表所需的比较次数是 (GATE CS 2002)
a) 记录 2 n
b) n/2
c) 记录 2 n – 1
d) n
答案(d)
在最坏的情况下,要搜索的元素必须与链表的所有元素进行比较。
3. 将元素32、15、20、30、12、25、16按照给定的顺序一个一个插入到一个最大堆中。由此产生的最大堆是。
答案(一)
4. 考虑以下三个声明
I (n + k)^m = Θ(n^m),其中 k 和 m 是常数
II 2^(n + 1) = 0(2^n)
三 2^(2n + 1) = 0(2^n)
这些说法中哪些是正确的? (GATE CS 2003)
(a) I 和 II
(b) I 和 III
(c) 二和三
(d) 一、二、三
答案(一)
(I) (n+m)^k = n^k + c1*n^(k-1) + ... k^m = Θ(n^k)
(II) 2^(n+1) = 2*2^n = O(2^n)
5. 单个数组 A[1..MAXSIZE] 用于实现两个堆栈。两个堆栈从阵列的两端增长。变量 top1 和 top2 (topl< top 2) 指向每个堆栈中最顶层元素的位置。如果要有效地使用空间,“堆栈已满”的条件是 (GATE CS 2004)
a) (top1 = MAXSIZE/2) 和 (top2 = MAXSIZE/2+1)
b) 顶部 1 + 顶部 2 = MAXSIZE
c) (top1= MAXSIZE/2) 或 (top2 = MAXSIZE)
d) 顶1=顶2 -1