2025年3月CCF—GESP(C++四级)编程能力等级认证试卷
四级
2025
2025-06-30 09:28:44
62次
一、单选题
关于下述代码,说法错误的是( )。
int multiply(int x, int y);
int main() {
int a = 4;
int b = 5;
int result = multiply(a, b);
std::cout << "The result is: " << result << std::endl;
return 0;
}
int multiply(int x, int y) {
return x * y;
} | A. 函数 multiply 的定义应该放到函数 main 之前。 |
B. 函数声明 int multiply(int x, int y); 中明确指定了函数 multiply() 的返回值为整数类型。 |
| C. 在 main 函数中,函数 multiply 通过 multiply(a, b) 被调用,其中 a 和 b 是定义在 main 函数中的变量,它们作为实参传递给了 multiply 函数的形参 x 和 y 。 |
D. 运行上述代码,将输出 The result is: 20 。 |
【知识点】 CCF—GESP C++四级
下面的描述中,( )正确定义—个名为 Person 的结构体并正确初始化了—个 Person 结构体的变量 p 。
A.struct Person {
string name;
int age;
};
Person p("Yang", 10); |
B.struct Person {
string name,
int age;
};
Person p;
p.name = "Yang";
p.age = 10; |
C.struct Person {
string name;
int age;
};
Person p = { "Yang", 10 }; |
D.struct Person {
string name;
int age;
};
Person p = new Person("Yang", 10); |
【知识点】 CCF—GESP C++四级
给定如下算法,其时间复杂度为( )。
bool f(int arr[], int n, int target) {
for (int i = 0; i < (1 << n); i++) {
int sum = 0;
for (int j = 0; j < n; j++) {
if (i & (1 << j)) {
sum += arr[j];
}
}
if (sum == target) return true;
}
return false;
} | A. O(n2) |
B. O(n*2n) |
| C. O(1) |
D. O(n3) |
【知识点】 CCF—GESP C++四级
给定如下代码,
struct Person {
std::string name;
int age;
struct Address {
std::string street;
std::string city;
};
Address address;
};下面描述错误的是( )。
| A. 结构 Person 内嵌套结构 Address |
B. Person 有—个 Address 类型的 address 成员 |
| C. —个 Person 类型的变量 p 的 address 的初始化可以写成:p.address.street = "123 Main St"; p.address.city = "Anytown"; |
D. 结构的嵌套可以减少命名冲突,因此可以不必控制嵌套层次 |
【知识点】 CCF—GESP C++四级
下面哪种方式不能实现将字符串 "Happy Spring!" 输出重定向到文件 log.txt ( )。
A.freopen("log.txt", "w", stdout);
cout << "Happy Spring!" << endl;
fclose(stdout); |
B.std::ofstream outFile("log.txt");
outFile << "Happy Spring!" << endl;
outFile.close(); |
C.std::ofstream outFile("log.txt");
cout << "Happy Spring!" << endl;
outFile.close(); |
D.ofstream log_file("log.txt");
streambuf* org_cout = cout.rdbuf();
cout.rdbuf(log_file.rdbuf());
cout << "Happy Spring!" << endl;
cout.rdbuf(org_cout); |
【知识点】 CCF—GESP C++四级
运行下面的代码,将出现( )。
double hmean(double a, double b) {
if (a == -b )
throw runtime_error("Runtime error occurred.");
return 2.0*a*b/(a + b);
}
int main() {
double x = 10;
double y = -10;
try {
int result = hmean(x, y);
cout << "hmean: " << result << endl;
}
catch (const runtime_error& e) {
cout << "Caught: " << e.what() << endl;
} catch (...) {
cout << "Caught an unknown exception." << endl;
}
return 0;
} | A. 屏幕上输出 Caught: Runtime error occurred. |
B. 屏幕上输出 Caught an unknown exception. |
| C. 程序调用 std::terminate() |
D. 编译错误 |
【知识点】 CCF—GESP C++四级
小杨正在爬楼梯,需要爬n 阶才能到达楼顶。如果每次可以爬 1个或 2个台阶,下面代码采用递推算法来 计算 —共有多少种不同的方法可以爬到楼顶,则横线上应填写( )。
int f(int n) {
if (n == 1 || n == 2)
return n;
int f1 = 1;
int f2 = 2;
int res = 0;
for (int i = 3; i <= n; i++) {
_________________________________ // 在此处填入代码
}
return res;
} A.res += f1 + f2; f1 = f2; f2 = res; |
B.res = f1 + f2; f1 = f2; f2 = res; |
C.res += f1 + f2; f2 = res; f1 = f2; |
D.res = f1 + f2; f2 = res; f1 = f2; |
【知识点】 CCF—GESP C++四级
二、判断题
三、编程题
二阶矩阵
题目描述
小 A 有—个 n行 m列的矩阵 。
小 A 认为—个 2*2的矩阵 D 是好的,当且仅当D1,1 * D2,2 = D1,2 * D2,1。其中 Di,j表⽰矩阵 的第 i行第 j列 的元 素。 小 A 想知道 A中有多少个好的子矩阵。
输入格式
第—行,两个正整数 n和m。
接下来 n行,每行 m 个整数 Ai,1,Ai,2,...,Ai,m
输出格式
—行, —个整数,表⽰ 中好的子矩阵的数量。
输入样例
3 4 1 2 1 0 2 4 2 1 0 3 3 0
输出样例
2
数据范围
对于所有测试点,保证 1 ≤ n ≤ 500 , 1 ≤ m ≤ 500 ,-100 ≤ Ai,j ≤ 100 。
【知识点】 CCF—GESP C++四级
荒地开垦
时间限制: 1.0 s
内存限制 :512.0 MB
题面描述
小杨有—大片荒地,可以表⽰为—个n行m列的网格图。
小杨想要开垦这块荒地,但荒地中—些位置存在杂物,对于—块不存在杂物的荒地,该荒地可以开垦当且仅当其 上、下、左、右四个方向相邻的格子均不存在杂物。
小杨可以选择至多—个位置,清除该位置的杂物,移除杂物后该位置变为荒地。小杨想知道在清除至多—个位置的 杂物的情况下,最多能够开垦多少块荒地。
输入格式
第—行包含两个正整数 n , m ,含义如题面所⽰。
之后 n 行,每行包含—个长度为 m 且仅包含字符 . 和 # 的字符串。如果为 . ,代表该位置为荒地;如果为# ,代表该位置为杂物。
输出格式
输出—个整数,代表在清除至多—个位置的杂物的情况下,最多能够开垦的荒地块数。
输入样例
3 5 ..... .#..# .....
输出样例
11
样例解释
移除第二行从左数第二块空地的杂物后:
..... ....# .....
第—行从左数前 4 块荒地,第二行从左数前 3 块荒地,第三行从左数前 4 块荒地,均可开垦, 4 + 3 + 4 = 11。
数据范围
对于全部数据,保证有 1 ≤ n, m ≤ 1000 。
【知识点】 CCF—GESP C++四级
