在 C++ 语言中,注释不宜写得过多,否则会使得程序运行速度变慢。
注释编译时去除,不影响运行速度
以下不可以作为 C++ 标识符的是( )。
0x321含非字母字符不是合法标识符
下图所示 C++ 代码对大写字母 'A' 到 'Z' 分组,对每个字母输出所属的组号,那么输入 'C' 时将输出的组号是?( )。
01char c; 02while (1) { 03 cin >> c; 04 if (c == 'q') break; 05 switch (c) { 06 case 'A': cout << "1 "; break; 07 case 'B': cout << "3 "; 08 case 'C': cout << "3 "; 09 case 'D': cout << "5 "; break; 10 case 'E': cout << "5 "; break; 11 default: cout << "9 "; 12 } 13 cout << endl; 14}
switch无break穿透:case C输出3,无break穿透到case D输出5,再break,得"3 5"
如果 a、b 和 c 都是 int 类型的变量,下列哪个语句不符合 C++ 语法?( )
a++b语法错误(++单目需紧贴操作数)
C++ 表达式 ('1'+'1'=='2'? flag=1:flag=2) 的结果值和表达式 (flag==2) 的相同。
错。"1"+"1"=49+49=98,98=="2"=50假,flag=2,值2;flag==2为true=1,值1,不同
以下哪个不是 C++ 语言的关键字?( )
cout是I/O对象,非关键字
在 C++ 中,break 语句用于终止当前层次的循环,循环可以是 for 循环,也可以是 while 循环。
正确。break对for/while/do-while都适用,跳出最近一层循环
下面 C++ 代码执行后的输出是( )。
01int a = 1; 02printf("a+1=%d\n", a + 1);
printf("a+1=%d\n", a+1); a=1,无空格"a+1=2"。%d占整数,格式字符串无尾空格
C++ 表达式 (6 > 2) * 2 的值是( )。
(6>2)2=12=2。关系运算结果bool转int:true=1,false=0,再*2=2
下面的 C++ 代码执行后将输出 45。
01int cnt; 02for (int i = 0; i < 10; i++) 03 cnt += 1; 04cout << cnt;
错。cnt未初始化,UB未定义行为,输出不可预测
C++ 表达式 16 / 4 % 2 的值是( )。
16/4%2=4%2=0。/和%同级左结合
小杨这学期刚开学就选修了一门编程课,然后就想编写程序来计算 1 到 10001 之间的所有偶数的和。他希望程序采用简单累加整数的方法,同时希望源程序尽可能清晰、简洁,则下面关于实现累加时采用的主要控制结构的哪个说法最不合适( )。
C: 仅顺序结构。累加需循环遍历10001个数,顺序不能循环
下面 C++ 代码执行时,其说法正确的是( )。
01int M = 0, N = 0; 02cin >> M; 03cin >> N; 04if (N > M) 05 cout << (N - M); 06else 07 cout << (M - N);
B: 输出|N-M|绝对值,任何整数输入结果≥0
对整型变量 N,如果它能够同时被 3 和 5 整除,则输出 N 是含有至少两个质因数。如果用流程图来描述处理过程,则输出语句应该在哪种图形框中( )。
C: 平行四边形框。输出语句在平行四边形(输入输出)
一个 位整型变量占用( )个字节。
B:4。1 字节=8 位,32 位整型占 32÷8=4 字节;A 直接把位当字节错,C 128 位是更大类型错,D 8 字节对应 64 位整型。
设 x = true,y = true,z = false,以下逻辑运算表达式值为真的是( )。
D:(x∧y)∨(z∨x)。x=T,y=T,z=F 时:(y∨z)∧x∧z=F;x∧(z∨y)∧z=F;(x∧y)∧z=F;(x∧y)∨(z∨x)=T∨T=T。其他三项都含 z=F 无法为真。
以下不属于面向对象程序设计语言的是( )。
D:C。C 是面向过程语言,不支持类与继承;C++/Python/Java 均支持 OOP(类、继承、多态),故选 D。
以下哪种功能没有涉及C++语言的面向对象特性支持: ( )。
A:调 printf。printf 是 C 标准库函数,不涉及 C++ 类/对象机制;B(成员函数)、C(class/struct)、D(继承派生类)均体现 OOP。
以下对递归方法的描述中,正确的是:( )
B:递归是通过调用自身来求解问题的编程技术。递归的本质是函数直接或间接调用自身,每次调用缩小问题规模至 base case;A 错(参数多组是重载),C 错(描述 OOP),D 错(描述编译)。
在 C++中,下面哪个关键字用于声明一个变量,其值不能被修改?( )
B:const。const 声明变量值不可修改;unsigned 改符号位、static 改存储期、mutable 允许在 const 函数中修改成员。
阅读下述代码,请问修改 data 的 value 成员以存储 3.14,正确的方式是( )。
01union Data { 02 int num; 03 float value; 04 char symbol; 05}; 06union Data data;
A:data.value = 3.14。union Data data 是 union 变量,访问成员用 . 运算符(不是 ->,-> 用于指针);B/D 成员与变量名颠倒。
编译器的主要作用是什么?( )
B:将源代码转换为机器代码。编译器核心功能是源程序→目标代码(机器指令/汇编);A 错(直接执行是解释器),C 错(调试器),D 错(运行时/内存由 OS 管理)。
以下哪个不是 C++中的循环语句?( )
D:repeat-until。C++ 只有 for/while/do-while 三种循环;repeat-until 是 Pascal 等其他语言的语法。
在 C++ 语言中,一个程序不能有多个 main 函数。
正确。C++程序只能有一个main函数,否则链接错
如果 a、b、c 和 d 都是 int 类型的变量,则下列哪个表达式能够正确计算它们的平均值?
C: /4.0实数除法得double平均
下列流程图,属于计算机的哪种程序结构?( )。
(流程图:多分支判断结构)→ C: 分支结构
在 C++ 语言中,大于等于符号 >= 是一个合法的运算符,而 => 并非 C++ 中定义的运算符。
正确。>=合法,=>不是C++运算符(PHP等有)
以下不是 C++ 关键字的是( )。
B: cout。continue/break/goto是关键字,cin/cout/endl是iostream对象/操纵子
如果要找出整数 a、b 中较大一个,通常要用下面哪种程序结构?( )
C: 分支结构。比较a、b大小用if-else
执行下面 C++ 代码后,有关说法错误的是( )。
01int a, b; 02cin >> a >> b; 03if (a && b) 04 cout << "1"; 05else if (!(a || b)) 06 cout << "2"; 07else if (a || b) 08 cout << "3"; 09else 10 cout << "4";
C: 0,0→!a||b真输出3不是2,选C
下面 C++ 代码执行后的输出是( )。
01int loopCount = 0; 02for (int i = 0; i < 10; i++) 03 for (int j = 1; j < i; j++) 04 loopCount += 1; 05cout << loopCount;
A: 闰年(y%400==0)||(y%4==0 && y%100!=0)
下面 C++ 代码执行后的输出是 30,则横线处不能填入( )。
01int a=10,b=20,c=30; 02cout << ____________ << endl; 03cout << endl;
C: sqrt(60)≈7.7非30。max/min/(a+b+c)/2均=30
下列 4 个表达式中,答案不是整数 8 的是?( )
D: sqrt(64)=8.0(double)非整数8
某小学男子篮球队招募新成员,要求加入球队的成员身高在 厘米以上(不含 厘米)。本次报名的人员有 人,他们的身高分别是 、、、、、、、、、。完善以下代码,求出本次球队能够招募到新成员的人数?( )
01#include <iostream> 02using namespace std; 03int main() { 04 int arr[10] = {125, 127, 136, 134, 137, 138, 126, 135, 140, 145}; 05 int count = 0; 06 for(int i=0; i<10; i++) 07 ____________ 08 // 在此处填入代码 09 10 cout << count << endl; 11 return 0; 12}
B: count+=arr[i]>135?1:0。身高>135条件累加
sort 可以直接用于排序 set 中的元素。
正确。sort可对set排序(虽set已序)
关于以下程序段,说法正确的是( )。
01int x=10; 02cout<<(x++) + (++x)<<endl;
A: UB。x++和++x同一表达式未定义行为
下面 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++ 中,关于文件路径说法错误的是( )。
D:「GESP.txt」是绝对路径——错误。该字符串只是文件名(相对路径),不是绝对路径;绝对路径以盘符或 / 开头。
若函数声明为 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 是表达式不是左值。
假设 都是布尔变量,逻辑表达式(a && b) || (!c && a) 的值与下列哪个表达式不始终相等?( )
B:除以 2 取余。n%2 判定奇偶;/2 取整用于进制转换。
根据下面 C++ 代码的注释,两个横线处应分别填入( )。
01#include <iostream> 02#include <vector> 03#include <algorithm> 04using namespace std; 05 06bool isOdd(int N) { 07 return N % 2 == 1; 08} 09bool compare(int a, int b) { 10 if (a % 2 == 0 && b % 2 == 1) 11 return true; 12 return false; 13} 14int main() { 15 vector<int> lstA; // lstA是一个整型向量 16 for (int i = 1; i < 100; i++) 17 lstA.push_back(i); 18 // 对lstA成员按比较函数执行结果排序 19 sort(lstA.begin(), lstA.end(), ____________); // 此处填写代码1 20 21 vector<int> lstB; 22 for (int i = 0; i < lstA.size(); i++) // lstB成员全为奇数 23 if (____________) // 此处填写代码2 24 lstB.push_back(lstA[i]); 25 26 cout << "lstA: "; 27 for (int i = 0; i < lstA.size(); i++) 28 cout << lstA[i] << " "; 29 cout << endl; 30 31 cout << "lstB: "; 32 for (int i = 0; i < lstB.size(); i++) 33 cout << lstB[i] << " "; 34 cout << endl; 35 return 0; 36}
A:compare 和 isOdd(lstA[i])。sort 第三参传函数名 compare(不带括号和参数);代码 2 在 for 循环内逐个判断当前元素,须写 isOdd(lstA[i]),传函数名无法判断具体元素。
若有定义:int a=7; float x=2.5, y=4.7;,则表达式 x+a%3*(int)(x+y)%2 的值是:( )
C:3.5。按优先级 a%3=1, (int)(x+y)=(int)7.2=7, 1*7=7, 7%2=1, x+1=3.5;float 提升输出 3.5。
下⾯关于C++中形参、实参和定义域的说法中,正确的⼀项是( )。
A:形参是函数定义时声明的局部变量,只在函数内部有效;常量引用不可修改,实参形参类型可隐式转换,对指针赋值不影响实参;B 中常量引用不可修改,D 中指针赋值只改形参本身。
使用 math.h 或 cmath 头文件中的函数,表达式 pow(10, 3) 的结果的值为 1000、类型为 int。
错。pow(10,3) 的返回值类型是 double(值为 1000.0),参数虽是 int 但结果不是 int 类型,故错。
假设有以下 C++ 代码:
01int a = 5, b = 3, c = 4; 02bool res = a & b || c ^ b && a | c;
请问,res 的值是什么?( )
提示:在 C++ 中,逻辑运算的优先级从高到低依次为逻辑非 !、逻辑与 &&、逻辑或 ||;位运算的优先级从高到低依次为位非 ~、位与 &、位异或 ^、位或 |。双目位运算的优先级高于双目逻辑运算;逻辑非和位非优先级相同,且高于所有双目运算符。
A:true。按优先级 ! > ~ > & > ^ > | > && > ||:a&b=1, c^b=7, a|c=5; 1||7=1 (短路), 1&&5=1 → true。
已知:int a = 10;,执行 int &b = a; b = 20; 后,变量 的值是( )。
B:20。b 是 a 的引用即 a 的别名,二者共享同一存储单元,b=20 直接写入该单元,故 a 的值变为 20,输出即 20。
下列代码的时间复杂度(以 n 为自变量,忽略常数与低阶项)是
01long long s = 0; 02for (int i = 1; i <= n; i++) { 03 for (int j = 1; j * j <= i; j++) { 04 s += j; 05 } 06}
C:O(n√n)。内层循环次数为 √i,总操作 ∑_{i=1}^{n}√i≈(2/3)n^{3/2},忽略常数即 O(n√n)。
在 64 位操作系统下(LP64 / LLP64 模型),下面代码的输出结果是()。
01#include <iostream> 02using namespace std; 03 04int main() { 05 int a[4] = {1, 2, 3, 4}; 06 int (*p)[4] = &a; 07 int *q = a; 08 09 cout << sizeof(a) << " "; 10 cout << sizeof(p) << " "; 11 cout << sizeof(p + 1) << " "; 12 cout << sizeof(q + 1) << " "; 13 cout << (p + 1) - p << " "; 14 cout << (q + 1) - q << endl; 15}
A:16 8 8 8 1 1。a 为 4 个 int 共 16 字节;p、p+1、q+1 都是指针,64 位下 sizeof 均 8;(p+1)-p 按 int[4] 步进差 1,(q+1)-q 按 int 步进差 1;B 错把 sizeof(p+1) 当数组大小。