中国“芯”AI算法与编程赛小学组C++选择题(答案篇)

一、单选题

1.在C++中,下列标识符不合法的是( ).
A. c*b
B.  _tmp
C. ok
D.J123

第1题:A
C++标识符不合法总结:1.出现特殊符号(除下划线外的其他符号)    2.不以数字开头

2.若定义int a=066,则执行cout <<a; 语句后,输出的结果是( ).
A. 54
B. 66
C. 78
D. 102

第2题:A
0打头的数字在c里是表示8进制的,066换成十六进制就是6*8+6=54(如果后面数字不是8进制有效数据,比如int n=086,则无法通过编译)
同样,如果是0x打头则是十六进制,比如int n=0x66,那么n实际上就是十进制的96
少数编译器
也支持0b打头,表示二进制,比如int n=0b101

3.运行下列程序,输出结果是( ).

#include<iostream>
using namespace std;
int main()
{
	int i=1;
	int s=1,a=0;
	for(i=0;i<3;i++)
	{
		s +=i;
		a++;
	}
	cout<<s<<","<<i<<","<<a<<endl; 
	return 0;
}

A. 3,3,4
B. 4,4,3
C. 3,4,3
D. 4,3,3

第三题:D
s:1+1=22+2=4
i:i循环3次为3
a:循环3次位3

4.若有定义: char str[20]="Hello";则执行cout<<strlen(str)<<" ,"<<sizeof(str)<<endl; 语句的输出结果是( ).
A. 6,20
B. 7,20
C. 20,6
D. 20,7

第四题:A

  1. sizeof()计算变量所占内存内存空间大小的,单位是字节,如果操作数是类型的话,计算的是使用类型创建的变量所占内存空间的大小。
    sizeof()只关注占内存空间的大小,不在乎内存中存放什么数据。
  2. strlen()是C语言库函数,功能是求字符串长度。 函数原型:

strlen ( str) 的长度Hello 还要加上一个\n,共计6个

5.C++中,用来定义短整型变量的关键字是( ).
A. unsigned int
B. int
C. short int

D. long

第五题:C
短整型变量的关键字是:short int

6.下列数据中,不合法的C++常量是( ).

A. 0x18
B. 'bool'
C. 2.5e-3
D. 055

第六题:B
B.布尔类型

7.C++中,下列标识符合法的是( )
A. c/b
B. 20m
C. c20
D. J#P

第七题:C
C++标识符不合法总结
1.出现特殊符号 2.不以数字开头

8.下列定义整型变量n6,并初始化为6的语句是(  )

A.int n6='6;
B. int n6=6;
C. char n6=6;
D. char n6='6';

第八题:B
整数型:int 写入方法int a=123

9.定义int a,b,c; 执行cin>>a>>b>>c; 语句,若将a赋4,b赋5,c赋6的正确输入是( )

(注:←表示回车换行)

A.4:5:6←

B.4;5;6←

C.4,5,6←

D.4 5←6←

第九题:D
回车或空格都表示隔开

10.运行下列程序,输出结果是( )

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	float x=20/3.0;
	cout<<x<<" ";
	cout<<setiosflags(ios::fixed);
	cout<<setprecision(0)<<x<<" ";
	cout<<setprecision(2)<<x<<"\n";
	return 0;
}

A.6.66666 6 6.66

B.6.66 6 6.67

C.6.66 7 7.67

D.6.66667 7 6.67

第十题:D
默认保留6位有效数字
四舍五入保留整数
四舍五入保留小数点后两位

11.阅读如图所示的框图,若输入a,b的值分别为30,5,则输出的S值为( )

A. 5

B. 30

C. 35

D. 305

第十一题:C
S=a+b 30+5=35

12.下列有关分支结构的叙述中,不正确的是( )

A. if(a==0) x++;  不是一个合法的C++语句

B. switch(3){……}是一个合法的C++语句

C. switch语句中不一定要使用break语句

D. if(a>b) m++;else m--是一个合法的C++语句

第十二题:A
if(a==0) x++;是一个合法的C++语句;

B选项:switch语句中缺少case;

C选项:switch语句中可以不使用break语句,此时会发生case穿透现象;

D选项:这个语句缺少结尾分号

13.运行下列程序,若输入:5←,则输出结果是( )

(注:←表示回车换行)

#include<iostream>
using namespace std;
int main()
{
	float x,y;
	cin>>x;
	if(x<0.0)	y=x+10.80;
	else if(x<10.0)	y=1.0/x;
	else y=x+1.5;
	cout<<y<<endl;
	return 0;
}

A. 15.8

B. 6.50

C. 0.2

D. 0.20

第十三题:C
输入5执行else if组合1.0/5==0.2

14.下列有关循环控制语句的叙述中,不正确的是( )

A. while循环语句是先循环在判断

B. for语句构成的循环可以用break语句退出

C. while语句构成的循环可以用for语句构成的循环来代替

D. for语句的3个表达式均可以省略,但之间的分号不能省略

第十四题:A
A.while是先判断再循环;

B.break语句用在循环语句中,可以跳出这一层循环;

C.while和for循环可以相互代替;

D.for( ; ; )for语句的3个表达式均可以省略,但之间的分号不能省略

15.运行下列的程序,输出结果是( )

#include<iostream>
using namespace std;
int main()
{
	int i=1;
	int s=1,a=0;
	for(i=0;i<3;i++)
	{
		s +=i;
		a++;
	}
	cout<<s<<","<<i<<","<<a<<endl; 
	return 0;
}

A. 3,4,5

B. 3,4,2

C. 4,3,2

D. 4,3,3

第十五题:C
s:1+1=22+2=4
i:循环2次为3。因为初始值为1
a:循环2次为2。因为初始值为0

16.下列程序的功能是输出20到80中的完全数,则在空白处应填入( )

说明:一个数的因子(除了这个数本身)之和等于该数本身,则称这个数为完全数。如6的因子是1、2、3,它的因子和1+2+3等于6,因此6是完全数。

#include<iostream>
using namespace std;
int main()
{
	int i,j,s;
	for(i=20;i<=80;i++)
	{
		s=0;
		for(j=1;j<i;j++)
		____________
		if(i==s)
		cout<<s<<endl;
	}
	return 0;
}

A. if(i%j==0) s=s+1;

B. if(i%j==0) s=s+j;

C. if(i%j==0) s=j+1;

D. if(i%j!=0) s=s+j;

第十六题:B

17.在定义数组时,对数组元素赋初值,下列正确的是( )

A. int a[5]={10,11,12,13,14,15};

B. int a[5]={};

C. int a[5]=10,11,12,13,14;

D. int a[5]={10};

第十七题:A
A.多了一个
B.没有赋值
C.赋值方式不对

18.运行下列程序,若输入:78 66 87 75 99←,则输出结果是( )

(注:←表示回车换行)

#include<iostream>
#define N 5
using namespace std;
int main()
{
	int a[N],m1,m2,i;
	for(i=0;i<N;i++)
		cin>>a[i];
	m1=m2=a[0];
	for(i=1;i<N;i++)
		if(a[i]<m2)	m2=a[i];
		else if(a[i]>m1)	m1=a[i];
	cout<<m1<<","<<m2<<endl;
	return 0;
}

A. 66,99

B. 66,75

C. 78,87

D. 99,66

第十八题:D
一个找最大元素99
一个找最小元素66

19.若有定义:char c[10]="fish",则c[1]的值是( )

A. i

B. f

C. ish

D. fish

第十九题:A
第0个值为f
第1个值为

20.若有定义: char str[20]="Book\n";则执行cout<<strlen(str)<<" ,"<<sizeof(str)<<endl; 语句的输出结果是( ).
A. 20,6
B. 6,20
C. 5,20
D. 20,5

第二十题:C
长度为5 空间为20

21.运行下列程序,若输入:0 0←,则输出结果是( )

(注:←表示回车换行)

#include<iostream>
using namespace std;
int main()
{
	char k;int i;
	for(i=1;i<3;i++)
	{
		cin>>k;
		switch(k)
		{
			case '0':cout<<"ok"<<endl; break;
			case '1':cout<<"book"<<endl;
		}
	}
	return 0;
}

A. book book
B. ok book
C. ok ok
D. book ok

第二十一题:C
执行的两次都为case'0'因此ok ok

22.下列对转义字符描述不正确的是()。
A. \r: 回车,将当前位置移到本行开头
B.  \n: 换行,将当前位置移到下一行开头
C. \: 代表一个反斜线字符'\'
D. \": 代表一个双引号字符

第二十二题:C
\n代表换行
\r代表回车(转到行首)
\t代表制表符
\0代表字符串结尾
字符串中\"可以代表单纯地保存双引号这个字符

23.下列有关分支结构的叙述中,正确的是()。
A. 如果在if、esle后有多条语句,则必须用花括号将这些语句括起来,否则只有后跟的第1条语句有效。
B. switch括号中的表达式只能是整型、字符型枚举型或布尔型
C. if语句中的条件表达式只能是逻辑表达式
D. 每个case分支最后应该加break语句

第二十三题:A
A.esle错误应该else
B.switch不可以是布尔型
D.可以不加break

24.下列关于一维数组初始化描述不正确的是()。
A. 可以在编译阶段使数组得到初值
B. 可以只给一部分元素赋初值
C. 在对全部数组元素赋初值时,可以不指定数组长度
D. 将所有数据写在一个{}内,按顺序赋值

第二十四题:C

A. 可以在编译阶段使数组得到初值
这个选项是正确的。在C++中,你可以在声明数组的同时对其进行初始化,这些初始化值是在编译阶段就确定的。

B. 可以只给一部分元素赋初值
这个选项也是正确的。在C++中,如果你只给数组的一部分元素赋初值,那么其余的元素会被自动初始化为0(对于基本数据类型如int,float等)。例如:int arr[5] = {1, 2, 3}; 在这里,arr[0] 是1,arr[1] 是2,arr[2] 是3,而 arr[3] 和 arr[4] 都是0。

C. 在对全部数组元素赋初值时,可以不指定数组长度
这个选项是不正确的。在C++中,如果你尝试在给所有元素赋初值时不指定数组长度,编译器会报错,因为它需要知道数组的确切大小来分配内存。例如,你不能这样写:int arr[] = {1, 2, 3, 4, 5}; 而不指定数组的长度。虽然这在某些情况下(如作为函数参数或返回类型时)是合法的,但在这里的上下文中,它意味着“不指定数组长度”,这是不正确的。

D. 将所有数据写在一个{}内,按顺序赋值
这个选项是正确的。这就是数组初始化的标准方式,即将所有元素的值写在一个花括号{}内,并按顺序赋值给数组的元素。

25.下面不是字符串常量的是().
A.  "hello, dear"
B.  "hello," "d" "ear"
C.  "A+B"
D.  'D'

第二十五题:D
双引号字符串常量        单引号字符常量

26-27题目略

二、多选题

28.下列有关C++基本概念的叙述中,正确的有( )。
A. C++是面向对象编程方法
B. C++函数一定有返回语句
C. C++程序中的变量不一定要在函数内部定义
D. C++程序中所使用的所有符号常量都需要定义

第二十五题:AC

A. C++是面向对象编程方法
这个选项是正确的。C++是一种支持面向对象编程(OOP)的语言,它包含类、对象、继承、封装和多态等面向对象编程的基本概念。

B. C++函数一定有返回语句
这个选项是不正确的。C++函数不一定有返回语句,尤其是当函数的返回类型为void时。void类型的函数表示不返回任何值,因此不需要返回语句。当然,对于非void类型的函数,如果没有返回语句并且没有通过其他方式(如通过引用或指针参数)返回值,那么编译器会报错。

C. C++程序中的变量不一定要在函数内部定义
这个选项是正确的。在C++中,全局变量可以在所有函数外部定义,并在整个程序中访问。此外,类的成员变量也是在类定义中定义的,不属于任何特定的函数。

D. C++程序中所使用的所有符号常量都需要定义
这个选项是不完全正确的。C++中的符号常量通常是通过const关键字或#define预处理指令来定义的。然而,并不是所有在C++程序中使用的符号常量都需要显式定义。有些符号常量可能是库函数或系统定义的,比如std::coutNULL(尽管NULL在C++11及以后的版本中已经被nullptr替代)。此外,枚举常量也是符号常量的一种,它们也需要定义。但是,这个选项的表述过于绝对,因为它暗示了所有符号常量都需要程序员显式定义,这是不准确的。

29.下列有关类与对象的叙述中,正确的有( ).
A. 一个对象可以对应多个类
B. 任何一个对象只能属于一个具体的类
C. 一个类只能对应一个对象
D. 一个类可以有一个或多个对象

第二十九题:B D

任何一个对象只能属于一个具体的类;一个类可以有一个或多个对象

A. 在面向对象编程中,一个对象是由一个具体的类实例化出来的,因此它只能直接对应到一个类。对象不可能直接对应到多个类,除非通过继承等关系间接对应,但即使这样,它也有一个最直接的基类。

B. 如上所述,一个对象是某一个类的实例化结果,它属于创建它的那个类。当然,如果这个类继承了其他类,那么这个对象也可以被看作是那些父类的间接实例,但从直接的实例化关系来说,一个对象只属于一个类。

C. 类是一个模板,用于描述具有相同属性和行为的对象的集合。一个类可以实例化出多个对象,每个对象都是这个类的一个实例,具有相同的属性和方法,但可以有不同的状态(即属性值)。

D. 这是面向对象编程的基本概念之一。类定义了对象的属性和行为,而对象则是类的具体实例。一个类可以实例化出多个对象,这些对象共享类的属性和方法,但可以有不同的状态。

30.下列有关C++基本概念的叙述中,正确的有( )。
A. C++是面向对象编程方法
B. C++函数不一定有return语句
C. C++程序中的局部变量可以在函数内部定义

D. C++程序中的全局变量可以在函数内部定义

第三十题:ABC

全局变量要在函数外定义

31.下列有关访问权限控制符的叙述中,正确的有( )。
A. private下定义的数据和成员函数不可以被外部直接访问
B. public下定义的数据和成员函数可以被外部访问

C. protected下定义的数据和成员函数只能在函数内部访问
D. public下定义的数据和成员函数不可以被访问

第三十一题:A B

A. 在C++中,如果一个成员(数据成员或成员函数)被声明为private,那么它只能在类的内部被访问,即只能在类的成员函数内部被访问,而不能从类的外部直接访问。

B. 在C++中,如果一个成员被声明为public,那么它可以在类的外部被直接访问。无论是类的实例还是类的继承者都可以访问public成员。

C. 在C++中,protected成员可以在类的内部(即类的成员函数内部)访问,也可以在类的派生类(即子类)内部访问。但是,它不能被类的外部(即非类的成员函数和非派生类)直接访问。

D. 如上所述,public成员是可以被外部访问的。这是C++中访问权限最高的修饰符。

32.下列有关二分法查找的叙述中,正确的有( ).
A. 二分查找也属于顺序表查找范围
B. 使用二分法查找必须使用线性表的顺序存储结构来存储数据
C. 数据存储在链表中可以使用二分法查找
D. 随机排列的数据也可以通过二分法查找

第三十二题:A B

A. 二分查找(Binary Search)是一种在有序数组中查找某一特定元素的搜索算法。它搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种查找方式利用了数组有序的特性,属于顺序表查找的一种高效方法。

B. 二分查找的前提是数据必须是有序的,并且能够在常数时间内访问任意位置的元素。这通常意味着数据需要以某种形式的顺序存储结构(如数组)来存储。尽管有些高级的数据结构(如平衡二叉搜索树)也支持类似二分查找的操作,但传统的二分查找确实需要数据以顺序存储结构存储。

C. 链表是一种线性表的链式存储结构,它使用指针进行元素的链接。由于链表中的元素在内存中并不是连续存放的,所以无法直接通过索引在常数时间内访问任意位置的元素。这使得链表不适合使用二分查找算法。

D. 二分查找的前提是数据必须是有序的。如果数据是随机排列的,那么二分查找将无法有效地工作,因为它依赖于数组的有序性来缩小搜索范围。

33.下列有关类与对象的叙述中,正确的有()。
A. 构造函数的目的是初始化数据成员
B. 通常同一个类的每个对象都有独立的代码区
C. 程序中构建的函数统称为类的接口

D. 在函数中对数组的引用可以引用数组名本身

第三十三题:A B C
D. 只能逐个引用数组元素,而不能一次引用整个数组;数组元素的表示形式为:数组名[下标]。

34.下列关于 C++语言的叙述,正确的是( )。
A. 变量定义后,可以使用赋值语句改变它的值
B. 变量定义时,必须指定类型
C. 变量名必须为合法标识符

D. 合法标识符可以以数字开始

第三十四题:A B C
D. 标识符不能以数字开头

35.如果a为int类型的变量,b为char类型的变量,则下列哪些语句符合C++语法?( )
A. a=a+1.0;
B. a= (int)(b- '0');
C. b= (char)(a + '0');

D. (int)b= a;

第三十五题:A B C

A. a=a+1.0;
这个语句是符合C++语法的。尽管aint类型,而1.0double类型,但在C++中,整数和浮点数之间的算术运算会导致结果类型提升为浮点数。但是,由于赋值操作符=的右侧是一个double值,而左侧是int类型的变量,所以编译器会隐式地将double值转换为int值(通过截断小数部分)来赋值给a

B. a= (int)(b- '0');
这个语句也是符合C++语法的。字符'0'在ASCII码中的值通常是48。如果b包含的是字符'0''9'之间的一个数字字符,那么b- '0'的结果将是一个在0到9之间的整数。然后,这个整数被显式地转换为int类型(尽管这实际上是多余的,因为int是默认类型),然后赋值给a

C. b= (char)(a + '0');
这个语句也是符合C++语法的。这里假设a是一个在0到9之间的整数。a + '0'将把a的值转换为对应的字符(通过加上字符'0'的ASCII值)。然后,这个字符值被显式地转换为char类型(尽管这通常是多余的,因为赋值给char类型的变量时会自动进行类型转换)。

D. (int)b= a;
这个语句是不符合C++语法的。在C++中,你不能对一个变量进行类型转换(如(int)b)然后尝试赋值。类型转换操作符()只能用于表达式的值,而不能用于改变变量的类型。此外,赋值操作符=的左侧必须是一个左值(lvalue),即一个可以引用内存位置的表达式。(int)b不是一个左值,因为它只是一个值,而不是一个变量。

36.以下哪个循环语句不会无限次执行?( )
A. for (int a = 0; a; a++) ;
B. for (bool b = false; b <=true; b++) ;
C. for (char c ='A'; ture;c++);
D. for (double d = 0.0; d< 10.0;d +=0.001);

第三十五题:A D

A. for (int a = 0; a; a++) ;
这个循环的终止条件是a,但初始时a被设置为0,在C++中,0被视为false。因此,循环的初始条件不满足(即false),所以循环体一次都不会执行。

B. for (bool b = false; b <=true; b++) ;
这个循环有几个问题。首先,bool类型的变量b不能通过b++来增加其值,因为bool只有truefalse两个值,不是数值类型。其次,即使可以增加,b <= true这个条件总是true(因为false不大于true,而true当然不大于true),但由于b无法递增,所以循环实际上会无限次执行(如果忽略类型不匹配的错误)。

C. for (char c ='A'; true;c++);
由于循环条件始终为true(即没有终止条件),这个循环会无限次执行。

D. for (double d = 0.0; d< 10.0;d +=0.001);
这个循环有一个明确的终止条件:当d的值达到或超过10.0时,循环将停止。由于d每次增加0.001,这个循环将执行大约10000次,然后终止。

37.下列关于 C++语言的叙述,正确的是( )。
A. double 类型的变量占用内存的大小是浮动的
B. bool类型的变量占用1字节内存
C. int类型变量的取值范围不是无限的
D. char类型的变量有256种取值

第三十七题:BCD

A. double 类型的变量占用内存的大小是浮动的

这个叙述不正确。在大多数现代系统中,double 类型变量通常占用固定的8字节(64位)内存,用于存储双精度浮点数。虽然“double”意味着双倍的精度或范围,但这并不意味着其内存大小是浮动的。

B.bool 类型的变量占用 1 字节内存
C.int 类型变量的取值范围不是无限的
在写程序的时候有时候我们将一个很大的int型的数相加一个数,就会发现结果不对。这是为什么呢?        因为这个数超过了int型的取值范围。
例如,在32位系统上,int通常占用4字节,其取值范围大致在-2^31到2^31-1之间。
D.char 类型的变量有 256 种取值

  • 14
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值