【C/C++笔试练习】内联函数、哪些运算符不能重载、拷贝构造函数、const类型、函数重载、构造函数、空类的大小、井字棋、密码强度等级

本文主要是介绍【C/C++笔试练习】内联函数、哪些运算符不能重载、拷贝构造函数、const类型、函数重载、构造函数、空类的大小、井字棋、密码强度等级,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • C/C++笔试练习
  • 选择部分
    • (1)内联函数
    • (2)哪些运算符不能重载
    • (3)拷贝构造函数
    • (4)const类型
    • (5)函数重载
    • (6)构造函数
    • (7)程序分析
    • (8)空类的大小
    • (9)程序分析
    • (10)程序分析
  • 编程题 day10
    • 井字棋
    • 密码强度等级

C/C++笔试练习

选择部分

(1)内联函数

  内联函数在以下场景中最有用的()

  A. 当函数代码较长且多层嵌套循环的时候
  B. 当函数中有较多的静态变量的时候
  C. 当函数代码较小并且被频繁调用的时候
  D. 以上都不对

   答案选:C

  当函数代码较小并且被频繁调用的时候。 内联函数的目的是减少函数调用的开销,因此当函数体较小并且被频繁调用时,使用内联函数可以提高程序的执行效率。

   当函数参数是类对象时。对于类对象,调用成员函数时需要进行一次额外的间接引用,而内联函数可以避免这种开销。

  当函数代码较长或有多层嵌套循环时,内联函数的效率可能会降低,因为内联函数的代码会膨胀,导致编译器无法进行优化。当函数中有较多的静态变量时,内联函数也不会带来明显的性能提升。所以答案选C。

  

(2)哪些运算符不能重载

  下列运算符中,在C++语言中不能重载的是:
  A. *     B. >=
  C. ::    D. delete

  这些运算符都不能被重载:.  . *  ::  ?: sizeof

   答案选:C

  

(3)拷贝构造函数

  拷贝构造函数的特点是()

  A. 该函数名同类名,也是一种构造函数,该函数返回自身引用
  B. 该函数只有一个参数,是对某个对象的引用
  C. 每个类都必须有一个拷贝初始化构造函数,如果类中没有说明拷贝构造函数,则编译器系统会自动生成一个缺省拷贝构造函数,作为该类的保护成员
  D. 拷贝初始化构造函数的作用是将一个已知对象的数据成员值拷贝给正在创建的另一个同类的对象

   答案选:D

  拷贝构造函数是一种特殊的构造函数,它用于创建一个新对象,该对象的内容是另一个已存在的对象的复制。 它被用来初始化新对象,以复制现有对象的内容。

  拷贝构造函数的名称与类名相同,但是没有返回值。

  拷贝构造函数通常有两个参数:一个是对现有对象的引用,另一个是分配给新对象的内存空间。

  并非每个类都必须有一个显式的拷贝构造函数。编译器会自动生成一个缺省的拷贝构造函数,如果没有定义拷贝构造函数。所以选择D。

  

(4)const类型

  print()函数是一个类的常成员函数,它无返回值,下列表示中正确的是()

  A. const void print();
  B. void const print();
  C. void print() const;
  D. void print(const);

   答案选:C

  const void print();:这个函数声明表示一个名为print的函数,它返回void类型(即没有返回值),并且是一个常成员函数,这意味着这个函数不会修改类的任何数据成员。

  void const print();:这个函数声明与第一个类似,也是表示一个名为print的函数,它返回void类型,并且是一个常成员函数。这个声明的含义与第一个相同。

  void print() const;:这个函数声明表示一个名为print的函数,它返回void类型,并且是一个常成员函数。这个声明符合常成员函数的语法规则,因此它是正确的。注意:此时的const修饰this指针,表明在该成员函数中不能修饰非静态成员变量。

  void print(const);:这个函数声明表示一个名为print的函数,它接受一个名为const的参数,并且返回void类型。这个声明不符合常成员函数的语法规则,因此它是错误的。常成员函数不应该有参数。所以答案选C。

  

(5)函数重载

  不能作为重载函数的调用的依据是:

  A. 参数个数    B. 参数类型
  C. 函数类型    D. 函数名称

   答案选:C

   函数重载: 是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同 ,常用来处理实现功能类似数据类型不同的问题。

   重载函数是指在同一作用域内,可以有一组具有相同名字但是参数列表不同的函数,这组函数被称为重载函数。 在调用重载函数时,编译器会根据调用时提供的实参的个数、类型和顺序来选择合适的重载函数版本进行调用。因此,参数个数、参数类型和函数名称都可以作为重载函数的调用的依据,而函数类型不是。

  

(6)构造函数

  如果MyClass为一个类,执行”MyClass a[5], *b[6]”语言会自动调用该类构造函数的次数是()
  A. 2    B. 5
  C. 4    D. 9

   答案选:B

  当你创建一个对象数组时,a[5]中一共有5对象,所以系统会先调用该类的构造函数5次。然后再创建一个指针数组,其中的指针都指向一个类对象,因为类型是指针,所以不会调用该类的构造函数。所以一共调用了5次构造函数。

  

(7)程序分析

  下面的程序输出可能是什么

class Printer{
public:Printer(std::string name) {std::cout << name;}
};class Container{
public:Container() : b("b"), a("a") {}Printer a;Printer b;
};int main(){Container c;return 0;
}

  A. 可能是 “ab” 或 “ba”。 依赖于具体的实现
  B. 一直都是 “ba”
  C. 一直都是 “ab”

   答案选:C

  这个C++程序创建了一个Container类,这个类初始化了两个Printer对象:a和b。而Printer类的构造函数接受一个字符串参数,并打印这个字符串。

  现在的问题是,当创建Container对象c时,a和b的初始化顺序是怎样的?

  成员初始化的顺序是按照它们在类中的声明顺序。 因此,a会先于b被初始化。因此,打印出的顺序应该是“ab”。

  所以,程序的输出是ab。

在这里插入图片描述

  

(8)空类的大小

  在Windows 32位操作系统中,假设字节对齐为4,对于一个空的类A,sizeof(A)的值为()?
  A. 0    B. 1
  C. 2    D. 4

   答案选:B

  在32位系统中,每个对象都会有一个内存地址,即使这个对象是空的。因此,即使是一个空的类A,sizeof(A)的值也会大于0,于是就用1来表示这里有一个空类。

   根据C++的标准,sizeof(A)返回的是类A在内存中的大小,这个大小至少应该包含一个指针,即至少为4字节(32位系统的指针大小)。然而,由于类A是空的,没有任何成员变量,因此sizeof(A)的值实际上为1,即一个指针的大小。所以答案选B。

  

(9)程序分析

  下面 C++ 程序的运行结果是()

#include<iostream>
#include<string>
using namespace std;class A {friend long fun(A s) {if (s.x < 3) {return 1;}return s.x + fun(A(s.x - 1));}public:A(long a) {x = a--;}private:long x;
};int main() 
{int sum = 0;for (int i = 0; i < 5; i++) {sum += fun(A(i));}cout << sum;return 0;
}

  A. 21    B. 15
  C. 9      D. 36

   答案选:B

  递归分析:fun(A(0))+fun(A(1))+fun(A(2))+fun(A(3))+fun(A(4))=15。

在这里插入图片描述

  

(10)程序分析

  以下程序输出是____。

#include <iostream>
using namespace std;
int main(void)
{const int a = 10;int * p = (int *)(&a);*p = 20;cout<<"a = "<<a<<", *p = "<<*p<<endl;return 0;
}

  A. 编译阶段报错运行阶段报错
  B. a = 10, *p = 10
  C. a = 20, *p = 20
  D. a = 10, *p = 20
  E. a = 20, *p = 10

   答案选:D

  C++中const修饰变量,如果该变量已经是一个常量,那么const还具有替换的作用。编译器在编译带没带时候,在程序中看到对常量中内容读取时,会直接使用常量中的内容替换该常量。

在这里插入图片描述

            

编程题 day10

井字棋

井字棋

  井字棋有四种情况表示当前玩家获胜,1代表当前玩家棋子 1. 行全为1, 即行的和为3 2. 列全为1, 列的和为3 3. 主对角全为1, 对角和为3 4. 副对角全为1, 对角和为3 5. 如果扩展为N*N的话,判断和是否等于N,下面代码适用任何情况

class Board {public:bool checkWon(vector<vector<int> > board) {int row = board.size();//检查每一行的和是是否等于rowint i, j, sum;for (i = 0; i < row; i++) {sum = 0;for (j = 0; j < row; j++) {sum += board[i][j];}if (sum == row)return true;}//检查每一列的和是是否等于rowfor (i = 0; i < row; i++) {sum = 0;for (j = 0; j < row; j++) {sum += board[j][i];}if (sum == row)return true;}//检查主对角线的和是是否等于rowsum = 0;for (i = 0; i < row; i++) {sum += board[i][i];}if (sum == row)return true;//检查副对角线的和是是否等于rowsum = 0;for (i = 0; i < row; i++) {sum += board[i][row - i - 1];}if (sum == row)return true;return false;}
};

  

密码强度等级

密码强度等级

  这里对于不同种类的字符得分不同,同学们可以现对每一个维度进行单独判断,即对于长度,字母,数字,符号单独判断,最后把所有的单项值根据题目要求相加,输出对应的安全级别。

#include <iostream>
#include <string>
using namespace std;
int score_count(string& str) {int digit = 0, symbol = 0;int lower = 0, upper = 0, charc = 0;int size = 0, sum = 0;for (auto ch : str) {if (ch >= 'a' && ch <= 'z') {lower++;charc++;} else if (ch >= 'A' && ch <= 'Z') {upper++;charc++;} else if (ch >= '0' && ch <= '9') {digit++;} else if ((ch >= 0x21 && ch <= 0x2F) ||(ch >= 0x3A && ch <= 0x40) ||(ch >= 0x5B && ch <= 0x60) ||(ch >= 0x7B && ch <= 0x7E)) {symbol++;}}size = str.size();if (size <= 4)sum += 5;else if (size <= 7)sum += 10;elsesum += 25;if (lower > 0 && upper > 0)sum += 20;else if (lower == charc || upper == charc)sum += 10;if (digit == 1)sum += 10;else if (digit > 1)sum += 20;if (symbol == 1)sum += 10;else if (symbol > 1)sum += 25;if (lower > 0 && upper > 0 && digit > 0 && symbol > 0)sum += 5;else if ((lower > 0 || upper > 0) && digit > 0 && symbol > 0)sum += 3;else if ((lower > 0 || upper > 0) && digit > 0 && symbol == 0)sum += 2;return sum;
}
int main() {string str;while (cin >> str) {int score = score_count(str);if (score >= 90) {cout << "VERY_SECURE" << endl;} else if (score >= 80) {cout << "SECURE" << endl;} else if (score >= 70) {cout << "VERY_STRONG" << endl;} else if (score >= 60) {cout << "STRONG" << endl;} else if (score >= 50) {cout << "AVERAGE" << endl;} else if (score >= 25) {cout << "WEAK" << endl;} else {cout << "VERY_WEAK" << endl;}}return 0;
}

这篇关于【C/C++笔试练习】内联函数、哪些运算符不能重载、拷贝构造函数、const类型、函数重载、构造函数、空类的大小、井字棋、密码强度等级的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/360936

相关文章

使用Java实现Navicat密码的加密与解密的代码解析

《使用Java实现Navicat密码的加密与解密的代码解析》:本文主要介绍使用Java实现Navicat密码的加密与解密,通过本文,我们了解了如何利用Java语言实现对Navicat保存的数据库密... 目录一、背景介绍二、环境准备三、代码解析四、核心代码展示五、总结在日常开发过程中,我们有时需要处理各种软

MySQL 字符串截取函数及用法详解

《MySQL字符串截取函数及用法详解》在MySQL中,字符串截取是常见的操作,主要用于从字符串中提取特定部分,MySQL提供了多种函数来实现这一功能,包括LEFT()、RIGHT()、SUBST... 目录mysql 字符串截取函数详解RIGHT(str, length):从右侧截取指定长度的字符SUBST

电脑软件不能安装到C盘? 真相颠覆你的认知!

《电脑软件不能安装到C盘?真相颠覆你的认知!》很多人习惯把软件装到D盘、E盘,刻意绕开C盘,这种习惯从哪来?让我们用数据和案例,拆解背后的3大原因... 我身边不少朋友,在使用电脑安装软件的时候,总是习惯性的把软件安装到D盘或者E盘等位置,刻意避开C盘。如果你也有这样的习惯,或者不明白为什么要这么做,那么我

C++类和对象之初始化列表的使用方式

《C++类和对象之初始化列表的使用方式》:本文主要介绍C++类和对象之初始化列表的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C++初始化列表详解:性能优化与正确实践什么是初始化列表?初始化列表的三大核心作用1. 性能优化:避免不必要的赋值操作2. 强

C++迭代器失效的避坑指南

《C++迭代器失效的避坑指南》在C++中,迭代器(iterator)是一种类似指针的对象,用于遍历STL容器(如vector、list、map等),迭代器失效是指在对容器进行某些操作后... 目录1. 什么是迭代器失效?2. 哪些操作会导致迭代器失效?2.1 vector 的插入操作(push_back,

vscode不能打开终端问题的解决办法

《vscode不能打开终端问题的解决办法》:本文主要介绍vscode不能打开终端问题的解决办法,问题的根源是Windows的安全软件限制了PowerShell的运行,而VSCode默认使用Powe... 遇到vscode不能打开终端问题,一直以为是安全软件限制问题,也没搜到解决方案,因为影响也不大,就没有管

Kotlin运算符重载函数及作用场景

《Kotlin运算符重载函数及作用场景》在Kotlin里,运算符重载函数允许为自定义类型重新定义现有的运算符(如+-…)行为,从而让自定义类型能像内置类型那样使用运算符,本文给大家介绍Kotlin运算... 目录基本语法作用场景类对象数据类型接口注意事项在 Kotlin 里,运算符重载函数允许为自定义类型重

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

Pandas中统计汇总可视化函数plot()的使用

《Pandas中统计汇总可视化函数plot()的使用》Pandas提供了许多强大的数据处理和分析功能,其中plot()函数就是其可视化功能的一个重要组成部分,本文主要介绍了Pandas中统计汇总可视化... 目录一、plot()函数简介二、plot()函数的基本用法三、plot()函数的参数详解四、使用pl

C#如何调用C++库

《C#如何调用C++库》:本文主要介绍C#如何调用C++库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录方法一:使用P/Invoke1. 导出C++函数2. 定义P/Invoke签名3. 调用C++函数方法二:使用C++/CLI作为桥接1. 创建C++/CL