CCF编程能力等级认证GESP—C++1级—样题1

单选题(每题 2 分,共 30 分)

1、人们在使用计算机时所提到的 Windows 通常指的是( )。

A. 操作系统
B. 多人游戏
C. 上市公司
D. 家居用具

正确答案:A
在提到计算机上的“Windows”时,我们通常指的是微软公司开发的一个操作系统。这个操作系统被广泛用于个人计算机和商业环境中。

2、计算机领域的图灵奖为了纪念( )科学家图灵。

A. 英国
B. 德国
C. 瑞典
D. 法国

正确答案:A
图灵奖是为了纪念计算机科学的先驱艾伦·麦席森·图灵而设立的。艾伦·图灵是一位英国科学家,被誉为计算机科学之父和人工智能之父。他在逻辑学、密码学、计算机科学等领域都有杰出的贡献。

3、下列关于 C++语言的叙述,不正确的是( )。

A. 变量使用前必须先定义
B. if 语句中的判断条件必须写在 ()中
C. for 语句的循环体必须写在{}中
D. 程序必须先编译才能运行

正确答案:C
A选项:这是正确的。在C++中,任何变量在使用之前都必须先声明(定义),即指定变量的类型并给它一个名字。
B选项:这是正确的。在C++中,if语句的判断条件必须被包裹在圆括号()中。
C选项:这个叙述是不正确的。在C++中,循环体(即for语句中要重复执行的代码块)通常被包裹在花括号{}中。然而,如果循环体只有一条语句,并且这条语句不是复合语句(即不包含分号结束的子语句),那么可以省略花括号。但是,从编程实践和可读性的角度来看,通常推荐总是使用花括号,即使循环体只有一条语句。
D选项:这是正确的。C++是一种编译型语言,这意味着在程序可以运行之前,源代码必须首先被编译器转换成机器语言(或称为目标代码)。

__4、不可以作为 C++标识符的是(  )。__
```cpp
A. a_plus_b
B. a_b
C. a+b
D. ab
```

正确答案:C
A选项:这个标识符由字母和下划线组成,且第一个字符是字母,所以它是有效的。
B选项:这个标识符由字母和下划线组成,且第一个字符是字母,所以它也是有效的。
C选项:这个标识符包含了加号(+),而加号不是有效的标识符字符。因此,这个标识符是无效的。
D选项:这个标识符只包含字母,且第一个字符是字母,所以它是有效的。

5、常量’3’的数据类型是( )。

A. int
B. char
C. bool
D. double

正确答案:B
用单引号包裹的单一字符称为字符型(char)

6、. 按照 C++语言的语法,以下不是正确的变量定义语句是( )。

A. int a;
B. int a = 10;
C. int a(10);
D. a = 10;

正确答案:D
A选项:这是正确的变量定义语句。它声明了一个名为 a 的整型(int)变量,但没有初始化它。
B选项:这也是正确的。它声明了一个整型变量 a 并立即将其初始化为 10。
C选项:这在C++中也是合法的。尽管这种语法在C中更常见,但在C++中它仍然有效,并且声明了一个整型变量 a 并将其初始化为 10。
D选项:这不是一个正确的变量定义语句。它尝试给变量 a 赋值,但在这之前并没有声明 a。在C++中,你不能给一个未声明的变量赋值。这会导致编译错误。

7、下列符号不是 C++语言的运算符的是( )。

A. $
B. %
C. =
D. *

正确答案:A
A选项:这个符号在C++中不是运算符。它通常在其他编程上下文或脚本语言中有特殊意义,但在标准的C++语法中,它并不作为运算符使用。
B选项:这是C++中的取模运算符,用于计算两个整数相除的余数。
C选项:这是赋值运算符,用于将一个值赋给变量。
D选项:这是乘法运算符,用于计算两个数的乘积,同时也是指针声明的一部分。

8、如果用两个 int 类型的变量 a 和 b 分别表达直角三角形两条直角边的长度,则下列哪个表达式可以用来计算三角形的面积?( )

A. a * b / 2
B. a / 2 * b
C. 1 / 2 * a * b
D. a * b * 0.5

正确答案:D
直角三角形的面积计算公式是:面积 = (直角边1 * 直角边2) / 2。
A选项:这个表达式首先计算 a * b,然后将结果除以2。这是正确的计算方式,因为它遵循了先乘除后加减的运算顺序(即乘法和除法优先于加法和减法)。但是在c++中,如果参与运算的数据都是int类型,则经过除法运算后,得到的结果仍为int类型,会丢失精度。
B选项:虽然这个表达式在数值上可能得到正确的结果,但这不是一个好的编程实践。当使用整数进行除法运算时,结果会自动向下取整。因此,a / 2 可能会丢失精度,尤其是当 a 是奇数时。
C选项:这个表达式中的 1 / 2 在整数除法中结果为0,因此整个表达式将总是计算为0,这是不正确的。
D选项:这个表达式使用了浮点数0.5来避免整数除法的问题,从而得到正确的结果。

9、表达式(3 + 12 / 3 * 2)的计算结果为( )。

A. 10
B. 5
C. 11
D. 2

正确答案:C
3 + 12 / 3 ∗ 2 3 + 12 / 3 * 2 3+12/32
= 3 + 4 ∗ 2 =3 + 4 * 2 =3+42
= 3 + 8 =3 + 8 =3+8
= 11 = 11 =11

10、如果 a 为 int 类型的变量,且 a 的值为 6,则执行a = a + 3;之后,a 的值会是( )。

A. 0
B. 3
C. 6
D. 9

正确答案:D
1.计算 a + 3 的值。由于 a 的初始值是 6,所以 a + 3 的计算结果是 9。
2.将计算得到的结果 9 赋值给变量 a。

11、如果 a 和 b 均为 int 类型的变量,下列表达式能够正确判断“a 不等于0或b 不等于 0”的是( )

A. !a == 0 && !b == 0
B. !(a == 0 && b == 0)
C. (a != 0) && (b != 0)
D. a && b

正确答案:B
A选项:这个表达式实际上判断的是“a 等于 0 且 b 等于 0”,这与我们要判断的条件相反。
B选项:这个表达式使用了德摩根定律,它判断的是“不是(a 等于 0 且 b 等于 0)”,这等价于“a 不等于 0 或 b 不等于 0”,这正是我们要找的答案。
C选项:这个表达式判断的是“a 不等于 0 且 b 不等于 0”,这与我们要判断的条件不符,因为我们要求的是“或”而不是“且”。
D选项:这个表达式在a和b均不为0时返回真。但它没有考虑到a或b其中一个为0的情况,因此它不能正确判断“a 不等于0或b 不等于 0”。

12、如果 a 为 int 类型的变量,下列表达式不能正确表达“a 是奇数时结果为0,否则结果非 0”的是( )。

A. a %= 2
B. a / 2 * 2 == a
C. a % 2 == 0
D. (a + 1) % 2

正确答案:A
A选项:这个表达式实际上是对a取模2,并将结果赋值给a。这并不能直接作为一个逻辑表达式来判断a是奇数还是偶数,因为a的值会被改变,且其结果本身并不能满足题目要求(即奇数时返回0)。
B选项:这个表达式可以判断a是否为偶数。如果a是偶数,那么除以2后再乘以2的结果仍然等于a;如果a是奇数,则结果会比a小1。但是,这个表达式在a为偶数时返回true(等价于非0),在a为奇数时返回false(等价于0),这与题目要求的“a是奇数时结果为0”相反。
C选项:这个表达式判断a是否为偶数。如果a除以2的余数是0,那么a是偶数;否则,a是奇数。这个表达式在a为偶数时返回true(非0),在a为奇数时返回false(0),正好满足题目要求。
D选项:这个表达式计算a加1后除以2的余数。如果a是偶数,那么a+1是奇数,除以2的余数是1;如果a是奇数,那么a+1是偶数,除以2的余数是0。这个表达式并不直接满足题目要求,因为它返回的是1或0,而不是0或非0。

13、在下列代码的横线处填写( ),可以使得输出是“2010”。

#include <iostream>

using namespace std;

int main(){
	int a = 10, b = 20;
	________ // 在此处填入代码
	cout << a << " " << b << endl; 
	return 0;
}
A. a = b; b = a;
B. a = max(a, b); b = min(a, b);
C. a = a + b; a = a - b; b = a - b;
D. int tmp = a; a = b; b = tmp;

正确答案:D
A选项:这个选项首先把b的值(20)赋给a,然后试图把a的新值(20)赋给b。由于a已经被赋值为20,所以b也将变成20。最后输出将是“20 20”,不符合要求。
B选项:这个选项由于a首先被赋值为两者中的较大值(20),然后b被赋值为两者中的较小值(这时候a和b都是20,所以b也会是20),输出依然是“20 20”,不符合要求。
C选项:这个选项首先计算a和b的和,并存储在a中(a变为30)。然后,从a中减去b的值(20),a变成10。最后,试图从a(现在是10)中减去b的值来得到原来的b值,但是此时b的值还没有被改变,依然是20,所以b会变成-10。输出将是“10 -10”,不符合要求。
D选项:这个选项使用了一个临时变量tmp来存储a的原始值(10),然后将b的值(20)赋给a,最后将tmp中存储的原始a的值(10)赋给b。这样,a和b的值就成功交换了。输出将是“20 10”,符合要求。

14、在下列代码的横线处填写( ),可以使得输出是“111111”。

#include <iostream>

using namespace std;

int main(){
	for (int i = 1; i <= 16; ________) // 在此处填入代码
		cout << 1; 
	return 0;
}
A. i++
B. i += 3
C. i *= 2
D. i = i * 3 - 1

正确答案:B
A选项:会使i在每次循环结束时递增1。由于循环的条件是i <= 16,循环将会执行16次,输出16个1,不符合要求。
B选项:会使i在每次循环结束时增加3。这意味着循环将执行更少的次数,因为i会更快地超过16。具体地,循环会执行6次(1, 4, 7, 10, 13, 16),然后停止,但输出会是6个1,符合要求。
C选项:会使i在每次循环结束时翻倍。具体地,循环会执行5次(1, 2, 4, 8, 16),然后停止,但输出会是5个1,不符合要求。
D选项:这个选项首先会将i乘以3,然后再减去1。这会导致i的值按照以下序列变化:1, 2, 5, 14。循环体执行了4次,输出了4个1,符合要求。

15、执行以下 C++语言程序后,输出结果是( )。

#include <iostream>

using namespace std;

int main(){
	int sum = 1;
	for (int i = 1; i <= 10; i++)
		if (3 <= i <= 5)
			sum += i;
	cout << sum << endl;
	return 0;
}
A. 56
B. 13
C. 12
D. 60

正确答案:A
在C++中,3 <= i <= 5会被解析为(3 <= i) <= 5。由于3 <= i会返回一个布尔值(true或false),布尔值在C++中会被隐式转换为整数(true为1,false为0),所以这个表达式实际上会变成1 <= 5或0 <= 5,这总是为真。
sum将会加上从1到10的所有整数。初始时sum被赋值为1,然后循环中sum会累加1到10的和。
1到10的和是55,加上初始的1,总和是56。

判断题(每题 2 分,共 20 分)

1、操作系统是让用户可以操纵计算机完成各种功能的软件。( )

正确答案:错误

2、要执行 Windows 的桌面上的某个程序,通常需至少连续点击程序图标3 次。( )

正确答案:错误
在Windows操作系统中,通常只需要单击桌面上的程序图标两次就可以启动该程序。

3、注释是对于 C++程序员非常有用,但会被 C++编译器忽略。()

正确答案:正确
注释是程序员在代码中添加的说明性文字,用于解释代码的功能、用途或实现细节。C++编译器在编译时会忽略注释,只处理实际的代码。

4、C++语言中的标识符只能由大写字母和小写字母组成。( )

正确答案:错误
C++语言中的标识符可以由字母(包括大写和小写)、数字和下划线组成,并且不能以数字开头。因此,除了字母外,数字和下划线也是合法的标识符组成部分。

5、3.0 是一个 int 类型常量。( )

正确答案:错误
在C++中,3.0是一个浮点型常量(通常是double类型),而不是整型(int)常量。整数常量不包含小数点。

6、能用 while 语句编写的循环,就可以使用 for 语句编写出具有同样功能的循环。( )

正确答案:正确
while循环和for循环在功能上是等价的,也就是说,任何可以用while循环实现的逻辑,都可以通过调整for循环的初始化、条件和更新部分来实现相同的功能。

7、在每个 if 语句中,都必须有 else 子句与 if 配对使用。( )

正确答案:错误
在C++中,if语句并不是必须与else子句配对使用。if语句可以单独存在,用于在满足某个条件时执行一段代码。else子句是可选的,用于在if的条件不满足时执行另一段代码。

8、C++语言中也遵循与“先乘除、后加减”类似的运算符优先级规则。( )

正确答案:正确
C++语言中的运算符具有不同的优先级,其中乘法和除法运算符的优先级高于加法和减法运算符。这意味着在没有括号的情况下,乘法和除法会先于加法和减法进行。

9、如果 a 为 int 类型的变量,且表达式(a % 4 == 0)的计算结果为真,说明a的值是 4 的倍数。( )

正确答案:正确
在C++中,%运算符用于计算两个整数相除的余数。如果a除以4的余数为0,那么说明a可以被4整除,即a是4的倍数。

10、表达式(6.0 / 3.0)的计算结果为 2,且结果类型为int 类型。( )

正确答案:错误
表达式(6.0 / 3.0)的计算结果确实为2,但是由于操作数都是浮点数(double类型),所以结果也是浮点数类型(通常是double),而不是整型(int)。在C++中,浮点数除法的结果不会自动转换为整数。

编程题 (每题 25 分,共 50 分)

第一题

【问题描述】
小明刚刚学习了小时、分和秒的换算关系。他想知道一个给定的时刻是这一天的第几秒,你能编写一个程序帮帮他吗?
【输入描述】
输入一行,包含三个整数和一个字符。三个整数分别表示时刻的时、分、秒;字符有两种取值,大写字母’A’表示上午,大写字母’P’表示下午。
【输出描述】
输出一行,包含一个整数,表示输入时刻是当天的第几秒。
【样例输入 1】
0 0 0 A
【样例输出 1】
0
【样例输入 2】
11 59 59 P
【样例输出 2】
86399

// 参考答案:
#include <iostream>

using namespace std;

int main(){
	int s, f, m, res;
	char time;
	cin >> s >> f >> m >> time;
	if (time == 'P')
		s += 12;
	cout << s * 3600 + f * 60 + m;
	return 0;
}

第二题

【问题描述】
小明刚刚学习了如何判断平年和闰年,他想知道两个年份之间(包含起始年份和终止年份)有几个闰年。你能帮帮他吗?
【输入描述】
输入一行,包含两个整数,分别表示起始年份和终止年份。约定年份在1到 2022 之间
【输出描述】
输出一行,包含一个整数,表示闰年的数量。
【样例输入 1】
2018 2022
【样例输出 1】
1
【样例输入 2】
2000 2004
【样例输出 2】
2

// 参考答案
#include <iostream>

using namespace std;

int main(){
	int a, b, res = 0;
	cin >> a >> b;
	for (int i = a; i <= b; i++){
		if (i % 400 == 0 || (i % 4 == 0 && i % 100 != 0))
			res++;
	}
	cout << res;
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青岛少儿编程-王老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值