目录
- [一、单选题(每题 4 分,共 40 分)](#一、单选题(每题 4 分,共 40 分))
- [二、判断题(每题 2 分,共 20 分)](#二、判断题(每题 2 分,共 20 分))
- [三、编程题(每题 20 分,共 40 分)](#三、编程题(每题 20 分,共 40 分))
一、单选题(每题 4 分,共 40 分)
C++ 中,用于从文件中读取数据的文件流对象的是?( )
A.
ofstreamB.
ifstreamC.
fstreamD.
iostream
【答案】B
【解析】ifstream(input file stream)专门用于从文件中读取数据。ofstream 用于写文件;fstream 既可读也可写;iostream 是标准输入输出流头文件。
以下关于 C++ 文件操作的说法,错误的是?( )
A. 文件操作完成后,需要调用
close()函数关闭文件B. 以
ios::out模式打开文件时,若文件不存在会自动创建C. 可以用
cin直接从文本文件中读取数据,无需定义文件流对象D. 以
ios::app模式打开文件,写入的数据会追加到文件末尾
【答案】C
【解析】cin 默认从标准输入(键盘)读取数据。若要读取文件内容,需要定义文件流对象,例如 ifstream fin("data.txt");。
执行以下 C++ 代码,变量
b的最终值是?( )
cpp#include <iostream> int main() { double a = 3.99; int b = (int)a; }A. 3
B. 4
C. 3.99
D. 0
【答案】A
【解析】强制类型转换 (int)3.99 会直接舍去小数部分,而不是四舍五入。
执行以下 C++ 代码,输入 85 后,输出结果是?( )
cpp#include <iostream> int main() { int score; std::cin>> score; if (score >= 90) std::cout << "A"; else if (score >= 80) std::cout << "B"; else if (score >= 60) std::cout << "C"; else std::cout << "D"; }A.
AB.
BC.
CD.
D
【答案】B
【解析】输入 85 满足 score >= 80 但不满足 score >= 90,因此输出 B。
以下 C++ 代码执行后,输出结果是?( )
cpp#include <iostream> int main() { int a = 10, b = 20; if (a > 30) { if (a == b) std::cout << "1"; else std::cout << "2"; } else { if (a < b) std::cout << "3"; else std::cout << "4"; } }A. 1
B. 2
C. 3
D. 4
【答案】C
【解析】因为 a = 10 a = 10 a=10,因此 a > 30 为假,进入 else 分支。又因为 10 < 20 成立,因此输出 3。
以下 C++ 代码执行后,
*一共会输出多少次?( )
cpp#include <iostream> int main() { for (int i = 0; i < 3; i++) for (int j = 0; j < 4; j++) std::cout << "*"; }A. 7
B. 12
C. 3
D. 4
【答案】B
【解析】外层循环执行 3 次,内层循环每轮执行 4 次,总输出次数 3 × 4 = 12 3\times4=12 3×4=12。
以下 C++ 代码执行后,输出的结果是?( )
cpp#include <iostream> int main() { int cnt = 0; for (int i = 1; i <= 5; i++) for (int j = 1; j <= i; j++) cnt += 1; std::cout << cnt; }A. 5
B. 10
C. 15
D. 25
【答案】C
【解析】外层循环执行 5 次,而内层循环每轮执行 i i i 次,即依次执行 1 , 2 , 3 , 4 , 5 1,2,3,4,5 1,2,3,4,5 次,于是输出语句执行总次数为 1 + 2 + 3 + 4 + 5 = 15 1+2+3+4+5 = 15 1+2+3+4+5=15。
以下关于 C++ 一维数组的定义,正确的是?( )
A.
int arr[];B.
int arr[5] = {1, 2, 3};C.
int arr(5);D.
int n = 5; int arr[n];
【答案】B
【解析】A 缺少数组大小;C 定义的是单个变量。D 是变长数组的定义方式,虽然在 g++ 编译器中支持此写法,但是变长数组并没有被收录于任何一个版本的 C++ 标准中。
执行以下代码,数组
arr中第 3 个元素(下标为 2)的值是?( )
cpp#include <iostream> int main() { int arr[5] = {10, 20, 30, 40, 50}; arr[2] = arr[2] + arr[4]; }A. 30
B. 50
C. 80
D. 90
【答案】C
【解析】原来 arr[2] = 30, arr[4] = 50,执行 arr[2] = 30 + 50 得到 80。
以下代码用于求数组中所有元素的最大值,横线处应填入的代码是?( )
cpp#include <iostream> int main() { int arr[5] = {3, 1, 4, 5, 2}; int max_val = arr[0]; for (int i = 1; i < 5; i++) { ________ } std::cout << max_val; }A.
if (arr[i] > max_val) max_val = arr[i];B.
if (arr[i] < max_val) max_val = arr[i];C.
max_val = arr[i];D.
arr[i] = max_val;
【答案】A
【解析】打擂台法求最大值,若当前元素比擂主还大,则更新擂主(当前最大值)即可。
二、判断题(每题 2 分,共 20 分)
- C++ 中,使用文件流操作文件时,需要引入
<fstream>头文件。( )
【答案】√
【解析】ifstream、ofstream、fstream 都定义在 fstream 中。
- 以
ios::out模式打开已存在的文件,不会清空文件原有内容。( )
【答案】×
【解析】默认情况下 ios::out 会清空原文件内容后重新写入。若希望保留原内容,应使用 ios::app。
- C++ 中,将浮点型赋值给整型变量时,会自动进行四舍五入。( )
【答案】×
【解析】将浮点型赋值给整型变量时会进行自动类型转换,直接截断小数部分,并不会进行四舍五入。
if-else if-else语句中,最多只会有一个分支的代码被执行。( )
【答案】√
【解析】一旦某个条件成立,其余分支将被跳过,因此最多执行一个分支。
switch语句中,每个case分支都必须包含break语句,否则会编译报错。( )
【答案】×
【解析】不写 break 不会报错。但程序会继续执行后续分支,称为 "贯穿(fall-through)"。
- 两层
for循环嵌套时,外层循环每执行一次,内层循环会完整执行一遍。( )
【答案】√
【解析】标准嵌套循环结构中,外层每次迭代都会重新执行一次完整的内层循环。
while循环可以嵌套for循环,for循环也可以嵌套while循环。( )
【答案】√
【解析】各种循环结构都可以相互嵌套使用。
- C++ 中,数组的下标默认从 1 开始。( )
【答案】×
【解析】C++ 数组下标从 0 开始。
- 一维数组在内存中是连续存储的。( )
【答案】√
【解析】数组中的元素在内存中按顺序连续存放,因此可以通过下标随机访问。
- 定义数组
int arr[10];后,可以通过arr[10]访问数组的最后一个元素。( )
【答案】×
【解析】数组 int arr[10]; 下标范围为 0 ∼ 9 0\sim 9 0∼9,最后一个元素应为 arr[9],访问 arr[10] 属于越界访问。
三、编程题(每题 20 分,共 40 分)
1. 数字三角阵
给定一个正整数 n n n,输出一个数字三角阵,当 n = 4 n=4 n=4 时,输出的三角阵如下:
a
1
22
333
4444
时间限制:1 s
内存限制:256 MB
-
输入
单个正整数表示 n n n, 1 ≤ n ≤ 9 1\le n\le 9 1≤n≤9。 -
输出
一个 n n n 行 n n n 列的数字三角阵,具体格式参考题面。 -
样例输入
a5 -
样例输出
a1 22 333 4444 55555
思路分析
此题考查循环嵌套与图形输出,属于入门题。
观察样例可以发现,第 i i i 行需要输出数字 i i i 共 i i i 次;为了保证总宽度为 n n n 列,第 i i i 行前面需要补上 n − i n-i n−i 个空格。
cpp
/*
* Name: T1.cpp
* Problem: 数字三角阵
* Author: Teacher Gao.
* Date&Time: 2026/05/31 14:03
*/
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n - i; j++) {
cout << ' ';
}
for (int j = 1; j <= i; j++) {
cout << i;
}
cout << '\n';
}
return 0;
}
2. 奇偶求和
给定一个正整数 n n n,以及 n n n 个整数,请完成以下两个计算:
- 找出这 n n n 个整数中最大的偶数:若不存在偶数,则该值为 0;
- 计算这 n n n 个整数中所有奇数的和:若不存在奇数,则该值为 0。
时间限制:1 s
内存限制:256 MB
-
输入
第一行输入一个正整数 n n n,表示整数的个数, 1 ≤ n ≤ 100 1\le n\le 100 1≤n≤100;
第二行输入 n n n 个整数 a i a_i ai, − 1000 ≤ a i ≤ 1000 -1000\le a_i\le 1000 −1000≤ai≤1000。 -
输出
输出两行,第一行输出最大的偶数,若无偶数则输出 0;第二行输出所有奇数的和,若无奇数则输出 0。 -
样例输入 1
a5 1 3 5 8 19 -
样例输出 1
a8 28 -
样例输入 2
a3 7 11 15 -
样例输出 2
a0 33 -
样例输入 3
a4 -2 6 -8 4 -
样例输出 3
a6 0
思路分析
此题考查循环结构,属于基础题。
读入每个整数后,如果是偶数,则尝试更新当前最大的偶数;如果是奇数,则累加到奇数和中。注意到存在负数,因此存储偶数最大值的变量 maxEven 可以初始化为 INT_MIN,最后根据 maxEven 是否为 INT_MIN 来确定是否存在偶数。
cpp
/*
* Name: T2.cpp
* Problem: 奇偶求和
* Author: Teacher Gao.
* Date&Time: 2026/05/31 14:05
*/
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false), cin.tie(0);
int n, x;
cin >> n;
int maxEven = INT_MIN;
long long oddSum = 0;
for (int i = 0; i < n; i++) {
cin >> x;
if (x % 2) {
oddSum += x;
}
else if (x > maxEven) {
maxEven = x;
}
}
if (maxEven != INT_MIN) {
cout << maxEven << '\n';
} else {
cout << 0 << '\n';
}
cout << oddSum << '\n';
return 0;
}