C++笔试强训2

news2025/2/26 0:59:30

文章目录

  • 一、选择题
  • 二、编程题


一、选择题

在这里插入图片描述
和笔试强训1的知识点考的一样,因为输出的是double类型所以后缀为f,m.n对其30个字符所以m是30,精度是4所以n是4,不加符号默认是右对齐,左对齐的话前面加-号,所以答案是-30.4f,答案选c

  1. %s:就是字符串的转换说明符
  2. %ms:输出字符串宽度为m,如果字符串本身实际宽度大于m,那么就用字符串的实际宽度。如果字符串的实际宽度小于m,则左补空格。可以理解成m前面有个省略了的+号,所以字符串右对齐;
  3. %-ms:规则基本上面一样,不一样的是字符串左对齐,右补空格;
  4. %m.ns;输出宽度占m,但是只取字符串中左端的n个字符。这n个字符排列在m宽度的右侧,如果n小于m则左补空格,如果n大于m,那么m失效,字符的输出宽度就是n。
  5. %-m.ns;规则和上面基本一样,不一样的地方在于,如果n小于m那么需要左对齐,右补空格。

在这里插入图片描述
本题主要考察指针常量和常量指针的概念。可以通过观察const和*的位置来区分指针常量和常量指针

如果const在的左边比如:const int p或者int const p都表示常量指针
如果const在
的右边比如:int* const p表示指针常量

对上述题目进行分析(1)是常量指针,不能修改它指向的数据,但能修改指向的地址。(2)也是常量指针,因为const在*的左边。(3)修改了p2的指向,常量指针可以修改指向。(4)是指针常量,不能修改指针的指向的地址,但可以修改指向的数据。(5)修改了指针常量p3指向的数据,没问题。(6)修改了常量指针p2指向的数据,错误。(7)修改了指针常量p3指向的地址,错误。

故(6)(7)错误,本题选C。

指针常量(Pointer to Constant)

指针常量指的是指针的值(即它所指向的地址)不能被修改,但是通过这个指针可以修改它所指向的数据。指针常量通常用const关键字来修饰指针本身,而不是指针所指向的数据类型。

int a = 10;
int *const ptr = &a; // ptr 是一个指针常量,指向整数 a

// *ptr = 20; // 这是合法的,因为 ptr 指向的数据(a)是可以被修改的
// ptr = &b; // 这是非法的,因为 ptr 是一个指针常量,它的值(即它所指向的地址)不能被修改

常量指针(Constant Pointer)

常量指针指的是通过该指针不能修改它所指向的数据,但是指针的值(即它所指向的地址)是可以被修改的。常量指针通常用const关键字来修饰指针所指向的数据类型,而不是指针本身。

int a = 10;
const int *ptr = &a; // ptr 是一个常量指针,指向整数 a
//该语句等价与下面这条语句,都表示常量指针
//int const *ptr = &a;

// ptr = &b; // 这是合法的,因为 ptr 的值(即它所指向的地址)是可以被修改的
// *ptr = 20; // 这是非法的,因为 ptr 是一个常量指针,不能通过它来修改它所指向的数据

两者结合

你也可以创建一个既是常量指针又是指针常量的指针,即它的值和它所指向的数据都不能被修改。这通过在指针声明中同时使用两个const关键字来实现,一个修饰指针本身,另一个修饰指针所指向的数据类型。

int a = 10;
const int *const ptr = &a; // ptr 既是一个常量指针(不能通过它修改 a),也是一个指针常量(它的值不能被修改)

// ptr = &b; // 这是非法的
// *ptr = 20; // 这也是非法的

在这里插入图片描述
A选项:acX和acY是两个普通数组,数组的内容可以修改,A正确。
B选项:在C语言中,对于相同的字符串常量,编译器通常会优化内存使用,使得多个相同的字符串字面量(string literals)在程序中指向同一块内存区域。这意味着,如果代码中有两个或多个指向相同字符串字面量的指针,这些指针的值(即它们所指向的地址)是相同的。
C选项:acX是字符串,以’\0’结尾,故acX比acY多一个字符。
D选项:字面常量不可修改。

故D错误选D。


在这里插入图片描述
b=a,b指向数组首元素,b+=2,相当于把首元素加了个2变成了3,2,3,4.(b+2)=2,表示指针先向后偏移两个单位(两个int类型的字节数即8个字节)指向下标为2的内个元素(下标从0开始算),然后赋值成了2即变成了3,2,2,4.b++,即b指向下一个元素即下标为1的元素。打印b和(b+2)即打印下标为1和3的元素即2和4,故答案选C。


在这里插入图片描述
不正确的是B,说反了,要尽量使用const常量。
虽然宏定义在某些简单情况下可能看起来更直观,但const提供了更好的类型安全性、作用域控制、调试能力和内存保护。因此,在可以使用const的情况下,通常建议优先使用const。只有在需要定义非类型常量或进行复杂的文本替换时,才考虑使用宏定义。


在这里插入图片描述
类型匹配上,数组传参直接传数组名就好,答案是D。


在这里插入图片描述
A选项: 指针数组,放指针的数组,该题中A是一个放10个int类型指针的数组
B选项:数组指针,指向数组的指针,该题中B是一个指向一个存放10个int类型数组的指针
C选项:函数指针,指针a指向一个函数,这个函数接受一个int类型的参数,并返回一个 int 类型的值。
D选项:数组a包含10个元素,每个元素都是一个指向函数的指针,这些函数都接受一个 int 类型的参数,并返回一个 int 类型的值。

故选D。


在这里插入图片描述
第一个for循环里,先把字符通过字符转换成下标,然后将数组对于下标的元素++,第二个for循环输出每个字符出现的个数,选D。


在这里插入图片描述
4字节(32):19+11
4字节(32):4
4字节(32):29
1字节(8):
一共13个字节,但由于对齐得是4的整数倍所以大小为16
故选C


在这里插入图片描述
a是数组名,单纯一个a是数组首元素的地址,&a的话是数组的地址,虽然指向的位置和a指向的位置一样,但区别在进行±运算的时候移动的步长不一样。
&a+1移动的步长是一个数组大小,该数组大小为4个int即16个字节,指向数组最后一个元素的下一个元素。int*(&a+1)转换成int*类型的指针,这个时候进行±运算步长就会变成一个int即4个字节,ptr-1就是后移一个int单位指向的是最后一个元素,也就是4,所以选A。
在这里插入图片描述


二、编程题

题目链接:
排序子序列
在这里插入图片描述
提交代码:

#include<iostream>
#include<vector>
using namespace std;

int main() {
    int n;
    cin >> n;

// 注意这里多给了一个值,是处理越界的情况的比较,具体参考上面的解题思路
    vector<int> a;
    a.resize(n + 1);
    //这里有个坑,这个题越界了牛客测不出来,给n,并且不写a[n] = 0;不会报错,但是最好写上
    a[n] = 0;
//读入数组
    int i = 0;
    for (i = 0; i < n; ++i)
        cin >> a[i];

    i = 0;
    int count = 0;
    while (i < n) {
// 非递减子序列
        if (a[i] < a[i + 1]) {
            while (i < n && a[i] <= a[i + 1])
                i++;

            count++;
            i++;
        } else if (a[i] == a[i + 1]) {
            i++;
        } else { // 非递增子序列
            while (i < n && a[i] >= a[i + 1])
                i++;
            count++;
            i++;
        }
    }

    cout << count << endl;

    return 0;
}

运行结果:
在这里插入图片描述


题目链接:
倒置字符串

在这里插入图片描述
提交代码:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main() {
    string s;
// 注意这里要使用getline,cin>>s遇到空格就接收结束了
    getline(cin, s);

// 翻转整个句子
    reverse(s.begin(), s.end());
// 翻转单词
    auto start = s.begin();
    while (start != s.end()) {
        auto end = start;
        while (end != s.end() && *end != ' ')
            end++;

        reverse(start, end);

        if (end != s.end())
            start = end + 1;
        else
            start = end;
    }
    cout << s << endl;

    return 0;
}

运行结果:
在这里插入图片描述


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

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

相关文章

人工智能开发中的数据隐私

人工智能开发中的数据隐私对于建立用户信任和遵守严格法规至关重要。保护敏感信息可确保合乎道德的人工智能使用并防止有害的数据泄露。 为什么在人工智能开发中优先考虑数据隐私至关重要 人工智能的迅猛发展开启了一个前所未有的技术进步时代&#xff0c;彻底改变了各行各业&…

价格预言机的使用总结(一):Chainlink篇

文章首发于公众号&#xff1a;Keegan小钢 前言 价格预言机已经成为了 DeFi 中不可获取的基础设施&#xff0c;很多 DeFi 应用都需要从价格预言机来获取稳定可信的价格数据&#xff0c;包括借贷协议 Compound、AAVE、Liquity &#xff0c;也包括衍生品交易所 dYdX、PERP 等等。…

STL—容器—string类【对其结构和使用的了解】【对oj相关练习的训练】

STL—容器—string类 其实string类准确来说并不是容器&#xff0c;因为他出现的时间比STL要早&#xff0c;但是也可以说是容器吧。 1.为什么要学习string类&#xff1f; 1.1C语言当中的字符串 C语言中&#xff0c;字符串是以’\0’结尾的一些字符的集合&#xff0c;为了操作…

ROS——坐标系管理、监听与广播、常用可视化工具

坐标系管理 TF功能包 小海龟追踪实验 ros版本(20.04)的tf安装命令: sudo apt-get install ros-noetic-turtle-tf 解决因python版本出现的无法生成跟随海龟&#xff1a; sudo ln -s /usr/bin/python3 /usr/bin/python ( -s 软链接,符号链接) ln命令&#xff08;英文全拼&#…

【C++】B树及其实现

写目录 一、B树的基本概念1.引入2.B树的概念 二、B树的实现1.B树的定义2.B树的查找3.B树的插入操作4.B树的删除5.B树的遍历6.B树的高度7.整体代码 三、B树和B*树1.B树2.B*树3.总结 一、B树的基本概念 1.引入 我们已经学习过二叉排序树、AVL树和红黑树三种树形查找结构&#x…

数据库7.4

第二次作业 1.登陆数据库 2.创建数据库zoo 3.修改数据库zoo字符集为gbk 4.选择当前数据库为zoo 5.查看创建数据库zoo信息 6.删除数据库zoo C:\Windows\System32>mysql -uroot -p20040830Nmx mysql> create database zoo; alter database zoo character set gbk; mys…

InspireFace-商用级的跨平台开源人脸分析SDK

InspireFace-商用级的跨平台开源人脸分析SDK InspireFaceSDK是由insightface开发的⼀款⼈脸识别软件开发⼯具包&#xff08;SDK&#xff09;。它提供了⼀系列功能&#xff0c;可以满⾜各种应⽤场景下的⼈脸识别需求&#xff0c;包括但不限于闸机、⼈脸⻔禁、⼈脸验证等。 该S…

【C++/STL】优先级队列的介绍与模拟实现仿函数

✨ 万物与我皆是自由诗 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;C学习 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1…

非对称加密算法原理与应用2——RSA私钥加密文件

作者:私语茶馆 1.相关章节 (1)非对称加密算法原理与应用1——秘钥的生成-CSDN博客 第一章节讲述的是创建秘钥对,并将公钥和私钥导出为文件格式存储。 本章节继续讲如何利用私钥加密内容,包括从密钥库或文件中读取私钥,并用RSA算法加密文件和String。 2.私钥加密的概述…

VSCode设置好看清晰的字体!中文用鸿蒙,英文用Jetbrains Mono

一、中文字体——HarmonyOS Sans SC 1、下载字体 官网地址&#xff1a;https://developer.huawei.com/consumer/cn/design/resource/ 直接下载&#xff1a;https://communityfile-drcn.op.dbankcloud.cn/FileServer/getFile/cmtyPub/011/111/111/0000000000011111111.20230517…

[学习笔记]SQL学习笔记(连载中。。。)

学习视频&#xff1a;【数据库】SQL 3小时快速入门 #数据库教程 #SQL教程 #MySQL教程 #database#Python连接数据库 目录 1.SQL的基础知识1.1.表(table)和键(key)1.2.外键、联合主键 2.MySQL安装&#xff08;略&#xff0c;请自行参考视频&#xff09;3.基本的MySQL语法3.1.规…

深度学习模型加密python版本

支持加密的模型: # torch、torch script、onnx、tensorrt 、torch2trt、tensorflow、tensorflow2tensorrt、paddlepaddle、paddle2tensorrt 深度学习推理模型通常以文件的形式进行保存&#xff0c;相应的推理引擎通过读取模型文件并反序列化即可进行推理过程. 这样一来&#…

JDK都出到20多了,你还不会使用JDK8的Stream流写代码吗?

目录 前言 Stream流 是什么&#xff1f; 为什么要用Steam流 常见stream流使用案例 映射 map() & 集合 collect() 单字段映射 多字段映射 映射为其他的对象 映射为 Map 去重 distinct() 过滤 filter() Stream流的其他方法 使用Stream流的弊端 前言 当你某天看…

Windows ipconfig命令详解,Windows查看IP地址信息

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 ipconfig 1、基…

【刷题汇总--大数加法、 链表相加(二)、大数乘法】

C日常刷题积累 今日刷题汇总 - day0061、大数加法1.1、题目1.2、思路1.3、程序实现 2、 链表相加(二)2.1、题目2.2、思路2.3、程序实现 3、大数乘法3.1、题目3.2、思路3.3、程序实现 4、题目链接 今日刷题汇总 - day006 1、大数加法 1.1、题目 1.2、思路 读完题,明白大数相加…

react 项目中预防xss攻击的插件 dompurify

一、安装 $ yarn add dompurify $ yarn add --dev types/dompurify 二、使用 import DOMPurify from dompurify;// 1、处理&#xff1a; DOMPurify.sanitize(htmlContent)// 2、之后放进 dangerouslySetInnerHTML dangerouslySetInnerHTML{{ __html: cleanHTML }} 如&#…

【IT领域新生必看】 Java编程中的重载(Overloading):初学者轻松掌握的全方位指南

文章目录 引言什么是方法重载&#xff08;Overloading&#xff09;&#xff1f;方法重载的基本示例 方法重载的规则1. 参数列表必须不同示例&#xff1a; 2. 返回类型可以相同也可以不同示例&#xff1a; 3. 访问修饰符可以相同也可以不同示例&#xff1a; 4. 可以抛出不同的异…

经典双运算放大器LM358

前言 LM358双运放有几十年的历史了吧&#xff1f;通用运放&#xff0c;很常用&#xff0c;搞电路的避免不了接触运放&#xff0c;怎么选择运放&#xff0c;是工程师关心的问题吧&#xff1f; 从本文开始&#xff0c;将陆续发一些常用的运放&#xff0c;大家选型可以参考&#…

win10使用小技巧一

1. 查看电脑IP地址 步骤&#xff1a;按WinR打开运行框 → 输入cmd点确定 → 输入ipconfig回车 → 查看IP地址。 2. 解决网页文字不能复制 步骤&#xff1a;按F12 → 调试框里点击设置 → 向下滑找到 禁用 JavaScript → 勾选 → 复制文字。 3. 解决电脑不能上网 方法一&…

第10章 项目总结02:针对当前项目的面试题

1 项目概况 1.1 项目介绍 从以下几个方面进行项目介绍&#xff1a; 1、项目的背景&#xff1a;做什么业务、服务的客户群是谁、谁去运营、自研还是外包等问题。 2、项目的业务流程&#xff1a;课程发布流程、断点续传流程、视频处理流程、认证授权流程、支付流程、CI/CD流程…