2022
年
第
5
届全国青少年人工智能创新挑战赛C++信息学专项真题
一、单项选择题(共 15 题,每题 2 分,共计 30 分;每题有且仅有一个正确选项)
1. 在C++中,下列标识符合法的是( )。
A._tmp
B.c+b
C.52C++
D.J#P
2. 若定义int a=056,则执行
cout << a;
语句后,输出的结果是( )。
A. 56
B. 2E
C. 46
D. 214
3. 若定义short a;char b;int c; 则表达式 a-b*c 的类型是( )。
A. short
B. int
C. long
D. char
4. 下列有关分支结构的叙述中,正确的是
A. if(x>y) ; 不是一个正确的C++语句
B. switch(x){……}语句中的x可以是浮点类型
C. switch语句中不一定要使用break语句
D. 若有语句if(a) x++; 则表达式a 是不正确的
5. 下列有关循环控制语句的叙述中,正确的是( )
A. for语句构成的循环只能用break 语句退出
B. 用for 语句构成的循环,表达式2的值为零时结束循环
C. while 语句构成的循环不能用for语句构成的循环来代替
D. 用while 语句构成的循环,在while 后的表达式为非零时结束循环
6. 下面程序的功能是输出10到100中的完全数。则在空白处应填入( )。说明:一个数的因子(除了这个数本身)之和等于该数本身,则称这个数为完全数。如:6的因子是1、2、3,它的因子和1+2+3等于6,因此6是完全数。
#include
using namespace std;
int main() {
int i, j, s;
for (i = 10; i <= 100; i++) {
s = 0;
for (j = 1; j < i; j++)
_______________
if (i == s)
cout << s << endl;
}
return 0;
}
A. if (i%j == 0) s+=j;
B. if (i%j == 0) s-=j;
C. if (i%j != 0) s-=j;
D. if (i%j != 0) s+=j;
7. 在定义数组时,对数组元素赋初值 ,下列不正确的是( )
A. int a[5] = {0,1,2,3,4};
B. int a[5]={ };
C. int a[5]={0,1};
D. int a[5]={0,1,2};
8. 若有定义:char st[10]="print" ; 则st[2]的值是( )
A. rint
B. int
C. i
D. r
9. 下列定义整型变量num并初始化为0的语句是( )
A. int num;
B. int num(0);
C. char num=0;
D. char num=’0’;
10. 运行下列程序,输出结果是( )
#include
#include
using namespace std;
int main() {
float x = 8 / 3.0;
cout << x << ' ';
cout << setiosflags(ios::fixed);
cout << setprecision(0) << x << ' ';
cout << setprecision(2) << x << '\n';
return 0;
}
A. 2.66667 3 2.67
B. 2.66666 2 2.66
C. 2.66 2 2.66
D. 2.67 3 2.67
11. 在C++中,若有定义:int b[ ][3]={1,2,3,4,5,6,7,8,9}; 则二维数组b的行数是( )
A. 9
B. 4
C. 3
D. 1
12. 若有:int i, j, *p1, *p2 = & j; 下列赋值语句不正确的是( )
A. *p1 = 100;
B. *p2 = 100;
C. p1 = & i;
D. p2 = & i;
13. 运行下列程序,输出结果是( )
#include
#include
using namespace std;
int main() {
string s1 = "Welcome";
char s2[] = " Beijing!";
cout << s1;
cout << s2 << endl;
return 0;
}
A. Welcome Beijing!
B. WelcomeBeijing!
C. Beijing!
D. Welcome
14. 输入行数,约定 ,输出以下图形。应在C++代码横线处填入( )
#include
using namespace std;
int main() {
string str = "hello";
cout << str.length() << endl;
return 0;
}
A. 5
B. 4
C. 3
D. 2
15. 若类A被说明成类B的友元,则下列叙述正确的是( )
A. 类A的成员函数可以访问类B的所有成员
B. 类B的成员函数可以访问类A的所有成员
C. 类A的成员即是类B的成员
D. 类B的成员即是类A的成员
二、多选题(共 5 题,每题 4 分,共计 20 分,每题可能有多个正确选项)
16. 阅读如图所示的框图,若输入a,b的值分别为20,80。则输出的S值不能为( )
A. 20
B. 80
C. 100
D. 2080
17. 运行下列程序,若输入x为5,y为8,则输出结果不可能是( )
#include
using namespace std;
int main() {
int x, y;
cin >> x >> y;
if (y == 8)
if (x == 5)
cout << '@';
else
cout << '#';
cout << '$';
cout << '&';
return 0;
}
A. @$&
B. #
C. @
D. #$&
18. 在C++中使用二分法查找,被查数据需要的特征包括( )
A. 数据为有序排列
B. 数据存储在数组中
C. 数据存储在链表中
D. 数据可以随机排列
19. 运行下列程序,输出结果不可能是( )
#include
#include
using namespace std;
int main() {
float x = 5 / 3.0;
cout << x << ' ';
cout << setiosflags(ios::fixed);
cout << setprecision(0) << x << ' ';
cout << setprecision(2) << x << '\n';
return 0;
}
A. 1.66666 1 1.66
B. 1.66667 2 1.67
C. 1.66 1 1.67
D. 1.66 2 1.67
20. 下列有关复制对象的方法叙述中,正确的有( )
A. Object o1(10); O
2022年第5届全国青少年人工智能创新挑战赛C++信息学专项真题