1、2023年 预赛 c/c++ 高职真题(2023年4月7日) 考生须知: l 考试时间为4小时。 l 参赛选手切勿修改机器自动生成的【考生文献夹】的名称或删除任何自动生成的文献或目录,否则会干扰考试系统对的采集您的解答。 l 参赛选手切勿在提交的代码中书写“姓名”、“考号”,“院校名”等身份信息或其它与竞赛题目无关的内容,否则成绩无效。 l 试题包含三种类型:“结果填空”、“代码填空”与“程序设计”,总计100分。 结果填空:2+3+5+6 = 16分 代码填空:8+6+10 = 24 分 程序设计:15+17+28 = 60分 结果填空规定参赛选手根据题目描述直接填写结果。
2、求解方式不限。不规定源代码。 把答案存入【考生文献夹】下相应题号的“解答.txt”中即可。 代码填空题规定参赛选手在弄清给定代码工作原理的基础上填写缺失的部分,使得程序逻辑对的、完整。所填写的代码不超过一条语句(即中间不能出现分号)。 把填空的答案(仅填空处的答案,不涉及题面已存在的代码)存入【考生文献夹】下相应题号的“解答.txt”中即可。 编程题规定选手设计的程序对于给定的输入能给出对的的输出结果。考生的程序只有能运营出对的结果的时候才有机会得分。注意:在评卷时使用的输入数据与试卷中给出的实例数据也许是不同的。选手的程序必须是通用的,不能只对试卷中给定的数据有效。对每个编程题目,规
3、定考生把所有函数写在一个文献中。调试好后,存入与【考生文献夹】下相应题号的“解答.txt”中即可。相关的工程文献不要拷入。 对于编程题目,规定选手给出的解答完全符合ANSI C++标准,不能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。代码中允许使用STL类库,但不能使用MFC或ATL等非ANSI c++标准的类库。例如,不能使用CString类型(属于MFC类库)。 1. 结果填空 (满分2分) 导致高房价的因素有许多,比如土地出让价格。既然地价高,土地的面积必须仔细计算。遗憾的是,有些地块的形状不规则,比如是如图中所示的五边形。 一般需要把它划分为多
4、个三角形来计算。已知三边求三角形的面积需要用海伦定理,参见图。 各条边长数据如下: AB = 52.1 BC = 57.2 CD = 43.5 DE = 51.9 EA = 33.4 EB = 68.2 EC = 71.9 根据这些数据求五边形地块的面积。四舍五入到小数后两位。只写结果,不要源代码!把答案存入【考生文献夹】下相应题号的“解答.txt”中即可。直接写在题面中不能得分。假如有多个答案,每个答案占一行。 2. 结果填空 (满分3分) 大数学家欧拉在集市上碰到了本村的两个农妇,每人跨着个空篮子。她
5、们和欧拉打招呼说两人刚刚卖完了所有的鸡蛋。欧拉随便问:“卖了多少鸡蛋呢?”不料一个说:“我们两人自己卖自己的,一共卖了150个鸡蛋,虽然我们卖的鸡蛋有多有少,但刚好得了同样的钱数。你猜猜看!”欧拉猜不出。另一个补充道:“假如我按她那样的价格卖,可以得到32元;假如她按我的价格卖,可以得到24.5元”。欧拉想了想,说出了对的答案。我们不是数学家,懒得列出公式来分析。但计算机可以“暴力破解”,就是把所有也许情况都实验一遍,撞上为止!请写出每人鸡蛋的数目(顺序不限),用逗号隔开。把答案存入【考生文献夹】下相应题号的“解答.txt”中即可。直接写在题面中不能得分。假如有多个答案,每个答案占一行。 3
6、 结果填空 (满分5分) 福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:ABCDE * ? = EDCBA。他对华生说:“ABCDE应当代表不同的数字,问号也代表某个数字!” 华生:“我猜也是!” 于是,两人沉默了好久,还是没有算出合适的结果来。请你运用计算机的优势,找到破解的答案。把 ABCDE 所代表的数字写出来。 把答案存入【考生文献夹】下相应题号的“解答.txt”中即可。直接写在题面中不能得分。假如有多个答案,每个答案占一行。 4. 结果填空 (满分6分) 小明刚上小学,学会了第一个扑克牌“魔术”,到处给人表演。魔术的内容是这样的:他手里握着一叠扑克牌:A,2,....J
7、Q,K 一共13张。他先自己精心设计它们的顺序,然后正面朝下拿着,开始表演。只见他先从最下面拿一张放到最上面,再从最下面拿一张翻开放桌子上,是A;然后再从最下面拿一张放到最上面,再从最下面拿一张翻开放桌子上,是2;......如此循环直到手中只有一张牌,翻开放桌子上,刚好是K。这时,桌上牌的顺序是:A,2,3,4,5,6,7,8,9,10,J,Q,K 请你计算一下,小明最开始的时候手里牌的顺序是如何的。把结果写出来,逗号分割,小明“魔术”开始时,最下面的那张牌输出为第一个数据。考场不提供扑克牌,你只能用计算机模拟了,撕碎草稿纸模拟扑克属于作弊行为!此外,你有没有把录像倒着放过?很有趣的!回
8、去试试! 把答案存入【考生文献夹】下相应题号的“解答.txt”中即可。直接写在题面中不能得分。假如有多个答案,每个答案占一行。 5. 代码填空 (满分8分) 在我国古代和近代,一直采用干支法纪年。它采用10天干和12地支配合,一个循环周期为60年。10天干是:甲,乙,丙,丁,戊,己,庚,辛,壬,癸。 12地支是:子,丑,寅,卯,辰,巳,午,未,申,酉,戌,亥。 假如某年是甲子,下一年就是乙丑,再下是丙寅,......癸酉,甲戌,乙亥,丙子,.... 总之天干、地址都是循环使用,两两配对。今年(2023)是壬辰年,192023辛亥革命 下面的代码根据公历年份输出相应的干支法纪年。已知最
9、近的甲子年是1984年。 void f(int year) { char* x[] = {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"}; char* y[] = {"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"}; int n = year - 1984; while(n<0) n += 60; printf("%s%s\n", x[_______], y[_______]); } int main(int argc, char* argv[]) { f(1911); f
10、1970); f(2023); return 0; } 请分析代码逻辑,并推测划线处的代码。 注意:只写划线处应当填的内容,划线前后的内容不要誊录。仔细阅读和调试题目提供的源代码,根据规定填写缺失的代码部分。填空内容不能超过一条语句(即中间不会具有分号)。 6. 代码填空 (满分6分) 假如让你设计个程序,用什么变量保存身份证号码呢?长整数可以吗?不可以!由于有人的身份证最后一位是"X"。事实上,除了最后一位的X,不会出现其它字母! 身份证号码18位 = 17位 + 校验码 校验码的计算过程: 例如:身份证前17位 = ABCDEFGHIJKLMNOPQ A~Q 每
11、位数字乘以权值求和(每位数字和它相应的“权”相乘后累加) 17位相应的权值分别是:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 求出的总和再对11求模,然后按下表映射: 余数 0 1 2 3 4 5 6 7 8 9 10 校验码: 1 0 X 9 8 7 6 5 4 3 2 下面的代码实现了校验过程,输入串为身份证前17位,打印出校验码。 char verifyCode(char* s) { static int weight[] = {7,9,10,
12、5,8,4,2,1,6,3,7,9,10,5,8,4,2}; static char map[] = {'1','0','X','9','8','7','6','5','4','3','2'}; int sum = 0; for(int i=0; i<17; i++) { sum += (______________) * weight[i]; // 填空 } return map[____________]; // 填空 } 请分析代码逻辑,并推测划线处的代码。注意:只写划线处应当填的内容,划线前后的内容不要誊录。仔细阅读和调试题目提供的源代码,根据规定
13、填写缺失的代码部分。 注意:请把填空的答案(仅填空处的答案,不涉及题面)存入【考生文献夹】下相应题号的“解答.txt”中即可。直接写在题面中不能得分。 填空内容不能超过一条语句(即中间不会具有分号)。 7. 代码填空 (满分10分) 对一个方阵转置,就是把本来的行号变列号,本来的列号变行号。例如,如下的方阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 转置后变为: 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 但,假如是对该方阵顺时针旋转(不是
14、转置),却是如下结果:
13 9 5 1
14 10 6 2
15 11 7 3
16 12 8 4
下面的代码实现的功能就是要把一个方阵顺时针旋转。
void rotate(int* x, int rank)
{
int* y = (int*)malloc(___________________); // 填空
for(int i=0; i 15、
{
x[i] = y[i];
}
free(y);
}
int main(int argc, char* argv[])
{
int x[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
int rank = 4;
rotate(&x[0][0], rank);
for(int i=0; i 16、 }
return 0;
}
请分析代码逻辑,并推测划线处的代码。注意:只写划线处应当填的内容,划线前后的内容不要誊录。仔细阅读和调试题目提供的源代码,根据规定填写缺失的代码部分。
注意:填空内容不能超过一条语句(即中间不会具有分号)。
8. 程序设计(满分15分)
30年的改革开放,给中国带来了翻天覆地的变化。2023全年中国手机产量约为11.72亿部。手机已经成为百姓的基本日用品!给手机选个好听又好记的号码也许是许多人的心愿。但号源有限,只能辅以有偿选号的方法了。这个程序的目的就是:根据给定的手机尾号(4位),按照一定的规则来打分。其规则如下:
1. 假如出现连号,不管升序 17、还是降序,都加5分。例如:5678,4321都满足加分标准。
2. 前三个数字相同,或后三个数字相同,都加3分。例如:4888,6665,7777都满足加分的标准。注意:7777由于满足这条标准两次,所以这条规则给它加了6分。
3. 符合AABB或者ABAB模式的加1分。例如:2255,3939,7777都符合这个模式,所以都被加分。注意:7777由于满足这条标准两次,所以这条标准给它加了2分。
4. 具有:6,8,9中任何一个数字,每出现一次加1分。例如4326,6875,9918都符合加分标准。其中,6875被加2分;9918被加3分。
尾号最终得分就是每条标准的加分总和!
规定 18、程序从标准输入接受数据,在标准输出上输出结果。输入格式为:第一行是一个整数n(<100),表达下边有多少输入行,接下来是n行4位一组的数据,就是等待计算加分的手机尾号。输出格式为:n行整数。
例如,输入:
14
3045
0211
2345
6543
7777
8888
7878
7788
6688
2424
2244
9918
6789
8866
则输出:
0
0
5
6
8
12
3
3
5
1
1
3
8
5
注意:请仔细调试!您的程序只有能运营出对的结果的时候才有机会得分!在评卷时使用的输入数据与试卷中给出的实例数据也许是 19、不同的。请把所有函数写在同一个文献中,调试好后,存入与【考生文献夹】下相应题号的“解答.txt”中即可。相关的工程文献不要拷入。源代码中不能能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。允许使用STL类库,但不能使用MFC或ATL等非ANSI c++标准的类库。例如,不能使用CString类型(属于MFC类库)。。
9. 程序设计(满分17分)
古罗马帝国开创了辉煌的人类文明,但他们的数字表达法的确有些繁琐,特别在表达大数的时候,现在看起来简直不能忍受,所以在现代很少使用了。之所以这样,不是由于发明表达法的人的智力的问题,而是由于一个宗教的因素,当时的宗教严 20、禁在数字中出现0的概念!罗马数字的表达重要依赖以下几个基本符号:
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
这里,我们只介绍一下1000以内的数字的表达法。单个符号反复多少次,就表达多少倍。最多反复3次。比如:CCC表达300 XX表达20,但150并不用LLL表达,这个规则仅合用于I X C M。假如相邻级别的大单位在右,小单位在左,表达大单位中扣除小单位。比如:IX表达9 IV表达4 XL表达40 更多的示例参见下表,你找到规律了吗?
I,1
II,2
III 21、3
IV,4
V,5
VI,6
VII,7
VIII,8
IX,9
X,10
XI,11
XII,12
XIII,13
XIV,14
XV,15
XVI,16
XVII,17
XVIII,18
XIX,19
XX,20
XXI,21
XXII,22
XXIX,29
XXX,30
XXXIV,34
XXXV,35
XXXIX,39
XL,40
L,50
LI,51
LV,55
LX,60
LXV,65
LXXX,80
XC,90
XCIII,93
XCV,95
XCVIII,98
XCIX,99
C,100
CC,2 22、00
CCC,300
CD,400
D,500
DC,600
DCC,700
DCCC,800
CM,900
CMXCIX,999
本题目的规定是:请编写程序,由用户输入若干个罗马数字串,程序输出相应的十进制表达。输入格式是:第一行是整数n,表达接下来有n个罗马数字(n<100)。以后每行一个罗马数字。罗马数字大小不超过999。
规定程序输出n行,就是罗马数字相应的十进制数据。例如,用户输入:
3
LXXX
XCIII
DCCII
则程序应当输出:
80
93
702
注意:请仔细调试!您的程序只有能运营出对的结果的时候才有机会得分!在评卷时使用的输入数据 23、与试卷中给出的实例数据也许是不同的。请把所有函数写在同一个文献中,调试好后,存入与【考生文献夹】下相应题号的“解答.txt”中即可。相关的工程文献不要拷入。源代码中不能能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。允许使用STL类库,但不能使用MFC或ATL等非ANSI c++标准的类库。例如,不能使用CString类型(属于MFC类库)。
10. 程序设计(满分28分)
2x3=6个方格中放入ABCDE五个字母,右下角的那个格空着。如图所示。
和空格子相邻的格子中的字母可以移动到空格中,比如,图中的C和E就可以移动,移动后的局面分别是:
A B
24、
D E C
A B C
D E
为了表达方便,我们把6个格子中字母配置用一个串表达出来,比如上边的两种局面分别表达为:
AB*DEC
ABCD*E
题目的规定是:请编写程序,由用户输入若干表达局面的串,程序通过计算,输出是否能通过对初始状态通过若干次移动到达该状态。可以实现输出1,否则输出0。初始状态为:ABCDE*。
用户输入的格式是:先是一个整数n,表达接下来有n行状态。程序输出也应当是n行1或0。例如,用户输入:
3
ABCDE*
AB*DEC
CAED*B
则程序应当输出:
1
1
0
注意:请仔细调试!您的程序只有能运营出对的结果的时候才有机会得分!在评卷时使用的输入数据与试卷中给出的实例数据也许是不同的。请把所有函数写在同一个文献中,调试好后,存入与【考生文献夹】下相应题号的“解答.txt”中即可。相关的工程文献不要拷入。源代码中不能能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。允许使用STL类库,但不能使用MFC或ATL等非ANSI c++标准的类库。例如,不能使用CString类型(属于MFC类库)。






