蓝桥等考C++组别十六级
第一部分:选择题
1、
C++ L16 (
15
分)
已定义结构体类型Student来保存学生的学号和姓名:
struct Student{
int sn; //学号
char name[20];//姓名
} stu;
要想
给
结构体
变量stu赋值(
100001
,“
xiaozhi
”),以下代码
赋值
正确的是( )。
A
.
stu.sn = 100001;
stu.name = "xiaozhi";
B.
stu = Student(100001, "xiaozhi");
C.
stu = {100001, "xiaozhi"};
D.
Student stu2 = {100001, "xiaozhi"};
stu = stu2;
正确答案:
D
2
、C++ L16 (
15
分)
以下
关于文件名
说法正确的是( )。
A
.
文件名可以包含
英文符号
“
\”
B.
文件名可以包含
英文符号
“
/
”
C
.
文件名可以包含
英文符号
“
%
”
D.
文件名可以包含
英文符号
“
?
”
正确答案:C
3
、C++ L16 (20分)
要
想下方代码
依次输出数组a的元素,下划线处不应该填写( )。
int a[5] = {1, 2, 3, 4, 5};
int *p = a;
for (int i = 0; i < 5; i++)
{
cout << _________ << ' ';
}
A
.
p[i]
B.
a[i]
C.
*(a++)
D.
*(p + i)
正确答案:C
第二部分:编程题
4、
C++ L16
模仿秀
(
2
0分)
题目名称:
模仿秀
题目描述:
电视台举办一场模仿秀节目,评委根据选手的体态、语言和形体动作的相似程度进行打分,现给出n位选手的各项得分情况,要求统计出每位选手的总分。
输入:
第1行有1个整数n(1≤n≤100),表示选手的人数。
接下来有n行,每行包含
3
个正整数,分别表示体态、语言和形体动作各项的得分(每项得分均不大于1
00
),
相邻两个数中间用一个空格分隔。
输出:
共n行
(
按输入顺序输出
每
名选手的总分
)
;
每行1个整数,表示一名选手的总分。
输入样例:
3
90 80 100
93 99 70
89 91 80
输出样例:
270
262
260
参考程序:
#include<iostream>
#include<cstring>
using namespace std;
const int N = 100;
struct Score{
int a1;
int a2;
int a3;
int total;
} score[N + 1];
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> score[i].a1 >> score[i].a2 >> score[i].a3;
score[i].total = score[i].a1 + score[i].a2 + score[i].a3;
}
for (int i = 0; i < n; i++)
{
cout << score[i].total << endl;
}
return 0;
}
测试数据:
1.in
3
90 80 100
93 99 70
89 91 80
1.out
270
262
260
2.in
5
71 81 66
95 84 95
72 77 92
60 84 64
83 88 89
2.out
218
274
241
208
260
余下略
5、
C++ L16
模仿秀前三名
(
3
0分)
题目名称:
模仿秀前三名
题目描述:
电视台举办一场模仿秀节目,评委根据选手的体态、语言和形体动作的相似程度进行打分。现在给出n位选手的编号和总分,要求按照总分从大到小的顺序输出
排在
前三名选手的编号和总分;如果总分相同,则编号小的排在前面。
输入:
第一行是一个正整数n (3 < n < 100),表示
选手
的人数;
接下来
有
n行,每行包含两个正整数,分别为每
位选手
的
编号
(不大于100)和
总分
(不大于300),
两数
中间用一个空格隔开。
题目保证
编号
不重复。
输出:
共
3
行,
每行两个正整数,分别表示
排
在前三名选手的
编号和总分,
两数中间用一个空格隔开。
输入样例:
5
1 240
2 262
3 229
4
199
5
210
输出样例:
2 262
1 240
3 229
参考程序:
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 100;
struct Score{
int sn;
int total;
} score[N + 1];
bool cmp(Score a, Score b)
{
if(a.total != b.total)
return a.total > b.total;
return a.sn < b.sn;
}
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> score[i].sn >> score[i].total;
}
sort(score, score + n, cmp);
for (int i = 0; i < 3; i++)
{
cout << score[i].sn << " " << score[i].total << endl;
}
return 0;
}
测试数据:
1.in
5
1 240
2 262
3 229
4 199
5 210
1.out
2 262
1 240
3 229
2.in
8
1 209
2 290
3 215
4 241
5 268
6 228
7 264
8 286
2.out
2 290
8 286
5 268
余下略
蓝桥杯青少组C++组别16级编程练习真题(第6套,共6套)