信息学奥赛初赛天天练-31-CSP-J2022基础题-指针、数组、链表、进制转换、深度优先搜索、广度优先搜索、双栈实现队列应用

PDF文档公众号回复关键字:20240621

在这里插入图片描述

2022 CSP-J 选择题

单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项)

3.运行以下代码片段的行为是 ( )

int x = 101;
int y = 201;
int * p =&x;
int * q =&y;
p=q;

A. 将x的值赋为 201

B. 将y的值赋为101

C. 将q指向x的地址

D. 将p指向y的地址

4.链表和数组的区别包括( )

A. 数组不能排序,链表可以

B. 链表比数组能存储更多的信息

C. 数组大小固定,链表大小可动态调整

D. 以上均正确

10.以下对数据结构的表述不恰当的一项为 ( )

A. 图的深度优先遍历算法常使用的数据结构为栈

B. 栈的访问原则为后进先出,队列的访问原则为先进先出

C. 队列常常被用于广度优先搜索

D. 栈与队列存在本质不同,无法用栈实现队列

13.八进制数32.1对应的十进制数是

A. 24.125

B. 24.250

C. 26.125

D. 26.250

15.以下对递归方法的描述中,正确的是( )

A. 递归是允许使用多组参数调用函数的编程技术

B. 递归是通过调用自身求解问题的编程技术

C. 递归是面向对象和数据而不说功能和逻辑的编程语言模型

D. 递归是将用某种高级语言转换为机器代码的编程技术

2 相关知识点

1) 指针

指针是 C++语言中广泛使用的一种数据类型,指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址

int    *ip;    /* 一个整型的指针 */
float  *fp;    /* 一个浮点型的指针 */
char   *ch;    /* 一个字符型的指针 */

指针指向的是变量的地址

#include <iostream>
using namespace std;
int main (){int  a = 20;   // 实际变量的声明int  *ip;      // 指针变量的声明ip = &a;       // 在指针变量中存储 a 的地址cout << "a变量的值: ";cout << a << endl;// 输出在指针变量中存储的地址cout << "指针变量的值,指针指向的变量的地址: ";cout << ip << endl;// 访问指针中地址的值cout << "指针指向地址对应变量的值(a的值): ";cout << *ip << endl;return 0;
}

2) 数组/链表

数组是一种线性数据结构,它将具有相同类型的元素存储在连续的内存空间中。数组中每个元素通过其索引进行访问,索引从0开始

常规数组的长度是固定的,特殊数组长度不固定,例如vector数组

链表也是一种线性数据结构,但是它将元素存储在非连续的内存空间中,链表中的每个元素包含两部分:该元素的数据和指向下一个元素的指针

链表长度不固定

3) R进制转10进制

按权展开,但要注意各个位的权,最低位(最右边)的权是0次方,权值为1

(11010110)2=1×2^7+1×2^6+0×2^5+1×2^4+0×2^3+1×2^2+1×2^1+0×2^0=(214)10

包括小数

(1011.01)2=(1*2^3+1*2^1+1*2^0+1*2^(-2))=8+2+1+0.25=11.25

4) 递归

递归是一种解决问题的方法,它通过将问题分解为更小的子问题来解决。

一个递归函数会在其定义中直接或间接地调用自身

递归通常包括两个部分:基本情况(Base case)和递归步骤(Recursive step)。

基本情况是指当问题规模变得足够小时,可以直接得到解决方案的情况。

5)宽度优先遍历(BFS)

(BFS, Breadth First Search)是一个针对图和树的遍历算法。发明于上世纪50年代末60年代初,最初用于解决迷宫最短路径和网络路由等问题

是从根结点开始沿着树的宽度搜索遍历,将离根节点最近的节点先遍历出来,在继续深入遍历

实现DFS时,通常使用队列数据结构实现

6) 深度优先遍历(DFS)

从某个特定顶点开始,沿着每个分支尽可能搜索。DFS中,还需跟踪访问过的顶点。

实现DFS时,通常使用堆栈数据结构来实现

7) 2栈实现1队列

主要思路
存储元素到栈1
取出时把栈1中元素取出放入另外栈2(栈2的栈顶对应栈1的栈底),从栈2取做到了先进先出

#include<bits/stdc++.h>
using namespace std;
/*双栈转队列 主要思路存储元素到栈1取出时把栈1中元素取出放入另外栈2(栈2的栈顶对应栈1的栈底),从栈2取做到了先进先出 
*/ 
class Queue {private:stack<int> s1;//push存入 stack<int> s2;//把push存入s1的元素对口push到s2,再出栈 public:void push(int num){//push到栈s1 s1.push(num);}/*1 把栈s1中的元素逐一取出 放入s22 取出第1个元素 3 把栈s2中的元素逐一取出 放入s1 4 上述1 2 3操作后,取出了s1最下面元素后剩余元素又恢复了对应位置 */int  pop(){int temp;while (!s1.empty()){s2.push(s1.top());s1.pop();}temp = s2.top();s2.pop();while (!s2.empty()){s1.push(s2.top());s2.pop();}return temp;}/*top和pop类似top只是返回最上面一个元素,不取出此元素 */ int top(){int temp;while (!s1.empty()){s2.push(s1.top());s1.pop();}temp = s2.top();while (!s2.empty()){s1.push(s2.top());s2.pop();}return temp;}/*判空 2个队列都为空 */ bool empty(){return s1.empty() && s2.empty();}
};
int main(){Queue queue;//放入3个元素 queue.push(1);queue.push(2);queue.push(3);//按先进先出的顺序输出 cout << queue.pop() << endl;cout << queue.pop() << endl; 
}

3 思路分析

3.运行以下代码片段的行为是 ( D )

int x = 101;
int y = 201;
int * p =&x;
int * q =&y;
p=q;

A. 将x的值赋为 201

B. 将y的值赋为101

C. 将q指向x的地址

D. 将p指向y的地址

分析

1 x 和 y 变量赋值,x为101,y为201 所以A和B不对
2 int * q =&y; //可知q指向y的地址,所以C不对
3 p=q;//q赋值为p (q指向y的地址) 所以p之星y的地址 所以D正确

4.链表和数组的区别包括( C )

A. 数组不能排序,链表可以

B. 链表比数组能存储更多的信息

C. 数组大小固定,链表大小可动态调整

D. 以上均正确

分析

1 数组可以排序,所以A不正确
2 没有任何约束,链表和数组存储信息无法比较 所以B不正确
3 数组大小是固定的,动态数组除外,一般提到数组就是普通数组,所以C是正确的

10.以下对数据结构的表述不恰当的一项为 ( D )

A. 图的深度优先遍历算法常使用的数据结构为栈

B. 栈的访问原则为后进先出,队列的访问原则为先进先出

C. 队列常常被用于广度优先搜索

D. 栈与队列存在本质不同,无法用栈实现队列

分析

1 深度优先遍历常用数据结构为栈,因为栈是后进先出,逐层深入遍历的子节点 A正确
2 栈的访问原则是后进先出,队列的访问原则是先进先出 B正确
3 队列常用作广度优先搜索,队列是先进先出,紧跟着的节点先进队列,先被遍历, C正确
4 栈和队列顺序相反,可以使用2个栈实现1个队列,参考相关知识点7)

13.八进制数32.1对应的十进制数是( C )

A. 24.125

B. 24.250

C. 26.125

D. 26.250

分析

R进制转10进制 -权展开,但要注意各个位的权,最低位(最右边)的权是0次方,权值为1
(32.1)8=(3*8^1+2*8^0+1*8(-1))10=(24+2+0.125)10=26.125
所以选C

15.以下对递归方法的描述中,正确的是( B )

A. 递归是允许使用多组参数调用函数的编程技术

B. 递归是通过调用自身求解问题的编程技术

C. 递归是面向对象和数据而不是功能和逻辑的编程语言模型

D. 递归是将用某种高级语言转换为机器代码的编程技术

分析

1 递归主要是函数可以自己调用自己,所以选B
2 多组参数调用是参数传递和递归无关,所以A不对
3 递归和面向对象无关,也没说明自己调用自己 所以C不对
4 将高级语言转换为机器码是编译器的作用,和递归无关 所以D不对

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

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

相关文章

C51与MDK共存版本安装教程

目录 一、安装准备 1.1 新建文件夹 1.2 网盘链接-加Q 667198390 二、 双版本共存安装教程 2.1 安装Keil5 C51 2.2 安装Keil5 MDK 2.3 C51和MDK的共存 2.4 生成许可证 2.5 安装STM32Pack包 一、安装准备 1.1 新建文件夹 如下图&#xff1a; 在合适的网盘里&#xff08…

Java热部署:让应用更新如丝般顺滑,告别繁琐重启!

目录 手动启动热部署 自动启动热部署 参与热部署监控的文件范围配置 关闭热部署 什么是热部署&#xff1f;简单说就是你程序改了&#xff0c;现在要重新启动服务器&#xff0c;嫌麻烦&#xff1f;不用重启&#xff0c;服务器会自己悄悄的把更新后的程序给重新加载一遍&…

全网首测!文生软件平台码上飞CodeFlying,效果炸裂!

前言&#xff1a; 提到AIGC&#xff0c;在大家的印象中应该就是让AI自己生成文字&#xff0c;图片等内容吧。随着今年Sora&#xff0c;Suno的爆火&#xff0c;将AIGC的应用场景又拉到了一个新的高度&#xff0c;为人们带来了更多的遐想。在未来&#xff0c;或许可以用AI来生成…

ProtoBuf中service使用

在 Protocol Buffers 的 proto3 语法中&#xff0c;service 用于定义一个 gRPC 服务。一个 service 包含了一组可以远程调用的 RPC 方法&#xff0c;每个方法有请求类型和响应类型。 基本语法 syntax "proto3";service ServiceName {rpc MethodName(RequestType) …

红队内网攻防渗透:内网渗透之内网对抗:隧道技术篇防火墙组策略FRPNPSChiselSocks代理端口映射C2上线

红队内网攻防渗透 1. 内网隧道技术1.1 Frp内网穿透C2上线1.1.1 双网内网穿透C2上线1.1.1.1 服务端配置1.1.1.2 客户端配置1.1.2 内网穿透信息收集1.1.2.1、建立Socks节点(入站没限制采用)1.1.2.2 主动转发数据(出站没限制采用)1.2 Nps内网穿透工具1.2.1 NPS内网穿透C2上线1…

Python —— JSON

一文搞懂JSON-CSDN博客 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;常用于将数据结构化地传输和存储。它由键值对组成&#xff0c;采用类似于JavaScript对象的格式来表示数据。JSON易于阅读和编写&#xff0c;并且易于解析…

python学习笔记-10

面向对象编程-下 1.私有化属性 语法&#xff1a;两个下划线开头&#xff0c;声明该属性为私有&#xff0c;不能在类的外部被使用或直接访问。 使用私有化属性的场景&#xff1a; 1.把特定的一个属性隐藏起来&#xff0c;不让类的外部进行直接调用。 2.不让属性的值随意改变。…

关于package.json与lock文件依赖版本的一些问题

问题的出现 有几次项目部署完毕在线上运行时&#xff0c;测试人员发现某些组件的效果出现异常&#xff0c;比如某些在弹窗modal内的popup弹框的层级异常&#xff0c;显示在了modal底下&#xff0c;或者某个组件&#xff08;如modal的footer区域的类样式&#xff09;出现多个cs…

Java中的API设计与文档生成最佳实践

Java中的API设计与文档生成最佳实践 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在Java开发中&#xff0c;设计良好的API&#xff08;Application Program…

轻量级服务器内存不够编译的情况解决方案(以安装Ta-Lib库为例)

安装 TA-Lib 时遇到的问题通常与系统缺少必要的编译依赖项或者内存不足有关。以下是一些解决步骤,你可以按照这些步骤尝试解决问题: 问题描述:编译安装Tal-ib库出现以下问题: root@tianbaobao12:~/shipan/ta-lib# pip install ta-lib Collecting ta-libUsing cached TA-L…

微信发布分班查询结果

亲爱的老师们&#xff01;期末考完&#xff0c;新学期就快要来了&#xff0c;还在为分班查询头疼吗&#xff1f;别担心&#xff0c;今天我要和大家分享一个超级实用的小技巧——如何通过微信发布分班查询结果&#xff0c;让家长们和学生们都能掌握新学期的动态&#xff1f; 分…

“深入了解Redis缓存:探索Redis 6的新数据类型“

目录 1. 介绍 2. Bitmaps&#xff08;可以称为字符串&#xff0c;专门进行位操作的字符串&#xff09; 2.1 概念 2.2 setbit&#xff08;设置Bitmaps中某个偏移量的值&#xff09; 2.3 getbit&#xff08;获取Bitmaps中某个偏移量的值&#xff09; 2.4 bitcount&#xff…

【Python】神经网络回归预测模型,Python代码实现

场景描述&#xff1a;基于物联网检测设备&#xff0c;大量采集流量数据和液位高度数据存储在时序数据库(influxdb)中。并采用下面代码对数据进行预测 #!/usr/bin/env python # -*- coding: UTF-8 -*- # Author:李智敏 # Wechat:anark919 # Date:2024-01-05 10:17 # Title: imp…

【C语言】16.动态内存管理

文章目录 1.为什么要有动态内存分配2.malloc和free2.1 malloc2.2 free 3.calloc和realloc3.1 calloc3.2 realloc 4.常见的动态内存的错误4.1 对NULL指针的解引⽤操作4.2 对动态开辟空间的越界访问4.3 对⾮动态开辟内存使⽤free释放4.4 使⽤free释放⼀块动态开辟内存的⼀部分4.5…

Golang - 连接MySQL执行查询脚本

脚本如下&#xff0c;简单易用&#xff1a; package mainimport ("fmt""gorm.io/driver/mysql""gorm.io/gorm" )type BaseID struct {ID int64 gorm:"primaryKey" json:"id" }type Tasks struct {BaseIDUUID string…

初识 GPT-4 和 ChatGPT

文章目录 LLM 概述理解 Transformer 架构及其在 LLM 中的作用解密 GPT 模型的标记化和预测步骤 想象这样⼀个世界&#xff1a;在这个世界里&#xff0c;你可以像和朋友聊天⼀样快速地与计算机交互。那会是怎样的体验&#xff1f;你可以创造出什么样的应用程序&#xff1f;这正是…

【PS】提取手写签名

准备工具&#xff1a; 纸张&#xff1a;用于承载签名&#xff1b; 笔&#xff1a;用于签名&#xff1b; 手机&#xff1a;用于拍摄签名&#xff1b; Adobe Photoshop 版本: 12.0.3 (12.0.3x20101211 [20101211.r.1222 2010/12/11:02:00:00 cutoff; r branch]) x32&#xff1a;用…

亚足联官方公布18强赛抽签时间及规则,国足确认位列第五档,你们觉得国足能进世界杯吗?

亚足联官方公布18强赛抽签时间及规则&#xff0c;国足确认位列第五档&#xff0c;你们觉得国足能进世界杯吗&#xff1f; 今天亚足联官方宣布了世预赛18强赛分组抽签仪式时间&#xff0c;本次抽签仪式将于6月27日15点在马来西亚吉隆坡举行。除了抽签时间之外&#xff0c;足联还…

IMU用于飞行坐姿校正

为了提升长途飞行的舒适度并预防乘客因不良坐姿导致的身体不适&#xff0c;来自荷兰上海两所大学的研究团队携手开发出一种创新的“舒适穿戴”设备&#xff0c;专为识别飞行中的坐姿设计。 研究团队制作了两种原型设备&#xff1a;一种追求极致舒适&#xff0c;另一种为紧身设…

FFmpeg源码:AV_RB32宏定义分析

一、AV_RB32宏定义的作用 AV_RB32是FFmpeg源码中经常出现的一个宏&#xff0c;其定义如下&#xff1a; #ifndef AV_RB32 # define AV_RB32(p) AV_RB(32, p) #endif 该宏定义有多层。把它简化为函数&#xff0c;其函数声明可以等价于&#xff1a; uint32_t AV_RB32(uint…