📜  C语言 |设置 10

📅  最后修改于: 2022-05-13 01:57:21.145000             🧑  作者: Mango

C语言 |设置 10

以下问题已在 GATE CS 2014 考试中提出。
1)考虑以下C语言程序:

C
#include 
main()
{
    int i;
    int *pi = &i;
    scanf("%d", pi);
    printf("%d\n", i+5);
}


C
int func(int num)
{
    int count = 0;
    while (num)
    {
        count++;
        num >>= 1;
    }
    return (count);
}


C
int f(int j)
{
  static int i = 50;
  int k;
  if (i == j)
  {
    printf("something");
    k = f(i);
    return 0;
  }
  else return 0;
}


C
int ProcessArray(int *listA, int x, int n)
{
    int i, j, k;
    i = 0;
    j = n-1;
    do{
        k = (i+j)/2;
        if (x <= listA[k])
            j = k-1;
        if (listA[k] <= x)
            i = k+1;
    } while (i <= j);
    if (listA[k] == x)
        return(k);
    else
        return -1;
}


C
double f(double x)
{
   if (abs(x*x - 3) < 0.01) return x;
   else return f(x/2 + 1.5/x);
}


以下哪一项陈述是正确的?
(A)编译失败。
(B)执行导致运行时错误。
(C)执行时,打印的值比变量 i 的地址多 5。
(D)执行时,打印的值比输入的整数值多 5。
答案: (D)
说明:程序中没有问题,因为 pi 指向了一个有效的位置。
此外,在 scanf() 中,我们传递一个变量的地址,而 pi 是一个地址。
2)考虑如下所示的函数func:

C

int func(int num)
{
    int count = 0;
    while (num)
    {
        count++;
        num >>= 1;
    }
    return (count);
}

func(435) 返回的值为 __________。
答案: 9
说明:该函数主要返回n的二进制表示中最高位的位置。 435 二进制表示的 MSD 是第 9 位。
3) 考虑下面给出的 C函数。

C

int f(int j)
{
  static int i = 50;
  int k;
  if (i == j)
  {
    printf("something");
    k = f(i);
    return 0;
  }
  else return 0;
}

以下哪一项是正确的?
(A)函数对于 j 的所有值都返回 0。
(B)该函数为 j 的所有值打印字符串。
(C)当 j = 50 时,函数返回 0。
(D)当 j = 50 时,函数会耗尽运行时堆栈或陷入无限循环
答案: (D)
解释:当 j 为 50 时,函数会一次又一次地调用自己,因为在递归过程中 i 和 j 都没有改变。
4) 考虑下面给出的 C函数。假设数组 listA 包含 n (> 0) 个元素,按升序排序。

C

int ProcessArray(int *listA, int x, int n)
{
    int i, j, k;
    i = 0;
    j = n-1;
    do{
        k = (i+j)/2;
        if (x <= listA[k])
            j = k-1;
        if (listA[k] <= x)
            i = k+1;
    } while (i <= j);
    if (listA[k] == x)
        return(k);
    else
        return -1;
}

下列关于 ProcessArray函数的说法中哪一项是正确的?
(A)当 x 不在 listA 中时,它将陷入无限循环。
(B)它是二分查找的实现。
(C)它总是会在 listA 中找到最大的元素。
(D)即使当列表 A 中存在 x 时,它也会返回 -1。
答案:(乙)
说明:该程序是二进制搜索的简单迭代 C 实现。
5) 考虑以下函数

C

double f(double x)
{
   if (abs(x*x - 3) < 0.01) return x;
   else return f(x/2 + 1.5/x);
}