样题 GESP等级认证C++编程(一级)试题解析

【单选题】(每题2分)

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

A、操作系统

B、多人游戏

C、上市公司

D、家居用具

正确答案:A

试题解析:计算机的Windows指的微软公司开发的视窗操作系统。

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

A、英国

B、德国

C、瑞典

D、法国

正确答案:A

试题解析:图灵奖,是计算机协会于1966年设立的奖项,专门奖励对计算机事业作出重要贡献的个人。其名称取自世界计算机科学的先驱、英国科学家、曼彻斯特大学教授艾伦·图灵(A.M. Turing)。

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

A、变量使用前必须先定义

B、if 语句中的判断条件必须写在 ()中

C、for 语句的循环体必须写在{}中

D、程序必须先编译才能运行

正确答案:C

试题解析:for语句的循环体和if语句的代码,如果只有一句程序,可以不使用{};

4、不可以作为 C++标识符的是( )。

A、a_plus_b

B、a_b

C、a+b

D、ab

正确答案:C

试题解析:C++标识符只能由字母、数字和下划线组成,选项C中有+号字符。

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

A、int

B、char

C、bool

D、double

正确答案:B

试题解析:C语言中,字符型数据使用单引号,字符串则是使用双引号。

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

A、int a;

B、int a = 10;

C、int a(10);

D、a = 10;

正确答案:D

试题解析:C++中,定义变量必须指定数据类型。

C++因为引入了对象,所以有int a(10)这样的形式初始化。

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

A、$

B、%

C、=

D、*

正确答案:A

试题解析:C++种没有$运算符。

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

A、a * b / 2

B、a / 2 * b

C、1 / 2 * a * b

D、a * b * 0.5

正确答案:D

试题解析:直角三角形面积公式:S=a*b/2,因为a、b都是整型,而面积有可能是小数,所以需要使用:a*b/2.0或a*b*0.5。

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

A、10

B、5

C、11

D、2

正确答案:C

试题解析:先计算乘除再计算加减,结果为11。

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

A、0

B、3

C、6

D、9

正确答案:D

试题解析:a的初值为6,执行a=a+3;,a的值为9。

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!=0 || 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=a%2;

当a为奇数时,结果是1,当a为偶数时,结果是0。不能表达题目中的意思。

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

#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=10,b=20,要使输出“20 10”,需要交换变量a、b的数值;

选项D是交换的程序。

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会输出16个1;

选项B,for循环中i的值为:1,4,7,10,13,16,共打印6个1;

选项C,for循环中i的值为:1,2,4,8,16,共打印5个1;

选项D,for循环中i的值为:1,2,5,14,共打印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

试题解析:此处的判断条件:3 <= i <= 5,并不是表示i是大于3且小于5的数,先计算3 >= i,结果再计算 <=5,所以无论i的值是什么,3 >= i的结果为0或者1,总是<=5的。

所以程序是求1+2+3+……+10的和,又因为sum初值为1,所以和为56。

(如果要表示i是大于3且小于5的数,应使用表达式:i>=3 && i<=5)。

【判断题】(每题2分)

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

正确    错误

正确答案:错误

试题解析:操作系统(OS)是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件程序。

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

正确    错误

正确答案:错误

试题解析:要执行 Windows 的桌面上的某个程序,通常双击程序图标即可。

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

正确    错误

正确答案:正确

试题解析:注释有助于人们理解程序,但会被编译器忽略。

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

正确    错误

正确答案:错误

试题解析:C++语言中的标识符可以由大写字母和小写字母、数字和下划线组成。

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

正确    错误

正确答案:错误

试题解析:3.0是一个小数型(double)类型的常量。

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

正确    错误

正确答案:正确

试题解析:for循环和while都有循环执行的条件,可以实现相同功能的循环。

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

正确    错误

正确答案:错误

试题解析:if语句不一定要有else if或者else语句。

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

正确    错误

正确答案:正确

试题解析:正确,乘除的优先级高于加减。

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

正确    错误

正确答案:正确

试题解析:%是求余,a%4的余数为0,说明a是4的倍数。

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

正确    错误

正确答案:错误

试题解析:参与计算的数有小数类型,结果也是小数类型。

【编程题】

26、(本题25分)【问题描述】

小明刚刚学习了小时、分和秒的换算关系。他想知道一个给定的时刻是这一天的第几秒,你能编写一个程序帮帮他吗?

【输入描述】

输入一行,包含三个整数和一个字符。三个整数分别表示时刻的时、分、秒;字符有两种取值,大写字母'A'表示上午,大写字母'P'表示下午。

【输出描述】

输出一行,包含一个整数,表示输入时刻是当天的第几秒。

【样例输入1】

0 0 0 A

【样例输出1】

0

【样例输入2】

11 59 59 P

【样例输出2】

86399

试题解析:

#include <iostream>
using namespace std;

int main() {
    int h = 0, m = 0, s = 0;
    char noon = 'A';

    cin >> h >> m >> s >> noon;
    int sec = h * 3600 + m * 60 + s; // 计算秒数
    if (noon == 'P') // 处理上下午
        sec += 12 * 3600;
    cout << sec << endl; // 输出秒数

    return 0;
}

27、(本题25分)【问题描述】

小明刚刚学习了如何判断平年和闰年,他想知道两个年份之间(包含起始年份和终止年份)有几个闰年。你能帮帮他吗?

【输入描述】

输入一行,包含两个整数,分别表示起始年份和终止年份。约定年份在 1到 2022 之间。

【输出描述】

输出一行,包含一个整数,表示闰年的数量。

【样例输入1】

2018 2022

【样例输出1】

1

【样例输入2】

2000 2004

【样例输出2】

2

试题解析:
 

#include <iostream>
using namespace std;

int main() {
    int s = 0, t = 0, cnt = 0;
    cin >> s >> t;
    for (int y = s; y <= t; y++) {
        //判断闰年:四年一闰 ,百年不闰,四百年再闰
        if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0))
            cnt++;
    }
    cout << cnt << endl;

    return 0;
}