【解析】第十四届蓝桥杯11月STEMA-C++真题解析
一、选择题
01
第一题
A、0
B、1
C、2
D、3
02
第二题
执行以下代码,输出的结果是( )。
char a[6] = {'a', 'b', 'c', 'd'};
cout << sizeof(a);
A、4
B、6
C、8
D、12
【答案】B
【解析】sizeof(数组名) 返回数组长度(所占的字节数,不是数组元素个数),一个char 类型变量占一个字节。
03
第三题
关于C++中的一维数组,以下描述正确的是( )。
A、数组中的元素类型可以不相同
B、数组在内存中有一段连续的单元
C、数组中的最后一个元素的下标(索引)为 -1
D、静态数组中的元素的个数可以大于数组初始时设定的长度
【答案】B
【解析】数组是一定数量的同类型变量组成的整体,在内存中占用一段连续的存储单元,数组中第一个元素的下标为 0,最后一个元素的下标为 数组长度-1,静态数组(即我们经常使用的数组,例如 int a[10010]; )的长度是预先定义好的,在整个程序中,一旦给定大小后就无法改变。
04
第四题
以下关于 while 和 do...while 循环语句描述不正确的是( )。
A、do...while 的循环条件可以是 1
B、while 的循环体可以是复合语句
C、do...while 的循环体至少执行一次
D、执行 do...while 语句,首先判断循环条件,当满足循环条件,开始执行循环体
中的语句
【答案】D
【解析】while 语句,先判断循环条件,当满足循环条件,才会执行循环体中的语句;do...while 语句,先执行一次循环体中的语句,再判断循环条件,当满足循环条件,才会继续执行循环体中的语句。
05
第五题
已知:int a, b = 5, *p = &a ,下列表达式哪一个可以将 b 赋值给 a ?( )。
A、*p = *&b;
B、a = *p;
C、a = &b;
D、a = **p;
【答案】A
【解析】
&a 表示变量 a 的地址,int *p; 表示定义一个指向 int 类型变量的指针p (即用来存储某一个 int 类型变量的内存地址)。
解引用运算符 * 的作用是将一个指针解引用,也就是获取指针指向内存地址的内容,定义一个指针之后使用 *p 表示 p 这个指针指向的内存地址中存放的内容,即*p 表示一个变量,存储的是一个值。
A 选项中, &b 表示变量 b 的地址, *&b 等价于变量 b , int *p = &a; 表示定义一个 int 类型的指针,初始值为变量 a 的地址, *p 等价于变量 a ,那么 *p = *&b; 等价于将变量 b 赋值给变量 a 。
B 选项中, a = *p; 等价于将变量 a 赋值给变量 a 。
C 选项中, a = &b; 等价于将变量 b 的地址赋值给变量 a ,类型不匹配。
D 选项中, a = **p; 将指针 p 是一个一级指针,不能被解引用两次。
二、编程题
01
第一题 切割蛋糕
【题目描述】
【输入格式】
【输出格式】
【输入样例1】
2
【输出样例1】
9
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
cout << (n + 1) * (n + 1) << endl;
return 0;
}
【解析】
021
第二题 拼写单词
【题目描述】
【输入格式】
【输出格式】
【输入样例1】
A
【输出样例1】
Apple
#include <iostream>
using namespace std;
int main()
{
char c;
cin >> c;
if (c == 'A') cout << "Apple" << endl;
if (c == 'B') cout << "Banana" << endl;
if (c == 'O') cout << "Orange" << endl;
if (c == 'P') cout << "Pear" << endl;
return 0;
}
【解析】
0321
第三题 业务办理时间
【题目描述】
【输入格式】
【输出格式】
【输入样例1】
7
3 5 2 4 7 1 6
【输出样例1】
6
#include <iostream>
using namespace std;
int n, q[10], x;
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> x;
int t = 1;
if (q[2] < q[t]) t = 2;
if (q[3] < q[t]) t = 3;
q[t] += x;
}
cout << min(q[1], min(q[2], q[3])) << endl;
return 0;
}
【解析】
04321
第四题 找路线
【题目描述】
【输入格式】
【输出格式】
【输入样例1】
【输出样例1】
5
#include <iostream>
using namespace std;
int main()
{
int n, m;
cin >> n >> m;
n = m - n + 1;
int a = 1, b = 1, c = a + b;
for (int i = 2; i <= n; i++)
{
c = a + b;
a = b;
b = c;
}
cout << a << endl;
return 0;
}
【解析】
054321
第五题 最大乘积
【题目描述】
小明有N(4≤N≤60)个玻璃球,他想将N个玻璃球拆分成若干份(份数≥2,且每份中的数量互不相等),从而使拆分后的每份玻璃球数量的乘积最大。请你编写程序帮助小明计算出最大乘积是多少。
例如:N = 5,5个玻璃球有2种符合条件的拆分方法:(4,1)、(3,2);
其中,能得到最大乘积的拆分方法为(3,2),最大乘积为6(6=3*2)。
【输入格式】
输入一个正整数N(4≤N≤60),表示玻璃球的总数量
【输出格式】
输出一个整数,表示最大乘积
【输入样例1】
5
【输出样例1】
6
#include<iostream>
using namespace std;
int n, a[30];
int main()
{
cin >> n;
int x = 2;
while (x <= n)
{
a[x] = x;
n -= x;
x++;
}
if (n == x - 1) a[x - 1]++;
for (int i = x - 1; n >= 1 && i >= 2; i--)
{
a[i]++;
n--;
}
int ans = 1;
for (int i = 2; i < x; i++) ans *= a[i];
cout << ans << endl;
return 0;
}
【解析】

添加 家长论坛微信
全部 0条评论