2024年03月真题
1 单选题
第 1 题 C++表达式(3 - 2) * 3 + 5的值是( )。
- A. -13
- B. 8
- C. 2
- D. 0
正确答案:B. 8
解析:
- 首先计算括号中的表达式 (3 - 2),得到 (1)。
- 接下来进行乘法运算 (1 * 3),得到 (3)。
- 最后进行加法运算 (3 + 5),得到 (8)。
- 因此,表达式的值是 (8)。
第 2 题 C++语句
cout << "5%2=" << 5 % 2
执行后的输出是( )。
- A. 2 2
- B. 1 1
- C. 5%2=2
- D. 5%2=1
正确答案:D. 5%2=1
解析:
- 此语句首先输出字符串 “5%2=”。
- 接着计算表达式
5 % 2
,即5除以2的余数,结果为1。 - 因此,整个语句的输出是 “5%2=1”。
第 3 题 执行C++语句
cin >> a
时如果输入5+2,下述说法正确的是( )。
- A. 变量a将被赋值为整数7
- B. 变量a将被赋值为字符串,字符串内容为5+2
- C. 语句执行将报错,不能输入表达式
- D. 依赖于变量a的类型。如果没有定义,会有编译错误
正确答案:D. 依赖于变量a的类型。如果没有定义,会有编译错误
解析:
- A: 不正确。
cin >> a
不会对输入的 “5+2” 进行表达式计算,而是尝试将其作为整体读入,这在期望一个整数时将失败。 - B: 也不正确。即使
a
是字符串类型,输入的 “5+2” 将被当作普通文本,但这并不符合题干的描述要求。 - C: 表达了一种可能性,即无法处理表达式,但不完全准确,因为错误的具体性质取决于
a
的类型和输入处理。 - D: 正确。这一选项正确指出了结果依赖于
a
的类型,并且如果a
没有被定义,则确实会产生编译错误。如果a
定义为整型,cin
将尝试解析输入,但 “5+2” 并非有效的整数,导致读取失败。
第 4 题 下面C++代码执行后的输出是( )。
int a = 1; cout << "a+1= " << a+1 << endl;
- A. a+1= 2
- B. a+1=2
- C. 2=2
- D. 2= 2
正确答案:A. a+1= 2
解析:
- 代码中的
cout
语句输出字符串 "a+1= " 后紧跟变量a
加 1 的结果。 - 由于在 “a+1=” 和
a+1
的计算结果之间存在一个空格,输出将显示为 “a+1= 2”。 endl
用于在输出后添加一个新行,不影响a+1
和其结果之间的空格。- 因此,正确的输出是 “a+1= 2”,与选项A匹配。
第 5 题 下面C++代码执行后的输出是( )。
int a = 1; printf("a+1=%d\n", a+1);
- A. a+1= 2
- B. a+1=2
- C. 2=2
- D. 2= 2
正确答案:B. a+1=2
解析:
- 代码中使用了
printf
函数来格式化输出。 - 第一个参数是格式化字符串
"a+1=%d\n"
,其中%d
用于插入整数。 - 第二个参数
a+1
计算结果为2。 - 因此,整个输出是 “a+1=2”,其中等号和数字2之间没有空格。
第 6 题 下面C++代码执行时输入21后,有关描述正确的是( )。
int N; cin >> N; if(N % 3 == 0) cout << "能被3整除"; else if (N % 7 == 0) cout << "能被7整除"; else cout << "不能被3和7整除"; cout << endl;
- A. 代码第4行被执行
- B. 第4和第7行代码都被执行
- C. 仅有代码第7行被执行
- D. 第8行代码将被执行,因为input()输入为字符串
正确答案:A. 代码第4行被执行
解析:
- 输入的数值是21,它同时是3和7的倍数。
- 在C++中,
cin
直接读取数值,而不是字符串,所以D选项的描述错误。 - 代码首先检查21是否能被3整除,这是真的,因此执行第4行的代码
cout << "能被3整除";
,并输出"能被3整除"。 - 由于
if
条件已经满足,else if
和else
部分都将被跳过。 cout << endl;
是条件块外的语句,所以它将在任何情况下都会执行,用于在输出后添加一个新行。- 因此,正确的描述是第4行代码被执行。
第 7 题 下面C++代码第2行,总共被执行次数是( )。
for(int i=-10; i<10; i++) cout << i << " ";
- A. 10
- B. 19
- C. 20
- D. 21
正确答案:C. 20
解析:
- 循环从
i = -10
开始,继续执行直到i < 10
成立时停止。在i
达到10之前,循环将结束。 - 因此,循环将为每个整数从-10到9执行一次,共计20个整数。
- 这意味着第2行代码,即
cout << i << " ";
将被执行20次。 - 因此,选项C是正确的答案。
第 8 题 下面C++代码执行后的输出是( )。
int tnt = 0; for(int i=0; i<10; i++) if(i % 3 && i % 7) tnt += i; cout << tnt << endl;
- A. 0
- B. 7
- C. 18
- D. 20
正确答案:D. 20
解析:
- 代码中的
for
循环遍历从0到9的整数。 if
条件i % 3 && i % 7
检查i
是否既不是3的倍数也不是7的倍数。这意味着只有当i
同时不被3和7整除时,条件才为真。- 在0到9的范围内,1, 2, 4, 5, 8 不是3或7的倍数。
- 这些数值的总和是:1 + 2 + 4 + 5 + 8 = 20。
- 因此,程序的输出是20。
第 9 题 下面C++代码执行后的输出是( )。
int N = 10; while(N){ N -= 1; if(N % 3 == 0) cout << N << "#"; }
- A. 9#6#3#
- B. 9#6#3#0#
- C. 8#7#5#4#2#1#
- D. 10#8#7#5#4#2#1#
正确答案:B. 9#6#3#0#
解析:
- 初始值
N = 10
,然后进入while
循环,条件是N
不为0。 - 在循环内部,首先
N
被减1,然后检查N % 3
是否等于0。 - 迭代的过程中,
N
递减并检查:9, 8, 7, 6, 5, 4, 3, 2, 1, 0。 - 当
N
为9, 6, 3, 0时,满足条件N % 3 == 0
,因此它们被输出并跟随一个#
。 - 所以输出结果是
9#6#3#0#
。
第 10 题 下面C++代码用于判断键盘输入的整数是否为质数。质数是只能被1和它本身整除的数。在横线处应填入代码是( )。
int N; cin >> N; int cnt = 0; // 记录N被整除的次数 for(int i=1; i<N+1; i++) if(________________) cnt +=1; if(cnt == 2) cout << N << "是质数"; else cout << N << "不是质数";
- A. N % i
- B. N % i == 0
- C. N / i == 0
- D. N / i
正确答案:B. N % i == 0
解析:
- 选项B
N % i == 0
正确地检查变量N
能否被i
整除。如果结果为0,表示N
可以被i
整除,这是检测质数的正确方法。 - 质数定义为只能被1和自身整除的数。在循环中,如果
N
被任何数(除了1和它自己)整除,则它不是质数。 - 此代码通过计数
N
只被1和自身整除(即cnt
等于2)来判断N
是否为质数。 - 其他选项要么不进行正确的整除检查(A和D),要么判断错误(C)。
第 11 题 下面关于整型变量
int x
的赋值语句不正确是( )。
- A. x=(3.16);
- B. x=3.16;
- C. x=int(3.16);
- D. x=3.16 int;
正确答案:D. x=3.16 int
解析:
- A, B, C都是有效的C++语句,尽管它们会将浮点数强制转换为整数,因此,3.16会被转换为3。
- A. 使用括号进行赋值是有效的,C++会自动将3.16转换为整型。
- B. 直接赋值浮点数到整型变量也会自动转换。
- C. 显式地将浮点数转换为整型也是有效的。
- D. 选项中的 “x=3.16 int” 语法是不正确的,C++中没有这种赋值语法格式。
第 12 题 C++语言中下面可以完成数据输入的语句是( )。
- A. printf语句
- B. scanf语句
- C. default语句
- D. cout语句
正确答案:B. scanf语句
解析:
- A. printf语句:这是一个输出语句,用于向用户显示信息,而不是输入数据。
- B. scanf语句:这是标准的输入语句,在C++中用来从标准输入(通常是键盘)读取数据。
- C. default语句:这通常用于
switch
语句中,不涉及输入或输出。 - D. cout语句:这也是一个输出语句,用于向标准输出流(通常是屏幕)输出数据。
因此,唯一用于输入的语句是scanf
。
第 13 题 在Dev C++中对一个写好的C++源文件要生成一个可执行程序需要执行下面哪个处理步骤?( )
- A. 创建
- B. 编辑
- C. 编译
- D. 调试
正确答案:C. 编译
解析:
- A. 创建:创建是指创建新的文件或项目,与生成可执行文件无直接关系。
- B. 编辑:编辑是修改代码的过程,但它本身不涉及编译或生成可执行文件。
- C. 编译:这是将C++源代码转换成机器代码的过程,是生成可执行程序的必要步骤。
- D. 调试:调试是用于找出程序中的错误和问题的过程,虽然重要,但不直接生成可执行文件。
因此,要从Dev C++中的C++源文件生成可执行程序,必须执行编译过程。
第 14 题 小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿蒙,这个鸿蒙是?( )
- A. 小程序
- B. 计时器
- C. 操作系统
- D. 神话人物
正确答案:C. 操作系统
解析:
- A. 小程序:这指的是在一些平台上运行的简化的应用程序,不是操作系统。
- B. 计时器:这是一种工具或设备功能,用于测量时间间隔,不是操作系统。
- C. 操作系统:鸿蒙OS(HarmonyOS)是华为开发的操作系统,用于多种设备,包括智能手表、手机、平板电脑等。
- D. 神话人物:虽然“鸿蒙”在中国古代神话中有所指涉,但在这个上下文中,它指的是华为的操作系统。
因此,鸿蒙在这里指的是一种操作系统。
第 15 题 中国计算机学会(CCF)在2024年1月27日的颁奖典礼上颁布了王选奖,王选先生的重大贡献是( )。
- A. 制造自动驾驶汽车
- B. 创立培训学校
- C. 发明汉字激光照排系统
- D. 成立方正公司
正确答案:C. 发明汉字激光照排系统
解析:
- A. 制造自动驾驶汽车:这与王选先生的专业领域和贡献不符。
- B. 创立培训学校:虽然教育是重要的领域,但这不是王选先生主要被认可的贡献。
- C. 发明汉字激光照排系统:王选先生最为著名的贡献是发明汉字激光照排技术,这项技术极大地改善了中文印刷技术,对中国的出版和印刷业有重大影响。
- D. 成立方正公司:虽然王选先生确实创立了方正公司,该公司在推广其汉字激光照排技术中发挥了重要作用,但选项C更直接地描述了他的核心贡献。
因此,他的重大贡献是发明了汉字激光照排系统。
2 判断题
已更新模板。根据新模板,这里是重生成的选择题及其解析:
第 1 题 在C++代码中变量n被赋值为27,则
cout << n%10
执行后输出的是7。( √ )
解析:
%
运算符是取余运算符,n % 10
将计算27
除以10
的余数,结果为7
。
第 2 题 C++语句
printf("%d#%d&",2,3)
执行后输出的是2#3&。 ( √ )
解析:
printf
是一个格式化输出函数。此处使用%d
占位符按顺序输出整数2
和3
,并在它们之间加入特殊字符#
和&
。
第 3 题 C++函数
scanf()
必须含有参数,且其参数为字符串型字面量,其功能是提示输入。( × )
解析:
scanf()
的参数是字符串型字面量,但其功能是读取输入,而不仅仅是提示输入。
第 4 题 C++表达式
"10"*2
执行时将报错,因为"10"
是字符串类型而2是整数类型,它们数据类型不同,不能在一起运算。( √ )
解析:
- 在C++中,字符串字面值和整数不能直接进行算术运算。这会导致编译错误,因为没有定义如何将字符串和整数相乘。
第 5 题 在C++中,while可能是死循环,而for循环不可能是死循环。( × )
解析:
- 这是错误的。
for
循环完全可以编写成死循环,例如使用for(;;)
。
第 6 题 在C++,break语句用于提前终止当前层次循环,适用于while循环,但不适用于for循环。( × )
解析:
- 这是错误的。
break
语句可以用在任何类型的循环中,包括for
和while
循环,用于立即退出循环。
第 7 题 C++语言中3.0和3的值相等,所以它们占用的存储空间也相同。( × )
解析:
- 虽然数值相等,但3.0作为浮点数与整数3在内存中的存储方式完全不同。
第 8 题 在C++的程序中,cin是一个合法的变量名。( √ )
解析:
- 虽然
cin
是在C++标准库中预定义的标准输入流对象,但它并不是C++的保留关键字。因此,从语法上讲,使用cin
作为变量名是允许的。 - 不过,使用
cin
或其他标准库名称作为变量名通常不被推荐,因为这会导致代码可读性和维护性的问题,可能引起混淆。
第 9 题 小杨今年春节回奶奶家了,奶奶家的数字电视可以通过遥控器输入电视剧名称来找到想播放的电视剧,所以可以推知里面有交互式程序在运行。( √ )
解析:
- 数字电视使用交互式程序来响应用户的输入,例如通过遥控器搜索和选择电视剧,这表明其内部运行了交互式软件。
第 10 题 任何一个for循环都可以转化为等价的while循环( √ )
解析:
- 这是正确的。
for
循环可以通过重写条件和迭代部分来改写为while
循环,保持逻辑一致性。
3 编程题
3.1 编程题1
题目名称:小杨买书
题面描述
小杨同学积攒了一部分零用钱想要用来购买书籍,已知一本书的单价是13元,请根据小杨零用钱的金额,编写程序计算最多可以购买多少本书,还剩多少零用钱。
输入格式
输入一个正整数 ( m ),表示小杨拥有的零用钱数。
输出格式
输出包含两行,第一行为购买图书的本数,第二行为剩余的零用钱数。
样例
输入
100
输出
7
9
输入
199
输出
15
4
参考程序:
#include <iostream>
using namespace std;
int main() {
int m;
cin >> m; // 读取小杨拥有的零用钱
cout << m / 13 << endl; // 计算并输出最多可以购买的书籍数量,每本书13元
cout << m % 13 << endl; // 输出剩余的零用钱
return 0;
}
解释:
这个问题非常直接,要求计算能购买的最大书本数和剩余的零用钱。因为书的价格固定为13元,所以通过整除操作 m / 13
可以得到最大书本数,通过取余操作 m % 13
可以得到购买书后的剩余零用钱。
该程序使用C++的标准输入输出库 iostream
来处理输入和输出。整除和取余是通过 /
和 %
操作符完成的,分别计算书本数量和剩余金钱。
这个题目适用于理解基本的算术运算和输入输出操作在C++中的应用。
3.2 编程题 2
题目名称:找因数
题面描述
小A最近刚刚学习了因数的概念,具体来说,如果一个正整数 (a) 可以被另一个正整数 (b) 整除,那么我们就说 (b) 是 (a) 的因数。请你帮忙写一个程序,从小到大输出正整数 (a) 的所有因数。
输入格式
输入一行一个正整数 (a)。保证 (a ≥ 1000)。
输出格式
输出若干行,为 (a) 的所有约数,从小到大排列。
样例
输入
1
输出
1
输入
6
输出
1
2
3
6
输入
10
输出
1
2
5
10
参考程序:
#include <iostream>
using namespace std;
int main() {
int a;
cin >> a; // 读取输入的正整数
for (int i = 1; i <= a; ++i) { // 从1到a遍历所有可能的因数
if (a % i == 0) { // 检查i是否是a的因数
cout << i << endl; // 输出因数
}
}
return 0;
}
解释:
这个程序的核心在于遍历从1到 (a) 的所有整数,并检查它们是否是 (a) 的因数。如果是因数,就将其输出。使用 %
运算符可以判断 (a) 是否可以被 (i) 整除。整个程序保证了所有的因数按照从小到大的顺序输出。