蓝桥等考C++组别十二级
第一部分:选择题
1、C++ L12 (15分)
在C++中,以下对主函数和子函数的描述不正确的是(
)。
A.
程序中除了主函数以外的函数都是子函数
B.
完整的程序中可以没有子函数,但不能没有主函数
C.
程序中子函数可以单独执行
D.
程序中子函数名不能与主函数名相同
正确答案:C
2、C++ L12 (15分)
关于C++的函数体,以下描述不正确的是( )。
A.
函数中最外层的一对大括号“
{}
”
括
起来的语句组成了一个函数的函数体
B.
函数体内的语句决定该函数的功能
C.
一个函数的函数体中可以定义另一个函数
D.
一个函数的函数体中可以调用另一个函数
正确答案:C
3、C++ L12 (20分)
执行以下代码,程序的输出是( )。
void xchange(int a, int b)
{
int tmp = a;
a = b;
b = tmp;
cout << a << ' ' << b << endl;
}
int main()
{
int m = 1, n = 100;
xchange(m, n);
cout << m << ' ' << n << endl;
return 0;
}
A
.
1 100
100 1
B.
1
00 1
1
00 1
C.
1 100
1 100
D.
1
00 1
1
100
正确答案:D
第二部分:编程题
4、C++ L12 “1”出现的次数(
2
0分)
题目名称:
C++
L12
“1”出现的次数
题目描述:
给定两个正整数m、n,在纸上写下从m到n的所有整数,然后数一下数字“1” 出现的次数。
例如:当m
=1
,n=
2
时,写下1,2。总共出现了1个“1”;
当m
=8
,n=12时,写下8,9,10,11,12。总共出现了
4
个“1”。
请设计程序来统计从m到n之间(含m和n)所有整数中数字“1”出现的次数。
输入:
输入两个正整数m、n(
0
<
m
<
n
<
1,000,000
)。
输出:
输出一个整数
,
表示
数字“1”出现的次数。
输入样例:
8 12
输出样例:
4
参考代码:
#include<iostream>
using namespace std;
int cnt1(int k)
{
int s = 0;
while (k)
{
if (k % 10 == 1)
s++;
k /= 10;
}
return s;
}
int main()
{
int m, n, s = 0;
cin >> m >> n;
for (int i = m; i <= n; i++)
{
s += cnt1(i);
}
cout << s;
return 0;
}
测试数据:
1.in
8 12
1.out
4
2.in
1 122
2.out
56
3.in
2000 9000
3.out
2100
4.in
20000 30000
4.out
4000
5.in
100000 999999
5.out
550000
5
、C++ L12 亲和数(
3
0分)
题目名称:
C++
L12
亲和数
题目描述:
在遥远的古代,人们发现某些自然数之间有特殊的关系:如果两个数a和b,a除
了它
本身以外的所有
因
数之和等于b,b除
了它
本身以外的所有因数之和等于a,则称a,b是一对亲和数。
例如当
a=220
,
b
=
284
时,2
20
除了2
20
之外的因数
包括1,2,4,5,10,11,20,22,44,55,110,
和
是
2
84
;2
84
除了2
84
之外的因数
包括1,2,4,71,142,
和
是220
。
现给定若干对正整数,判断每一对数是否是亲和数。
输入:
有若干行,第一行是一个正整数n,表示后面输入数据的行数(
0
<
n
<
=
1
00
);
接下来有n行,每行包含两个正整数(不大于
2,000
,
000
),两数中间用空格隔开。
输出:
有n行
,
每行都只有
一个整数
,按输入顺序依次输出对应的两个数是否为亲和数,1表示是亲和数,0表示不是亲和数。
输入样例:
2
220 284
2
2 28
输出样例:
1
0
参考代码:
#include <iostream>
using namespace std;
int divsum(int);
int main()
{
int n, num_1,num_2;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> num_1 >> num_2;
if (divsum(num_1) == num_2 && num_1 == divsum(num_2))
cout << 1 <<endl;
else
cout << 0 << endl;
}
}
int divsum(int x)
{
int sum = 0;
for( int i = 1 ; i < x ; ++i )
{
if( x % i == 0 )
{
sum += i;
}
}
return sum;
}
测试数据:
1.in
2
220 284
22 28
1.out
1
0
余下略
蓝桥杯青少组C++组别12级编程练习真题(第5套,共8套)