2023年12月真题
一、单选题(每题2分,共30分)
第 1 题 下⾯有关函数参数的说法,正确的是( )。
- A. 函数参数传递时,主函数当中采⽤值传递⽅式将参数传递给⼦函数时,若⼦函数将参数值改变,主函数当中的参数值不变。
- B. 函数参数传递时,主函数当中采⽤值传递⽅式将参数传递给⼦函数时,若⼦函数将参数值改变,主函数当中的参数值将随⼦函数⼀样改变⽽改变。
- C. 函数参数传递时,主函数如果将参数的地址传递给⼦函数,若⼦函数将参数值改变,主函数当中的参数值将不改变。
- D. 函数参数传递可以不满⾜⼦函数的参数个数要求。
第 2 题 下⾯C++代码执⾏后,输出的是( )。
int arr[10] = {1}; string strArr = "chen a dai"; cout << strArr[arr[1]] << endl;
- A. chen
- B. c
- C. chen a dai
- D. dai
第 3 题 下⾯C++代码最后执⾏后输出是( )。
int fun1(int *n) { return *n**n; } int main() { int arr[10] = {2}; arr[1] = fun1(arr); cout << arr[1] << endl; }
- A. 1
- B. 2
- C. 3
- D. 4
第 4 题 下⾯C++代码执⾏后的结果是( )。
int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; for(int i = 0; i < 3; i++) { for(int j = 2; j >= 0; j--) { cout << arr[i][j] << " "; } cout << endl; }
- A.
1 2 3 4 5 6 7 8 9
- B.
1 2 3 4 5 6 7 8 9
- C.
3 2 1 6 5 4 9 8 7
- D.
9 8 7 6 5 4 3 2 1
第 5 题 下⾯C++代码执⾏后输出是( )。
int arr[3] = {1,2,3}; int *p = NULL; p = arr; p++; cout << *p << endl;
- A. 1,2,3
- B. 1
- C. 2
- D. 3
第 6 题 如果变量x的地址是0x6ffe14,下⾯C++代码执⾏以后输出的是( )。
int *p = NULL; int x = 2; p=&x; p++; cout << p << endl;
- A. 0x6ffe11
- B. 0x6ffe14
- C. 0x6ffe18
- D. 0x6ffe15
第 7 题 在C++中,执⾏下⾯代码后,输出的是( )。
int point(int *p) { return *p**p; } int main() { int a = 20; int *p=&a; *p = point(p); cout << *p << endl; }
- A. 400
- B. 200
- C. 20
- D. 100
第 8 题 下列C++语句执⾏以后结果是true的是( )。
- A. 3&&false
- B. 5&&2
- C. 101&&000
- D. 4&true
第 9 题 在如下的C++代码中实现了对字符串中出现的26个字母的个数统计,横线处应填⼊是( )。
string str = "HELLO CHEN A DAI"; int strlen = str.lenth(); char alpha[26] = {65}; int cnt[26] = {0}; for(int i = 1; i < 26; i++) { _________; } for(int i = 0; i < 26; i++) { cout << alpha[i] << " "; } cout << endl; for(int i = 0; i < 26; i++) { for(int j = 0; j < strlen; j++) { if(alpha[i] == str[j]) { cnt[i]++; } } } for(int i = 0; i < 26; i++) { cout << cnt[i] << " "; }
- A. alpha[i]=alpha[i-1]+1;
- B. alpha[i]=alpha[i]+1;
- C. alpha[i+1]=alpha[i]+1;
- D. alpha[i-1]=alpha[i]+1;
第 10 题 下⾯C++代码执⾏后⽣成的⽂件其字节数为( )。
ofstream fout; fout.open("1.txt"); for(int i = 1; i <= 10; i++) { if(i % 5 == 0) { int x = 6; fout << x; } else { char ch = 'A'; fout << ch; } }
- A. 10
- B. 16
- C. 40
- D. 24
第 11 题 下列C++代码输⼊1,2,3,4 ,执⾏后,将输出的是( )。
string str = ""; cin >> str; int strlen = str.length(); for(int i = 0; i < strlen; i++) { if(str[i] <= '9' && str[i] >= '0') { cout << str[i]; } else { cout << "#"; } }
- A. 1#4#
- B. 1#3#
- C. 1#2#3#4#
- D. 1#2#3#4
第 12 题 以下C++代码⽤于实现每个整数对应的因数,如输⼊12,则输出1 2 3 4 6 12;如输⼊18,则输出1 2 3 6 9 18。横线处应填⼊代码是( )。
int n; cin >> n; for(int i = 1; i <= n; i++) { ___________ { cout << i << " "; } }
- A. if(n%i==0)
- B. if(n/i==0)
- C. if(n%i!=0)
- D. if(n/i!=0)
第 13 题 某公司新出了⼀款⽆⼈驾驶的⼩汽车,通过声控智能驾驶系统,乘客只要告诉汽车⽬的地,车⼦就能⾃动选择⼀条优化路线,告诉乘客后驶达那⾥。请问下⾯哪项不是驾驶系统完成选路所必须的。( )
- A. 麦克风
- B. 扬声器
- C. 油量表
- D. 传感器
第 14 题 现代计算机是指电⼦计算机,它所基于的是( )体系结构。
- A. 艾伦·图灵
- B. 冯·诺依曼
- C. 阿塔纳索夫
- D. 埃克特-莫克利
第 15 题 输入一个正整数N(N>=7),想找出它所有相邻的因数对,比如,输入12,因数对有(1,2)、(2,3)、(3,4)。下面哪段代码找不到所有的因数对?( )
- A. for(i=1;i<N;i++) if(!(N%i) && !(N%(i+1))) printf(“(%d,%d)\n”, i, i+1);
- B. for(i=2;i<N;i++) if(!(N%i) && !(N%(i+1))) printf(“(%d,%d)\n”, i, i+1);
- C. for(i=2;i<N/2;i++) if(!(N%(i-1)) && !(N%i)) printf(“(%d,%d)\n”, i-1, i);
- D. for(i=1;i<N/2;i++) if(!(N%i) && !(N%(i+1))) printf(“(%d,%d)\n”, i, i+1);
二、判断题(每题2分,共20分)
第 1 题 C++的内置函数sort()⽀持数组的局部排序。例如int a={10,9,8,7,6,5,4,3,2,1},可以⽤sort(a,a+5),排序成{6,7,8,9,10,5,4,3,2,1}。( )
第 2 题 ⽤递归法求n的阶乘,时间复杂度是O(n)。( )
第 3 题 [(1,2)*2]*3在C++中是合法的表达式。( )
第 4 题 在下⾯的C++代码中,将对1.txt⽂件写⼊hello。( )
ifstream filein; ofstream fileout; filein.open("1.txt"); fileout << "hello";
第 5 题 ⽂本⽂件1.txt第1⾏由01234共5个字符组成其间没有空格,当⽤C++代码正常打开⽂件成功并执⾏如下
代码以后,第1⾏长度为5( )ifstream filein; int buff; filein.open("1.txt"); filein >> buff; cout << buf << endl;
第 6 题 执⾏C++代码cout<<(5||2); 后将输出1。( )
第 7 题 在C++中,两个字符串相加的运算符为+相当于字符串的合并运算。下⾯C++代码执⾏后,将输出chenadai 。( )
string a = "chen"; string b = "a"; string c = "dai"; string name = a + b + c; cout << name << endl;
第 8 题 C++内置函数sort() 可以对整数、浮点数、字符数组进⾏从⼤到⼩,从⼩到⼤,局部排序。( )
第 9 题 ⼩杨最近在准备考GESP,他⽤的Dev C++来练习和运⾏程序,所以Dev C++也是⼀个⼩型操作系统。( )
第 10 题 任何⼀个while循环都可以转化为等价的for循环( )。
三、编程题(每题25分,共50分)
3.1 编程题 1
试题名称:小杨的字典
3.1.1 问题描述
在遥远的星球,有两个国家 A 国和 B 国,他们使用着不同的语言:A 语言和 B 语言。小杨是 B 国的翻译官,他的工作是将 A 语言的文章翻译成 B 语言的文章。
为了顺利完成工作,小杨制作了一本字典,里面记录了 ( N ) 个 A 语言单词对应的 B 语言单词,巧合的是,这些单词都由地球上的 26 个小写英文字母组成。
小杨希望你写一个程序,帮助他根据这本字典翻译一段 A 语言文章。这段文章由标点符号 !()-[]{}|;:'",./?<> 和一些 A 语言单词构成,每个单词之间必定由至少一个标点符号分割,你的程序需要把这段话中的所有 A 语言单词替换成它的 B 语言翻译。特别地,如果遇到不在字典中的单词,请使用大写 UNK 来替换它。
例如,小杨的字典中包含 2 个 A 语言单词 abc 和 d,它们的 B 语言翻译分别为 a 和 def,那么我们可以把 A 语言文章 abc.d.d.abc.abcd. 翻译成 B 语言文章 a.def.def.a.UNK. ,其中,单词 abcd 不在字典内,因此我们需要用 UNK 来替换它。
3.1.2 输入描述
第一行一个整数 ( N ),表示词典中的条目数。保证 ( N ≤ 100 )。
接下来 ( N ) 行,每行两个用单个空格隔开的字符串 ( A) 和 ( B),分别表示字典中的一个 A 语言单词以及它对应的 B 语言翻译。保证所有 ( A) 不重复;保证 ( A) 和 ( B) 的长度不超过 10。
最后一行一个字符串 ( S ),表示需要翻译的 A 语言文章。保证字符串 ( S ) 的长度不超过 1000,保证字符串 ( S ) 只包含小写字母以及标点符号 !()-[]{}|;:'",./?<> 。
3.1.3 输出描述
输出一行,表示翻译后的结果。
3.1.4 特别提醒
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
3.1.5 样例输入 1
2
abc a
d def
abc.d.d.abc.abcd.
3.1.6 样例输出 1
a.def.def.a.UNK.
3.1.7 样例输入 2
3
abc a
d def
abcd xxxx
abc,(d)d!-abc?abcd
3.1.8 样例输出 2
a,(def)def!-a?xxxx
3.1.9 样例输入 3
1
abcdefghij klmnopqrst
!()-[]{}\|;:'",./?<>abcdefghijklmnopqrstuvwxyz
3.1.10 样例输出 3
!()-[]{}\|;:'",./?<>UNK
3.2 编程题 2
试题名称:田忌赛马
3.2.1 问题描述
你要和田忌赛马。你们各自有 N 匹马,并且要进行N轮比赛,每轮比赛,你们都要各派出一匹马决出胜负。你的马匹的速度分别为u1,u2,…,uN,田忌的马匹的速度分别为v1,v2,…,vN。田忌会按顺序派出他的马匹,请问你要如何排兵布阵,才能赢得最多轮次的比赛?巧合的是,你和田忌的所有马匹的速度两两不同,因此不可能出现平局。
3.2.2 输入描述
第一行一个整数N。保证1 ≤ N ≤ 5 * (10^4)。
接下来一行N个用空格隔开的整数,依次为 u1,u2,…,uN,表示你的马匹们的速度。保证1 ≤ ui ≤2N。
接下来一行 N个用空格隔开的整数,依次为v1,v2,…,vN,表示田忌的马匹们的速度。保证1 ≤ vi ≤2N。
3.2.3 输出描述
输出一行,表示你最多能获胜几轮。
3.2.4 特别提醒
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
3.2.5 样例输入 1
3
1 3 5
2 4 6
3.2.6 样例输出 1
2
3.2.7 样例解释 1
第 1 轮,田忌派出速度为 2 的马匹,你可以派出速度为 3 的马匹迎战,本轮你获胜。
第 2 轮,田忌派出速度为 4 的马匹,你可以派出速度为 5 的马匹迎战,本轮你获胜。
第 3 轮,田忌派出速度为 6 的马匹,你没有更快的马匹,本轮田忌获胜。
如此,你可以赢得 2 轮比赛。
3.2.8 样例输入 2
5
10 3 5 8 7
4 6 1 2 9
3.2.9 样例输出 2
5