关注我了解更多少儿编程内容

青少年软件编程(C/C++)等级考试试卷(三级)2026年03月
一、单选题(共10题,共20分)
1.以下关于C++函数的说法,正确的?( )
A.函数必须有返回整数值,否则无法通过编译
B.函数可以嵌套定义,即在一个函数内部定义另一个函数
C.函数可以没有参数,也可以有多个参数
D.函数声明和函数定义必须写在同一个文件中
解析:A. 错误:函数不必须返回整数值。C++ 允许定义 void 类型的函数(无返回值),也可以返回 float、char、bool、自定义类类型等任意数据类型。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 <= 1) return 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;}
如果你觉得陈老师写的对你有帮助,可以点赞关注额。感谢大家的支持。

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