【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/361836

相关文章

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

数据库oracle用户密码过期查询及解决方案

《数据库oracle用户密码过期查询及解决方案》:本文主要介绍如何处理ORACLE数据库用户密码过期和修改密码期限的问题,包括创建用户、赋予权限、修改密码、解锁用户和设置密码期限,文中通过代码介绍... 目录前言一、创建用户、赋予权限、修改密码、解锁用户和设置期限二、查询用户密码期限和过期后的修改1.查询用

IDEA如何将String类型转json格式

《IDEA如何将String类型转json格式》在Java中,字符串字面量中的转义字符会被自动转换,但通过网络获取的字符串可能不会自动转换,为了解决IDEA无法识别JSON字符串的问题,可以在本地对字... 目录问题描述问题原因解决方案总结问题描述最近做项目需要使用Ai生成json,可生成String类型

C#中图片如何自适应pictureBox大小

《C#中图片如何自适应pictureBox大小》文章描述了如何在C#中实现图片自适应pictureBox大小,并展示修改前后的效果,修改步骤包括两步,作者分享了个人经验,希望对大家有所帮助... 目录C#图片自适应pictureBox大小编程修改步骤总结C#图片自适应pictureBox大小上图中“z轴

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

Oracle的to_date()函数详解

《Oracle的to_date()函数详解》Oracle的to_date()函数用于日期格式转换,需要注意Oracle中不区分大小写的MM和mm格式代码,应使用mi代替分钟,此外,Oracle还支持毫... 目录oracle的to_date()函数一.在使用Oracle的to_date函数来做日期转换二.日

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

Java中的密码加密方式

《Java中的密码加密方式》文章介绍了Java中使用MD5算法对密码进行加密的方法,以及如何通过加盐和多重加密来提高密码的安全性,MD5是一种不可逆的哈希算法,适合用于存储密码,因为其输出的摘要长度固... 目录Java的密码加密方式密码加密一般的应用方式是总结Java的密码加密方式密码加密【这里采用的

Mysql 中的多表连接和连接类型详解

《Mysql中的多表连接和连接类型详解》这篇文章详细介绍了MySQL中的多表连接及其各种类型,包括内连接、左连接、右连接、全外连接、自连接和交叉连接,通过这些连接方式,可以将分散在不同表中的相关数据... 目录什么是多表连接?1. 内连接(INNER JOIN)2. 左连接(LEFT JOIN 或 LEFT