2023csp-j(选择题)

目录

单项选择题:

第1题

第2题

第3题

第4题

第5题

第6题

第7题

第8题

第9题

第10题

第11题

第12题

第13题

第14题

第15题


单项选择题:

第1题

在 C++中,下面哪个关键字用于声明一个变量,其值不能被修改?()

A.unsigned

B.const

C.static

D.mutable

【参考答案】B

【知识点】关键字

【解析】

unsigned:无符号变量,默认是非负数

const:恒定变量,无法被修改

static:静态局部变量,类似于全局变量

mutable:可变的变量。mutable也是为了突破const的限制而设置的。被mutable修饰的变量(mutable只能用于修饰类的非静态数据成员),将永远处于可变的状态


第2题

八进制数12345670(8进制)和07654321(8进制)的和为()。

A.222222218

B.211111118

C.221111118

D.222222118

【参考答案】D

【知识点】八进制计算

【解析】逢8进1,对齐计算就好了。


第3题

阅读下述代码,请问修改 data 的 value 成员以存储3.14,正确的方式是()。

union Data{

     int num;

     float value;

     char symbol;

};

union Data data;

A.data.value = 3.14;

B.value.data=3.14;

C.data->value = 3.14;

D.value->data = 3.14;

【参考答案】A

【知识点】联合体

【解析】union是联合体,它内部只能有一个变量起作用,用法和struct类似,所以答案选A,其中CD选项的“->”用于指针。


第4题

假设有一个链表的节点定义如下:

struct Node{

     int data;

     Node* next;

};

现在有一个指向链表头部的指针:Node* head,如果想要在链表中插入一个新节点。其成员 data 的值为42,并使新节点成为链表的第一个节点,下面哪个操作是正确的?()

A. Node* newNode = new Node; newNode -> data = 42; newNode -> next = head; head = newNode;

B.Node* newNode = new Node; head -> data = 42; newNode -> next = head; head = newNode;

C.Node* newNode = new Node; newNode -> data = 42;hea

2023CSP - J第一轮中,有不同类型的题目,下面以单项选择题和补全动态规划算法题为例进行分析。 ### 单项选择题 题目:在C++中,下面哪个关键字用于声明一个变量,其值不能被修改?选项有A. unsigned、B. const、C. static、D. mutable。 答案是选B。声明常量的格式是`const 数据类型 常量名 = 常量值;`,例如`const double PI = 3.14;`,`const`关键字用于定义常量,常量一旦被初始化,其值在程序运行过程中不能被修改[^1]。 ### 补全动态规划算法题 题目给出了一段补全动态规划算法的代码,需要确定①处应填的内容。代码的整体功能是计算两个字符串之间的编辑距离。编辑距离是指将一个字符串转换为另一个字符串所需的最少操作次数(插入、删除、替换)。代码中使用二维数组`dp`来记录子问题的解,`dp[i][j]`表示`str1`的前`i`个字符和`str2`的前`j`个字符之间的编辑距离。 在代码里,当`i == 0`时,表示`str1`为空字符串,要将空字符串转换为`str2`的前`j`个字符,需要进行`j`次插入操作,所以①处应填`j`。具体代码框架如下: ```cpp #include <iostream> #include <string> #include <vector> using namespace std; int min(int x, int y, int z) { return min(min(x, y), z); } int edit_dist_dp(string str1, string str2) { int m = str1.length(); int n = str2.length(); vector<vector<int>> dp(m + 1, vector<int>(n + 1)); for (int i = 0; i <= m; i++) { for (int j = 0; j <= n; j++) { if (i == 0) dp[i][j] = j; // ①处内容 else if (j == 0) dp[i][j] = i; else if (str1[i - 1] == str2[j - 1]) dp[i][j] = dp[i - 1][j - 1]; else dp[i][j] = 1 + min(dp[i][j - 1], dp[i - 1][j], dp[i - 1][j - 1]); } } return dp[m][n]; } int main() { string str1, str2; cin >> str1 >> str2; cout << "Minimum number of operations: " << edit_dist_dp(str1, str2) << endl; return 0; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值