GESP2023年12月认证C++三级真题解析

第 1 题 【 单选题 】

下面C++数组的定义中,会丢失数据的是(C   )。

  • A:char dict_key[] = {'p','t','o'};

    B:int dict_value[] = {33,22,11};

    C:char dict_name[]={'chen','wang','zhou'};

    D:float dict_value[]={3,2,1};

解释:在选项C中,定义的dict_name数组是char类型的数组。然而, 'chen'、'wang'和'zhou'都是字符串,应该使用双引号括起来。单引号只能用于单个字符。因此,选项C中的数组定义将导致编译错误,且会丢失数据。答案选C。

第 2 题 【 单选题 】

在下列编码中,不能够和二进制"1101 1101"相等的是(D   )。

  • A:(221)10进制

    B:(335)8进制

    C:(dd)16进制

    D:(5d)16进制

解释:二进制数Q"1101 1101"转换为十进制数为(-51)。现在我们来逐个选项进行转换并比较:

A:(221)10进制的二进制表示为"1101 1101"。与给定的二进制相等。B:(335)8进制的二进制表示为"011 011 101"。与给定的二进制相等。C:(dd)16进制的二进制表示为"1101 1101"。与给定的二进制相等。

D:(5d)16进制的二进制表示为"0101 1101"。与给定的二进制不相等。

答案选D。

第 3 题 【 单选题 】

下面C++代码执行后不能输出"GESP"的是(  C )。

  • A:string str("GESP"); cout<<str<<endl;

    B:string str="GESP"; cout<<str<<endl;

    C:string str("GESP"); cout<<str[1]<<str[2]<<str[3]<<str[4]<<endl;

    D:string str{"GESP"}; cout<<str<<endl;

解释:阅读程序题,字符串可以等效为字符数组,数组的下标应从0开始索引,模拟运行即可判断。答案选C。

第 4 题 【 单选题 】

执行下面C++代码输出是(  C )。

  • A:10

    B:8

    C:4

    D:3

解释:阅读程序题,模拟运行即可。答案选C。

第 5 题 【 单选题 】

执行下面C++代码后,输出是(C   )。

  • A:4

    B:2

    C:5

    D:3

解释:阅读程序题,模拟运行即可。答案选C。

第 6 题 【 单选题 】

执行下面C++代码后输出的是(A   )。

  • A:4

    B:3

    C:2

    D:5

解释:阅读程序题,模拟运行即可。答案选A。

第 7 题 【 单选题 】

执行下面C++代码后输出的是( A  )。

  • A:输出未知的数

    B:输出'n'

    C:输出'\0'

    D:输出空格

解释:阅读程序题,考察的是continue和break的语法差异,模拟运行即可。答案选A。

第 8 题 【 单选题 】

下面C++代码执行后的输出是( C  )。

  • A:0

    B:1

    C:输出空格

    D:什么也不输出

解释:阅读程序题,while()循环,只要括号内是表示布尔值true的代码,即能无限循环直至遇到break跳出,模拟运行即可。答案选C。

第 9 题 【 单选题 】

下面C++代码用于统计每种字符出现的次数,当输出为3时,横线上不能填入的代码是(D   )。

  • A:str[i]=='o'

    B:str[i]=='a'+14

    C:str[i]==115

    D:str[i]==111

解释:阅读填空题,判断质数的入门级代码,学员编程实操时还是要使用朴素筛或者埃氏筛,能写出线性筛当然更好。答案选D

第 10 题 【 单选题 】

32位计算机中,C++的整型变量int能够表示的数据范围是(D   )。

  • A:2^31~(2^31)-1

    B:2^32

    C:-2^31~+(2^31)-1

    D:-(2^31)+1~2^31

解释:阅读填空,for()循环内定义的变量,在for()循环结束后,会被释放。答案选D。

第 11 题 【 单选题 】

下面C++程序执行的结果是( B  )。

  • A:2

    B:3

    C:5

    D:4

解释:阅读程序题,模拟运行即可。答案选B。

第 12 题 【 单选题 】

C++的数据类型转换让人很难琢磨透,下列代码输出的值是( D  )。

  • A:1.5

    B:1

    C:2

    D:1.50

解释:在C++中,类型转换使用圆括号()或者使用static_cast等显式类型转换运算符来完成。选项D中的赋值语句c= char 66;缺少了圆括号,无法正确进行类型转换。答案选D。

第 13 题 【 单选题 】

C++代码用于抽取字符串中的电话号码。约定:电话号码全部是数字,数字之间没有其他符号如连字符或空格等。代码中变量strSrc仅仅是示例,可以包含更多字符。下面有关代码说法,正确的说法是(  A )。

  • A:代码将换行输出各个含有数字的电话号码。

    B:代码将不换行输出各个含有数字的电话号码,号码中间没有分隔。

    C:代码将不换行输出各个含有数字的电话号码,号码中间有分隔。

    D:不能够输出数字电话号码。

第 14 题 【 单选题 】

某公司新出了一款无人驾驶的小汽车,通过声控智能驾驶系统,乘客只要告诉汽车目的地,车子就能自动选择一条优化路线,告诉乘客后驶达那里。请问下面哪项不是驾驶系统完成选路所必须的。( C  )

  • A:麦克风

    B:扬声器

    C:油量表

    D:传感器

解释:驾驶系统完成选路所必须的关键是获取乘客告知的目的地和获取路况信息,以便选择最优路线。在给定的选项中,麦克风用于接收乘客的声音输入,扬声器用于向乘客传达目的地信息,传感器用于获取车辆周围的环境和路况信息。然而,油量表并不是驾驶系统完成选路所必须的。油量表主要用于显示车辆的油量信息,而对于选路过程来说,注意审题,是选择路线而不是实际到达,油量并不是决定路线的因素。因此,选项C:油量表不是驾驶系统完成选路所必须的。答案选C。

第 15 题 【 单选题 】

现代计算机是指电子计算机,它所基于的是(   )体系结构。

  • A:艾伦·图灵

    B:冯·诺依曼

    C:阿塔纳索夫

    D:埃克特-莫克利

解释:现代计算机所基于的是冯·诺依曼体系结构。答案选B。

选项B:冯·诺依曼是计算机科学家,提出了冯·诺依曼体系结构的概念,该体系结构成为了现代计算机的基础。冯·诺依曼体系结构包括了存储程序的概念,将指令和数据存储在同一存储器中,通过控制单元和算术逻辑单元进行处理。

选项A:艾伦图灵是计算机科学家,提出了图灵机的概念,被认为是计算机的理论基础,但并不是现代计算机所基于的体系结构。

选项C:阿塔纳索夫是计算机科学家,与莫尔设计了ENIAC,但并不是现代计算机所基于的体系结构。选项

D:埃克特-莫克利是计算机科学家,共同设计了英特尔8080微处理器,但并不是现代计算机所基于的体系结构。

因此,选项B:冯·诺依曼是正确答案,现代计算机基于冯·诺依曼体系结构。

第 1 题 【 判断题 】

执行C++代码 cout<<(5&&2)<<endl; 后将输出 1 。(   )

  • A:正确

    B:错误

解释:正确。执行C++代码 cout<<(5&&2)<<end;后将输出1。这是因为&&是逻辑与运算符,用于判断两个表达式的逻辑与结果。在这种情况下,表达式5&&2 中的两个操作数都被解释为布尔值。非零的整数值会被视为真,而零会被视为假。在逻辑与运算中,只有当两个操作数都为真时,结果才为真。在这里,5和2都被解释为真,因此逻辑与运算的结果为真,即1。因此,输出的结果是1。

第 2 题 【 判断题 】

C++程序执行后,输入 chen a dai 输出应该为: chen 。(   )

  • A:正确

    B:错误

解释:正确。cin和scanf,遇到空格会终止当前输入。

第 3 题 【 判断题 】

执行C++代码 cout<<(5||2); 后将输出 1 。(   )

  • A:正确

    B:错误

解释:正确。执行C++代码 cout<<(5||2);后将输出1。这是因为||是逻辑或运算符,用于判断两个表达式的逻辑或结果。在这种情况下,表达式5|| 2中的两个操作数都被解释为布尔值。在逻辑或运算中,只要有一个操作数为真,结果就为真。在这里,5和2都被解释为真,因此逻辑或运算的结果为真,即1。因此,输出的结果是1。

第 4 题 【 判断题 】

执行下面C++代码后将输出"China"。(   )

  • A:正确

    B:错误

解释:错误。本题考查string类的replace()函数,基本语法为

string& replace (size_t pos, size_t len, const string& str);
//参数说明://pos : 起始位置(即要替换的子串在原字符串中的起始位置)。//len : 要被替换的子串的长度。//str : 替换后的新字符串。

题干中代码是用大写字母’C’替换了字符串”china”0号位置的’c’,输出为字符串”China”,

第 5 题 【 判断题 】

  • 执行C++代码将输出 0 5 , 5 之后还有一个空格。(   )

  • A:正确

    B:错误

解释:错误。输出应为 1 6 ,6后有一个空格,注意数组的索引是从0开始递增的。

第 6 题 【 判断题 】

  • 下面C++代码将输出1。(   )

  • A:正确

    B:错误

解释:错误。数组名不带下标,在C++里表示的是数组第一个元素的地址。

第 7 题 【 判断题 】

下面C++程序将输出1。(   )

  • A:正确

    B:错误

解析:正确

第 8 题 【 判断题 】

  • 执行C++代码,将输出 1 3 5 7 9 , 9 之后还有一个空格。(   )

  • A:正确

    B:错误

解释:正确。阅读程序题,模拟运行即可。

第 9 题 【 判断题 】

  • 小杨最近在准备考GESP,他用的Dev C++来练习和运行程序,所以Dev C++也是一个小型操作系统。(   )

  • A:正确

    B:错误

解释:错误。Dev C++是一个集成开发环境(IDE),而不是一个操作系统。它是为了方便C++编程而设计的软件工具,提供了代码编辑、编译、调试和运行等功能,使开发者能够更便捷地编写和测试C++程序。

操作系统是一种系统软件,它管理计算机硬件和软件资源,提供用户与计算机之间的接口。常见的操作系统包括Windows、Linux、macOS等。

Dev C++运行在支持的操作系统上(如Windows),并提供了一个用户友好的界面来编写、编译和运行C++代码。它本身并不是一个操作系统,而只是在操作系统上提供的工具之一。

因此,给定的判断是错误的。Dev C++不是一个小型操作系统,而是一个用于C++开发的集成开发环境。

第 10 题 【 判断题 】

任何一个while循环都可以转化为等价的for循环。(   )

  • A:正确

    B:错误

解释:正确。任何一个while 循环都可以转化为等价的for循环。for循环和 while 循环都是用于控制程序的循环执行的结构,它们可以互相替代。

答案选C。

第 1 题 【 问答题 】

  • 小猫分鱼

    时间限制:1.0 s

    内存限制:128.0 MB

    问题描述

    海滩上有一堆鱼,N只小猫来分。第一只小猫把这堆鱼平均分为N份,多了i个(i<N),这只小猫把多的i个扔入海中,拿走了一份。第二只小猫接着把剩下的鱼平均分成N份,又多了i个,小猫同样把多的i个扔入海中,拿走了一份。第三、第四、……,第N只小猫仍是最终剩下的鱼分成N份,扔掉多了的i个,并拿走一份。

    编写程序,输入小猫的数量N以及每次扔到海里的鱼的数量i,输出海滩上最少的鱼数,使得每只小猫都可吃到鱼。

    例如:两只小猫来分鱼N=2,每次扔掉鱼的数量为i=1,为了每只小猫都可吃到鱼,可令第二只小猫需要拿走1条鱼,则此时待分配的有3条鱼。第一只小猫待分配的鱼有3*2+1=7条。

    输入描述

    总共 2 行。第一行一个整数N,第二行一个整数i。

    保证0<N<10;i<N。

    输出描述

    一行一个整数,表示满足要求的海滩上最少的鱼数。

    特别提醒

    在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。

    样例输入1

    2
    1

    样例输出1

    7

    样例输入2

    3
    1

    样例输出2

    25

    样例解释2

    三只小猫来分鱼N=3,每次扔掉鱼的数量为i=1,为了每只小猫都可吃到鱼,可令第三只小猫需要拿走3条鱼(拿走1条和2条不满足要求),则此时待分配的有10条鱼。第二只小猫待分配的鱼有10×3/2+1=16条。第一只小猫待分配的鱼有16×3/2+1=25条。

//本题就是把三水手分椰子(五猴分桃、十七个强盗分珠宝)换了名字
#include <bits/stdc++.h>
using namespace std;

int n, i;
int main()
{
    cin >> n >> i;
    for(int j = 1; j <= 1000; j++)
    { //枚举最后一只小猫拿走的鱼
        bool flag = 1; //假设n只小猫都成功的分到了鱼
        int ans = j * n + i; //最后一只小猫拿之前的鱼
        for(int k = 2; k <= n; k++)
  { //从到数第2只到第一只
            if (ans % (n - 1) == 0)
      { //如果符合条件
                ans = ans / (n - 1) * n + i; //算出拿之前的鱼数量
            }
            else
            {//不符合条件
                flag = 0;
                break;//进行下一次循环
            }
        }
        if (flag == 1)
        { //如果成功
            cout << ans; //输出答案
            return 0;
        }
    }
    return 0;
}

第 2 题 【 问答题 】

  • 单位转换

    时间限制:1.0 s

    内存限制:128.0 MB

    问题描述

    小杨这周的数学作业是做单位转换,喜欢编程的小杨决定编程帮他解决这些问题。

    小杨只学了长度单位和重量单位,具体来说:

    长度单位包括千米( km )、米( m )、毫米( mm ),它们之间的关系是:1km=1000m=1000000mm。

    重量单位包括千克( kg )、克( g )、毫克( mg ),它们之间的关系是:1kg=1000g=1000000mg。

    小杨的作业只涉及将更大的单位转换为更小的单位,也就是说,小杨的作业只会包含如下题型:米转换为毫米,千米转换为毫米,千米转换为米,克转换为毫克,千克转换为毫克,千克转换为克。

    现在,请你帮忙完成单位转换的程序。

    输入描述

    输入的第一行为一个整数N,表示题目数量。

    接下来N行,每行一个字符串,表示转换单位的题目,格式为 x 单位1 = ? 单位2 。其中, x 为一个不超过1000的非负整数, 单位1 和 单位2 分别为两个单位的英文缩写,保证它们都是长度单位或都是重量单位,且 单位1 比 单位2 更大。

    例如,如果题目需要你将1km转换为mm,则输入为 1 km = ? mm 。

    保证1≤N≤1000。

    输出描述

    输出N行,依次输出所有题目的答案,输出时,只需要将输入中的 ? 代入答案,其余部分一字不差地输出即可。

    由于小杨的题目只涉及将更大的单位转换为更小的单位,并且输入的 x 是整数,因此答案一定也是整数。

    例如,如果题目需要你将1km转换为mm,输入为 1 km = ? mm ,则你需要输出 1 km = 1000000 mm 。

    特别提醒

    在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。输入格式将严格按照题目要求,且你的输出必须和标准答案完全一致才能得分,请在提交前仔细检查。

    样例输入 1

    2
    1km=?mm
    1m=?mm

    样例输出1

    1km=1000000mm
    1m=1000mm

    样例输入2

    5
    100m=?mm
    1000km=?m
    20kg=?g
    200g=?mg
    0kg=?mg

    样例输出2

    100m=100000mm
    1000km=1000000m
    20kg=20000g
    200g=200000mg
    0kg=0mg
//无限枚举法
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int a;
    string b,c,d,e,f;
    for(int i=1;i<=n;i++)
    {
        cin>>a>>b>>c>>d>>e;
        if(b=="km" && e=="m")
        {
            cout<<a<<" "<<b<<" "<<c<<" "<<d<<" "<<a*1000<<" "<<f<<endl;
        }
        else if(b=="km" && e=="mm")
        {
            cout<<a<<" "<<b<<" "<<c<<" "<<" "<<a*1000000<<" "<<e<<endl;
        }
        else if(b=="m" && e=="mm")
        {
            cout<<a<<" "<<b<<" "<<c<<" "<<" "<<a*1000<<" "<<e<<endl;
        }
        else if(b=="kg" && e=="g")
        {
            cout<<a<<" "<<b<<" "<<c<<" "<<" "<<a*1000<<" "<<e<<endl;
        }
        else if(b=="kg" && e=="mg")
        {
            cout<<a<<" "<<b<<" "<<c<<" "<<" "<<a*1000000<<" "<<e<<endl;
        }
        else if(b=="g" && e=="mg")
        {
            cout<<a<<" "<<b<<" "<<c<<" "<<" "<<a*1000<<" "<<e<<endl;
        }
    }
    return 0;
}
//  数组存储输出法
#include<bits/stdc++.h>
using namespace std;

int main()
{
  int n;
  cin>>n;

  int times[n];
  string arr[n][5];

  for(int i=0;i<=n-1;i++)
  {
    cin>>times[i];
    for(int j=1;j<=5-1;j++)
    {
      cin>>arr[i][j];
    }
  }

  for(int i=0;i<=n-1;i++)
  {
    int bigunit=1, smallunit=1;
    if(arr[i][1]=="km" or arr[i][1]=="kg")
    {
      bigunit=1000*1000;
    }
    else if(arr[i][1]=="m" or arr[i][1]=="g")
    {
      bigunit=1000;
    }
    else
    {
      bigunit=1;
    }

    if(arr[i][4]=="km" or arr[i][4]=="kg")
    {
      smallunit=1000*1000;
    }
    else if(arr[i][4]=="m" or arr[i][4]=="g")
    {
      smallunit=1000;
    }
    else
    {
      smallunit=1;
    }
    cout<<times[i]<<"\40"<<arr[i][1]<<"\40"<<arr[i][2]<<"\40"<<times[i]*bigunit/smallunit<<"\40"<<arr[i][4]<<endl;
  }
  return 0;
}

  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值