执行下面程序后,输出为( )。
01int f(int x = 2){ 02 return x * 3; 03} 04 05int main(){ 06 cout << f() << " " << f(4); 07}
B:6 12。f(int x=2) 默认参数为 2,f()=23=6,f(4)=43=12。
执行下面代码后,输出为( )。
01int main() { 02 int a = 5; 03 int* p = &a; 04 int** q = &p; 05 **q += 7; 06 cout << a << " " << *p; 07}
B:12 12。a=5, p=&a, q=&p(指向指针的指针);**q 即 **&p = *p = a,**q += 7 即 a=12;输出 a 和 *p 都是 12。
已知:
01int a[3][4] = { 02 {1,2,3,4}, 03 {5,6,7,8}, 04 {9,10,11,12} 05}; 06int (*p)[4] = a;
则表达式 *(*(p + 2) + 1) 的值为( )。
B:10。p 是 int()[4],p+2 跳 2 行(每行 4 个 int)= 32 字节;(p+2) 是 arr[2] 的首地址;(p+2)+1 是 arr[2][1] 地址;(*(p+2)+1) = arr[2][1] = 10。
执行下面程序后,输出为( )。
01void fun(int a, int &b, int *c){ 02 a += 1; 03 b += 2; 04 *c += 3; 05} 06 07int main(){ 08 int x = 1, y = 1, z = 1; 09 fun(x, y, &z); 10 cout << x << " " << y << " " << z; 11}
B:1 3 4。fun(a,b,c) 中 a 值传递不改,b 引用 +2,c 指针解引用 +3;x=1, y=3, z=4。
执行下面程序后输出为( )。
01int x = 3; 02void f(int& x){ 03 x += 2; 04} 05int main(){ 06 int x = 10; 07 f(x); 08 cout << x << " " << ::x; 09}
A:12 3。全局 x=3;main 中局部 x=10,f(&x) 引用+2 改局部 x=12;输出局部 x=12 和 ::x=3。
下列关于结构体初始化的写法,正确的是( )。
B:Point p = {1,2};。聚合初始化大括号语法;A 圆括号是函数调用语法(无对应构造函数),C new 应返回指针,D 尖括号语法错。
执行下面代码后输出为( )。
01struct S { int a; int b; }; 02 03void g(S s){ s.a += 10; } 04void h(S& s){ s.b += 10; } 05 06int main(){ 07 S s{1,2}; 08 g(s); 09 h(s); 10 cout << s.a << " " << s.b; 11}
B:1 12。g(S s) 值传递拷贝副本不改原对象;h(S& s) 引用参数 s.b+=10 改原对象;a=1 不变, b=2+10=12。
关于递推算法的描述,正确的是( )。
B:递推从已知初值出发,利用递推关系逐步推出后续结果。递推定义;A 错(自己调自己是递归),C 错(递推不只用于指数问题),D 错(递推不需回溯)。
执行 climb(6) 的返回值为( )。
01int climb(int n){ 02 if(n <= 2) return n; 03 int a = 1, b = 2, c = 0; 04 for(int i = 3; i <= n; i++){ 05 c = a + b; 06 a = b; 07 b = c; 08 } 09 return c; 10}
B:13。climb(6):a=1,b=2;i=3:c=3,a=2,b=3;i=4:c=5,a=3,b=5;i=5:c=8,a=5,b=8;i=6:c=13,a=8,b=13;返回 c=13。
某排序算法对如下数据排序(按 score 升序),则下面关于该排序算法稳定性的描述中,说法正确的是( )。
初始:(90,'A'), (90,'B'), (80,'C'), (90,'D')
排序后:(80,'C'), (90,'A'), (90,'B'), (90,'D')
B:稳定。排序后 (90,'A')、('B')、('D') 中 A 在 B 前、B 在 D 前,与原始顺序(A、B、D)相同,相对顺序保持,故稳定。
下面代码试图把数组按升序进行“插入排序”,横线处应填写( )。
01void ins(int a[], int n){ 02 for(int i = 1; i < n; i++){ 03 int key = a[i]; 04 int j = i-1; 05 while(j >= 0 && ____________){ 06 a[j+1] = a[j]; 07 j--; 08 } 09 a[j+1] = key; 10 } 11}
B:a[j] > key。插入排序升序:while 内若前面元素比 key 大就后移腾位给 key 让位。
下列代码段的时间复杂度为( )。
01int cnt=0; 02for(int i=0; i<n; i++){ 03 for(int j=0; j<n; j++){ 04 if( (i+j) % 3 == 0) cnt++; 05 } 06}
C:O(n²)。两重嵌套循环各 n 次,总时间 O(n²);内层 if 条件只是常数因子。
下面哪种方式不能实现将字符串 Welcome to 2026! 输出重定向到文件 log.txt( )。
B:ofstream 创建 outFile 但用 cout 输出——不能重定向。cout 默认到 stdout,与 ofstream 无关;其他 A/C/D 都能写入 log.txt。
执行下面程序,输出结果是( )。
01int divi(int a,int b){ 02 if(b==0) throw 0; 03 return a/b; 04} 05 06int main(){ 07 try{ 08 cout << divi(10,0); 09 }catch(const char* msg){ 10 cout << "A"; 11 }catch(int){ 12 cout << "B"; 13 } 14}
B:B。divi(10,0) 抛 int 0;catch(const char*) 不匹配,catch(int) 匹配输出 B。
下列函数实现排行榜中单个元素的位置调整(类似插入排序的相邻搬移)。当某玩家分数增加,需将其向前移动时,while 循环的条件应为( )。
01struct Player{ int score; }; 02void up(Player players[], int n, int idx){ 03 Player cur = players[idx]; 04 int i = idx; 05 while( ____________ ){ 06 players[i] = players[i-1]; 07 i--; 08 } 09 players[i] = cur; 10}
A:i > 0 && cur.score > players[i-1].score。up 函数将玩家分数增加后向前移动(排行榜升序:分数大者靠前),while 循环向前比较直到前一个分数不小于当前或到顶。
下面代码执行结束时,变量 a 的值变成 。
01void add10(int &x) { x += 10; } 02 03int main() { 04 int a = 5; 05 add10(a); 06}
正确。add10(int &x) 引用参数,函数内 x+=10 直接修改 main 中 a;a 由 5 变 15。
引用一旦绑定某个变量,就不能再绑定其他变量。( )
正确。引用必须在初始化时绑定某个变量,一旦绑定不可改变(不可重新指向其他变量)。
执行下面代码,输出结果为 5。
01int main() { 02 int a[2][3]; 03 cout << &a[1][2] - &a[0][1] << endl; 04 return 0; 05}
错。&a[1][2] 是 int*,&a[0][1] 也是 int*,同类型指针相减得元素个数差 = (1×3+2)-(0×3+1) = 5-1 = 4,不是 5;类型不一致或算法不同结果不同。
下面程序可以正常编译并输出 10。
01int calc(int x, int y = 10); 02int calc(int x) { return x * 2; } 03int calc(int x, int y) { return x * y; } 04 05int main() { 06 cout << calc(5); 07}
错。calc(int x, int y=10) 和 calc(int x) 重载,调用 calc(5) 时编译器无法确定使用哪个版本(默认参数 vs 单参重载),编译错误。
下面程序执行后输出 2010。
01int x = 10; 02void f() { int x = 20; cout << x; } 03 04int main() { 05 f(); 06 cout << x; 07}
正确。f() 输出局部 x=20;main 中 cout<<x 输出全局 x=10;串接为 2010。
在 C++ 中,如果声明了一个指针变量但没有显式初始化,该指针会自动被初始化为 nullptr。
错。C++ 指针变量声明时若不初始化,其值是不确定的(野指针),不会自动为 nullptr。
下面代码没有语法错误。
01struct GameCharacter { 02 string name; 03 int level; 04 float position_x; 05 float position_y; 06 07 struct Equipment { 08 string weapon; 09 int attack_bonus; 10 int defense_bonus; 11 } equipment; 12 13 struct Skill { 14 string name; 15 int damage; 16 } skills[8]; 17 int skill_count; 18};
正确。结构体可以嵌套定义其他结构体类型作为成员,语法完全正确。
下面程序能够把 Hello 写入 data.txt 文件中。
ofstream fout("data.txt");
cout << "Hello";
fout.close();
错。ofstream 创建文件 fout 但用 cout<<"Hello" 输出,cout 默认到屏幕,不写入 data.txt;应改 fout<<"Hello"。
由于选择排序和插入排序的时间复杂度均为 ,在任何实际场景下两者的性能表现几乎相同,可以互相替代。
错。两者虽然平均 O(n²),但选择排序交换次数少、插入排序对近有序数据接近 O(n),实际场景不可简单互换。
下面用递推方式计算斐波那契数列第 项的程序,时间复杂度是 。
01int fib(int n) { 02 if (n <= 1) return n; 03 int f0 = 0, f1 = 1, cur = 0; 04 for (int i = 2; i <= n; i++) { 05 cur = f0 + f1; 06 f0 = f1; 07 f1 = cur; 08 } 09 return cur; 10}
错。代码用循环递推(f0,f1 累加),时间复杂度 O(n),不是 O(2ⁿ)。