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

news2025/1/17 22:58:01

文章目录

  • 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();
        //检查每一行的和是是否等于row
        int 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;
        }
        //检查每一列的和是是否等于row
        for (i = 0; i < row; i++) {
            sum = 0;
            for (j = 0; j < row; j++) {
                sum += board[j][i];
            }
            if (sum == row)
                return true;
        }
        //检查主对角线的和是是否等于row
        sum = 0;
        for (i = 0; i < row; i++) {
            sum += board[i][i];
        }
        if (sum == row)
            return true;
        //检查副对角线的和是是否等于row
        sum = 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;
    else
        sum += 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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第八章:security testing

文章目录 Security Testingbuffer overflow 的例子Fuzzing 测试Random Testing好处坏处Mutation-based Fuzzing好处坏处Generation-based Fuzzing好处坏处Memory DebuggerUndefined Behaviors (未定义行为)Security Testing 渗透测试(或称为pentesting)是指攻击软件以寻找安…

047_第三代软件开发-日志分离

第三代软件开发-日志分离 文章目录 第三代软件开发-日志分离项目介绍日志分离用法 关键字&#xff1a; Qt、 Qml、 log、 日志、 分离 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object Language&#xff09;和 C 的强…

uniapp使用技巧及例子

前言 uniapp&#xff08;Universal Application&#xff09;是一种基于Vue.js的全端解决方案&#xff0c;允许开发者使用一套代码构建多个平台的应用程序。这些平台包括iOS、Android、H5、微信小程序、支付宝小程序等。uniapp的出现解决了跨平台开发的痛点&#xff0c;大大减少…

祝贺璞华大数据产品入选中国信通院“铸基计划”

武汉璞华大数据技术有限公司HawkEye设备数字化管理平台产品&#xff0c;凭借优秀的产品技术能力&#xff0c;通过评估后&#xff0c;入选中国信通院“铸基计划”《高质量数字化转型产品及服务全景图(2023&#xff09;》的工业数字化领域。 “铸基计划”是中国信通院推出的高质量…

轻量封装WebGPU渲染系统示例<20>- 美化一下元胞自动机(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/GameOfLifePretty.ts 系统特性: 1. 用户态与系统态隔离。 2. 高频调用与低频调用隔离。 3. 面向用户的易用性封装。 4. 渲染数据(内外部相关资源)和渲染机制分离…

【新】致远OA从前台XXE到RCE漏洞分析

0x01 前言 致远OA是目前国内最流行的OA系统之一&#xff0c;前几年也曾爆出过多个安全漏洞。致远官方一直对修复漏洞的态度十分积极&#xff0c;目前能有效利用的致远漏洞已经很少了。 和我们之前分享过的通达OA的漏洞类似&#xff0c;这类主流OA系统现在想要直接一步达到RCE的…

UE5——源码阅读——10——引擎预初始化

运行延迟注册委托 初始化堆栈跟踪 检测是否需要覆盖打印时间 检测所必要的插件是否是可用的 获取目标信息 拿到编辑器目标名 检测当前运行的可执行文件是否是正确的 检测项目模块是否有过时和不兼容的 检测插件模块是否有过时和不兼容的 报错误信息 强制通讯 判断是…

选择合适的Python Web框架

Python 是一种功能强大的编程语言&#xff0c;广泛应用于 Web 开发领域。FastAPI 和 Flask 是 Python Web 开发中最受欢迎的两个框架。本文将对 FastAPI 和 Flask 进行综合对比&#xff0c;探讨它们在语法和表达能力、生态系统和社区支持、性能和扩展性、开发工具和调试支持、安…

找不到d3dcompiler_47.dll,无法继续执行代码,解决方法

首先&#xff0c;让我们来了解一下d3dcompiler_47.dll文件。d3dcompiler_47.dll是一个动态链接库文件&#xff0c;它是DirectX SDK中的一个重要组件&#xff0c;用于编译DirectX着色器。当我们在使用一些需要DirectX支持的软件或游戏时&#xff0c;如果缺少了这个文件&#xff…

Linux进程调度之完全公平调度(压箱底的干货分享)

目录 1.什么是完全公平调度&#xff1f; 2.调度周期&#xff0c;调度延迟&#xff0c;最小调度粒度 3.实际运行时间 4.nice值和权重 5.虚拟运行时间 6.查看进程运行时间 1.什么是完全公平调度&#xff1f; 完全公平调度&#xff0c;CFS (Completely Fair Scheduler) 是 …

python 去除图像中的框

最近在做图像标注&#xff0c;会出现以下的图片&#xff0c;需要去除其中的边框。 1.思路 人工标注画框的范围P&#xff0c;并使用标注工具在画框上画一个点A。获取点A的坐标和颜色。在范围P内&#xff0c;将与点A颜色相似的每一个点x的颜色&#xff0c;替换为点x上下&#…

电机应用-直流有刷电机

直流有刷电机 直流有刷电机具有结构简单、易于控制、成本低等特点。 基本的直流有刷电机在电源和电机间只需要两根电缆&#xff0c;可以节省配线和连接器所需的空间&#xff0c;并降低电缆和连接器的成本。 还可以使用MOSFET/IGBT开关对直流有刷电机进行控制&#xff0c;给电机…

第五章:Testing Modules

文章目录 State and ProgramsTestability of State-Based Programsintrusively test 侵入性测试Non-intrusive test 非侵入测试java和其他工具的实践有限状态机进行单元测试(Unit testing with FSA)构建状态机步骤step1:识别 FSA 状态step2:确定某个状态下的可用操作step3:…

【算法练习Day40】打家劫舍打家劫舍 II打家劫舍 III

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 打家劫舍打家劫舍 II打家劫…

java 之数据类型的转换

文章目录 package javastudy;public class arraytest{public void ad(int a,int b) {System.out.printf("ab is %f",ab);}public static void main(String[] args) {arraytest arr new arraytest();arr.ad(1.0, 2);//arr.ad(1 , 2);} }当我们的方法的数据类型是int …

【数据结构与算法】二叉树(基本操作和几种特殊二叉树介绍)

二叉树的基本介绍&#xff0c;只讲基本算法&#xff1b;对于特殊二叉树的相关算法&#xff0c;如AVL树的旋转&#xff0c;以后有时间再写。 文章目录 一、基本概念二、基本操作2.1 二叉树的存储方式2.2 常见操作2.3 二叉树的遍历2.31 前序遍历2.32 中序遍历2.33 后序遍历2.34 层…

JavaScript作用域实战

● 首先&#xff0c;我们先创建一个函数&#xff0c;和以前一样&#xff0c;计算一个年龄的 function calcAge(birthYear) {const age 2037 - birthYear;return age; }● 然后我们创建一个全局变量&#xff0c;并调用这个函数 const firstName "IT知识一享"; cal…

遇到python程序是通过sh文件启动的,如何调试

说明 下载的源码总会遇到这样启动的&#xff1a; 并且发现shell文件内容很多&#xff0c;比较复杂&#xff0c;比如&#xff1a; 解决方案 这时候想要调试&#xff0c;可以通过端口连接的方式调试&#xff0c;具体方法如下&#xff1a; 在vscode调试按钮中添加远程附加调试…

Antv/G2 自定义tooltip鼠标悬浮提示信息

Antv/G2 提示 - Tooltip 教程 Tooltip 提示信息文档 chart.line().position(label*value).color(type).tooltip(type*value, (type:string, value:number) > { return {name: type,value: value%}}) });demo&#xff1a; <!DOCTYPE html> <html lang&quo…