C++笔试题

2023-05-16

1. 用预处理指令#define声明一个常数,用以表明1年中有多少秒?

#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL

2. 写一个标准宏MIN, 这个宏输入两个参数并返回较小的一个

#define MIN(a,b) (a>b?b:a)

3. 用变量a给出下面的定义

1)一个整型数

         int a

2)一个指向整型数的指针

         int *a

3)一个指向指针的指针,它指向的指针是指向一个整型数

4)一个有10个整型数的数组

5)一个有10个指针的数组,该指针是指向一个整型数的

6)一个指向有10个整型数数组的指针

7)一个指向函数的指针,该函数有一个整形参数并返回一个整型数

8)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数

int *a[10];   //指向int类型的指针数组a[10]
int (*a)[10]; //指向有10个int类型数组的指针a
int (*a)(int);//函数指针,指向有一个参数并且返回类型 均为int的函数
int (*a[10])(int); //函数指针的数组,指向有一个参数并且返回类型均为int的函数的数组

4. 关键字static的作用是什么

限定作用域;保持变量内容持久化。

5. 关键字const是什么含义

定义常变量

6. 嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的 ANSI编译器。写代码去完成这一任务。

int *ptr;

ptr = (int*)0x67a9;

*ptr = 0xaa66;

7. 求下面函数的返回值(即求x转化为二进制之后1的个数)

int func(x)
 {
    int countx = 0;     
     while (x)
     {
      countx ++; 
      x = x & (x - 1); 
     } 
     return countx;
 }

8. 什么是引用?申明和使用引用要注意哪些问题?

引用就是某个目标变量的别名(alias),对引用的操作就是对变量的直接操作,它们的效果是完全一样的。声明一个引用时,必须要对其初始化,将其与某个变量相关联。

引用声明完毕后,相当于目标变量有两个名称----原名和引用名,不能把引用名再做为其他变量的的别名。声明一个引用,不是新定义一个变量,他只表示该引用是目标变量的一个别名。

引用不是一种新的数据类型,因此它本身不占存储单元,系统也不会为它分配存储单元。

不能建立数组的引用。

9. 在什么时候需要常引用

引用只读,不能对对象进行修改的时候;利用引用提高程序的效率

10. 引用和指针的区别是什么(见收藏)

11. 已知strcpy的函数原型

char * strcpy ( char * strDest , const char * strSrc )
{
    undefined assert (( strDest != NULL ) && ( strSrc != NULL )); //这个必须要啊,判断指针是否为空
    char * address = strDest ;
    while ( (* strDest ++ = * strSrc ++) != ‘\0’ ) NULL ;

    return address ;
}

12. 已知String类定义如下:

class String 
{   
public:    
    String(const char *str = NULL); // 通用构造函数    
    String(const String &another); // 拷贝构造函数    
    ~ String(); // 析构函数    
    String & operater =(const String &rhs); // 赋值函数   
    private:    char *m_data; // 用于保存字符串 }; 

尝试写出类的成员函数实现。

#define _STRING
#ifdef _STRING
class String
{
public:
    String(const char *str = NULL); // 普通构造函数
    String(const String &other);        // 拷贝构造函数
    ~String(void);                     // 析构函数
    String & operator=(const String &other);    // 赋值函数
private:
    char    *m_data;                // 用于保存字符串
};

//bool operator>(const ver_weight &comp)const{
// String的析构函数

String::~String(void)               // 3分
{
    delete[] m_data;
    // 由于m_data是内部数据类型,也可以写成 delete m_data;
}

// String的普通构造函数
String::String(const char *str)      // 6分
{
    if (str == NULL)
    {
        m_data = new char[1];
        *m_data = '\0';
    }
    else
    {
        int length = strlen(str);
        m_data = new char[length + 1];
        strcpy(m_data, str);
    }
}

// 拷贝构造函数

String::String(const String &other)   // 3分
{
    int length = strlen(other.m_data);
    m_data = new char[length + 1];
    strcpy(m_data, other.m_data);
}

// 赋值函数
String & String::operator=(const String &other)    // 13分
{
    // (1) 检查自赋值                     // 4分
    if (this == &other)
        return *this;
    // (2) 释放原有的内存资源            // 3分
    delete[] m_data;
    // (3)分配新的内存资源,并复制内容 // 3分
    int length = strlen(other.m_data);
    m_data = new char[length + 1];
    strcpy(m_data, other.m_data);
    // (4)返回本对象的引用            // 3分
    return *this;
}

int main() 
{
    String str1("I am 1");
    String str2(str1);
    String str3 = str1;
    return 1;
}
#endif

13. .h头文件中的ifndef/define/endif的作用

防止该头文件被重复引用

14. #include<file.h>与#include "file.h"的区别

15. 在C++程序中调用被C编译器编译后的函数,为什么要加extern “C”

首先,extern是C/C++语言中表明函数和全局变量作用范围的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。
通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。extern "C"是连接申明(linkage declaration),被extern "C"修饰的变量和函数是按照C语言方式编译和连接的。作为一种面向对象的语言,C++支持函数重载,而过程式语言C则不支持。函数被C++编译后在符号库中的名字与c语言的不同。例如,假设某个函数的原型为:void foo( int x, int y );该函数被C编译器编译后在符号库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。这样的名字包含了函数名、函数参数数量及类型信息,C++就是靠这种机制来实现函数重载的。
所以,可以用一句话概括extern “C”这个声明的真实目的:解决名字匹配问题,实现C++与C的混合编程。

16. 多态的作用

1) 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。
2) 派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。

17. main函数执行以前,还会执行什么代码?

全局函数的构造函数

18. 分别写出BOOL、int、float、指针类型的变量a与“零”比较的语句

BOOL:
    if(a)  or  if(!a);
int:
    if(0 == a);
float:
    const float EXP = 0.000001;
    if(a<EXP && a>-EXP);
pointer:
    if(a != NULL)  or  if(a == NULL);

18. 请说出const与#define相比,有何优点

见收藏

19. 写一个函数找出一个整数数组中,第二大的数

20. 以下代码中的两个sizeof用法有问题吗

void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母
{
for( size_t i=0; i<sizeof(str)/sizeof(str[0]); ++i )
if( 'a'<=str[i] && str[i]<='z' )
str[i] -= ('a'-'A' );
}

char str[] = "aBcDe"
cout << "str字符长度为: " << sizeof(str)/sizeof(str[0]) << endl;
UpperCase( str );
cout << str << endl;

主函数中的sizeof没有问题,upper_case中的sizeof使用错误,因为数组作为参数传递会退化为指针,upper_case中的str实际上是char*指针,它的sizeof为指针类型大小而非数组大小。

21. 以下代码有什么问题

cout<<"(true?1:"1")<<endl;

true?1:"1"
1和"1"是两个不同类型的, 编译无法通过

22. C++中的空类,默认产生哪些类成员函数

默认构造函数
析构函数
拷贝构造函数
赋值运算符(operator=)
取址运算符(operator&)(一对,一个非const的,一个const的)

23. 编写一个函数,函数接收一个字符串,是由十六进制数组成的一组字符串,函数的功能是把接到的这组字符串转换成十进制数字.并将十进制数字返回

int hex2dec(){
string s;
int sum=0;
cout<<"请输入一个16进制的字符串:"<<endl;
cin>>s;
for(i=2;i<=s.length()-1;i++){
    if(s[i]>='a'&&s[i]<='f'){
        num=s[i]-'a'+10;
    }else{
        num=s[i]-'1'+1;
    }
    int n=s.length()-1-i;
    int flag=1;
    while(n--){
        flag=flag*16;
    }
    sum=sum+flag*num;
}
return sum;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++笔试题 的相关文章

随机推荐

  • Logisim计算机组成原理实验16位无符号比较器设计

    Logisim用4位无符号比较器构建16位无符号比较器 4位无符号比较器设计思路表达式构建 16位无符号比较器构建思路构建 4位无符号比较器设计 思路 不同位之间进行比较 xff0c 高位优先 真值表太麻烦 xff0c 可以利用表达式进行构
  • React+hooks+TS练习

    一 初始化项目 通过create react app命令创建项目 xff0c template表示使用typescript xff08 node版本高于14才能使用npx xff09 npx create span class token
  • 基于Python的信用卡欺诈检测机器学习案例报告

    本报告借助Python语言探究了在机器学习中 面对一个大型的人与人之间交易的数据集 如何尽快处理大量数据并区分某交易记录是正常的用户行为还是潜在的信用卡欺诈行为 最终通过构建分类模型来对欺诈交易进行分类区分 并通过恰当的方式对构建的模型进行
  • 一个既有趣又简单的整人代码——关机代码

    这一篇博客来的比我的预计时间要长啊 xff0c 在这一周多的时间里 xff0c 我几乎很少有休息和出去玩耍的时间 说实话 xff0c 这样忙碌的生活给我的感觉还是蛮好的 xff0c 让我有一种很充实的感觉 xff0c 有种自己在与时间赛跑的
  • 【CMake】CMakeList编写整理

    什么是CMake 如果软件想跨平台 xff0c 必须要保证能够在不同平台编译 而如果使用 Make 工具 xff0c 就得为每一种标准写一次 Makefile CMake 就是针对上面问题所设计的工具 xff1a 它首先允许开发者编写一种平
  • 解决 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...警告

    解决 WARN util NativeCodeLoader Unable to load native hadoop library for your platform using builtin java classes where ap
  • Vue获取数组的数组数据

    Q xff1a 如何在vue获取数组的数组 xff1f A xff1a 用到js的map对象方法 一 data里要先定义好有两个数组 二 主要代码 这样就可以获取到数组的子数组数据
  • Ubuntu18.04 GAAS学习笔记

    GAAS学习笔记 1 环境构建1 1 依赖项安装1 2 ros安装1 3 MAVROS安装1 4 PX4 Firmware安装 全程参考官方文档 xff0c 总结遇见的错误 xff1a https gaas gitbook io guide
  • ArUco标定板生成与打印

    链接如下 xff1a https span class token punctuation span span class token operator span chev span class token punctuation span
  • ROS工作空间与功能包

    工作空间 工作空间 xff08 workspace xff09 是一个存放工程开发相关文件的文件夹 xff0c 其目录下有 xff1a src xff1a 代码空间 xff08 Source Space xff09 build xff1a
  • Ubuntu20.04安装UHD及GUN Radio3.9

    目录 1 安装UHD依赖库及UHD 2 安装GNU Radio3 9 3 1 安装UHD依赖库及UHD 总结自 xff1a USRP Hardware Driver and USRP Manual Building and Installi
  • ros安装的依赖问题

    问题描述 xff1a ros kinetic desktop full 依赖 ros kinetic desktop 但是它将不会被安装 依赖 ros kinetic perception 但是它将不会被安装 依赖 ros kinetic
  • STM32MP157驱动开发——字符设备驱动

    一 简介 字符设备是 Linux 驱动中最基本的一类设备驱动 xff0c 字符设备就是一个一个字节 xff0c 按照字节 流进行读写操作的设备 xff0c 读写数据是分先后顺序的 比如我们最常见的点灯 按键 IIC SPI xff0c LC
  • Java样卷

    一 问答题 请解释一下Java语言的主要特点 至少说明五个特点 进程和线程的概念是什么 xff1f 两者有什么区别和联系 什么是流 xff1f 什么是字节流 xff1f 什么是字符流 xff1f 字节流和字符流的差别是什么 xff1f 二
  • CodeBlocks如何将英文环境改为中文

    一 下载汉化包 xff08 链接如下 xff09 链接 xff1a https pan baidu com s 1U FMZuFvFQ9 70whXcIwQ 提取码 xff1a 2333 二 选择路径 将汉化包中的文件 xff08 Code
  • 浅谈多任务学习

    目录 一 前言及定义 二 多任务学习 xff08 MTL xff09 的两种方法 2 1 参数的硬共享机制 xff08 hard parameter sharing xff09 2 2 参数的软共享机制 xff08 soft paramet
  • PyTorch在GPU上跑代码需要迁移哪些东西?

    一 数据 模型 损失函数需要迁移到GPU上 使用GPU训练时 xff0c 数据 函数和模型都必须同时放在GPU上 xff0c 否则会出错 xff08 1 xff09 判断GPU是否可用 if torch cuda is available
  • C++ Primer 第五版学习 第一、二章

    一 标准输入输出 cin是标准输入 xff08 istream对象 xff09 cout是标准输出 xff08 ostream xff09 cerr是标准错误 xff0c 用来输出警告和错误消息 clog用来输出程序运行时的一般性信息 二
  • C++ Primer第五版学习 第四章第五章

    补第三章 size t size t是一些C C 43 43 标准在stddef h cstddef中定义的 这个类型足以用来表示对象的大小 size t的真实类型与操作系统有关 在32位架构中被普遍定义为 xff1a typedef un
  • C++笔试题

    1 用预处理指令 define声明一个常数 xff0c 用以表明1年中有多少秒 xff1f define SECONDS PER YEAR 60 60 24 365 UL 2 写一个标准宏MIN xff0c 这个宏输入两个参数并返回较小的一