21xrx.com
2024-12-22 19:57:12 Sunday
登录
文章检索 我的文章 写文章
大一C++考试题目与答案解析
2023-07-10 08:54:12 深夜i     --     --
大一 C++ 考试题目 答案解析 题目

近日,某大学的计算机系大一C++课程期末考试题目被曝光,引发不少人关注。以下是题目与答案解析:

1. 下面程序输出的结果是多少?


int main() {

  int x = 3, y = 2;

  cout << (x++ * y - --y / x + x * --y) << endl;

  return 0;

}

输出结果为:9

解析:根据C++运算符优先级,先算乘法和除法,再算加减法。先算x++ * y,得到6;再算--y / x,此时y值为1,x值为4,得到0;最后算x * --y,此时y值为0,x值为4,得到0。将三个结果相加即可得到输出结果9。

2. 下面程序的输出结果是什么?


int main() {

  int a[4] = 3;

  int *p1 = a + 2, *p2 = p1 - 1;

  cout << *p1 << *p2 << *(p1 - 1) << *(p2 + 1) << endl;

  return 0;

}

输出结果为:3214

解析:p1指向a数组的第3个元素3,p2指向p1向前1个位置的元素2。*p1输出3,*p2输出2,*(p1 - 1)输出2,*(p2 + 1)输出4。

3. 下面程序的输出结果是什么?


int main() {

  int a[5] = 4;

  int *p = a, *q = &a[4];

  while (p < q) {

    *p += *q;

    *q = *p - *q;

    *p -= *q;

    ++p;

    --q;

  }

  for (int i = 0; i < 5; ++i) {

    cout << a[i] << " ";

  }

  return 0;

}

输出结果为:5 4 3 2 1

解析:p指向a数组的第1个元素,q指向a数组的最后1个元素。每次循环把*p和*q的值交换,并把指针p和q分别向前和向后移动一个位置。通过这样不断地交换,最后得到a数组的逆序。

4. 下面程序的输出结果是什么?


int fun(int x) {

  if (x <= 1)

    return 1;

   else {

    return x * fun(x - 1);

  }

}

int main() {

  cout << fun(4) << endl;

  return 0;

}

输出结果为:24

解析:该程序是求4的阶乘(4!)。从fun函数的定义可以看到,如果x<=1,则返回1;否则,返回x乘以x-1的阶乘。因此,fun(4) = 4 * fun(3) = 4 * 3 * fun(2) = 4 * 3 * 2 * fun(1) = 4 * 3 * 2 * 1 = 24。

5. 下列说法哪些是正确的?

(1)C++中的class和struct的区别是只有访问级别不同;

(2)C++中的protected访问权限是指只有派生类和本类的成员函数可以访问;

(3)C++中的函数重载是指在同一个类中定义多个同名函数,只要它们的参数列表不同即可。

正确答案为:(1)和(3)

解析:(1)存储方式是唯一的区别。class语言的访问控制和struct相同,均可以定义公有成员、私有成员、保护成员三种。而struct定义的成员的默认访问权限是公开的(public),而class定义的成员默认是私有的(private)。

(2)protected访问权限仍是公有的,除了本身,子类和友元函数可以访问。

(3)函数重载就是在同一个类中定义多个同名函数,但是它们的参数列表不同,包括参数个数、参数类型、参数顺序等。这样可以方便用户使用,也避免了函数名称冲突。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复