蓝桥等考C++组别
十六
级
第一部分:选择题
1、
C++ L16 (
15
分)
关于结构体,以下说法正确的是( )。
A
.
结构体只能包含基本数据类型的成员变量,不能包含数组成员。
B.
结构体类型可以声明变量,但是不能声明结构体数组。
C.
可以使用赋值运算符将一个结构体变量赋值给另一个结构体变量。
D.
定义结构体类型时,系统实际上就已经分配了内存。
正确答案:C
2
、C++ L16 (
15
分)
关于计算机文件系统,以下说法正确的是( )。
A
.
文件名中可以包含“
*
”这个符号。
B.
在
Windows系统里
文件名区分大小写。
C.
文件名通配符
“?”表示其所在的位置可以是任意一个字符。
D.
在
Windows
系统里,一块硬盘就只有一个根目录
。
正确答案:C
3
、C++ L16 (20分)
关于指针,以下说法正确的是()。
A
.
指针变量必须初始化为某个变量的地址。
B.
设指针变量
p
指向数组
a
,则可以使用
p
[0]
访问数组元素a[
0]
。
C.
程序运行过程中,变量的值可以改变,变量地址也可以改变。
D.
程序运行时,数据都存放在内存中,代码没有存放在内存中。
正确答案:B
第二部分:编程题
4、
C++ L16
奖牌
统计
(
2
0分)
题目名称:
奖牌统计
题目描述:
今年大学生运动会,小蓝要根据每个学校获得的金牌、银牌和铜牌数量,统计出每个学校获得的奖牌总数。
输入:
第1行是1个正整数,表示参加运动会的学校数目n(1≤n≤
20
00)。
其后有n行数据,每行包括4个非负整数,分别表示学校编号(不超过
999999
),以及金牌、银牌和铜牌数量(不大于
200
),两项数据中间用空格分隔。
输出:
共n行,
每行包含2个非负整数,表示某学校的学校编号以及获得的奖牌总数,中间用单个空格分隔。
输入样例:
3
1 4 12 24
2 3 20 30
3 0 30 23
输出样例:
1 40
2 53
3 53
参考程序:
#include<iostream>
#include<cstring>
using namespace std;
const int N = 2000;
struct Medal{
int name;
int g;
int s;
int b;
int total;
} medal[N + 1];
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> medal[i].name >> medal[i].g >> medal[i].s >> medal[i].b;
medal[i].total = medal[i].g + medal[i].s + medal[i].b;
}
for (int i = 0; i < n; i++)
{
cout << medal[i].name << " " << medal[i].total << endl;
}
return 0;
}
测试数据:
1.in
3
1 4 12 24
2 3 20 30
3 0 30 23
1.out
1 40
2 53
3 53
余下略
5
、
C++ L16
奖牌榜
(
3
0分)
题目名称:
奖牌榜
题目描述:
今年大学生运动会,小蓝要根据每个学校获得的奖牌数量,按奖牌总数从多到少进行排序,整理出奖牌榜;如果有相同总奖牌数,则学校编号小的排在前面。
输入:
第1行是1个正整数,表示参加运动会的学校数目n(1≤n≤
20
00)。
接下来的n行,每行包含两个正整数,分别为每个学校的编号(不大于9
99999
)和总奖牌数(不大于
600
), 中间用单个空格隔开。
输出:
n行,是将学校按总奖牌数从高到低的顺序进行排序的结果,每行包含学校编号和总奖牌数,之间用一个空格隔开。
输入样例:
3
1 40
2 53
3 53
输出样例:
2 53
3 53
1 40
参考程序:
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 2000;
struct Medal{
int name;
int total;
} medal[N + 1];
bool cmp(Medal a, Medal b)
{
if(a.total != b.total)
return a.total > b.total;
return a.name < b.name;
}
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> medal[i].name >> medal[i].total;
}
sort(medal, medal + n, cmp);
for (int i = 0; i < n; i++)
{
cout << medal[i].name << " " << medal[i].total << endl;
}
return 0;
}
测试数据:
1.in
3
1 40
2 53
3 53
1.out
2 53
3 53
1 40
余下略
蓝桥杯青少组C++组别16级编程练习真题(第2套,共6套)