解析|电子学会考级C语言二级真题(2026年3月)

四季读书网 2 0
解析|电子学会考级C语言二级真题(2026年3月)
解析|电子学会考级C语言二级真题(2026年3月)-第1张图片-四季读书网关注我了解更多少儿编程内容
解析|电子学会考级C语言二级真题(2026年3月)-第2张图片-四季读书网

青少年软件编程(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";  else    std::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";    else      std::cout << "2";  }else{    if(a < b)      std::cout << "3";    else      std::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 时,输出的三角阵如下:

   1  22 3334444

输入格式

单个正整数表示 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 个数字 i        for(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>maxmax=a;	}    } cout<<max<<endl<<sum;    return 0;}
----end-----

如果你觉得陈老师写的对你有帮助,可以点赞关注额。感谢大家的支持。

解析|电子学会考级C语言二级真题(2026年3月)-第3张图片-四季读书网

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

抱歉,评论功能暂时关闭!