一、单选题(每题 2 分,共 30 分)
1. 我们通常说的“内存”属于计算机中的( )。
A. 输出设备
B. 输入设备
C. 存储设备
D. 打印设备
答案:C
解析:略
2.以下 C++ 不可以作为变量的名称的是( )。
A. redStar
B. RedStar
C. red_star
D. red star
答案:D
解析:变量名命名规则:由字母、数字和下划线组成,首字符不能是数字
第 3 题 C++ 表达式 2 - 1 && 2 % 10 的值是( )。
A. 0
B. 1
C. 2
D. 3
答案:B
解析:
C++中的逻辑运算符 &&
表示逻辑与,它要求两侧的表达式都为真(非零)时,整个表达式的值才为真。而 %
表示取模运算,计算两数相除的余数。
首先,计算 2 - 1
得到 1
,然后计算 2 % 10
得到 2
。接下来,将这两个值用逻辑与 &&
连接,因为两个表达式都不为零,所以整个表达式的值为真。
因此,C++表达式 2 - 1 && 2 % 10
的值是 真。
第 4 题 下面 C++ 代码段执行后的输出是( )。
A. 3+4= 7
B. 3+4=7
C. a+b=7
D. a+b=a+b
第 5 题 在 C++ 语言中, int 类型的变量 x 、 y 、 z 的值分别为 2 、 4 、 6 ,以下表达式的值为真的是( )。
A. x > y || x > z
B. x != z - y
C. z > y + x
D. x < y || !x < z
答案:D
解析:
A. x > y || x > z
:
- x > y 为 false(2 > 4 是假)
- x > z 为 false(2 > 6 是假) 因此,整个表达式为 false。
B. x != z - y
:
- z - y = 6 - 4 = 2
- x != 2 为 true(2 不等于 2) 因此,整个表达式为假。
C. z > y + x
:
- y + x = 4 + 2 = 6
- z > 6 为假(6 不大于 6) 因此,整个表达式为 false。
D. x < y || !x < z
:
- x < y 为 true(2 < 4 是真)
- !x < z 为 true(非(2 < 6)是真) 因此,整个表达式为真。
第 6 题 对 int 类型的变量 a 、 b 、 c ,下列语句不符合 C++ 语法是( )。
A. c += 5;
B. b = c % 2.5;
C. a = (b = 3, c = 4, b + c);
D. a -= a = (b = 6) / (c = 2);
答案:B
解析:选项B:变量 a 、 b 、 c 都是int 类型,2.5是浮点数;选项C:逗号运算符,只返回最后一个表达式的值a=7;
第 7 题 下面 C++ 代码执行后的输出是( )。
A. 都是偶数
B. 都是奇数
C. 不都是偶数或奇数
D. 以上说法都不正确
第 8 题 下面 C++ 代码执行后的输出是( )。
A. 都是偶数
B. 都是奇数
C. 不都是偶数或奇数
D. 以上说法都不正确
答案:C
解析:因为“m%2”是0,“n%2”也是0,所以if条件是假;“m%2==1”为假,“n%2==1”为假,所以else if条件也是假;因此,输出“不都是偶数或奇数"
第 9 题 下面 C++ 代码执行后的输出是( )。
A. 0
B. 1
C. 2
D. 3
答案:A
解析:因为m等于7,所以m/5等于1,m/3等于2,因此if语句的条件为真,所以输出1.
第 10 题 下面 C++代码段执行后的输出是( )。
A. 1
B. 4
C. 5
D. 10
答案:C
解析:for循环5次,cnt初始赋值为0,因此cnt加了5次”1“,所以cnt是5。
第 11 题 下面 C++ 代码执行后的输出是( )。
A. 2
B. 4
C. 9
D. 10
答案:B
解析:i初始赋值为1,每次i增加2,循环条件是i<5,所以for循环2次,tnt初始赋值为0,i初始赋值为1,每次i增加2,所以tnt=0+1+3=4.
第 12 题 下面 C++ 代码执行后的输出是( )。
A. 3
B. 4
C. 6
D. 7
答案:B
解析:n初始赋值为5,每次n减少2,循环条件是n>=0,所以while循环3次,cnt初始赋值为1,tnt=1+(1+1+1)=4.
第 13 题 下面 C++ 代码用于求正整数的所有因数,即输出所有能整除一个正整数的数。如,输入 10 ,则输出为 1 、 2、 5 、 10 ;输入 12 ,则输出为 1 、 2 、 3 、 4 、 6 、 12 ;输入 17 ,则输出为 1 、 17 。在横线处应填入代码是( )。
A. int i = 1; i < n; i + 1
B. int i = 1; i < n + 1; i + 1
C. int i = 1; i < n; i++
D. int i = 1; i < n + 1; i++
第 14 题 在下列代码的横线处填写( ),可以使得输出是正整数 1234 各位数字的平方和。
A. n / 10
B. (n / 10) * (n / 10)
C. n % 10
D. (n % 10) * (n % 10)
答案:D
解析:根据题目“使得输出是正整数 1234 各位数字的平方和”,所以(n % 10) * (n % 10)
第 15 题 执行以下 C++ 语言程序后,输出结果是( )。
A. 1
B. 0
C. 120
D. 无法确定
答案:A
解析:因为n=0,不进入循环,s最初被赋值为1
二、判断题(每题 2 分,共 20分)
第 1 题 早期计算机内存不够大,可以将字库固化在一个包含只读存储器的扩展卡中插入计算机主板帮助处理汉字。
正确。
解析:略
第 2 题 神威 · 太湖之光超级计算机是中国自主研制的超级计算机,在全球超级计算机 TOP500 排行榜中多次荣膺榜首。
第 3 题 C++ 表达式 int(3.14) 的值为 3 。
正确。
解析:浮点数3.14转化为int型,直接去掉小数点,只保留整数部分,注意不进行四舍五入
第 4 题 C++ 语句 cout << (2, 3, "23") 的输出为 2, 3, 23 。
错误。
解析:逗号运算符,只返回最后一个表达式的值,所以只输出23。
第 5 题 C++ 的循环语句 for (int i = 0; i < 10; i += 2) 表示 i 从 0 开始到 10 结束但不包含 10 ,间隔为 2 。
第 6 题 C++ 表达式 ('1' + '1') 的值为 '2' 。
错误。
解析:
第 7 题 在 C++ 语言中, do-while 循环不可能导致死循环,但 while 有可能。
错误。
解析:都有可能。
do-while
循环首先执行循环体,然后检查条件是否满足。这意味着即使条件一开始不满足,循环体至少会执行一次。如果条件永远不满足,do-while
循环就会导致死循环。
以下是一个可能导致死循环的 do-while
循环的示例:
do {
// 循环体
} while (false); // 条件永远为假,导致死循环
同样,while
循环也可以导致死循环,如果条件永远为真,循环将永不结束。
while (true) {
// 循环体
} // 无限循环
第 8 题 在下面的 C++ 代码中,由于循环中的 continue 是无条件被执行,因此将导致死循环。
错误。
解析:
在这个代码示例中,循环将从 i = 1
开始,然后在每次迭代时 continue
将会执行。由于 continue
是无条件的,它会导致当前迭代立刻结束,然后进行下一次迭代。因此,这个循循环实际上会在循环的条件 i < 10
满足时进行9次迭代(i 从 1 到 9),然后在 i
变成 10 时循环终止。
所以,这个代码不会导致死循环,它会正常执行,并在 i
到达 10 时退出循循环。
第 9 题 在 C++ 代码中,不可以将变量命名为 cout ,因为 cout 是 C++ 的关键字。
错误。
解析:在C++中,你可以将变量命名为cout
,尽管cout
是C++的标准输出流对象,通常用于将文本输出到屏幕。C++允许你在代码中使用cout
这个名称作为变量名,但这通常不是一个好的编程实践,因为它可能导致混淆。
第 10 题 C++ 是一种高级程序设计语言。
正确。
解析:略
三、编程题(每题 25 分,共 50分)
3.1 编程题 1
试题编号 : 2023-09-23-01-C-01
试题名称 :买文具
时间限制 : 1.0 s
内存限制 : 128.0 MB 3.1.1
问题描述
开学了,小明来到文具店选购文具。签字笔 2 元一支,他需要X支;记事本 5 元一本,他需要Y本;直尺 3 元一把,他 需要Z把。小明手里有Q元钱。请你通过编程帮小明算算,他手里的钱是否够买他需要的文具。
3.1.2 输入描述
输入 4 行。
第一行包含一个正整数 X,是小明购买签字笔的数量。约定 1<=X<=10.
第二行包含一个正整数 Y,是小明购买记事本的数量。约定1<=Y<=10.
第三行包含一个正整数 Z,是小明购买直尺的数量。约定1<=Z<=10.
第四行包含一个正整数 Q,是小明手里的钱数(单位:元)。
3.1.3 输出描述
输出 2 行。如果小明手里的钱够买他需要的文具,则第一行输出 "Yes" ,第二行输出小明会剩下的钱数(单位:元);
否则,第一行输出 "No" ,第二行输出小明缺少的钱数(单位:元)。
3.1.4 样例输入 1
3.1.5 样例输出 1
3.1.6 样例输入 2
3.1.7 样例输出 2
3.1.8 参考程序
#include // 包括输入输出流库
using namespace std; // 使用标准命名空间
int main() {
int x = 0, y = 0, z = 0, q = 0; // 声明四个整数变量并初始化为 0
cin >> x >> y >> z >> q; // 从标准输入流中获取用户输入的四个整数值
int t = x * 2 + y * 5 + z * 3; // 计算 t 的值,需要买东西的钱
if (q >= t) { // 如果 q 大于等于 t
cout << "Yes" << endl; // 输出 "Yes"
cout << q - t << endl; // 输出 q 和 t 之间的差值,剩余的钱
} else {
cout << "No" << endl; // 否则输出 "No"
cout << t - q << endl; // 输出 t 和 q 之间的差值,还缺多少钱
}
return 0; // 返回 0,表示程序成功结束
}
3.2 编程题 2
试题编号 : 2023-09-23-01-C-02
试题名称 :小明的幸运数
时间限制 : 1.0 s
内存限制 : 128.0 MB
3.2.1 问题描述
所有个位数为 k的正整数,以及所有k 的倍数,都被小明称为 “ k 幸运数 ” 。小明想知道正整数 L和 R之间(包括L 和R )所有k幸运数的和,你能帮帮他吗?
3.2.2 输入描述
输入 3 行。第一行包含一个正整数k ,第二行包含一个正整数L ,第三行包含一个正整数 R。约定
2<=k<=9,1<=L<=R<=1000.
3.2.3 输出描述
输出 1 行,符合题意的幸运数之和。
3.2.4 样例输入 1
3.2.5 样例输出 1
3.2.6 样例解释 1
1 和 10 之间共有 1 个 7 幸运数: 7 。因为 7 既是 7 的倍数,个位数又为 7 。因此,结果为 7 。
3.2.7 样例输入 2
3.2.8 样例输出 2
3.2.9
样例解释 2
10 和 20 之间共有 2 个 7 幸运数: 14 和 17 。 14 是 7 的倍数, 17 的个位数为 7 。因此,结果为 31 。
3.2.10
参考程序
#include // 包括输入输出流库
using namespace std; // 使用标准命名空间
int main() {
int k = 0, L = 0, R = 0, sum = 0; // 声明四个整数变量并初始化为 0
cin >> k >> L >> R; // 从标准输入流中获取用户输入的三个整数值
for (int n = L; n <= R; n++) { // 循环 n 从 L 到 R
if (n % 10 == k || n % k == 0) { // 如果 n 的个位数字等于 k 或 n 能被 k 整除
sum += n; // 将 n 添加到 sum 中
}
}
cout << sum << endl; // 输出 sum 的值
return 0; // 返回 0,表示程序成功结束
}