2023年12月真题
一、单选题(每题2分,共30分)
正确答案:A
考察知识点:函数参数传递的概念
解析:C++中的函数传递方式:值传递、指针传递(地址传递的一种形式)、引用传递。
值传递是将实参的值复制一份传递给形参。在函数内部对形参的操作不会影响到实参。
指针传递是将实参的地址传递给形参。通过指针可以在函数内部修改实参的值。
引用传递是给实参起一个别名传递给形参。在函数内部对形参的操作等同于对实参的操作。
答案为A。
正确答案:B
考察知识点:一维数组、字符串及其函数
解析:int arr[10]={1}; 定义字符串并初始化,将第一个元素赋值为1,其余元素为0。则arr[1]值为0,以下标0访问字符串strArr的元素,答案为B。
正确答案:D
考察知识点:一维数组、函数的定义与调用、形参和实参、C++指针类型、函数参数传递的概念
解析:数组名是数组中第一个元素的存储地址。将数组名作为实参进行函数调用,相等于参数传递中的指针传递(地址传递),即传递第一个元素的地址。函数定义中的实参:int *n 定义了一个int类型的指针变量n,函数体中*n的 * 运算符是解引用运算符,即通过指针变量n操作地址中存储的数据。这个函数的功能是返回数据的平方。第一个元素的值为2,函数的值为2的平方4,存入arr[1]中,答案为D。
正确答案:C
考察知识点:二维数组与多维数组
解析:代码功能:访问二维数组,从上到下,从右到左,元素之间用空格间隔,每输出一行数据输出一个换行。答案为C。
正确答案:C
考察知识点:一维数组、C++指针类型的概念及基本应用
解析:数组名是数组第一个元素的地址,定义int类型指针p,赋值为arr,即p指向arr[0];p++,指针自增1,则p的指向往后移动一个int类型的存储空间,指向arr[1],p指针解引用,输出p即输出p所指向的值。答案为C。
正确答案:C
考察知识点:C++指针类型的概念及基本应用
解析:定义int类型指针p初始化为NULL,和int类型变量x初始化为2。使用取地址符&取得变量x的地址将其赋值给指针p,称p指向x。p++,指针p自增1,则p的指向往后移动一个int类型(占4字节)的存储空间,x地址为0x6ffe14,则现在地址为0x6ffe18,答案为C。
正确答案:A
考察知识点:函数的定义与调用、形参和实参、C++指针类型、函数参数传递的概念
解析:本题属于考察指针的基本概念,定义函数的功能:返回指针p指向数据的平方。主函数中定义int类型变量a初始化为20,int类型指针初始化为变量a的地址,将指针p作为实参进行函数调用,函数结果为20的平方400,赋值给p,输出p,答案为A。
正确答案:B
考察知识点:基本数据类型、位运算、逻辑运算
解析:A选项,3为真,false为假,进行逻辑与运算,运算结果为假。
B选项,5为真,2为真,进行逻辑与运算,运算结果为真。
C选项,101为真,000为假,进行逻辑与运算,运算结果为假。
B选项,4的二进制为100,true转成二进制为001,进行按位与运算,运算结果为000,为假。答案为B
正确答案:A
考察知识点:一维数组、字符串及其函数、多层分支/循环
解析:定义字符类型数组alpha用于存储26个字母并进行初始化,将第一个元素赋值为65( ‘A’ 的 ASCII 编码为65)。要想字符类型数组alpha可以存储26个字母,每次循环需要在上一个元素编码的基础上加 1,以得到下一个字母。答案为A。
正确答案:A
考察知识点:多层分支/循环、文件重定向与文件读写操作
解析:通过文件重定向,将输出重定向到文件1.txt。循环体:如果i是5的倍数,输出整数数值6,否则输出字符类型数值’A’。循环变量i从1开始,到10结束,循环步长1,其中5、10是5的倍数,因此最终文件中的内容是:AAAA6AAAA6。统计文件的字节数是统计其内单个符号的个数,一共10个,而不考虑其数据类型,因此答案为A。
正确答案:D
考察知识点:多层分支/循环、字符串及其函数
解析:循环体:当字符是数字字符,输出该字符;否则,输出#。输入1,2,3,4 执行代码输出 1#2#3#4 答案为D。
正确答案:A
考察知识点:多层分支/循环
解析:本题代码实现每个整数对应的因数。a除以b余数为0,则b是a的因数。本题答案为A。
正确答案:C
考察知识点:计算机基础
解析:声控智能驾驶系统,需要声音的输入设备和输出设备,A、B必须,需要设备感知周围环境自动选择优化路线,D必须。只有油量表不是必须的,本题答案C。
正确答案:B
考察知识点:计算机历史
解析:现代计算机基于 冯.诺伊曼 体系结构:运算器、控制器、存储器、输入设备、输出设备。
正确答案:B
考察知识点:多层分支 / 循环结构、基本运算
解析:因数对:同为某个数的因数,且值相差1,根据这个概念,只有B选项找不到所有的因数对。C、D选项,除了数本身之外,一个数最大的可能因子为N/2,因此循环条件设在 i<N/2也是可以的,减少了循环次数。
二、判断题(每题2分,共20分)
正确答案:正确
考察知识点:排序函数
解析:内置函数sort()对数组进行排序,sort(开始位置, 结束位置, 排序规则函数),包括开始位置,不包括结束位置,默认升序,更改排序规则可重写排序规则函数。sort(a, a+5)将数组中下标0~4的数据进行升序排序,排序结果为 {6,7,8,9,10,5,4,3,2,1}。本题表述正确。
正确答案:正确
考察知识点:递归算法。
解析:递归法求n的阶乘,时间复杂度为 O ( n ) O(n) O(n),本题表述正确。
正确答案:错误
考察知识点:表达式,基本运算
解析:C++中,中括号只在数组定义和数组元素访问中出现。本题表达式不正确。
正确答案:错误
考察知识点:文件重定向与文件读写操作
解析:ifstream和ofstream,分别用于文件的读取和写入。filein.open(“1.txt”);打开文件用于读取。因此本题无法完成对1.txt文件写入 hello。表述错误。
正确答案:错误
考察知识点:文件重定向与文件读写操作
解析:filein.open(“1.txt”);打开文件用于读取。代码中使用int类型的变量buff来存储读取的数据。当使用>>操作符从文件中读取数据时,它会尝试将读取的字符串转换为整数,也即将01234转成1234存入buff中。表述错误。
正确答案:正确
考察知识点:基本数据类型、逻辑运算
解析:整数常量5为真,整数常量2为真,进行逻辑或运算,运算结果为真,输出1。表述正确。
正确答案:正确
考察知识点:字符串及其函数
解析:可以使用’+'运算符实现字符串之间的连接。因此name中存储的数据为chenadai。表述正确。
正确答案:正确
考察知识点:排序函数
解析: C++内置函数 sort() 可以对整数、浮点数、字符数组进行从大到小,从小到大的局部排序。
正确答案:错误
考察知识点:计算机基础、计算机编程环境
解析:Dev C++(通常简称为 DevC)是一个集成开发环境(IDE)软件,是专门用于开发 C 和 C++ 程序的工具,为程序员提供了代码编辑、编译、调试和运行等功能的集成开发环境。操作系统(Operating System,OS)是管理计算机硬件与软件资源的计算机程序。Dev C++不属于操作系统软件。答案错误。
正确答案:正确
考察知识点:控制语句结构-循环
解析:本题考察 while 循环和 for 循环,他们之间可以进行等价转化。表述正确。
三、编程题(每题25分,共50分)
本题考察 函数的定义和调用,模拟算法。
#include<iostream>//头文件
using namespace std; //标准命名空间
struct map{
string a;
string b;
}arr[101];
int n;
string func(string s){
for(int i=0; i<n; i++){
if(arr[i].a==s){
//如果需要翻译的在A语言内,则返回B语言单词
return arr[i].b;
}
}
return "UNK"; //如果不在,使用"UNK"替换
}
int main(){
cin>>n;
for(int i=0; i<n; i++) cin>>arr[i].a>>arr[i].b; //读入翻译规则
string s, tmp="";
cin>>s;
for(int i=0; i<=s.size(); i++){
if(s[i] >= 'a' && s[i] <= 'z'){
//如果是字母,累加入变量tmp中
tmp+=s[i];
}else{
if(tmp != "") cout<<func(tmp); //但tmp不为空,翻译输出
cout<<s[i];
tmp="";
}
}
return 0;
}
本题考察 排序算法、模拟算法。
田忌赛马:上等马对中等马,中等马对下等马,下等马对上等马。
按照田忌的策略:要想获胜最多,尽量让速度快的马能够获胜。将马匹按照速度进行排序,从高到低依次进行匹配,累计最多的获胜次数。
#include<bits/stdc++.h>
using namespace std;
const int N=5e4+1;
int n, a[N], b[N];
int main() {
cin>>n;
for(int i=0; i<n; i++) cin>>a[i]; //输入你的马匹们的速度
for(int i=0; i<n; i++) cin>>b[i]; //输入田忌的马匹们的速度
//田忌赛马:上等马对中等马,中等马对下等马,下等马对上等马
/*因此要想获胜最多,尽量让速度快的马能够获胜。
将我的马按速度排序,从高到低依次去田忌的马中匹配,找一匹可以获胜的进行比赛
为了最大化利用我的马,则应该将田忌的马也进行排序,能匹配一个更快速的,则匹配
一个更快速的,可以证明,匹配一个较慢的可能降低获胜场数。
*/
sort(a, a+n); //升序排序
sort(b, b+n); //升序排序
int cnt=0, j=n-1;
for(int i=n-1; i>=0; i--) {
if(a[j] <= b[i]) continue;
else {
j--;
cnt++;
}
}
cout<<cnt;
return 0;
}