1 条题解

  • 0
    @ 2025-12-12 14:13:42

    2023年3月GESP C++二级试卷选择判断题题解

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

    第1题

    题干

    以下存储器中的数据不会受到附近强磁场干扰的是( ) A. 硬盘 B. U盘 C. 内存 D. 光盘

    答案

    D

    考纲知识点

    计算机的存储(二级)

    题解

    本题核心考察不同存储介质的工作原理及抗磁场干扰特性:

    • 选项A(硬盘):属于磁介质存储设备,通过磁头磁化磁盘表面记录数据,强磁场会直接破坏磁化状态,导致数据丢失,受磁场干扰严重。
    • 选项B(U盘):本质是闪存芯片,但强磁场会在其内部电路中产生感应电流,可能损坏芯片或篡改数据,受磁场影响。
    • 选项C(内存):作为半导体存储设备,电路结构对感应电流敏感,强磁场产生的感应电流会破坏数据或损伤硬件,受磁场干扰。
    • 选项D(光盘):采用光存储技术,通过激光高温改变涂覆层形状记录数据,数据存储与磁场无关,因此不会受强磁场干扰。

    第2题

    题干

    下列流程图,属于计算机的哪种程序结构?( ) (流程图描述:开始→是否按下空格键→是则小猫移动100步,否则小猫颜色特效增加25→结束) A. 顺序结构 B. 循环结构 C. 分支结构 D. 数据结构

    答案

    C

    考纲知识点

    计算机基础结构(一级)

    题解

    程序三大基本结构包括顺序结构、分支结构和循环结构,需根据流程图逻辑判断:

    • 顺序结构:按代码顺序依次执行,无判断分支,不符合题意。
    • 循环结构:需满足“条件成立则重复执行某段逻辑”,本题无重复执行环节,排除。
    • 分支结构:核心是“根据条件判断选择不同执行路径”,本题以“是否按下空格键”为判断条件,分出两条执行路径,符合分支结构定义。
    • 数据结构是存储和组织数据的方式,并非程序执行结构,排除。

    第3题

    题干

    下列关于C++语言的叙述,不正确的是( ) A. double类型的变量占用内存的大小是浮动的 B. bool类型的变量占用1字节内存 C. int类型变量的取值范围不是无限的 D. char类型的变量有256种取值

    答案

    A

    考纲知识点

    计算机的存储(二级)

    题解

    本题考察C++基本数据类型的内存占用和取值范围特性:

    • 选项A:在C++标准中,double类型的内存占用是固定的(通常为8字节),并非“浮动”,该叙述错误。
    • 选项B:bool类型仅需表示“真”(1)和“假”(0),标准规定占用1字节内存,叙述正确。
    • 选项C:int类型通常占用4字节(32位),取值范围为231 2311-2^{31}~2^{31}-1,是有限区间,叙述正确。
    • 选项D:char类型占用1字节(8位),可表示28=2562^8=256种取值(范围-128~127),叙述正确。

    第4题

    题干

    下列关于C++语言的叙述,不正确的是( ) A. 变量定义后,可以使用赋值语句改变它的值 B. 变量定义时,必须指定类型 C. 变量名必须为合法标识符 D. 合法标识符可以以数字开始

    答案

    D

    考纲知识点

    变量的定义与使用(一级)

    题解

    本题核心考察C++变量定义的基本规则:

    • 选项A:变量的核心特性之一是“可修改性”(常量除外),定义后通过赋值语句(如a=5;)修改值,叙述正确。
    • 选项B:C++是强类型语言,变量定义必须明确指定类型(如int a;char b;),否则语法错误,叙述正确。
    • 选项C:变量名本质是标识符,必须符合标识符规则,否则无法通过编译,叙述正确。
    • 选项D:C++合法标识符的规则是“由字母、数字、下划线组成,且不能以数字开头”,因此“以数字开始”的标识符不合法,叙述错误。

    第5题

    题干

    以下哪个不是C++语言的关键字? A. return B. max C. else D. case

    答案

    B

    考纲知识点

    程序设计语言的特点(二级)

    题解

    关键字是C++语言预留的具有特殊含义的单词,需区分关键字与库函数:

    • 选项A(return):用于函数返回值,是关键字。
    • 选项B(max):是C++标准库中的“求最大值”函数(如max(3,5)),并非关键字,符合题意。
    • 选项C(else):与if搭配构成分支结构,是关键字。
    • 选项D(case):用于switch-case语句,是关键字。

    第6题

    题干

    以下哪个不是C++语言的运算符? A. = B. /= C. -= D. !=

    答案

    A

    考纲知识点

    算术运算(一级)

    题解

    本题考察C++常见运算符的合法性:

    • 选项A(=):并非C++中的有效运算符,C++赋值运算符是=,该选项格式错误,符合题意。
    • 选项B(/=):复合赋值运算符,等价于a = a / b,是合法运算符。
    • 选项C(-=):复合赋值运算符,等价于a = a - b,是合法运算符。
    • 选项D(!=):关系运算符,表示“不等于”,是合法运算符。

    第7题

    题干

    如果a和b都是char类型的变量,下列哪个语句不符合C++语法? A. b = a + 1; B. b = a + '1'; C. b = 'a'++; D. b = a++;

    答案

    C

    考纲知识点

    基本数据类型(一级)

    题解

    本题核心考察char类型的运算规则及“常量不可修改”特性:

    • 选项A:a是char类型,本质存储ASCII码值,a+1计算ASCII码值加1(结果为int类型),赋值给b时自动转换为char类型,语法合法。
    • 选项B:'1'是char类型常量(ASCII码值为49),a + '1'是两个char类型的ASCII码值相加,结果仍为char类型,赋值给b,语法合法。
    • 选项C:'a'是char类型常量,而++自增运算符要求操作数是“可修改的变量”(左值),常量无法被修改,因此该语句语法错误。
    • 选项D:a是char类型变量,a++是合法的自增运算(先赋值后自增),将a原来的值赋值给ba自身ASCII码值加1,语法合法。

    第8题

    题干

    如果a、b、c和d都是int类型的变量,则下列哪个表达式能够正确计算它们的平均值? A. (a + b + c + d) / 4 B. (a + b + c + d) % 4 C. (a + b + c + d) / 4.0 D. (a + b + c + d) % 4.0

    答案

    C

    考纲知识点

    算术运算(一级)

    题解

    本题考察整型与浮点型运算规则及平均值计算逻辑:

    • 选项A:a+b+c+d是int类型,4也是int类型,整型除法会“向下取整”(如总和为9时,9/4=2,而非2.25),无法得到准确平均值,错误。
    • 选项B:%是取余运算符,计算的是“总和除以4的余数”(如总和为9时,9%4=1),与平均值无关,错误。
    • 选项C:4.0是double类型,C++中“整型+浮点型”运算结果为浮点型,(a+b+c+d)/4.0会得到精确的浮点型平均值(如总和为9时,结果为2.25),正确。
    • 选项D:%运算符的操作数必须是整型,4.0是浮点型,语法错误,排除。

    第9题

    题干

    如果a为char类型的变量,且a的值为'2',则下列哪条语句执行后,a的值不会变为'3'? A. a = a + 1; B. a + 1; C. a = 1 + a; D. ++a;

    答案

    B

    考纲知识点

    算术运算(一级)

    题解

    本题考察“表达式是否对变量进行赋值修改”:

    • 选项A:a+1计算'2'的ASCII码值(50)加1,结果为51(对应字符'3'),赋值给aa的值变为'3'。
    • 选项B:a+1仅计算表达式结果(51),但未将结果赋值给a,变量a的原值('2')未发生任何改变,符合题意。
    • 选项C:与A选项逻辑一致,1+a等价于a+1,赋值后a的值变为'3'。
    • 选项D:++a是前置自增运算,直接将a的ASCII码值加1,a的值变为'3'。

    第10题

    题干

    如果a为int类型的变量,且a的值为9,则执行a -= 3之后,a的值会是( ) A. 3 B. 6 C. 9 D. 12

    答案

    B

    考纲知识点

    算术运算(一级)

    题解

    本题考察复合赋值运算符-=的含义: 复合赋值运算符a -= 3的等价表达式是a = a - 3,即“将a的原值减去3后,重新赋值给a”。 已知a=9,计算9-3=6,因此执行后a的值为6。

    第11题

    题干

    如果a和b均为int类型的变量,下列表达式能正确判断“a等于0或b等于0”的是( ) A. (!a) || (!b) B. (a == b == 0) C. (a == 0) && (b == 0) D. (a == 0) - (b == 0) == 0

    答案

    A

    考纲知识点

    逻辑运算(一级)

    题解

    本题考察逻辑运算符(!||&&)及表达式优先级:

    • 选项A:!a表示“a为0时结果为真(1),a非0时为假(0)”,同理!b表示“b为0时为真”;||是“或运算”,只要一个为真则整体为真,恰好对应“a等于0或b等于0”,正确。
    • 选项B:C++中表达式按从左到右计算,a == b == 0先计算a == b(结果为0或1),再判断该结果是否等于0,与“a等于0或b等于0”无关,错误。
    • 选项C:&&是“与运算”,表示“a等于0且b等于0”,与题意不符,错误。
    • 选项D:(a==0)(b==0)的结果为0或1,两者相减等于0的情况是“两者均为0或均为1”,即“a和b同时为0或同时不为0”,与题意不符,错误。

    第12题

    题干

    如果a为char类型的变量,下列哪个表达式可以正确判断“a是小写字母”? A. a <= 'a' && 'z' >= a B. a - 'a' <= 'z' - 'a' C. 'a' <= a <= 'z' D. a >= 'a' && a <= 'z'

    答案

    D

    考纲知识点

    逻辑运算(一级)

    题解

    本题考察char类型的ASCII码特性及逻辑判断逻辑: 小写字母'a'到'z'的ASCII码值是连续的(97~122),判断“a是小写字母”的核心是“a的ASCII码值在'a'和'z'之间”。

    • 选项A:a <= 'a' && 'z' >= a等价于a <= 'a' && a <= 'z',仅能判断a是'a'或更小的字符,无法覆盖所有小写字母,错误。
    • 选项B:'z' - 'a'的结果是25,a - 'a' <= 25等价于a <= 'z',无法限制a的下限(如大写字母'A'的ASCII码值65,65-97=-32<=25,但'A'不是小写字母),错误。
    • 选项C:C++中'a' <= a <= 'z'按从左到右计算,先判断'a' <= a(结果为0或1),再判断0或1是否小于等于'z'(ASCII码122),永远为真,错误。
    • 选项D:a >= 'a'限制a的ASCII码不小于97,a <= 'z'限制不大于122,恰好覆盖所有小写字母的ASCII码范围,正确。

    第13题

    题干

    在下列代码的横线处填写( ),使得输出是50 10

    #include<iostream>
    using namespace std;
    int main(){
        int a=10,b=50;
        // 在此处填入代码
        b -= a;
        a += b;
        cout << a << " " << b << endl;
        return 0;
    }
    

    A. a -= b B. b = a - b C. a = b - a D. a = b

    答案

    C

    考纲知识点

    基本运算(一级)

    题解

    本题考察变量运算对最终结果的影响,可通过“代入选项反向推导”: 目标输出:a=50b=10,需从最终步骤反向推导横线处的操作:

    • 最终步骤2:a += b → 设步骤2前a为a1,b为b1,则a1 + b1 = 50
    • 最终步骤1:b -= a → 设横线处执行后a为a0,b为b0,则b1 = b0 - a0,且步骤2前a1 = a0(步骤1仅修改b)。
    • 目标b=10,即b1=10;目标a=50,即a0 + 10 = 50a0=40
    • 初始a=10b=50,需通过横线处代码将a0=40b0=50(b未修改):
      • 选项C:a = b - aa = 50 - 10 = 40,符合a0=40的要求。 代入验证:
    • 横线处执行a = 50 - 10 = 40,此时a=40b=50
    • 执行b -= ab = 50 - 40 = 10
    • 执行a += ba = 40 + 10 = 50。 输出50 10,符合要求。

    第14题

    题干

    在下列代码的横线处填写( ),可以使得输出是5

    #include<iostream>
    using namespace std;
    int main(){
        int cnt=0;
        for (char ch = '1'; ch <= '9'; ch++)
            if (/* 在此处填入代码 */)
                cnt++;
        cout << cnt << endl;
        return 0;
    }
    

    A. ch < '5' B. ch >= 5 C. ch >= '4' D. ch % 2 == 1

    答案

    D

    考纲知识点

    循环结构、字符型、ASCII码、基本运算(二级)

    题解

    本题考察char类型的ASCII码运算及循环计数逻辑: 循环变量ch的取值是字符'1'~'9',对应的ASCII码值为49~57,需找到使cnt累加至5的判断条件:

    • 选项A:ch < '5'ch可取'1'、'2'、'3'、'4',共4次,cnt=4,不符合。
    • 选项B:ch >=5 → 5是int类型,char类型与int类型比较时,会将ch转换为ASCII码值(49~57),49>=5恒成立,cnt=9,不符合。
    • 选项C:ch >= '4'ch可取'4'~'9',共6次,cnt=6,不符合。
    • 选项D:ch % 2 ==1 → char类型参与运算时使用ASCII码值,49~57中奇数为49('1')、51('3')、53('5')、55('7')、57('9'),共5个,cnt=5,符合要求。

    第15题

    题干

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

    #include<iostream>
    using namespace std;
    int main(){
        int n=17;
        bool isprime = true;
        for (int i=2; i<=n; i++)
            if(n%i ==0)
                isprime = false;
        cout << isprime << endl;
        return 0;
    }
    

    A. false B. true C. 0 D. 1

    答案

    C

    考纲知识点

    循环结构、布尔型、基本运算(二级)

    题解

    本题考察素数判断逻辑及bool类型的输出规则:

    • 程序逻辑:判断n=17是否为素数(素数是仅能被1和自身整除的数)。
      • 循环变量i从2到17遍历,若n%i==0(即17能被i整除),则设isprime=false
      • 17是素数,但循环中i=17时,17%17==0,会将isprime设为false
    • bool类型输出规则:C++中bool类型变量输出时,true对应输出1,false对应输出0,而非字符串“true”或“false”。 因此,最终输出0

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

    第1题

    题干

    明明和笑笑在“小庙会”上分别抽到一个4GB和4096MB的U盘,容量大的盘是笑笑的( )

    答案

    ×

    考纲知识点

    计算机的存储(二级)

    题解

    本题核心考察存储单位换算:1GB = 1024MB,因此4GB = 4×1024MB = 4096MB。两者容量完全相等,不存在“笑笑的U盘容量更大”的情况,故判断错误。

    第2题

    题干

    IPv4的地址通常用“点分十进制”的表示形式,形如(a.b.c.d),其中a、b、c、d都是1~255之间的十进制整数( )

    答案

    ×

    考纲知识点

    计算机网络(二级)

    题解

    IPv4地址由32位二进制数组成,分为4个8位段(字节),每个段的取值范围是0~255(8位二进制数的取值范围为00000000~11111111,对应十进制0~255),而非1~255。例如,本地回环地址127.0.0.1中包含0,因此题干叙述错误。

    第3题

    题干

    在C++语言中,一个程序不能有多个main函数( )

    答案

    考纲知识点

    程序设计语言的特点(二级)

    题解

    main函数是C++程序的“入口点”,操作系统通过调用main函数启动程序。若一个程序存在多个main函数,编译器无法确定哪个是入口,会导致编译错误。因此,一个C++程序必须且只能有一个main函数,叙述正确。

    第4题

    题干

    在C++语言中,标识符中可以有下划线_,但不能以下划线_开头( )

    答案

    ×

    考纲知识点

    变量的定义与使用(一级)

    题解

    C++合法标识符的规则是:

    1. 由字母(A-Z、a-z)、数字(0-9)、下划线(_)组成;
    2. 不能以数字开头。 规则中并未禁止“以下划线开头”,例如_name_age都是合法标识符。因此题干中“不能以下划线_开头”的叙述错误。

    第5题

    题干

    如果a是int类型的变量,而且值为1,则表达式'a'的值为'1'( )

    答案

    ×

    考纲知识点

    基本数据类型(一级)

    题解

    本题考察“变量”与“字符常量”的区别:

    • a是int类型变量,值为1,但'a'是char类型常量(ASCII码值为97),与变量a无任何关联。
    • '1'是char类型常量(ASCII码值为49),与'a'的ASCII码值完全不同,因此'a'的值不可能是'1',叙述错误。

    第6题

    题干

    在if ... else语句中,else子句可以嵌套if ... else语句,但if子句不可以,因为会造成二义性( )

    答案

    ×

    考纲知识点

    多层分支(二级)

    题解

    C++中if子句和else子句都可以嵌套if ... else语句,嵌套是否产生二义性与“是否使用复合语句{}明确作用域”相关,而非“是否允许嵌套”:

    • 例如:if(a>0){if(b>0) cout<<"ok"; else cout<<"no";} 是合法的if子句嵌套,通过{}明确作用域,无歧义。 因此题干中“if子句不可以嵌套”的叙述错误。

    第7题

    题干

    while语句的循环体至少会执行一次( )

    答案

    ×

    考纲知识点

    循环结构(二级)

    题解

    while语句的执行逻辑是“先判断条件,后执行循环体”:

    • 若条件初始为真,则执行循环体;
    • 若条件初始为假,则循环体一次也不执行。 例如:while(0){cout<<"hello";} 中,条件恒为假,循环体从未执行。因此“至少执行一次”的叙述错误(do-while语句才是“至少执行一次”)。

    第8题

    题干

    C++语言中>=是运算符,但=>不是( )

    答案

    考纲知识点

    基本运算(一级)

    题解

    • >=是C++中的关系运算符,表示“大于等于”,用于比较两个值的大小(如3>=2结果为真),是合法运算符。
    • =>并非C++中的任何运算符,无特殊含义,若在代码中使用会导致语法错误。因此叙述正确。

    第9题

    题干

    如果a为char类型的变量,且取值为小写字母,则执行语句a = a - 'a' + 'A';后,a的值会变为与原值对应的大写字母( )

    答案

    考纲知识点

    字符型(一级)

    题解

    本题考察大小写字母的ASCII码转换逻辑:

    • 小写字母'a'~'z'的ASCII码值为97~122,大写字母'A'~'Z'为65~90;
    • a - 'a'会将小写字母转换为0~25的整数(如'a'-'a'=0,'b'-'a'=1);
    • 加上'A'(ASCII码65)后,0+65=65('A'),1+65=66('B'),恰好对应原小写字母的大写形式。因此叙述正确。

    第10题

    题干

    表达式(10.0 / 2)的计算结果为5.0,且结果类型为double( )

    答案

    考纲知识点

    浮点型(一级)

    题解

    本题考察C++中浮点型与整型的混合运算规则:

    • 10.0是double类型(C++中默认浮点常量为double类型),2是int类型;
    • 混合运算时,int类型会自动转换为double类型,因此10.0 / 2等价于10.0 / 2.0
    • 计算结果为5.0,类型为double。因此叙述正确。

    信息

    ID
    3468
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    9
    已通过
    1
    上传者