Assignment Help logo
在线聊天

Loading...

Score %0 (0 correct0 incorrect20 unanswered)

Q1. 这段代码的输出是什么?

vector<int> v(22);
bool b = (v[6]);
printf("%d", !b);
  • 错误
  • 0
  • 1
  • 这段代码有错误。

Q2. 以下哪个是使用这行代码被认为是一种不良实践的原因?(替代方案:为什么使用这行代码被认为是一种不良实践?)

using namespace std;
  • 由于导入的符号较多,编译后的代码总是更大。
  • 如果代码使用了两个具有相同原型但可能具有不同实现的函数,将会因为歧义而导致编译错误。
  • 它自动包含标准库中的所有头文件(cstdint、cstdlib、cstdio、iostream等)。
  • 它导致编译器强制执行标准库头文件的独占包含,当包含不同的头文件时会生成编译错误。

参考资料

Q3. child_t 类型的变量在内存中可能占用的最小空间是多少?

typedef struct{
    unsigned int  age    : 4;
    unsigned char gender : 1;
    unsigned int  size   : 2;
}child_t;
  • 7 位。
  • 25 字节。
  • 1 位。
  • 1 字节。

参考资料

Q4. 执行完代码后,向量 v1 和 v2 的内容是什么?

std::vector<int> v1{1,2,3},v2;
v2=v1;
v1.push_back(4);
v2.push_back(5);
  • 错误
  • v1:{1,2,3,4}; v2:{5};
  • v1:{1,2,3,4,5}; v2:{1,2,3,4,5};
  • v1:{1,2,3,4}; v2:{1,2,3,5};

Q5. 关于指针和迭代器的区别,以下哪种说法是正确的?

  • 指针是保存内存地址的变量,而迭代器是用于遍历容器的通用函数。该函数允许程序员在遍历容器时实现读取和写入代码。
  • 对迭代器进行递增操作总是意味着访问容器中的下一个元素(如果有),而不管容器是什么。对指针进行递增操作意味着指向内存中的下一个元素,但并不总是下一个元素。
  • 指针是保存内存地址的变量,而迭代器是指向数组中偏移量的无符号整数。
  • 所有迭代器都是使用指针实现的,因此所有迭代器都是指针,但并非所有指针都是迭代器。

参考资料

Q6. u1 占用的存储空间是多少?

union {
    uint16_t a;
    uint32_t b;
    int8_t c;
} u1;
  • 4 字节
  • 7 字节
  • 8 字节
  • 2 字节

参考资料

Q7. 以下哪个操作符可以被重载?

  • ?:
  • new
  • ::
  • .

参考资料

Q8. 运行此代码后,以下哪个显示了由 v1 和 v2 指向的向量的内容?

std:: vector<int> *v1 = new std::vector<int>({1,2,3});
std:: vector<int> *v2;
v2=v1;
v1->push_back(4);
v2->push_back(5);
  • *v1:{1,2,3,4}; *v2:{5};
  • *v1:{1,2,3,4,5}; *v2:{1,2,3,4,5};
  • 错误
  • *v1:{1,2,3,4}; *v2:{1,2,3,5};

v1 和 v2 指向同一个向量。

Q9. 类和结构体之间的以下哪个不是区别?

  • 因为结构体是 C 语言的一部分,所以 C 和 C++ 结构体之间存在一些复杂性。但类与此不同。
  • 类可以有成员函数;结构体是私有的。
  • 结构体成员的默认访问限定符是 public,而类成员的默认访问限定符是 private。
  • 模板类型参数可以与类一起声明,但不能与结构体关键字一起使用。

模板可以与类和结构体一起使用 参考资料 参考资料

Q10. 假设你需要保持一个数据结构,根据一周中的每一天访问某些资源的权限,但你不能为每一天使用一个 bool 变量。你需要为每一周的每一天使用一位。以下哪种是实现这种应用的正确方法?

  • A
typedef struct {
    int sunday:1;
    int monday:1;
    // more days
    int friday:1;
    int saturday:1;
} weekdays;
  • B
typedef char[7]: weekdays;
  • C
typedef struct {
    bit sunday:1;
    bit monday:1;
    // more days
    bit friday:1;
    bit saturday:1;
} weekdays;

  • D
typedef struct {
    bit sunday;
    bit monday;
    // more days
    bit friday;
    bit saturday;
} weekdays;

参考资料 注意:每个变量大小都是 1 位。在 C++ 中,bit 不是一种类型。

Q11. 什么是左值?

  • 它是一个常量表达式,意味着由常量和操作组成的表达式。
  • 它是表示具有地址的对象的表达式。
  • 它是适合用作二进制操作中的左操作数的表达式。
  • 它是一个位置值,意味着适合赋值给指针或引用的内存地址。

Q12. 自从 C++11 以来,在这行代码中 auto 类型说明符做了什么?

auto x = 4000.22;
  • 它指定 x 的类型将从初始化器中推导出来 - 在这种情况下是 double。
  • 它指定 x 的类型是自动的,这意味着它可以在程序中被赋予不同类型的数据。
  • 它指定 x 是具有自动存储期的变量。
  • 它指定如果 x 需要更多的空间,则会为 x 分配更多的内存,以避免由于溢出而导致数据丢失。

Q13. 类模板是什么?

  • 用泛型编程范式编写的类,根据类型参数而不是具体类型来指定行为。
  • 用于继承和多态的空超类。
  • 只包含成员变量的类,没有构造函数、析构函数或成员函数。
  • 类的骨架源代码,程序员必须填写特定部分来定义所使用的数据类型和算法。

参考资料

Q14. 下列代码片段的三元运算符等效于哪个?

if(x)
    y=a;
else
    y=b;
  • y=a?b:x;
  • y=if(x?a:b);
  • y=(x&a)?a:(x&b)?b:0;
  • y=x?a:b;

参考资料

Q15. 给定下面的代码,输出是什么?

#include <iostream>

int main(){
    int x=10, y=20;
    std::cout << "x = " << x++ << " and y = " << --y << std::endl;
    std::cout << "x = " << x-- << " and y = " << ++y << std::endl;
    return(0);
}
  • x = 10 且 y = 20
    x = 11 且 y = 19
  • x = 11 且 y = 19
    x = 10 且 y = 20
  • x = 10 且 y = 19
    x = 11 且 y = 20
  • x = 11 且 y = 20
    x = 10 且 y = 19

Q16. 在基于范围的 for 循环中,括号之间指定的两部分意味着什么,用冒号分隔?

  • 第一个是变量声明,将在序列中保存一个元素。第二个是要遍历的序列。
  • 第一个是迭代器,第二个是要添加到迭代器的增量值。
  • 第一个是迭代变量。第二个是 std::pair,指定了变量将在其中迭代的范围(起始和结束)。
  • 第一个是容器对象。第二个是 std::pair,指定了在循环内访问元素的范围(起始和结束)。

Q17. 给定下面的代码,输出是什么?

int8_t a=200;
uint8_t b=100;
if(a>b)
    std::cout<<"greater";
else
    std::cout<<"less";
  • 没有输出,因为 int8_t 与 uint8_t 比较时会发生异常。
  • 大于
  • 小于
  • 没有输出,因为编译器错误。

注意:以下是问题的一个变种。

Q18. 给定下面的代码块,输出是什么?

int8_t a=200;
uint8_t b=100;
std::cout<<"a="<<(int)a;
std::cout<<", b="<<(int)b;
  • a=-56, b=100
  • a=-55, b=100
  • a=200, b=-156
  • a=200, b=100

注意:从 'int' 到 'int8_t'(也称为 'signed char')的隐式转换会将值从 200 更改为 -56

Q19. 执行以下代码片段后,输出是什么?

int x=5, y=2;
if(x & y) {
    /*_part A_*/
}
else {
    /*_part B_*/
}
  • 部分 A 执行,因为 x==5(true)且 y==2(true),因此 AND 操作计算为 true。
  • 部分 B 执行,因为 (x & y) 结果为 0,或 false。
  • 部分 A 执行,因为 (x & y) 结果为非零值,或 true。
  • 部分 B 执行,因为语句 (x & y) 无效,因此为 false。

参考资料

Q20. 下面的 get_length 函数的有效定义是什么,它返回以 null 结尾的字符串的长度?

  • A
int get_length(char *str) {
    int count=0;
    while(str[count++]);
    return count-1;
}
  • B
int get_length(char *str) {
    int count=0;
    while(str!=NULL){
        count++;
        str++;
    }
    return count;
}
  • C
int get_length(char *str) {
    int count=0;
    while((*str)++)
        count++;
    return count;
}
  • D
int get_length(char *str) {
    int count=0;
    while(str++)
        count++;
    return count;
}