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

四季读书网 2 0
解析|电子学会考级C语言三级真题(2026年3月)

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

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

青少年软件编程(C/C++)等级考试试卷(三级)2026年03月

一、单选题(共10题,共20分)

1.以下关于C++函数的说法,正确的?( )

A.函数必须有返回整数值,否则无法通过编译

B.函数可以嵌套定义,即在一个函数内部定义另一个函数

C.函数可以没有参数,也可以有多个参数

D.函数声明和函数定义必须写在同一个文件中

解析:A. 错误:函数不必须返回整数值。C++ 允许定义 void 类型的函数(无返回值),也可以返回 floatcharbool、自定义类类型等任意数据类型。B. 错误:在标准 C++ 中,不允许在函数内部嵌套定义另一个函数(这一点与 Python、JavaScript 等语言不同)。C. 正确:函数的参数列表是灵活的。可以没有参数(如 void func()),也可以有任意多个参数(如 int add(int a, int b, int c))。D. 错误:函数声明(原型)和定义(实现)不必写在同一个文件中。通常的做法是:将声明放在头文件(.h 或 .hpp)中,将定义放在源文件(.cpp)中,然后通过链接器将它们组合在一起。所以答案为C选项。

2.函数定义为int func(int a, int b),以下调用方式正确的?( )

A.func(5);

B.func(5, 3);

C.func("5", "3");

D.int func(5,3);

解析:函数的调用和函数的定义是对应的,int a和int b都属于整型,所以函数内也是整数,B选项符合要求。

3.以下函数,采用值传递方式的?( )

A.void func(int &x)

B.void func(int *x)

C.void func(int x)

D.void func(int x[])

解析:A选项是属于引用传递,&表示引用;B选项是地址传递的指针传递;C选项是值传递;D选项是地址传递中的数组退化。所以答案为C选项。

4.执行以下代码,输出结果?( )

#include<iostream>voidfunc(int x){    x = 100;}intmain(){  int a = 10;    func(a);    std::cout << a;  return 0;}

A.10

B.100

C.0

D.编译报错

解析:这道题的自定义函数中可以理解为形参x的值意义不大,在主函数中直接给a赋值为10,所以a的值就重置为10了,所以结果为10,答案为A选项。

5.以下递归函数用于计算n的阶乘,横线处应填入的代码?( )

intfact(int n)  if(n <= 1return 1;    _________}

A.return fact(n-1);

B.return n * fact(n-1);

C.return n + fact(n-1);

D.return fact(n) * fact(n-1);

解析:此题考察的是递归函数中阶乘的写法,当形参为1时,则直接输出1,当形参大于1时,则需要进行递归,递归时n的值会减少的同时还要乘以n的值,所以B选项是符合要求的。

6.以下哪个函数可以获取C风格字符串的长度?( )

A.strlen()

B.strcpy()

C.strcat()

D.strcmp()

解析:B选项是字符串复制;C选项是字符串拼接;D选项是字符串比较。所以A选项符合。

在 C++ 中,更推荐使用 std::string 类,直接调用 .length() 或 .size() 成员方法来获取长度,这样更加安全且不易出错

7.执行strcmp("apple", "banana"),返回值的情况?( )

A.大于0

B.等于0

C.小于0

D.不确定

解析:此函数是属于字符串的比较,会基于ASCII码值来逐个字符比较两个字符串。

比较过程如下:

  • 比较第一个字符:"apple" 的首字母是 'a'"banana" 的首字母是 'b'

  • 在 ASCII 码表中,'a'(97)< 'b'(98)。

  • 因为第一个字符就已经分出大小,所以 "apple" 整体小于"banana"

因此,strcmp("apple", "banana") 返回一个小于 0 的整数值(具体实现可能返回 -1 或两字符 ASCII 的差值 -1,但标准仅保证是负数)。

8.要找出1000以内所有不能被7整除且个位数位不为7的数,最适合使用的算法?( )

A.递归法

B.枚举法

C.分治法

D.动态规划

解析:此题考察的是枚举。

9.阅读以下程序,输入整数60时,程序的输出结果?( )

#include<iostream>intmain(){    int n;  std::cin >> n;    for(int p = 2; p*p <= n; ++p)    {          while(n % p == 0)    {      n = n / p;      std::cout << p << " ";         }  }  if(n > 1)    std::cout << n;}

A.2 2 3 5

B.2 3 5

C.2 3 3 60

D.2 5

解析:此题是一个分解质因数的程序。

当p等于2时,2*2<=60,60%2==0满足条件输出2;60/2=30,30%2==0满足条件,继续输出2;30/2=15,15%2!=0,不满足,跳出循环;

当p等于3时,3*3<=15,15%3==0满足条件输出3;15/3=5,5%3!=0,不满足,跳出循环;

当p等于4时,4*4<=5,条件不成立,循环终止。

循环结束之后n的值为5,如果n>1,则输出n,也就是输出5,所以最终输出的数有2、2、3、5。答案为A选项。

10.以下代码用于统计1~100中,个位数字是3的数的个数,横线处应填入的代码?( )

#include<iostream>intmain(){       int cnt = 0;       for(int i=1;i<=100;i++){      if(_________)        cnt++;    }    std::cout << cnt;}

A.i % 3 == 0

B.i / 10 == 3

C.i % 10 == 3

D.i / 3 == 0

解析:各位数字是3的数的个数,就是除以10之后看余数是否为3,满足条件的是C选项。

二、判断题(共10题,共20分)

11.函数的返回值类型为void时,函数内不能使用return语句。(

解析:void 函数可以用 return,但后面不准接“东西”;只能光杆退出,不能带值返回。

12.C++中,函数支持重载,即同名函数可以有不同的参数列表。(

13.引用传递方式下,函数内对形参的修改会影响到实参。(

14.递归函数必须有明确的终止条件,否则会出现无限递归,导致栈溢出。(

15.递归算法的执行效率一定高于非递归算法。(

解析:在绝大多数情况下,递归算法的执行效率(时间和空间)通常低于非递归(迭代)算法递归优雅但费时费空间,循环粗糙但快且省内存。

16.strcpy(a, b)会将字符串b的内容复制到字符串a中,无需考虑a的空间大小。(

解析:使用 strcpy(a, b) 时,必须确保目标字符串 a 的内存空间足够大,能够完整容纳源字符串 b 的内容(包括末尾的 \0 结束符)。如果空间不足,程序会发生缓冲区溢出(Buffer Overflow),导致不可预测的严重后果。

17.C风格字符串以`\0`作为结束标志。(

18.枚举法的核心是遍历所有可能的情况,逐一验证是否符合条件。(

19.枚举法的时间复杂度通常很低,适用于所有数据范围的问题。(

解析:枚举法(暴力法)的时间复杂度通常很高,并且仅适用于数据范围较小的问题,绝不适合所有数据范围。

20.模拟法是通过代码模拟问题的实际执行过程,从而得到结果。(

三、编程题(共2题,共60分)

21.知识竞赛

在一场知识竞赛中,选手答对一题得1分,答错不得分且要倒扣1分,但扣分不能让分数小于 0。

给定一个由 Y 及 N 构成的字符序列,答对记为 Y,答错记为 N。

选手一开始从 0 分开始,请输出选手最后的得分。

输入格式

单个字符序列:保证仅由字母 Y 及 N 组成。

输出格式

单个整数,表示最终得分。

说明提示

设n表示字符序列的长度,1≤n≤100,000。

#include<bits/stdc++.h>using namespace std;intmain(){    char a[100000];    cin>>a;    int cnt=0;    int len=strlen(a);    for(int i=0;i<len;i++){        if(a[i]=='Y') cnt++;        else if(a[i]=='N'){	    if(cnt>0){		cnt--;	    }	}    }    cout<<cnt;    return 0;}

22.上升三元组

当0≤a≤b≤c时,称 a,b,c为上升三元组。

给定一个整数 n,请输出所有三数之和等于 n 的上升三元组。

若有多个三元组满足条件,则首先输出第一项较小的三元组,若第一项相等,则先输出第二项较小的三元组。

输入格式

单个整数表示 n

输出格式

若干行,每行三个自然数,中间用一个空格分开

说明提示

0≤n≤2000

#include<bits/stdc++.h>using namespace std;intmain(){    int n;    cin>>n;    for(int a=0;a<=n/3;a++){        for(int b=a;b<=(n-a)/2;b++){	    int c=n-a-b;	    if(c>=b){	        cout<<a<<" "<<b<<" "<<c<<endl;	    }        }     }    return 0;}
----end-----

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

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

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

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