若函数声明为 int f(int &x){ x+=3; return x; },则对声明的变量 int a=3,下面哪个调用能够改变 a 的值( )。
C:f(a)。函数形参是 int& 引用,调用时直接传变量 a 即可让形参成为 a 的别名;A 传 &a 是 int* 类型不匹配,B *a 对 int 变量解引用非法,D a-3 是表达式不是左值。
下面 C++ 代码执行后,输出的是( )。
01int main() 02{ 03 int x[]={2, 0, 2, 4}; 04 char geSP[]="Grade Examination of SP"; 05 06 cout << geSP[sizeof(x)] << endl; 07 08 cout << endl; 09 return 0; 10}
C:n。int x[]={2,0,2,4} 占 4×4=16 字节,sizeof(x)=16。geSP[16] 是字符串「Grade Examination of SP」索引 16 处的字符,从 G(0) 开始数第 17 个字符是 n。
下面 C++ 代码执行后输出是( )。
01int foo(float *f) 02{ 03 return int(*f*2); 04} 05 06int main() 07{ 08 float fnum[10]={1.1}; 09 fnum[1]=foo(fnum); 10 cout << fnum[0]+fnum[1] << endl; 11 12 cout << endl; 13 return 0; 14}
D:3.1。foo(fnum) 中 f=fnum[0]=1.1,int(1.12)=int(2.2)=2,赋给 fnum[1];fnum[0]+fnum[1]=1.1+2.0=3.1(float+int 提升为 float)。
对二维数组 int arr[3][16];,则 arr[1] 占用内存的大小为( )字节。
D:64。arr[3][16] 中 arr[1] 是第二行(一维数组 int[16]),16 个 int 占 16×4=64 字节。
对二维数组 int arr[3][16];,若 arr 的地址是 0x28cbc0,则 arr[1] 的值是( )。
C:0x28cc00。arr[3][16] 按行优先,arr[1] 是第二行首地址,跳过 16 个 int 即 64 字节,0x28cbc0+64=0x28cbc0+0x40=0x28cc00。
下面 C++ 代码执行后输出是( )。
01int main() 02{ 03 char *p="I love GESP!"; 04 cout << p+5 << endl; 05 06 cout << endl; 07 return 0; 08}
C:e GESP!。char p 指向字符串「I love GESP!」,p+5 是指向 index 5 的 char('e' 位置起),cout<<char* 输出以该地址开头的字符串即 e GESP!。
下面 C++ 代码执行以后输出的是( )。
01int rc=5; 02int main() 03{ 04 int rc; 05 cout << ++rc << endl; 06 07 cout << endl; 08 return 0; 09} 10
D:不确定。全局 int rc=5,但 main 中又定义局部 int rc(未初始化),++rc 对未初始化变量是未定义行为,结果不可预测。
下面 C++ 函数中采用的算法是( )。
01int fib(int n) 02{ 03 int i, f[n]={0, 1}; 04 05 for(int i=2; i<=n; i++) 06 f[i]=f[i-1]+f[i-2]; 07 08 return f[n]; 09}
A:递推。代码用数组 f 记录前两项,循环从已知 f[i-1]、f[i-2] 推出 f[i],是典型的递推(迭代递推);递归是函数自己调用自己(B 错)。
插入排序在最好情况下的时间复杂度是( )。
C:O(n)。插入排序最好情况是数组已有序,每趟只需一次比较(共 n-1 次),时间复杂度 O(n)。
在如下的 C++ 代码执行后,设第 和第 行的输出地址值分别为 X 和 Y,则下面正确的是( )。
01struct pass{ 02 int no; 03 char name[20]; 04 int level; 05}; 06 07int main() 08{ 09 struct pass XiaoYang; 10 cout << "&XiaoYang=" << &XiaoYang << endl; //第11行 11 cout << "&(XiaoYang.no)=" << &(XiaoYang.no) << endl; //第12行 12 cout << endl; 13 return 0; 14}
B:X==Y。struct pass 第一个成员是 int no,结构体首地址与第一个成员地址相同(无填充情况下),故 &XiaoYang == &(XiaoYang.no)。
如果文件 1.txt 中的内容如下,则执行 C++ 代码时,注释了 #### 那行代码所输出的 x 的值为( )。
01int main() 02{ 03 ifstream fin; 04 string line; 05 int x; 06 fin.open("1.txt",ios::in); 07 08 for (int i=0; i< 2; i++){ 09 fin >> line; 10 cout << line << endl; 11 } 12 fin>>x; 13 cout << x << endl; //#### 14 15 cout << endl; 16 return 0; 17}
1.txt 内容:
50 2024 3.16 I love GESP!
C:3。文件内容「50 2024 3.16 I\nlove\nGESP!」。循环两次 fin>>line 读「50」和「2024」(按空白分隔),然后 fin>>x 读整型,下一个 token 是「3.16」但遇到 . 失败,实际读到 3(C++11 起 >>int 在非数字前停止,已读到 3)。
执行下列 C++ 代码时输出中的第 行是( )。
01int main() 02{ 03 char *s[]={(char*)"2024",(char*)"3.16",(char*)"GESP"}; 04 05 for (int i=0; i< 2; i++){ 06 cout << *s+i << endl; 07 } 08 09 cout << endl; 10 return 0; 11}
C:024。s 是 char**(数组名退化为指针),s 是 char 指向字符串「2024」首字符 '2'。s+i 是 char 偏移 i 个字节(按字符指针算术),i=0 输出 2024(第一行),i=1 输出 024(第二行)。
C++ 语言中下面哪个关键字能够限定对象的作用域( )。
B:static。static 关键字可限定变量作用域(局部 static 仍在函数内可见,但生命周期为整个程序);extern 声明外部链接、inline 提示内联、public 是类访问修饰符。
小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿蒙,这个鸿蒙是( )。
C:操作系统。鸿蒙(HarmonyOS)是华为开发的分布式操作系统,用于手机、平板、手表、智能家居等多种设备。
中国计算机学会(CCF)在 2024 年 1 月 27 日的颁奖典礼上颁布了王选奖,王选先生的重大贡献是( )。
C:发明汉字激光照排系统。王选院士主持研制汉字激光照排系统,被誉为「汉字印刷术的第二次革命」,获国家科技进步一等奖等。
对 int a[] = {2,0,2,4,3,1,6},执行第一趟选择排序处理后 a 中数据变为 {0,2,2,4,3,1,6}。
正确。{2,0,2,4,3,1,6} 第一趟选择排序扫描找最小元素 0(位于 index 1),与首位 2 交换,得 {0,2,2,4,3,1,6}。
如果待排序数据不能都装进内存,需要使用外排序算法。
正确。待排序数据无法全部装入内存时需使用外排序(典型如归并排序),分块排序再合并。
定义变量 int a=5,则 cout << &++a 会输出 。
错。&++a 中 ++a 是右值(无地址),不能取地址,编译错误;即使合法,&++a 是 a 自增后的地址,cout<<&++a 输出地址而非值 6。
两个函数之间可以使用全局变量来传递数据。
正确。全局变量定义在所有函数外部,作用域覆盖整个程序,任意函数可读写,用来实现跨函数数据传递。
定义数组 int a[2024][3][16]={2,0,2,4,3,1,6},则 cout << a[2023][2][15] 的结果不确定。
错。int a[2024][3][16]={2,0,2,4,3,1,6} 仅初始化前 6 个元素为 2,0,2,4,3,1,其余默认初始化为 0;a[2023][2][15] 远在初始化范围外(按行优先在 a[0][1][2] 之后),值为 0,结果确定。
在 C++ 语言中,函数的参数为指针时,可以在函数内部修改该参数的值。
错。指针参数按值传递(拷贝指针),函数内不能修改形参指针本身(让它指向别处),但可通过 *p 修改所指对象内容。
在 C++ 语言中 try 子句里抛出的结构体等类型的异常无法被 catch 捕获。
错。catch(...) 可捕获任意类型异常,包括 struct 等自定义类型;catch(特定类型) 按类型匹配。
C++ 语言中 cout << 9^2 << endl; 会输出 。
错。cout<<9^2 中 ^ 是按位异或不是乘方,9^2=1001 XOR 0010=1011=11,输出 11 不是 81。
小杨今年春节回奶奶家了,奶奶家的数字电视要设置 IP 地址并接入到 WIFI 盒子才能收看节目,那这个 WIFI 盒子具有路由器的功能。
正确。WIFI 盒子作为局域网接入设备并对 IP 包进行路由转发(连接数字电视与外网),具有路由器功能。
任何一个 for 循环都可以转化为等价的 while 循环。
正确。for(初值;条件;步长) 循环等价于「初值; while(条件) { 体; 步长; }」,任何 for 都可改写为 while。