21xrx.com
2024-11-05 18:43:21 Tuesday
登录
文章检索 我的文章 写文章
「C++经典笔试题」-考察你对C++知识的熟练程度
2023-07-09 07:57:53 深夜i     --     --
C++ 笔试题 知识熟练程度

C++语言是一种高效、灵活、功能强大的计算机编程语言,广泛应用于操作系统、游戏开发、嵌入式系统、网络通讯等领域。作为程序员,具备扎实的C++编程知识是必要的,而笔试则是检验程序员C++水平的重要方式之一。以下将介绍一些经典的C++笔试题,帮助读者提高自己的C++编程技能。

1. 下面的程序会输出什么结果?


#include<iostream>

int main()

{

int x[4]=4;

int *p=x;

cout<<*(p++)<<endl;

cout<<*(p+1)<<endl;

return 0;

}

答案是:2和3。程序中定义了一个整型数组x,初始值为1、2、3、4,同时定义了一个整型指针p指向这个数组。第一行代码输出p所指向的值,即1,然后p自增1,指向x[1]。第二行代码输出p+1所指向的值,即x[2]的值3。需要注意的是,p在第一行代码中已经自增过,因此第二行代码不再需要自增。

2. 下面的代码片段是否有问题?如果有,应该如何改正?


double x=1/3;

cout<<x<<endl;

答案是有问题。程序运行输出的结果是0,因为1/3会先进行整数除法,结果为0,然后再转换成double类型,自然是0.0。需要改正的方法是让1或3为double类型:double x=1.0/3或double x=1/3.0或double x=1.0/3.0。

3. 下面的class声明哪些成员函数是inline的?


class A

{

  public:

    A(int n=0):m(n){};

    ~A();

    int get() const {return m;}

    void set(int n) {m=n;}

    A& operator++() {++m; return *this;}

    friend A operator+(const A& a1, const A& a2) {return A(a1.m+a2.m);}

  private:

    int m;

};

答案是都是inline的。所有成员函数都被定义在类声明体内,因此都是inline函数。inline函数的主要优势是可以优化程序的性能和执行效率,同时也可以减少代码量,提高程序的可读性。

4. 下面的程序是否有问题?


#include<iostream>

using namespace std;

int main()

{

  unsigned int a=6;

  int b=-20;

  cout<<(a+b)<<endl;

  return 0;

}

答案是有问题。程序运行输出的结果为4294967282,是一个非常大的数字而不是-14。这是因为在表达式(a+b)中,a会被转换成有符号整数(int),而b的值也不会被改变。在进行加法运算时,a+b的结果是一个无符号整型数,因为a的类型是无符号整型。因此,正确的方法是将b转换成无符号整型数:cout<<(a+static_cast (b))<

以上C++笔试题只是其中的一部分,但涉及的知识点比较全面,包括指针、运算符、类型转换、成员函数等。对于程序员来说,具备扎实的C++编程知识是不可或缺的,只有通过刻苦学习和不断练习,才能不断提高自己的C++水平,做出高效、稳定和可靠的代码。

  
  

评论区

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