2024届 C++ 刷题 笔试强训 Day 03
选择题
01
以下程序的输出结果是()
#include <stdio.h> void main() {char a[10] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', 0}, *p;int i;i = 8;p = a + i;printf("%s\n", p - 3); }A 6
B 6789
C ‘6’
D 789
题目解析:
- 题目中定义了一个字符数组和字符类型的指针 p。数组名 a 表示数组首元素地址,
p = a + 8说明 p 指向的是数组中下标为 8 的元素。 - 以字符串的形式打印
p-3地址为起始的内容。首先p - 3指向的是下标为 5 的元素,也就是 6;以字符串的形式打印,知道遇到\0才会停止,字符\0对应的 ASCII 码就是 0 哈!
答案:B
知识点总结:
- 数组名代表数组首元素的地址。但在
&数组名以及sizeof 数组名的时候,数组名表示的是整个数组。 - 以
%s的形式打印,会向后打印字符,直到遇到\0。
02
以下程序的输出结果是()
#include <iostream> using namespace std; int main() {int x = 3, y = 3;switch (x % 2){case 1:switch (y){case 0:cout << "first";case 1:cout << "second";break;default:cout << "hello";}case 2:cout << "third";}return 0; }A second third
B hello
C first second
D hellothird
题目解析:
- 首先进入第一层
switch,x % 2的值为 1,进入case 1:;y 的值为 3 进入default此时会输出 hello。 - 执行完
case 1之后,我们发现并没有break语句,那么就会进入case 2继续执行,然后输出third。
答案:D
知识点总结:
-
理解
switch语句的执行原理:当
switch语句中的表达式与某个case标签的值匹配时,程序会执行该case下的代码。如果在这个case的代码块中没有遇到break语句,那么程序会继续执行下一个case的代码块,这种行为称为“贯穿”。这个过程会一直持续下去,直到遇到
break语句或者执行完所有的case。如果在switch语句的末尾有一个default标签,且之前没有遇到break语句,那么程序还会执行default标签下的代码。
03
以下能对二维数组a进行正确初始化的语句是()
A int
ta[2][]={{0,1,2},{3,4,5}};
B intta[][3]={{0,1,2},{3,4,5}};
C intta[2][4]={{0,1,2},{3,4},{5}};
D intta[][3]={{0,2},{},{3,4,5}};
题目解析:
-
A:定义二维数组的时候,行数可以不指定,当时列数必须指定。A 错误。
-
B:定义二维数组,行数可以不指定,B 选项中只初始化了两行数据,那么
ta变量实际上就是:ta[2][3]。当不指定行数会根据你的初始化推导。因此,如果不指定行数,就必须在定义的时候初始化数组,不然编译器没法给你的数组开辟空间,就会报错。B 正确
-
C:这个选项显然是错误的,二维数组定义了两行,却初始化了三行的数据,越界访问。
-
D:初始化第一行的时候
{0,,2}试图跳过一个元素的初始化也是不合法的。D 错误。
答案:B
知识点总结:
- 二维数组定义的时候可以不指定行数。如果不指定行数就必须显示初始化。
- 二维数组定义的时候不可以不指定列数。
- 数组部分初始化元素时,未显示初始化的部分会补零。
04
能把函数处理结果的二个数据返回给主调函数,在下面的方法中不正确的是()
A return这二个数
B 形参用数组
C 形参用二个指针
D 用二个全局变量
题目解析:
- return 返回的话,只能返回一个数哈,显然不能返回函数中的两个数据。
答案:A
知识点总结:
将函数内的局部变量带出函数的作用域的方法:
- 形参使用数组。因为数组就是传递地址的嘛,就类似指针的效果。因此形参使用数组和使用指针是相同的效果。
- 全局变量。全局变量自然不用说,因为他的作用域是在全局和声明周期是随进程的,能够轻易做到。
- 通过返回值。通过返回值也能将函数内部的数据带出来,如果需要返回多个数据,可以使用结构体。但是返回值的本质其实是拷贝嘛,效率自然没有指针高,因此,更加推荐使用指针哈!
05
int *p[4] 与选择项中的() 等价
A
int p[4]
Bint *p
Cint *(p[4])
Dint (*p)[4]
题目解析:
首先题目表示的是指针数组哈!指针的类型是 int
- A:选项 A 表示的是一个
int类型的数组。 - B:选项 B 表示的是一个
int类型的指针。 - C:选项 C 和题目是一个意思哈,这个括号加不加一个效果。
- D:选项 D 表示的是一个数组指针哈,该指针指向的数组是:有四个元素的
int类型的数组。
知识点总结:
熟练掌握各种类型指针的书写方法。
- 普通指针:指向特定数据类型的指针。例如,
int *ptr;定义了一个指向整数的指针。 - 空指针:不指向任何地方的指针。例如,
int *ptr = NULL;将指针设置为 NULL。 - 野指针:指向未知内存地址的指针,应尽量避免使用。例如,未初始化的指针。
- 指向指针的指针:也称为二级指针。例如,
int **ptr;定义了一个指向整型指针的指针。 - 指针数组:一个数组,其中的每个元素都是指针。例如,
int *ptrArray[5];定义了一个包含5个整型指针的数组。 - 数组指针:指向数组的指针。例如,
int (*ptr)[5];定义了一个指向包含5个整数的数组的指针。 - 函数指针:指向函数的指针。例如,
int (*funcPtr)(int, int);定义了一个指向接受两个整数参数并返回整数的函数的指针。 - 常量指针:指针指向的值不能被修改。例如,
const int *ptr;定义了一个指向整数常量的指针。 - 指针常量:指针本身的值不能被修改。例如,
int *const ptr;定义了一个指向整数的常量指针
06
设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是()
A n=0;while(ch=getchar()!=‘\n’)n++;
B n=0;while(getchar()!=‘\n’)n++;
C for(n=0;getchar()!=‘\n’;n++);
D n=0;for(ch=getchar();ch!=‘\n’;n++);
题目解析:
D:在 for 循环中,第一个分号前面的表示循环条件的初始化,也就是说,D 选项仅仅会输入一次!如果这次输入的字符不是 \n 循条件就会一直判断成立,从而陷入死循环。
答案:D
知识点总结:
- getchar 函数用于向标准输入读取一个字符,返回值是读到字符的 ASCII 码。
07
以下代码
char *ptr; char myString[] = "abcdefg"; ptr = myString; ptr += 5;代码执行之后ptr指向的内容是?
A Compiler error
B fg
C efg
D defg
题目解析:
第一行定义了一个 char* 的指针变量 ptr。第二行定义了一个字符数组。第三行将数组赋值给 ptr 这个指针变量。第四行将 ptr += 5 那么 ptr 将指向字符数组下标为 5 的元素。因为 ptr 本身是一个字符指针,结合题目选项,他应该指向的是一个字符串,因此就是 fg。
答案:B
知识点总结:
- 使用字符串常量初始化一个字符数组,其实就是将字符串常量中的每个字符拷贝到栈空间,然后用来初始化定义的数组。在本题中数组的等价定义为:
char myString[8] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', '\0'}; - 字符串在
C/C++中以字符\0结尾。
08
下面3段程序代码的效果一样吗()
int b; (1)const int *a = &b; (2)int const *a = &b; (3)int *const a = &b;A (2)=(3)
B (1)=(3)
C (1)=(2)
D 都不一样
题目解析:
const 修饰指针变量无非三种情况:
- 指针变量本身不可改变。例如:
int * const a。 - 指针变量指向的内容不可以改变。例如:
const int* a或者const int *a。 - 指针变量本身和指向的内容都不可以改变。例如:
const int * const a。
答案:C
知识点总结:
- 看是哪种情况其实只要看
const在*的左边还是在*的右边哈! - 如果 const 在 * 的左边,那么就是指针指向的内容不可变。
- 如果 const 在 * 的右边,那么就是指针本身不可以改变。
09
32位系统中,定义
int **a[3][4],则变量占用内存空间为()A 4
B 48
C 192
D 12
题目解析:
32 位系统下,指针变量是 4 个字节。a 数组一共是 12 个元素,因此总大小就是 48 个字节。
答案:B
知识点总结:
-
在32位系统中,指针变量的大小为 4 字节,这主要是因为 32 位系统的地址总线宽度为32位。地址总线负责在CPU与内存之间传递地址信息,其宽度决定了CPU可以寻址的最大内存范围。
在32位系统中,地址总线的32位可以表示2^32个不同的地址,即最多可以寻址4GB的内存。由于每个地址都需要一个唯一的标识,因此需要一个足够大的空间来存储这些地址。在大多数情况下,一个字节(Byte)由8位(bit)组成,所以32位需要4个字节(4 * 8 = 32)来存储。
-
可以看到,指针变量的大小与是什么类型的指针是没有关系的。与系统有关。
编程题
01
原题链接:`https://www.nowcoder.com/practice/bd891093881d4ddf9e56e7cc8416562d?tpId=85&&tqId=29864&rp=1&ru=/activity/oj&qru=/ta/2017test/question-ranking)
题目描述:
读入一个字符串str,输出字符串str中的连续最长的数字串。
解题思路:
遍历字符串,使用cur去记录连续的数字串,如果遇到不是数字字符,则表示一个连续的数字串结束了,则将数字串跟之前的数字串比较,如果更长,则更新更长的数字串更新到res。
可以用双指针,但是没必要!因为题目的数据范围很小。
完整代码:
#include <iostream>
#include <string>
using namespace std;
int main()
{string str, res, cur;cin >> str;for (int i = 0; i <= str.length(); i++){// 数字+=到curif (str[i] >= '0' && str[i] <= '9'){cur += str[i];}else{// 找出更长的字符串,则更新字符串if (res.size() < cur.size())res = cur;elsecur.clear();}}cout << res;return 0;
}
02
原题链接:
https://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163?tpId=13&tqId=11181&tPage=2&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking题目描述:
给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。
数据范围: n ≤ 50000 n≤50000 n≤50000,数组中元素的值 0 ≤ v a l ≤ 10000 0≤val≤10000 0≤val≤10000
要求:空间复杂度: O ( 1 ) O(1) O(1),时间复杂度: O ( n ) O(n) O(n)
题目解析:
-
思路一:数组排序后,如果符合条件的数存在,则一定是数组中间那个数。这种方法虽然容易理解,但由于涉及到快排sort,其时间复杂度为O(NlogN)并非最优;
-
思路二:众数:就是出现次数超过数组长度一半的那个数字。如果两个数不相等,就消去这两个数,最坏情况下,每次消去一个众数和一个非众数,那么如果存在众数,最后留下的数肯定是众数。
我们这里只写第二种思路的代码哈:
完整代码:
class Solution
{
public:int MoreThanHalfNum_Solution(vector<int> numbers){if (numbers.empty())return 0;// 遍历每个元素,并记录次数;若与前一个元素相同,则次数加1,否则次数减1int result = numbers[0];int times = 1; // 次数for (int i = 1; i < numbers.size(); ++i){if (times != 0){if (numbers[i] == result){++times;}else{--times;}}else{result = numbers[i];times = 1;}}// 判断result是否符合条件,即出现次数大于数组长度的一半times = 0;for (int i = 0; i < numbers.size(); ++i){if (numbers[i] == result)++times;}return (times > numbers.size() / 2) ? result : 0;}
};
相关文章:
2024届 C++ 刷题 笔试强训 Day 03
选择题 01 以下程序的输出结果是() #include <stdio.h> void main() {char a[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, *p;int i;i 8;p a i;printf("%s\n", p - 3); }A 6 B 6789 C ‘6’ D 789 题目解析: 题目中定义了一个…...
linux用git拉取我云端以及git处理冲突
拉取后切换一个跟云端分支(dev)一样的 git branch --set-upstream-toorigin/dev dev 之后就同步了 A在dev分支写了iii,提交 B在dev分支写了hhh,提交,冲突 怎么修改,B把云端的拉下来,随便改改就行...
Learn OpenGL 17 立方体贴图
立方体贴图 我们已经使用2D纹理很长时间了,但除此之外仍有更多的纹理类型等着我们探索。在本节中,我们将讨论的是将多个纹理组合起来映射到一张纹理上的一种纹理类型:立方体贴图(Cube Map)。 简单来说,立方体贴图就是一个包含了…...
【四 (6)数据可视化之 Grafana安装、页面介绍、图表配置】
目录 文章导航一、Grafana介绍[✨ 特性]二、安装和配置1、安装2、权限配置(账户/团队/用户)①用户管理②团队管理③账户管理④看板权限 3、首选项配置4、插件管理①数据源插件②图表插件③应用插件④插件安装方式一⑤安装方式二 三、数据源管理1、添加数…...
jvm 堆
Java虚拟机(JVM)中的堆是运行时数据区的一个主要部分,它用于存放对象实例和数组。它是所有Java线程共享的一块内存区域,是垃圾收集器管理的主要区域,因此也被称作垃圾收集堆(Garbage-Collected Heap&#x…...
Jenkins通知目标服务器拉取Harbor镜像部署
1.告诉目标服务器拉取哪个镜像 2.判断当前有没有正在运行此容器,有就删除 3.接着查看拉取的镜像目标服务器上是否已存在,有就删除 4.拉取Harbor镜像 5.运行容器 目标服务器编写脚本 创建个部署脚本 vim deploy.sh告诉目标服务器Harbor地址、仓库、镜像…...
Android 13.0 系统中framework中关于Activitity的生命周期的源码讲解
1.前言 在13.0的系统rom定制化开发中,在framework中对activitity的生命周期的掌握和了解也是非常重要的,这样有利于在启动某个app的activity的页面的时候,可以 监听到是在启动 resume stop的过程,也好进行相关的功能开发,接下来就分析下Activity的相关生命周期的代码 2.…...
常见的几个Python技术难题
大家在日常开发中有没有遇到一些难题呢?计划后面出几期专题针对性的解决。大家如果有其它问题可以在评论区给出哈。 以下是几个Python技术难题的例子: 并发和多线程编程:Python的全局解释器锁(GIL)限制了多线程的并行…...
【探索Linux】—— 强大的命令行工具 P.28(网络编程套接字 —— 简单的UDP网络程序模拟实现)
阅读导航 引言一、UDP协议二、UDP网络程序模拟实现1. 预备代码⭕makefile文件⭕打印日志文件⭕打开指定的终端设备文件,并将其作为标准错误输出的目标文件描述符 2. UDP 服务器端实现(UdpServer.hpp)3. UDP 客户端实现(main函数&a…...
【MATLAB源码-第165期】基于matlab的科莫多巨蜥算法(KMA)机器人栅格路径规划,输出做短路径图和适应度曲线。
操作环境: MATLAB 2022a 1、算法描述 科莫多巨蜥算法(Komodo Mlipir Algorithm,简称KMA)是一种受到印尼科莫多岛上独特生物——科莫多巨蜥启发的创新算法。尽管这个算法的名称听起来很有趣,但实际上它并不是一个公认…...
【Linux】项目部署CPU彪高如何定位
1.查看所有CPU占比 使用top指令获取彪高进程的PID 2.输出进程的信息 ps H -eo pid,tid,%cpu | grep 1313 3.查看线程的信息 jstack tid nid都是十六进制的 4.进制转换 将 tid的十进制转为十六进制 找到nid 可以定位到具体位置 5.关闭程序 ps -ef | grep java kill -9 jav…...
第十二届蓝桥杯大赛软件赛决赛C/C++ 研究生组-纯质数
直接判断数据过大 相对而言,由2,3,5,7组成的数更少,则先筛选出由2,3,5,7组成的数,再判断这些数中的质数个数即可 #include <iostream> using namespace std; int main() {printf("1903");…...
MyBatis面试简答题
以下是一份MyBatis的高难度简答题,共20题: 请解释MyBatis中#{}和${}的区别,并举例说明它们在实际应用中的使用场景。 MyBatis的Mapper接口是如何与XML映射文件关联的? 如何在MyBatis中实现动态SQL?请列举几种常见的动态SQL元素并解释其作用。 描述MyBatis中的ResultMap的作…...
lua 中的元表
a{ age0, __tostringfunction() { }, __callfunction() { }, } b{} a.__indexa{}//将a表中的__index指向自己 setmetatable(a,b)//将b设置为a的元表; __tostring 当子表a被当做字符串使用时会调用原表b中的__tostring方法, __call 当子表a被当做字符串使用时…...
c语言综合练习题
1.编写程序实现键盘输入一个学生的学分绩点 score(合法的范围为:1.0—5.0),根据学生的学分绩点判定该学 生的奖学金的等级,判定规则如下表所示。 #include <stdio.h>int main() {float score;printf("请输入学生的学分…...
相机拍照与摄影学基础
1.相机拍照 相机可能形状和大小不同,但基本功能相同,包括快门速度、光圈和感光度,这些是摄影的通用概念。即使是一次性相机也是基于这三个理念工作的。不同类型相机在这三个概念上的唯一区别是你可以控制这些功能的程度。这三个参数被称为相…...
Pytorch:torch.cuda.empty_cache()
torch.cuda.empty_cache() 原理 torch.cuda.empty_cache() 是PyTorch中用来释放未被分配的缓存的内存的函数。在使用GPU进行计算时,CUDA会在内部维护一个内存缓存池,以便更快地分配和释放。但有时候,这些缓存的内存在不再需要的时候&#x…...
Linux--gdb调试
一.安装gdb sudo apt install gdb 二.使用gdb 三.gdb的相关操作 gdb 可执行文件名 显示代码: l 加断点: b 行号 启动程序:r(运行之前一定要加断点) 查看断点信息: info break/info b 删除断点信息:delete 断点编号 单步执行:n 打印 :p 显示:display 变量名: 退出:q …...
JavaSE(上)-Day6
JavaSE(上)-Day6 数组数组的定义数组的初始化打印数组分析数组索引数组内存图 方法方法的定义和调用方法的重载方法的内存图 二维数组二位数组的创建和初始化二维数组的内存图 数组 1.数组是一种容器,可以一次存储多个相同类型的数据 数组的…...
(二十五)Flask之MTVMVC架构模式Demo【重点:原生session使用及易错点!】
目录: 每篇前言:MTV&MVC构建一个基于MTV模式的Demo项目:蹦出一个问题: 每篇前言: 🏆🏆作者介绍:【孤寒者】—CSDN全栈领域优质创作者、HDZ核心组成员、华为云享专家Python全栈领…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
