专栏首页cwl_Java经典笔试题-C++篇

经典笔试题-C++篇

九、C++部分:(共14 题:基础10 道,中等1 道,较难3 道)

188、以下三条输出语句分别输出什么?【基础】

char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char* str5 = "abc";
const char* str6 = "abc";
cout << boolalpha << (str1==str2) << endl; //输出什么?
cout << boolalpha << (str3==str4) << endl; //输出什么?
cout << boolalpha << (str5==str6) << endl; //输出什么?

答:输出为:false、false、true。

189、以下反向遍历array 数组的方法有什么错误?【基础】

vector<int> array;
array.push_back(1);
array.push_back(2);
array.push_back(3);
//反向遍历array 数组:
for(vector<int>::size_type i=array.size()-1; i>=0; --i){
	cout << array[i] << endl;
}

答:for 循环中的变量i 的类型不应定义为vector::size_type, 因为该类型为无符号数值类型,故循环条件将恒成立,为死循环,应将其类型定义为有符号的int 类型。

190、以下代码有什么问题?【基础】 cout << (true ? 1 : “1”) << endl; 答:运算符中两个可选值的类型不同。

191、以下代码有什么问题?【基础】

typedef vector<int> IntArray;
IntArray array;
array.push_back(1);
array.push_back(2);
array.push_back(2);
array.push_back(3);
//删除array 数组中所有的2
for(IntArray::iterator itor=array.begin(); itor!=array.end();
	++itor){
	if(2==*itor) {
		array.erase(itor);
	}
}

答:for 循环中的if 语句后的array.erase(itor)语句,它将迭代器itor 所指向的元素删除后会自动下移一位,故应在其后加上语句:itor–;

192、以下代码中的两个sizeof 用法有问题吗?【基础】

    void upperCase(char str[]){ //将str 中的小写字母转换成大写字母
        for(int i=0; i<sizeof(str)/sizeof(str[0]); ++i){
            if('a'<=str[i] && str[i]<='z')
                str[i] -= ('a'-'A');
        }
    }
    int main(){
        char str[] = "aBcDe";
        cout << "str 字符串长度为:" << sizeof(str)/sizeof(str[0]);
        cout << endl;
        upperCase(str);
        cout << str << endl;
        return 0;
    }

答:在upperCase 方法中,for 循环的sizeof(str)的值将总是4,所以该方法只能将参数中的字符串的前四个字符转换成大写字母。

193、以下代码能够编译通过吗?为什么?【基础】

unsigned int const size1 = 2;
char str1[size1];
unsigned int temp = 0;
cin >> temp;
unsigned int const size2 = temp;
char str2[size2];

答:能;

194、以下代码有什么问题?【基础】

        struct Test{
            Test(int){}
            Test(){}
            void fun(){}
        };
        void main(void){
            Test a(1);
            a.fun();
            Test b();
            b.fun();
        }

答:main 函数的返回类型应为int;不能对b 调用fun()方法。

195、以下代码中的输出语句输出0 吗?为什么?【基础】

        struct CLS{
            int m_i;
            CLS(int i):m_i(i){ }
            CLS(){ CLS(0);}
        };
        int main(){
            CLS obj;
            cout <<obj.m_i << endl;
        }

答:输出不是0;

196、C++中的空类,默认产生哪些类成员函数?【基础】 答:空类中默认包含的成员函数如下:

class Empty{
    public:
    Empty(); //缺省构造函数
    Empty( const Empty& ); //拷贝构造函数
    ~Empty(); //析构函数
    Empty& operator=( const Empty& ); //赋值运算符
    Empty* operator&(); //取址运算符
	const Empty* operator&() const; //取址运算符const
};

197、统计一篇文章中单词个数。【基础】

答:代码如下:

include<iostream>
#include<fstream>
using namespace std;
        int main(){
            ifstream fin("t.txt");
            if(!fin){
                cout<<"can't open file"<<endl;
                return -1;
            }
            int count = 0;
            char buf[256];
            memset(buf, 0, 256);
            while(1){
                fin2>>buf;
                if(fin2.eof())
                    break;
                count++;
            }
            cout<<"The number of the words is : "<<count<<endl;
            fin2.close();
            return 0;
        }

198、写一个函数,完成内存之间的拷贝。【中等难度】 答:代码如下:

        void* mymemcpy(void* dest, const void* src, size_t count){
            char* pdest = static_cast<char*>(dest);
            const char* psrc = static_cast<const char*>(src);
            if(pdest>psrc && pdest<psrc+count){ //能考虑到这种情况就行了
                for(size_t i=count-1; i!=-1; --i){
                    pdest[i] = psrc[i];
                }
            }else{
                for(size_t i=0; i<count; ++i){
                    pdest[i] = psrc[i];
                }
            }
            return dest;
        }
        int main(){
            char str[] = "0123456789";
            mymemcpy(str+1, str+0, 9);
            cout << str << endl; //将输出"0012345678"
            return 0;
        }

199、非C++内建类型A 和B,在哪几种情况下B 能隐式转化为A?【较难】 答: a)class B : public A{……}//B 公有继承自A,可以是间接继承的 b)class B{operator A();}//B 实现了隐式转化为A 的转化 c)class A{ A(const B&);}//A 实现了non-explicit 的参数为B 构造函数(可以有其他带带默认值的参数) d)A& operator= (const A&);//赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一个

200、以下代码有什么问题?【较难】

        void char2Hex(char c){ //将字符以16 进制显示
            char ch = c/0x10 + '0';
            if(ch>'9') ch += ('A'-'9'-1);
            char cl = c%0x10 + '0';
            if(cl>'9') cl += ('A'-'9'-1);
            cout << ch << cl << ' ';
        }
        int main(){
            char str[] = "I love 中国";
            for(size_t i=0; i<strlen(str); ++i)
                char2Hex(str[i]);
            cout << endl;
            return 0;
        }

答:

201、以下两条输出语句分别输出什么?【较难】

float a = 1.0f;
cout << (int)a << endl;
cout << (int&)a << endl;
cout << boolalpha << ((int)a==(int&)a) << endl; //输出什么
float b = 0.0f;
cout << (int)b << endl;
cout << (int&)b << endl;
cout << boolalpha << ((int)b==(int&)b) << endl;//输出什么

答:第一处输出false,第二处输出true。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 3分钟快速阅读-《Effective Java》(四)

    cwl_java
  • C++经典算法题-费氏搜寻法

    二分搜寻法每次搜寻时,都会将搜寻区间分为一半,所以其搜寻时间为O(log(2)n),log(2)表示以2为底的log值,这边要介绍的费氏搜寻,其利用费氏数列作为...

    cwl_java
  • 经典面试题-过滤器的用法

    cwl_java
  • string 之 strchr函数 和 strstr函数(BF算法和KMP算法的应用)

    Author: bakari  Date: 2012/8/9 继上篇。。。。。 下面是我写的代码与源码作的一些比较,均已严格测试通过,分别以“string 之”...

    CloudDeveloper
  • 数组和指针一道非常值得深思的笔试题

    两年前找工作笔试遇到下面这道题,说实话还是挺基础的,虽然当时笔试被我给猜对了,但还是要深究一下具体的转换细节。 题目如下:

    morixinguan
  • MongoDB 分片管理

    一分片一区间:数据不会在片之间自动移动来保持分片的数据的均匀性,需要手动拆分分片来移动数据。

    拓荒者
  • 每日一题C++版(计算字符个数)

    编程是很多偏计算机、人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用。因此小白决定开辟一个新的板块“每日一题”,通过每天一道编程题目来强化...

    小白学视觉
  • KinectAzureDK编程实战_OpenCV + OpenGL 的 AR 应用的实现

    上篇文章,我们讲了如何用 OpenGL 原生的显示 Kinect 的 raw data 的代码。后面的文章,我将实现一个非常简单的 AR 程序。在这篇文章之前,...

    无雨森
  • LeeCode 每日一题121:股票卖出的最佳时机

    首先来看看暴力解决这道题的算法,以类似冒泡算法的方式,两层遍历整个数组确定最大利润, 这种方式最蠢, 最容易想到. 在 LeeCode 中, C语言凭借更好的性...

    benny
  • 这段C语言程序虽然很简单,但是我工作多年的同事还是弄错了

    前两天,我在我的圈子里发了一个小问题,相关的C语言代码如下,这段程序会输出什么呢?

    诸葛青云

扫码关注云+社区

领取腾讯云代金券