高级语言编写的程序需要经过以下( )操作,可以生成在计算机上运行的可执行代码。
D:编译。源文件经编译器翻译为机器指令并链接生成可执行文件;编辑/保存只产生文本文件,调试用于排查错误不生成可执行代码。
排序算法是稳定的(Stable Sorting),就是指排序算法可以保证,在待排序数据中有两个相等记录的关键字 R 和 S(R 出现在 S 之前),在排序后的列表中 R 也一定在 S 前。下面关于排序稳定性的描述,正确的是( )。
C:选择排序不稳定。选择排序交换的是当前未排序区最小元素与位置 i 的元素,二者不一定相邻,相对顺序可能改变;冒泡和插入排序只交换相邻元素,故稳定。
下列关于 C++ 语言中指针的叙述,不正确的是( )。
C:指针变量只能指向基本类型变量,不能指向指针变量——错误。C++ 允许指针嵌套,int *p 即指向 int 类型的指针,多级指针合法。
下列关于 C++ 语言中数组的叙述,不正确的是( )。
D:二维数组在内存中可以不是连续存放的——错误。C++ 二维数组按行连续存储,每行末尾紧接下一行首元素,整体地址连续。
下列关于 C++ 语言中函数的叙述,正确的是( )。
A:函数必须有名字。函数可无参(void)、无返回值(void)、可先声明后调用(C++ 允许前向声明);B/C/D 都错。
下列关于 C++ 语言中变量的叙述,正确的是( )。
D:两个变量的变量名可以相同,但它们的作用域必须是不同的。同名变量在不同作用域(如局部与全局、内层与外层)互不干扰;A 错(变量有作用域生命周期),B/C 错。
一个二维数组定义为 double array[3][10];,则这个二维数组占用内存的大小为( )。
D:240 字节。double 占 8 字节,3×10=30 个 double 元素,30×8=240 字节。
一个变量定义为 int *p = nullptr;,则下列说法正确的是( )。
B:指针变量指向的类型为 int。int p 声明 p 是 int 类型,指向 int 型变量;A 错(p 本身类型是 int*),C 错(nullptr 初始化后地址明确为 0),D 错(编译通过,运行解引用才崩)。
一个二维数组定义为 int array[5][3];,则 array[1][2] 和 array[2][1] 在内存中的位置相差多少字节?( )
C:8 字节。int array[5][3] 按行优先连续存储,array[1][2] 偏移 1×3+2=5,array[2][1] 偏移 2×3+1=7,差 2 个 int 即 2×4=8 字节。
如果 a 为 int 类型的变量,且 a 的值为 ,则执行 a &= 3; 之后,a 的值会是( )。
C:2。a=6 二进制 110,3 二进制 011,按位与 110&011=010=2。&= 是按位与复合赋值,等价 a=a&3。
一个数组定义为 int a[5] = {1, 2, 3, 4, 5};,一个指针定义为 int * p = &a[2];,则执行 a[1] = *p; 后,数组 a 中的值会变为( )。
A:{1,3,3,4,5}。p=&a[2] 使 p 指向 a[2]=3,执行 a[1]=*p 等价 a[1]=a[2]=3,数组变为 1,3,3,4,5。
以下哪个函数声明在调用时可以传递二维数组的名字作为参数?( )
A:void BubbleSort(int a[][4])。二维数组名作函数参数时第一维可省略(编译器按指针处理),但第二维(列数)必须指定。
在下列代码的横线处填写( ),可以使得输出是"20 10"。
01#include <iostream> 02using namespace std; 03void xchg(____________) { // 在此处填入代码 04 int t = *x; 05 *x = *y; 06 *y = t; 07} 08int main() { 09 int a = 10, b = 20; 10 xchg(&a, &b); 11 cout << a << " " << b << endl; 12 return 0; 13}
B:int *x, int *y。xchg 函数体内用 *x、*y 解引用交换,调用 xchg(&a,&b) 传地址,所以形参必须是指针类型;A/C 传值不交换,D 引用类型 & 写在了类型位置不匹配。
执行以下 C++ 语言程序后,输出结果是( )。
01#include <iostream> 02using namespace std; 03int main() { 04 int array[3][3]; 05 for (int i = 0; i < 3; i++) 06 for (int j = 0; j < 3; j++) 07 array[i][j] = i * 10 + j; 08 int sum; 09 for (int i = 0; i < 3; i++) 10 sum += array[i][i]; 11 cout << sum << endl; 12 return 0; 13}
D:无法确定。变量 sum 未初始化,sum += array[i][i] 会从垃圾初值开始累加,结果不可预测。
在下列代码的横线处填写( ),完成对有 n 个 int 类型元素的数组 array 由小到大排序。
01void SelectionSort(int array[], int n) { 02 int i, j, min, temp; 03 for (i = 0; i < n - 1; i++) { 04 min = i; 05 for (j = i + 1; j < n; j++) 06 if (____________) // 在此处填入代码 07 min = j; 08 temp = array[min]; 09 array[min] = array[i]; 10 array[i] = temp; 11 } 12}
A:array[min] > array[j]。选择排序每趟在未排序区找最小元素下标,若 array[j] 比当前 min 还小就更新 min=j。
域名是由一串用点分隔的名字来标识互联网上一个计算机或计算机组的名称,CCF 编程能力等级认证官方网站的域名是 gesp.ccf.org.cn,其中顶级域名是 gesp。
错。域名从右向左分级,gesp.ccf.org.cn 中顶级域名(最右一级)是 cn,gesp 是三级域名左侧的主机标识,并非顶级域名。
数列 是以意大利数学家列昂纳多·斐波那契命名的数列,从第三个数开始,每个数是前面两项之和。如果计算该数列的第 项(其中 )fib(n),我们采用如下方法:① 令 fib(1)=fib(2)=1 ② 用循环 for i=3 to n 分别计算 f(i) ③ 输出 fib(n)。这体现了递推的编程思想。
正确。f(1)=f(2)=1 为初始条件,循环中 f(i)=f(i-1)+f(i-2) 用前面项推后面项,正是递推(迭代递推)思想。
在 C++ 语言中,函数的参数默认以引用传递方式进行传递。
错。函数参数默认按值传递(拷贝实参到形参),修改形参不影响实参;引用传递必须显式写 & 参数类型。
在 C++ 语言中,可以定义四维数组,但在解决实际问题时不可能用到,因为世界是三维的。
错。C++ 允许任意维度数组(如四维可表示时间×三维空间),是否使用取决于问题需要,与现实维度无关。
在 C++ 语言中,一个函数没有被调用时,它的参数不占用内存。
正确。形参仅在函数被调用时分配存储(通常在栈帧中),未调用时编译器不会为其分配内存。
在 C++ 语言中,如果一个函数可能抛出异常,那么一定要在 try 子句里调用这个函数。
错。可能抛异常的函数不一定要放在 try 块内,异常可沿调用栈向上传播,由更外层的 try-catch 捕获或最终导致程序终止。
如果希望记录 个最长为 字节的字符串,可以将字符串数组定义为 char s[100][10];。
错。char s[100][10] 每行最多存 9 个字符 + '\0' = 10 字节,10 个 99 字节字符串应定义为 char s[10][100](行=字符串数,列=每字符串最大长度+1)。
字符常量 '0' 和 '\0' 是等价的。
错。'0' 是字符常量(ASCII 48),'\0' 是空字符(ASCII 0),数值与含义均不同,不可等价。
>= 和 >>= 都是 C++ 语言的运算符。
正确。>= 是关系比较运算符,>>= 是复合赋值(a>>=b 等价 a=a>>b),二者都是 C++ 合法运算符。
由于文件重定向操作,程序员在使用 C++ 语言编写程序时无法确定通过 cout 输出的内容是否会被输出到屏幕上。
正确。cout 默认指向 stdout,重定向(> file 或 < file)后输出会写入文件,程序员运行时不查看重定向状态就无法确定输出目的地。