12月9日(周六) 上午 9.30-11.30 考试,需 9.20 进入考场,座位号见准考证。
准考证于 12月4日17.00—9日08.00 可打印。
需要带:准考证、身份证、纯白草稿纸、中性笔,可都放在一个半透明/透明考试袋中。
12月6日00.00—8日24.00这三天可在官网进行模拟考试。
编程题可输入一行输出一行,不需要额外建数组保存结果!
15+10,25题。每题2分,共50分!
选择题判断题大多都是在知识点的基础上改编的,以下是正确语术,需朗读熟知:
6.1、 高级语言编写的程序需要经过以下( D )操作,可以生成在计算机上运行的可执行代码。A. 编辑B. 保存C. 调试D. 编译9.1 、 ⼈ 们所使用的手机上安装的 App 通常指的是( B )。A. ⼀ 款操作系统B. ⼀ 款应用软件C. ⼀ 种通话设备D. 以上都不对
6.3、下列关于 C++ 语言中指针的叙述,不正确的是( C )。A. 指针变量中存储的是内存地址。B. 定义指针变量时必须指定其指向的类型。C. 指针变量只能指向基本类型变量,不能指向指针变量。D. 指针变量指向的内存地址不一定能够合法访问。6.8、 一个变量定义为 int *p = nullptr; ,则下列说法正确的是( B )。A. 该指针变量的类型为 int 。B. 该指针变量指向的类型为 int 。C. 该指针变量指向的内存地址是随机的。D. 访问该指针变量指向的内存会出现编译错误。6.11、一 个数组定义为 int a[5] = {1, 2, 3, 4, 5};, 一个指针定义为 int * p = &a[2]; ,则执行 a[1] = *p; 后,数组 a 中的值会变为( A )。A. {1, 3, 3, 4, 5}B. {2, 2, 3, 4, 5}C. {1, 2, 2, 4, 5}D. {1, 2, 3, 4, 5}9.4 、下列关于 C++ 语 ⾔ 中指针的叙述 ,不正确的是( D )。A. 可以定义指向 int 类型的指针。B. 可以定义指向 ⾃ 定义结构体类型的指针。C. ⾃ 定义结构体类型可以包含指针类型的元素。D. 不能定义指向 void 类型的指针 ,那没有意义。9.9 、如果 n 为 int 类型的变量, ⼀ 个指针变量定义为 int *p=&n; , 则下列说法正确的是( B )。A. 指针变量 p 的值与变量 n 是相同B. 指针变量 p 的值与变量 n 的地址是相同的。C. 指针变量 p 指向的值为 'n' 。D. 指针变量 p 指向的值与变量 n 的地址是相同的。
6.4、 下列关于 C++ 语言中数组的叙述,不正确的是( D )。A. 一维数组在内存中一定是连续存放的。B. 二维数组是一维数组的一维数组。C. 二维数组中的每个一维数组在内存中都是连续存放的。D. 二维数组在内存中可以不是连续存放的。6.7、 一个二维数组定义为 double array[3][10]; ,则这个二维数组占用内存的大小为( D )。A. 30B. 60C. 120D. 2409.5 、下列关于 C++ 语 ⾔ 中数组的叙述 ,不正确的是( D )。A. 一维数组可以用来表示数列。B. 二维数组可以用来表示矩阵。C. 三维数组可以用来表示空间中物体的形状。D. 世界是三维的 ,所以定义四维数组没有意义。
6.5、 下列关于 C++ 语言中函数的叙述,正确的是( A )。A. 函数必须有名字。B. 函数必须有参数。C. 函数必须有返回值。D. 函数定义必须写在函数调用前。9.6 、下列关于 C++ 语 ⾔ 中函数的叙述 ,正确的是( B )。A. 函数调用前必须定义。B. 函数调用时必须提供足够的实际参数。C. 函数定义前必须声明。D. 函数声明只能写在函数调用前。9.7 、下列关于 C++ 语 ⾔ 中函数的叙述 ,不正确的是( A )。A. 两个函数的声明可以相同。B. 两个函数的局部变量可以重名。C. 两个函数的参数可以重名。D. 两个函数可以重名。
6.12、 以下哪个函数声明在调用时可以传递二维数组的名字作为参数?( A )A. void BubbleSort(int a[ ][4]);B. void BubbleSort(int a[3][ ]);C. void BubbleSort(int a[ ][ ]);D. void BubbleSort(int ** a);6.13、在下列代码的横线处填写( B ),可以使得输出是 “20 10” 。A. int x, int yB. int * x, int * yC. int a, int bD. int & a, int & b9.12 、 ⼀ 个数组定义为 int a[5] = {1, 2, 3, 4, 5}; , ⼀ 个指针定义为 int * p = &a[2]; ,则执 ⾏ *p = a[1]; 后 ,数组 a 中的值会变为( A )。A. {1, 2, 2, 4, 5}B. {1, 3, 3, 4, 5}C. {1, 2, 3, 3, 5}D. {1, 2, 4, 4, 5}
6.2、 排序算法是稳定的( Stable Sorting ),就是指排序算法可以保证,在待排序数据中有两个相等记录的关键字 R 和 S ( R 出现在 S 之前),在排序后的列表中 R 也一定在 S 前。下面关于排序稳定性的描述,正确的是( C )。
位运算符作用于位,假设如果 A = 60,且 B = 13。转二进制后:
A=0011 1100 B=0000 1101
~A=1100 0011 ~B=11110010
A&B=0000 1100 A|B=0011 1101
A^B=0011 0001
6.10、 如果 a 为 int 类型的变量,且 a 的值为 6 ,则执行 a &= 3; 之后,a 的值会是( C )。A. 3B. 9C. 2D. 7解析:a = 6&30000 0110 按位与0000 0011 后的结果为:0000 0010 = 29.11 、如果 a 为 int 类型的变量,且 a 的值为 6 ,则执 ⾏ a = ~a; 之后, a 的值会是( C )。A. -6B. 6C. -7D. 7解析:二进制最前面的一位:0为正,1为负a = ~60000 0110 按位取反后的结果为1111 1001 ,最前面的11代表 -64,后面 11 1001 的值为 57,所以结果为:(-64)+ 57 = -7
需要细心,最好在草稿纸上记录每轮循环后变量的变化。
13 、下列关于 C++ 语言中异常处理的叙述,正确的是( A )。A. ⼀ 个 try ⼦ 句可以有多个 catch ⼦ 句与之对应。B. 如果 try ⼦ 句在执 ⾏ 时发 ⽣ 异常 ,就 ⼀ 定会进 ⼊ 某 ⼀ 个 catch ⼦ 句执 ⾏ 。C. 如果 try ⼦ 句中没有可能发 ⽣ 异常的语句 ,会产 ⽣ 编译错误。D. catch ⼦ 句处理异常后 ,会重新执 ⾏ 与之对应的 try ⼦ 句。
共两题,每题25题。共50分!
1、读懂题意
2、结合输入输出想好需要几个功能,需要哪些变量,写在草稿上,确定框架。
注:定义变量时大多初始值为0,乘法运算的初始为1。
可输入一行输出一行,不需要额外建数组保存结果。
6.一、 幸运数【问题描述】小明发明了一种 “ 幸运数 ” 。一个正整数,其偶数位不变(个位为第 1 位,十位为第 2 位,以此类推),奇数位做如下变换:将数字乘以 7 ,如果不大于 9 则作为变换结果,否则把结果的各位数相加,如果结果不大于 9 则作为变换结果,否则(结果仍大于 9 )继续把各位数相加,直到结果不大于 9 ,作为变换结果。变换结束后,把变换结果的各位数相加,如果得到的和是 8 的倍数,则称一开始的正整数为幸运数。例如, 16347 :第 1 位为 7 ,乘以 7 结果为 49 ,大于 9 ,各位数相加为 13, 仍大于 9 ,继续各位数相加,最后结果为 4 ;第 3 位为 3 ,变换结果为 3 ;第 5 位为 1 ,变换结果为 7 。最后变化结果为 76344 ,对于结果 76344 其各位数之和为 24 ,是 8 的倍数。因此 16347 是幸运数。【输入描述】输入第一行为正整数 ? ,表示有 ? 个待判断的正整数。约定 1 ≤ ? ≤ 20 。从第 2 行开始的 ? 行,每行一个正整数,为待判断的正整数。约定这些正整数小于10 12 。【输出描述】输出 ? 行,对应 ? 个正整数是否为幸运数,如是则输出 'T' ,否则输出 'F' 。提示:不需要等到所有输入结束在依次输出,可以输入一个数就判断一个数并输出,再输入下一个数。【样例输入 1 】21634776344【样例输出 1】TF解析:【考纲知识点】模拟法 ( 三级 ) ,函数的定义与调用(四级)【题目大意】对正整数的奇数位进行乘以 7 ,进行若干次数位求和小于等于 9 之后,再与偶数位求和,判断结果是否能被 8 整除。【解题思路】1. 首先读入所有待判断的正整数,并依次进行判断,注意使用 long long 类型。2. 接着通过将一个数不停整除 10 来得到它的每一位。3. 对其中的奇数位按照题目的要求进行变换,偶数位则不变。奇数位的变换可以按题目文字循环处理,也可以找到等价的更简洁的表达式。4. 累加每一位并判断总和是否能被 8 整除。注意在解题过程中合理设计和调用函数,可以使得思路更清晰。#include
using namespace std; int number(char a){ if(a<='9') return (a-'0'); return (a-'A'+10); } long long F(int k, char str[]){ int l=strlen(str); long long R=0, r=1; for(int i=l-1; i>=0; i--){ R+=r*number(str[i]); r*=k; } return R; } int main(){ int n=0; cin>>n; for(int i=0; i >k>>str; cout< 9.一、 进制转换
问题描述N 进制数指的是逢 N 进 ⼀ 的计数制。例如, ⼈ 们日常 ⽣ 活中 ⼤ 多使用 ⼗ 进制计数,而计算机底层则⼀ 般使用二进制。除此之外, ⼋ 进制和 ⼗ 六进制在 ⼀ 些场合也是常⽤ 的计数制( ⼗ 六进制中, ⼀ 般使用字母A 至F表 ⽰⼗⾄⼗ 五;本题中,⼗⼀进制到 ⼗ 五进制也是类似的)。在本题中,我们将给出 N 个不同进制的数。你需要分别把它们转换成 ⼗ 进制数。提示对于任意 ⼀ 个 L 位 K 进制数,假设其最右边的数位为第 0 位,最左边的数位为第 L - 1 位,我们只需要将其第 i 位的数码乘以权值 K i ,再将每位的结果相加,即可得到原K 进制数对应的 ⼗ 进制数。下 ⾯ 是两个例 ⼦ :1. ⼋ 进制数 1362 对应的 ⼗ 进制数为 1×8^ 3 + 3×8^ 2 + 6×8^ 1 + 2×8^ 0 = 754 ;2. ⼗ 六进制数 3F0 对应的 ⼗ 进制数为 3×16^ 2 + 15×16^ 1 + 0×16^ 0 = 1008 。输入描述输 ⼊ 的第 ⼀⾏ 为 ⼀ 个 ⼗ 进制表示的整数 N 。接下来 N ⾏ ,每 ⾏⼀ 个整数 K ,随后是⼀ 个空格,紧接着是 ⼀ 个 K 进制数,表示需要转换的数。保证所有 K 进制数均由数字和⼤ 写字母组成,且不以 0 开头 。保证 K 进制数合法。保证N ≤ 1000 ;保证 2 ≤ K ≤ 16 。保证所有K 进制数的位数不超过 9 。输出描述输出 N 行,每 ⼀ 个十进制数,表 ⽰ 对应 K 进制数的十进制数值。样例输入128 136216 3F0样例输出17541008解析:【题目大意】1.有 n 个 k 进制的整数,将它们分别转换成对应的十进制。【考纲知识点】1.基本运算、输入输出语句、循环、进制转换的知识。【解题思路】1.按题目要求定义好需要的变量,并实现输入;2.输入 n 行,每行 2 个整数,分别表示进制和要转换的数字;3.按求十进制方法:按权展开式。#include
using namespace std; int number(char a){ if(a<='9') return (a-'0'); return (a-'A'+10); } long long F(int k, char str[]){ int l=strlen(str); long long R=0, r=1; for(int i=l-1; i>=0; i--){ R+=r*number(str[i]); r*=k; } return R; } int main(){ int n=0; cin>>n; for(int i=0; i >k>>str; cout<