GESP C++ 三级模拟试题1解析

GESP C++ 三级模拟试题1解析

  • 选择题
  1. (2023年6月)二进制数 11.01 在十进制下是     )。
    1. 3.01
    2. 3.05 
    3. 3.125
    4. 3.25

【答案】D

【考纲知识点】进制转换 (三级)

【解析】本题属于考察计算机基础知识中的进制与进制转换;二进制 11.01 换算 成 10 进制为 1 2 1+1 2 0+0  1 2 + 1  1 2 2 = 3.25。所以本题正确答案为 D

  1. (2023年9月)下列流程图的输出结果是?    
  1. 60
  2. 20
  3. 5
  4. 1

【答案】B

【考纲知识点】 流程图的概念与描述

【解析】本题属于考察计算机流程图知识,只要满足条件,就执行“是”后面的 语句,是个循环结构。a=5和4的时候执行s=sa,结果是5*4=20。

  1. (2023年9月)已知⼤写字符'A'的ASCII编码的⼗六进制表⽰为0x41 ,则字符'L'的ASCII编 码的⼗六进制表⽰为 (     )。
  1. 4A 
  2. 4B 
  3. 4C
  4. 52 

【答案】C

【考纲知识点】计算机字符编码知识

【解析】本题属于考察计算机字符编码知识。‘A’的ASCII值是65,可以推出‘ L’是76,将其转换成二进制,答案是C。

  1. (样题)枚举算法的主要特点是(    
  1. 以空间换时间
  2. 逐个尝试所有可能的解
  3. 动态规划
  4. 贪心策略

【答案】B

【考纲知识点】枚举算法

【解析】枚举算法的主要特点是逐个尝试所有可能的解,题目说法正确。

  1. (样题)以下哪个属于 C++语言中的位运算符?(    
    1. +
    2. -
    3. *
    4. &

【答案】D

【考纲知识点】运算符

【解析】只有D项是位运算符,其余三项是算术运算符,所有选D。

  1. (2023年9月)如果数组定义为long long array[] = {3, 5, 7, 2};,则数组array占⽤的字节 数为(    )。 
  1. 32
  2. 16 
  3. 8
  4. 4

【答案】A

【考纲知识点】数组和数据类型

【解析】本题属于考察C ++语言知识,包括数组和数据类型。一维数组中有4个 元素,long long类型每个数字占8个字节,4*8=32。选A

  1. (样题)在 C++语言中,可以定义一个一维整型数组的是(    )。
  1. int array[5];
  2. int array[];
  3. int[5] array;
  4. int[] array;

【答案】A

【考纲知识点】一维数组

【解析】正确的数组定义方式:在声明数组时同时指定数组的大小,所以选A。

  1. (2023年6月)下列关于进制的叙述,不正确的是(   )
  1. 正整数的二进制表示中只会出现 0 和 1
  2. 10 不是 2 的整数次幂,所以十进制数无法转换为二进制数
  3. 从二进制转换为 8 进制时,可以很方便地由低到高将每 3 位二进制位转换为 对应的一位 8
  4. 从二进制转换为 16 进制时,可以很方便地由低到高将每 4 位二进制位转换为 对应的一位 16

【答案】B

【考纲知识点】进制转换(三级)

【解析】本题属于考察计算机基础知识中的进制与进制转换概念,任意数字都可 以在不同的进制之间转换,所以本题正确答案为 B

  1. (2023年6月)下列关于 C++语言中数组的叙述,不正确的是    )。
    1. 数组必须先定义后使用
    2. 数组的所有元素在内存中是连续存放的。
    3. 除了字符数组,在定义数组时“[]”内必须有常数。
    4. 不能对数组赋值,但可以对数组的每个基础类型的元素赋值

【答案】C

【考纲知识点】一维数组(三级)

【解析】本题属于考察计算机基础知识中的数组概念,任意类型的数组,只要有 初始化,在数组定义时就可以省略[]内的常数。所以本题正确答案为 C

  1. (样题)下列哪个是 C++语言中用于获取字符串长度的函数(   )
    1. length()
    2. len()
    3. getLength()
    4. strlen()

【答案】D

【考纲知识点】字符串

【解析】C++中获取字符串长度的函数是strlen,所以选D。

  1. (2023年9月)如果 a和b均为int类型的变量 ,下列表达式不能正确判断“ a等于b ” 的是(     )。
    1. ((a >= b) && (a <=b))
    2. ((a >> 1) == (b >> 1))
    3. ((a + b) == (a + a))
    4. ((a ^ b) == 0)

【答案】B

【考纲知识点】表达式

【解析】本题属于考察C ++语言的表达式知识,注意是找不能正确判断的条件, B选项中,例如a=4,b=5,(a>>1)是等于(b>>1)的,因此选B

  1. (2023年9月)如果 a为char类型的变量 ,下列哪个表达式可以正确判断“a是⼤写字 母”?(   )
    1. a - 'A' <= 26
    2. 'A' <= a <= 'Z'
    3. 'A' <= 'a' <= 'Z
    4. ('A' <= a) && (a <= 'Z')

答案】D

【考纲知识点】字符知识

【解析】本题属于考察C ++语言的字符知识,大写字符是从‘A’到‘Z’,在这 个区间内,就是大写字符。注意B选项,如果a=‘b’,根据ASCII码,’A’<=a 成立,返回值是1,1<=’Z’,所以B选项不正确,通过判断,选D。

  1. (2023年6月)在下列代码的横线处填写(    ),可以使得输出是“24 12”

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

    1. a = a ^ b
    2. b = a ^ b
    3. a = a + b
    4. b = a + b

【答案】B

【考纲知识点】位运算(三级)

【解析】本题属于考察计算机基础知识中的位运算相关概念,因为异或运算中 a^a=0;a^0=a,当选项为 B 时,第 5 行 b'=(a^b),第 6 行 a'=a^b'=a^(a^b)=b,第 7 行 b"=a^b'=b^(a^b)=a,正好对 a、b 进行了交换。所以本题正确答案为B。

  1. (样题)在下列代码的横线处填写(),可以保证输出是“1357”,不会有多余字符

#include <iostream>
#include <string>
using namespace std;
int main(){
    char str[]="123456";
    for(            ) // 在此处填入代码
        cout<<str[i];
    return 0;
}

    1. int i = 0; i < strlen(str); i++
    2. int i = 0; str[i] != '\0'; i++
    3. int i = 1; i <= 7; i += 2
    4. int i = 0; i <= 6; i += 2

【答案】D

【考纲知识点】字符串

【解析】输出是“1357”,它们之间间隔2,也就是i+=2;注意字符串数组下标[i]是从0开始的,所以答案选D

  1. (2023年6月)在下列代码的横线处填写( ),可以使得输出不是“31"

#include <iostream>
using namespace std;
int main(){
    int array[5]={1,2,4,8,16};
    int res=0;
    for(int i=0;i<5;i++)
               ;//在此处填写代码
    cout<<res<<endl;
    return 0;
} 

    1. res=res+array[i]
    2. res=res&array[i]
    3. res=res|array[i]
    4. res=res^array[i]

答案】B

【考纲知识点】位运算(三级)

【解析】本题属于考察计算机基础知识中的数组和位运算相关概念,结果输出31 的二进制位是 11111,而数组中的 5 个数的二进制分别是 1、10、100、1000 10000,所以选项 A、C、D 都会输出 31,只有 B 选项会输出 0,所以本题正确答案为 B

  • 判断题
  1. (2023年6月)一个算法可以用不同的形式来描述,但要求描述比较规范,因此不能用自然 语言描述。

【答案】错误

【考纲知识点】算法的概念与描述(三级)

【解析】本题属于考察算法相关概念,算法不仅可以用程序语言描述,也可以通 过自然语言描述,例如中文等,所以本题错误。

  1. (样题)二进制数据编码中,负数的补码是通过对原码按位取反并加 1 得到的。

【答案】正确

【考纲知识点】数据编码

【解析】负数的补码是通过对原码按位取反并加 1 得到的,题目说法正确。

  1. (2023年6月)在C++语⾔中,长度为 的数组,访问下标为 的元素会引起编译错误

【答案】错误

【考纲知识点】数组

【解析】本题是计算机数组知识,不会引起编译错误,使用时可能会产生错误

  1. (2023年9月)字符常量'3'的值和int类型常量3的值是相同的,只是占⽤的字节数不同

【答案】错误

【考纲知识点】计算机字符

【解析】本题是计算机字符和数字的知识,字符‘3’用整数51表示,不等于3。

  1. (2023年9月)在C++语⾔中,数组下标的⼤⼩决定元素在逻辑上的先后顺序,与元素在内 存中位置的先后顺序⽆关

【答案】错误

【考纲知识点】数组

【解析】本题是计算机数组知识,下标的大小和两者都有关系

  1. (20236月)在C++语言中,可以使用字符(如'0')作为数组下标

【答案】正确

【考纲知识点】位运算(三级)

【解析】本题属于考察数组相关概念,在 C++中每 个字符都有对应的 ASCII 编码,当需要使用整数类型的值时,可以将字符通过对 应的 ASCII 遍码转换为整数,'0'的 ASCII 编码为 48,所以 int b['0']等价于 int b[48], 所以本题正确

  1. (样题)C++语言中的数组可以根据需要自动调整大小。

【答案】错误

【考纲知识点】数组

【解析】数组被定义时,它的大小就确定了,不会自动调整大小,题目说法错误。

  1. (2023年6月)计算机中存储的数据都是二进制形式。因此,在使用 C++语言编写程序时,将 所有十进制数改写为相同数值的二进制数,会使得程序运行效率更高。

【答案】错误

【考纲知识点】编程环境(一级)

【解析】本题属于考察程序的基本概念,无论编写程序时使用十进制还是二进制, 编译器都会翻译为二进制机器指令运行,所以运行效率是一样的,所以本题错误

  1. (2023年9月)在C++语言中,表达式(0xf == 015)的值为 true。

【答案】错误

【考纲知识点】进制转换(三级)

【解析】本题属于考察程序的进制相关概念,0xf 是 16 进制下的 f,等于 10 进制 的 15;015 是 8 进制下的 15,等于 10 进制的 13。可见它们不相等,所以本题错 误。

  1. (2023年6月)如果 a 为 int 类型的变量,且表达式((a | 3) == 3)的值为 true,则说明 a 在从 0 到 3 之间(可能为 0、可能为 3)

【答案】正确

【考纲知识点】

【考纲知识点】位运算(三级)

【解析】本题属于考察位运算相关概念,((a|3)==3)说明 a 只在二进制的最低位 和第二低位可能为 1,所以 0 ≤3,所有本题正确。

  • 编程题
  1. 春游(20236) 

【问题描述】

老师带领同学们春游。已知班上有N位同学,每位同学有从 0 到N − 1 的唯

一编号。到了集合时间,老师确认是否所有同学都到达了集合地点,就让同学们

报出自己的编号。到达的同学都会报出的编号,不会报出别人的编号,但有的同

学很顽皮,会多次报出。你能帮老师找出有哪些同学没有到达吗?

【输入描述】

输入包含 2 行。第一行包含两个整数NM,表示班级有N位同学,同学们 共有M次报出编号。约定 2 ≤ N, M ≤ 1000。 第二行包含M个整数,分别为M次报出的编号。约定所有编号都在合理范围 内。 

【输出描述】

输出一行。如果所有同学都到达,则输出N;否则由小到大输出所有未到达 的同学编号,空格分隔。

【样例输入1】

3 3

0 2 1

【样例输出1】

3

【样例输入2】

3 5

0 0 0 0 0

【样例输出2】

1 2

【解题思路】

1.使用 arrive 数组来记录每个同学是否到达,初始为 false,表示没有到达。

2. 每有一个同学报出编号,就将 arrive 数组对应的编号改为 true。

3. 遍历 arrive 数组,将数组中对应位置为 false 的下标输出并特判所有人均到达 的情况

【考纲知识点】循环结构(一级),模拟法、一维数组(三级)

【参考代码】

#include <iostream>
using namespace std;

int main() {
    int n,m;
    cin>>n>>m;    
    // 依次报到m次
    bool arrive[1000]={0};
    int code;
    for(int i=0;i<m;i++){
        cin>>code;
        arrive[code]=1;
    }
    // 依次检查n位同学是否到达
    bool all=1;
    for(int i=0;i<n;i++){
        if(arrive[i]==0){    
            cout<<i<<" ";
            all=0;
        }
    }
    // 处理全部到达的特殊情况
    if(all) cout<<n;
    return 0;
}  
  1. 最长连续重复字符

【问题描述】

请统计输入的字符串中最大连续重复字符的个数, 要求统计出字符串中哪个字符连续出现的次数最多,并且要统计该字符连续出现的次数,如果该字符有多个,只输出最先出现的那个字符。
例如:字符串为 AAA222BBAAAaa,则在这个字符串中,字符 A 和字符 2 连续出现的次数都是最多,都是 3 次,只需要输出A 3。

【输入描述】

 共一行,一个字符串,长度不超过1000。

【输出描述】

共一行,连续出现次数最多的字符,和出现次数,使用空格隔开。

【样例输入1】

AAA222BBAAAaa

【样例输出1】

A 3

【样例输入2】

abcdef

【样例输出2】

a 1

【样例输入3】

aaa111BBBBB333

【样例输出3】
B 5

【考纲知识点】循环结构、字符串

【解题思路】

1.循环遍历字符串中的字符,获取字符串长度的函数length()

2.定义变量max,记录最长连续重复字符的长度

3.定义变量cnt,继续连续重复字符的长度,与max进行比较,如果大于max的值,就更新max的值为cnt

4.定义变量a保存最长连续重复的字符

5.按要求输出字符a和max

【参考代码】

#include <iostream>
using namespace std;
#include <bits/stdc++.h>
int main(){
    string s;
    cin>>s;
    int max=0;
    int cnt=1;
    char a;
    for(int i=0;i<s.length();i++){
        if(s[i]==s[i+1]){
            cnt++;
            if(cnt>max){
                max=cnt;
                a=s[i];
            }
        }
        else cnt=1;
    }
    cout<<a<<" "<<max;
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

蜗牛变涡流

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

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

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

打赏作者

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

抵扣说明:

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

余额充值