关注我了解更多少儿编程内容
青少年软件编程(C/C++)等级考试试卷(二级)2026年03月
一、单选题(共10题,共40分)
1.C++中,用于从文件中读取数据的文件流对象?( )
A.ofstream
B.ifstream
C.fstream
D.iostream
解析:正确答案是 B. ifstream。
ifstream(Input File Stream)是 C++ 标准库中专门用于从文件中读取数据的输入文件流类。
A. ofstream(Output File Stream):用于向文件中写入数据(输出文件流)。
C. fstream(File Stream):既可以读也可以写,但它是 ifstream 和 ofstream 的基类,通常支持双向操作。虽然也能用于读取,但单选题中问“专门用于读取”的对象,最标准、最直接的答案是 ifstream。
D. iostream:标准输入输出流,用于控制台(键盘/屏幕)的交互,不直接用于操作文件。
2.以下关于C++文件操作的说法,错误的?( )
A.文件操作完成后,需要调用close()函数关闭文件
B.以ios::out模式打开文件时,若文件不存在会自动创建
C.可以用cin直接从文本文件中读取数据,无需定义文件流对象
D.以ios::app模式打开文件,写入的数据会追加到文件末尾
解析:C 选项是错误的:cin 是 C++ 标准库中的标准输入流,专用于从键盘(控制台)读取数据,不能直接用于读取文本文件。要从文件中读取数据,必须定义文件流对象(如 ifstream)并调用相关方法(如 open() 或通过构造函数打开)。
A. 正确(但存在细微技术争议):文件操作完成后调用 close() 是良好的编程习惯,可以立即释放资源并确保数据完整写入缓冲区。虽然文件流对象在销毁时会自动调用析构函数关闭文件,但在需要检查打开状态、重新打开文件或防止资源占用时,显式调用 close() 是必要的。在绝大多数教材和考试语境中,认为“需要 close()”是正确说法。
B. 正确:以 ios::out 模式(或 ofstream 默认模式)打开文件时,如果指定文件不存在,系统会自动创建该文件。
D. 正确:ios::app(Append,追加)模式会在每次写入前将文件指针定位到文件末尾,因此新写入的数据始终会追加到文件尾部,不会覆盖原有内容。
3.执行以下C++代码,变量b的最终值?( )
#include<iostream>intmain(){double a = 3.99;int b = (int)a;}
A.3
B.4
C.3.99
D.0
解析:变量a是双精度并赋值为3.99,变量b是整型,把a赋值给b,还进行了强制转化没所以是A选项。
4.执行以下C++代码,输入`85`后,输出结果?( )
#include<iostream>intmain(){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";elsestd::cout << "D";}
A.A
B.B
C.C
D.D
解析:此题考察的是多分支语句的使用。当输入的是85时,满足的是大于或等于80的这个条件,所以输出的是B,也就是B选项。
5.以下C++代码执行后,输出结果?( )
#include<iostream>intmain(){int a = 10, b = 20;if(a > 30){if(a == b)std::cout << "1";elsestd::cout << "2";}else{if(a < b)std::cout << "3";elsestd::cout << "4";}}
A.1
B.2
C.3
D.4
解析:a的初始值为10,b的初始值为20;a不大于30,所以执行的else框里面的内容,再加上a小于b,所以最终输出的是3,答案为C选项。
6.以下C++代码执行后,`*`一共会输出多少次?( )
#include<iostream>intmain(){for(int i=0;i<3;i++)for(int j=0;j<4;j++)std::cout << "*";}
A.7
B.12
C.3
D.4
解析:此题考察的for循环的双嵌套。
当i=0时,j循环4次;当i=1时,j循环4次;当i=2时,j循环4次;所以就是3个4相加,最后的结果为12,答案为B选项。
7.以下C++代码执行后,输出的结果?( )
#include<iostream>intmain(){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
解析:这道题第六题是一样的,也是考察的双循环。i能够取到的值有1~5,
当i=1时,j=1;cnt=1;
当i=2时,j=1,2;cnt=3;
当i=3时,j=1,2,3;cnt=6;
当i=4时,j=1,2,3,4;cnt=10;
当i=5时,j=1,2,3,4,5;cnt=15;所以最终答案为C选项。
8.以下关于C++一维数组的定义,正确的?( )
A.int arr[];
B.int arr[5] = {1,2,3};
C.int arr(5);
D.int n=5; int arr[n];
解析:A选项没有指定数组大小;B选项对的;C选项应该是为中括号,不是小括号;D选项C++ 规定数组的大小必须是编译时常量(constexpr),而变量 n 的值是在运行时才确定的。所以答案为B选项。
9.执行以下代码,数组arr中第3个元素(下标为2)的值?( )
#include<iostream>intmain(){int arr[5] = {10,20,30,40,50};arr[2] = arr[2] + arr[4];}
A.30
B.50
C.80
D.90
解析:此题考察的是数组,arr[2]=30,a[4]=50;所以arr[2]=30+50=80.答案为C选项。
10.以下代码用于求数组中所有元素的最大值,横线处应填入的代码?( )
#include<iostream>intmain(){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;
解析:此题是需要找出最大值,所以这里要比较,然后再重新赋值,所以当arr[i]>max_val时,需要把max_val=arr[i],所以选A答案。
二、判断题(共10题,共20分)
11.C++中,使用文件流操作文件时,需要引入头文件。(对)
12.以ios::out模式打开已存在的文件,不会清空文件原有内容。(错)
解析:以 ios::out 模式打开已存在的文件时,会清空(截断)文件原有内容。
13.C++中,将浮点型赋值给整型变量时,会自动进行四舍五入。(错)
解析:将浮点型赋值给整型变量时,是直接把小数部分舍掉,不需要四舍五入。
14.if-else if-else语句中,最多只会有一个分支的代码被执行。(对)
15.switch语句中,每个case分支都必须包含break语句,否则会编译报错。(错)
解析:不需要必须包含break;break只是作为跳出的指令
16.两层for循环嵌套时,外层循环每执行一次,内层循环会完整执行一遍。(对)
17.while循环可以嵌套for循环,for循环也可以嵌套while循环。(对)
18.C++中,数组的下标默认从1开始。(错)
解析:数组的下标默认是从0开始。
19.一维数组在内存中是连续存储的。(对)
20.定义数组int arr[10];后,可以通过arr[10]访问数组的最后一个元素。(错)
解析:arr[10]的最后下标值为9,所以最后一个元素访问是arr[9].
三、编程题(共2题,共40分)
21.数字三角阵
给定一个正整数 n,输出一个数字三角阵,当 n=4 时,输出的三角阵如下:
1223334444
【输入格式】
单个正整数表示 n。
【输出格式】
一个 n 行 n列的数字三角阵,具体格式参考题面。
说明提示
1≤n≤9
#include<iostream>using namespace std;intmain(){int n;cin>>n;for(int i=1;i<=n;i++) {// 输出前导空格,使数字右对齐for(int j=1;j<=n-i;j++) {cout << ' ';}// 输出 i 个数字 ifor(int j=1;j<=i;j++) {cout<<i;}cout<<endl;}return 0;}
22.奇偶求和
给定一个正整数 n,以及 n 个整数,请完成以下两个计算:
找出这 n 个整数中最大的偶数;若不存在偶数,则该值为 0。
计算这 n 个整数中所有奇数的和;若不存在奇数,则该值为 0。
【输入格式】
第一行输入一个正整数 n,表示整数的个数;
第二行输入 n 个整数ai。
【输出格式】
输出两行,第一行输出最大的偶数,若无则输出 0;
第二行输出所有奇数的和,若无则输出 0。
说明提示
1≤n≤100
−1000≤ai≤1000。
#include<bits/stdc++.h>using namespace std;int main(){int n,sum=0,max=-1000;cin>>n;for(int i=1;i<=n;i++){int a;cin>>a;if(a%2==1){sum+=a;}else{if(a>max) max=a;}} cout<<max<<endl<<sum;return 0;}
如果你觉得陈老师写的对你有帮助,可以点赞关注额。感谢大家的支持。

也可以添加陈老师的微信(rtc_100)。陈老师会为你解答疑惑。