C++ ⼀级 2023 年 12 ⽉
一、单选题
1.【单选题】以下C++不可以作为变量的名称的是( )。
ACCF GESP
BccfGESP
CCCFgesp
DCCF_GESP
正确答案:A
c++标识符(变量等)的定义规则:
(1)只能包括英文字母,下划线与数字;当然绝对不能有空格;
(2)不能以数字开头;
(3)不能定义已经是关键字/保留字的标识符(黑体字),如using、return等,详见C++保留字。
注意:关键字很好认,在编译器中是黑体的就是关键字,拿不准就放到编译器里面试试看。答案选A。
2.【单选题】C++表达式 10 - 3 * (2 + 1) % 10的值是( )。
A0
B1
C2
D3
正确答案:B
根据C++中的运算符优先级,表达式的计算过程如下:
首先,计算括号内的表达式(2+1),结果为3。
接下来,计算乘法运算3*3,结果为9。
然后,计算减法运算10-9,结果为1。
最后,计算取模运算1%10,结果为1。
因此,表达式10-3*(2+1)%10的值是1。答案选B。
3.【单选题】假设现在是上午⼗点,求出N⼩时(正整数)后是第⼏天⼏时,如输⼊20⼩时则为第2天6点,如N输⼊4则为今天14点。为实现相应功能,应在横线处填写代码是( )。
int N, dayX, hourX;
cin >> N;
dayX = , hourX = ;
if (dayX == 0)
cout << "今天" << hourX << "点";
else
cout << "第" << (dayX + 1) << "天" << hourX << "点";
A(10 + N) % 24 , (10 + N) / 24
B(10 + N) / 24 , (10 + N) % 24
CN % 24, N / 24
D10 / 24 , 10 % 24
正确答案:B
4.【单选题】下⾯的程序⽤于判断N是否为偶数,横线处应填写代码是( )。
cin >> N;
if ( )
cout << "偶数";
else
cout << "奇数";
AN % 2 == 0
BN % 2 = 0
CN % 2
DN % 2 != 0
正确答案:A
5.【单选题】下⾯对C++代码执⾏后输出的描述,正确的是( )。
cin >> N;
cnt = 0;
for (int i = 1; i < N; i++)
cnt += 1;
cout << cnt;
A如果输⼊的N是⼩于等于2整数,第5⾏将输出0
B如果输⼊的N是⼤于等于2整数,第5⾏将输出N-1
C如果输⼊的N是⼤于等于2整数,第5⾏将输出N
D以上说法均不正确
正确答案:B
6.【单选题】下⾯C++代码执⾏后的输出是( )。
cnt = 0;
for (int i = 1; i < 10; i++) {
cnt += 1;
i += 2;
}
cout << cnt;
A10
B9
C3
D1
正确答案:C
7.【单选题】下⾯C++代码执⾏后的输出是( )。
cnt = 0;
for (int i = 1; i < 20; i++) {
if (i % 2) continue;
else if (i % 3 == 0 && i % 5 == 0) {
cnt += i;
break;
}
}
cout << cnt;
A90
B44
C20
D10
正确答案:A
8.【单选题】下⾯C++代码执⾏后的输出是( )。
N = 10;
cnt = 0;
while (1) {
if (N == 0) break;
cnt += 1;
N -= 2;
cout << cnt;
}
A11
B10
C5
D4
正确答案:C
9.【单选题】下⾯C++代码⽤于判断⼀个数是否为质数(素数),在横线处应填⼊代码是( )。
cin >> N;
cnt = 0;
for (int i = 1; i < N + 1; i++) {
if (N % i == 0)
;
}
if (cnt == 2)
cout << N << "是质数。";
else
cout << N << "不是质数。";
Acnt = 1
Bcnt = 2
Ccnt =+ 1
Dcnt += 1
正确答案:D
10.【单选题】对下⾯的代码,描述正确的是( )。
#include <stdlib.h>
using namespace std;
int main() {
int arr[] = {2, 6, 3, 5, 4, 8, 1, 0, 9, 10};
for (int i = 0; i < 10; i++)
cout << arr[i] << " ";
cout << i << endl;
cout << endl;
return 0;
}
A输出 2 6 3 5 4 8 1 0 9 10 10
B输出2 6 3 5 4 8 1 0 9 9
C输出2 6 3 5 4 8 1 0 9 10
D提⽰有编译错误
正确答案:D
for()循环结束后,()内的变量会回收。答案选D。
11.【单选题】执⾏下⾯C++代码后输出是( )。
cnt = 0;
for (i = 10; i > 3; i -= 3) {
cout << cnt;
cnt = cnt + i;
}
A3
B21
C27
D49
正确答案:B
12.【单选题】定义变量char c ,下⾯对c赋值的语句,不符合语法的是( )。
Ac = (char)66;
Bc = (char)(66);
Cc = char(66);
D c = char 66;
正确答案:D
在C++中,类型转换使用圆括号()或者使用static_cast等显式类型转换运算符来完成。选项D中的赋值语句c= char 6,缺少了圆括号,无法正确进行类型转换。答案选D。
13.【单选题】下图所⽰C++代码对⼤写字母'A' 到 'Z' 分组,对每个字母输出所属的组号,那么输⼊ 'C' 时将输出的组号是?( )。
cnt = 0;
for (i = 10; i > 3; i -= 3) {
cout << cnt;
cnt = cnt + i;
}
A3
B3 5
C3 5 9
D以上都不对
正确答案:B
察switch(){case: ... ;}知识点。答案选B。
switch语句必须遵循下面的规则:
● switch 语句中的 expression 是一个常量表达式,必须是一个整型或枚举类型。
● 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。
● case 的 constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量。
● 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
● 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行,即,跳出switch()。
●不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。
●一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的。
14.【单选题】 某公司新出了⼀款⽆⼈驾驶的⼩汽车,通过声控智能驾驶系统,乘客只要告诉汽车⽬的地,车⼦就能⾃动选择⼀条优化路线,告诉乘客后驶达那⾥。请问下⾯哪项不是驾驶系统完成选路所必须的。( )
A麦克风
B扬声器
C油量表
D传感器
正确答案:C
15.【单选题】现代计算机是指电⼦计算机,它所基于的是( )体系结构。
A艾伦·图灵
B冯·诺依曼
C阿塔纳索夫
D埃克特·莫克利
正确答案:B
二、判断题
16.【判断题】C++表达式int(3.14)的值为3。( )
A正确
B错误
正确答案:A
正确。在C++中,使用int关键字可以进行整数类型的强制类型转换。在表达式int(3.14)中,将浮点数3.14强制转换为整数类型,会截断小数部分,结果为3。因此,该表达式的值为3。
17.【判断题】C++语句cout << (2 * 3, 3 % 10, 2+3)的输出为6,3,5。 ( )
A正确
B错误
正确答案:B
错误。在该语句中,使用逗号运算符,将多个表达式组合在一起。逗号运算符的规则是依次计算每个表达式,并返回最后一个表达式的结果。对于表达式(23,3%10,2+3),逗号运算符会按顺序计算每个表达式。首先计算23,结果为6。然后计算3%10,结果为3。最后计算2+3,结果为5。
18.【判断题】for(int i = 1; i < 10; i += 3) ;表⽰i从1开始到10结束间隔为3,相当于1、4、7、10。( )
A正确
B错误
正确答案:B
错误。在给定的for循环语句中,循环体部分为空,即只有一个分号;。这意味着在每次循环迭代时,循环体内不执行任何操作,直接跳过。循环的迭代过程如下:
初始化:i=1
条件判断:检查<10,条件为真,继续循环
循环体:为空,跳过
循环迭代:i+=3,即i=i+3,此时i的值变为4
条件判断:检查i<10,条件为真,继续循环
循环体:为空,跳过
循环迭代:i+=3,即i=i+3,此时i的值变为7
条件判断:检查i<10,条件为真,继续循环
循环体:为空,跳过
循环迭代:i+=3,即i=i+3,此时i的值变为10
条件判断:检查i<10,条件为假,循环结束
因此,该循环语句中的实际迭代结果为1、4、7,而不包括10。所以给定的判断是错误的。
19.【判断题】C++表达式010+100+001的值为111。( )
A正确
B错误
正确答案:B
错误。在C++中,以0开头的整数字面值表示的是八进制数。因此,010、100和001分别表示八进制数8、64和1。计算表达式010+100+001的值时,按照十进制数相加的规则,得到的结果是8+64+1,即73。所以,C++表达式010+100+001的值为73,而不是111。给定的判断是错误的。
20.【判断题】if语句中的条件表达式的结果可以为int类型。( )
A正确
B错误
正确答案:A
正确。在C++中,if语句中的条件表达式可以是任何可以转换为布尔值的表达式。C++中将数字0、null、false等统一视为false,其他视为true。当条件表达式的结果为int类型时,根据上述规则,非零的int值会被视为true,而0会被视为false。因此,条件表达式的结果可以是int类型。
21.【判断题】在下⾯的C++代码while(1) continue;中,由于循环中的continue是⽆条件被执⾏,因此将导致死循环。( )
A正确
B错误
正确答案:A
正确。在给定的代码中,while循环的条件是1,它被视为true。而在循环体中,continue语句会导致程序跳过当前循环迭代的剩余部分,直接进入下一次循环。由于continue语句是无条件被执行的,每次循环迭代都会跳过循环体的剩余部分,从而导致无限循环。程序将永远在循环中执行continue语句,而不会终止循环。因此,给定的代码会产生一个死循环,不会自动退出循环。
22.【判断题】C++表达式 ('1'+'1''2'? flag=1:flag=2) 的结果值和表达式 (flag2)的相同。( )
A正确
B错误
正确答案:B
错误。在给定的表达式('1'+'1''2'?flag=1:flag=2)中,首先进行字符之间的加法运算。由于字符'1'和字符'1'的ASCII码值分别为49,因此'1'+'1'的结果为98。接下来,比较结果值98是否等于字符'2'的ASCII码值50。由于98不等于50,条件表达式的结果为 false。因此,flag的值将被赋为2。因此,表达式('1'+'1''2'?flag=1:flag=2)的结果为2。另一方面,表达式(flag2)检查变量flag 是否等于2。根据上述计算,flag的值为2。因此,表达式(flag2)的结果为 true。因此,C++表达式('1'+'1''2'?flag=1:flag=2)的结果值和表达式(flag2)的结果值不相同。给定的判断是错误的。
23.【判断题】在C++的程序中,不能⽤scanf作为变量名。( )
A正确
B错误
正确答案:B
错误。在C++的程序中,可以使用 scanf作为变量名。尽管 scanf是一个标准库函数名,但它并不属于C++的关键字。在C++中,标识符的选择是灵活的,只要遵循命名规则,就可以使用 scanf或其他类似的名称作为变量名;但是,强烈不建议这么做。
24.【判断题】⼩杨最近在准备考GESP,他⽤的Dev C++来练习和运⾏程序,所以Dev C++也是⼀个⼩型操作系统。( )
A正确
B错误
正确答案:B
错误。Dev C++是一个集成开发环境(IDE),而不是一个操作系统。它是为了方便C++编程而设计的软件工具,提供了代码编辑、编译、调试和运行等功能,使开发者能够更便捷地编写和测试C++程序。操作系统是一种系统软件,它管理计算机硬件和软件资源,提供用户与计算机之间的接口。常见的操作系统包括Windows、Linux、macOS等。Dev C++运行在支持的操作系统上(如Windows),并提供了一个用户友好的界面来编写、编译和运行C++代码。它本身并不是一个操作系统,而只是在操作系统上提供的工具之一。因此,给定的判断是错误的。Dev C++不是一个小型操作系统,而是一个用于C++开发的集成开发环境。
25.【判断题】任何⼀个while循环都可以转化为等价的for循环( )。
A正确
B错误
正确答案:A
正确。任何一个while 循环都可以转化为等价的for循环。for循环和 while 循环都是用于控制程序的循环执行的结构,它们可以互相替代。
三、编程题
26.【编程题】小杨的考试
时间限制:1.0 s
内存限制:128.0 MB
问题描述:
今天是星期 X,小杨还有 N 天就要考试了,你能推算出小杨考试那天是星期几吗?(本题中使用 7 表示星期日)
3.1.2 输入描述
输入 2 行,第一行一个整数 X(1≤X≤7);第二行一个整数 N(1≤N≤364)。
3.1.3 输出描述
输出一个整数,表示小杨考试那天是星期几。
3.1.4 特别提醒
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
3.1.5 样例输入 1
1
6
3.1.6 样例输出 1
7
3.1.7 样例解释 1
今天是星期 1,那么 6 天后就是星期日,星期日在本题中用 7 表示。
5
3
3.1.9 样例输出 2
1
3.1.10 样例解释 2
今天是星期 5,那么 3 天后就是星期 1。
第一种
c++
#include <stdio.h>
int main(int argc, char **argv) {
int x, n;
scanf("%d%d", &x, &n);
printf("%d\n", (x - 1 + n % 7) % 7 + 1);
return 0;
}
第二种
c++
#include<iostream>
using namespace std;
int main()
{
int n,x;
cin>>x>>n;
n=(x+n)%7;
if(n==0)
cout<<7;
else
cout<<n;
return 0;
}
编程题 2
试题名称:小杨报数
时间限制:1.0s
内存限制:128.0MB
3.2.1 问题描述
小杨需要从 1 到 n 报数。在报数过程中,小杨希望跳过 m 的倍数。例如,如果 n=5,m=2,那么小杨就需要依次报出 1、3、5;如果 n=10,m=3,那么小杨就需要依次报出 1、2、4、5、7、8、10。现在,请你依次输出小杨报的数。
3.2.2 输入描述
输入 2 行,第一行一个整数 n(n≥1);第二行一个整数 m(m≥2)。
3.2.3 输出描述
输出若干行,依次表示小杨报的数。
3.2.4 特别提醒
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
3.2.5 样例输入 1
plaintext
5
2
3.2.6 样例输出 1
plaintext
1
3
5
3.2.7 样例输入 2
plaintext
10
3
3.2.8 样例输出 2
plaintext
1
2
4
5
7
8
10
c++
#include <stdio.h>
int main(int argc, char **argv) {
int n, m, i;
scanf("%d%d", &n, &m);
for (i = 1; i <= n; i++) {
if (i % m != 0)
printf("%d\n", i);
}
return 0;
}
第二种
c++
#include<iostream>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
if(i%m==0)
continue;
else
cout<<i<<endl;
}
return 0;
}