#1326. GESP-C++三级(2024-12)

GESP-C++三级(2024-12)

CCF GESP C++ 三级 (2024 年 12 月)

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

第 1 题:下列二进制表示的十进制数值分别是 ( )

[10000011] 原 =( )
[10000011] 补 =( )

{{ select(1) }}

  • -125,-3
  • -3, -125
  • -3,-3
  • -125,-125

第 2 题:关于计算机中的编码,下列说法中错误的是 ( )

{{ select(2) }}

  • 对于无符号数,原码就是真值
  • 正数的反码是其本身
  • 负数的反码和补码是不一样的
  • 负数的反码,在其原码的基础上,各个位取反

第 3 题:16 进制数 B2025 转换成 8 进制数是 ( )

{{ select(3) }}

  • 2620045
  • 2004526
  • 729125
  • 2420045

第 4 题:625.625 变成二进制是 ( )

{{ select(4) }}

  • 1001110001.101
  • 101.101
  • 101.1001110001
  • 1001110001.1101

第 5 题:下面逻辑运算中,正确的是 ( )

{{ select(5) }}

  • 5&&3==0
  • 5|3==8
  • 5||3==11
  • 5&3==0001

第 6 题:补码 1111 1101 进行运算 1111 1101>>1 以后得到的结果是 ( )

{{ select(6) }}

  • 1111 1100
  • -2
  • 1111 1101
  • 1111 1010

第 7 题:下列代码输出的是 ( )

string s="1234@@chenadai";
string str="12345"; 
s.replace(1,5,str);
cout<<s<<endl;

{{ select(7) }}

  • 12345
  • 2345@
  • 112345chenadai
  • 12345chenadai

第 8 题:a|10(a 与 10 都是 10 进制,且二进制表示最高位为 1)运算的结果是 ( )

{{ select(8) }}

  • 使 a 的二进制表示从右往左的第二位为 1
  • 使 a 的二进制表示从右往左的第一位为 0
  • 使 a 的二进制表示从右往左第二位为 0
  • 使 a 的二进制表示最高位为 0

第 9 题:下列程序输出的是 ( )

string ch="hello"; 
if(ch[5]==NULL) { 
    cout<<"right"<<endl;
} else if (ch[5]=='\0') {
    cout<<"wrong"<<endl;
} else {
    cout<<"hello"<<endl;
}

{{ select(9) }}

  • right
  • wrong
  • hello
  • 不能正确执行

第 10 题:下列程序中,假设一个字符占用的内存空间是 1,下列程序中,ch占用的内存空间是 ( )

char ch[] = "hello world"; 
size_t ret=strlen(ch); 
cout<<ret<<endl;

{{ select(10) }}

  • 11
  • 10
  • 13
  • 12

第 11 题:下列程序最后输出的是 ( )

int a=65;
cout<<tolower(a)<<endl;

{{ select(11) }}

  • 65
  • A
  • a
  • 97

第 12 题:想要计算从数字 n 到数字 m 之间(包含 n 和 m)有多少个数字 d 出现,下列程序哪个能够实现 ( )

A.

int n,m,res,d;
cin >> n >> m>>d;
for(int i = n+1; i <= m; i++){
    int temp = i;
    while(temp){
        if(temp % 10 == d) res++;
        temp /= 10;
    }
} 
cout << res << endl;
return 0;

B.

int n,m,res,d;
cin >> n >> m>>d;
for(int i = n; i <= m; i++){ 
    int temp = i;
    while(temp){
        if(temp % 10 = d) res++;
        temp /= 10;
    }
}
cout << res << endl;
return 0;

C.

int n,m,res=0,d;
cin >> n >> m>>d;
for(int i = n; i <= m; i++){
    int temp = i;
    while(temp){ 
        if(temp % 10 == d) res++;
        temp /= 10;
    }
}
cout << res << endl;
return 0;

D.

int n,m,res=0,d;
cin >> n >> m>>d;
for(int i = n; i <= m; i++){ 
    while(temp){
        if(temp % 10 == d) res++;
        temp /= 10;
    }
}
cout << res << endl;
return 0;

{{ select(12) }}

  • A
  • B
  • C
  • D

第 13 题:兔子五元一只,鸡三元一只,小鸭子一元三只,现在你有一百元要买一百只兔子、鸡、鸭子,问兔子、鸡、鸭子各买多少只,每种必须至少一只,下列哪个程序能实现。( )

A.

for(int i=0; i<=100; i++){
    for(int j=0; j<=100; j++){
        for(int k=0; k<=100; k++){
            if(i+j+k==100&&5*i+3*j+k/3==100)
                cout<<i<<" "<<j<<" "<<k<<endl;
        }
    }
}

B.

for(int i= 0;i<=100;i++){
    for(int j=0;j<=100;j++){
        for(int k=0;k<=100; k++)
            if(i+j+k==100&&20*i+10*j+k==300)
                cout<<i<<" "<<j<<" "<<k<<endl;
    }
}

C.

for(int i=0;i<=20; i++){
    for(int j=0;j<=34;j++){
        for(int k=0;k<=20;k++){
            if(i+j+k==100&&15*i+9*j+k==300)
                cout<<i<<" "<<j<<" "<<k<<endl;
        }
    }
}

D.

for(int i= 0;i<=100;i++){
    for(int j=0; j<=100; j++){
        for(int k=0;k<=100; k++){
            if(i+j+k==100&&15*i+9*j+k==300)
                cout<<i<<" "<<j<<" "<<k<<endl;
        }
    }
}

{{ select(13) }}

  • A
  • B
  • C
  • D

第 14 题:求小于等于 N 的素数的方法中,有一种方法是将所有从 2 到它本身减 1 的数都除一遍,如果不能整除,就是素数。下列哪个程序,体现了这种方法 ( )

A.

cout<<2<<endl; 
if(N>=3){
    for(int i=2;i<=N;i++){
        for(int j = 2;j < i;j ++){
            if(i % j != 0){ 
                flag = 1;
            }
            if(flag == 0){
                cout<<i<<endl;
                flag = 0;
            }
        }
    }
}

B.

if(N >= 2){
    for(int i = 3;i <= N;i ++){
        for(int j = 2;j < i;j ++){ 
            if(i % j == 0){
                flag = 1;
            }
        }
        if(flag == 0){
            cout<<i<<endl;
            flag = 0;
        }
    }
}

C.

if(N >= 2){
    cout<<2<<endl;
    for(int i = 3;i <= N;i ++){
        for(int j = 2;j < i;j ++){
            if(i % j == 0){ 
                flag = 1;
            }
        }
        if(flag == 0){
            cout<<i<<endl;
            flag = 0;
        }
    }
}

D.

if(N >= 2){
    cout<<2<<endl;
    for(int i = 3;i <= N;i ++){
        for(int j = 2;j < i;j ++){ 
            if(i % j == 0){
                flag = 1;
            }
        }
    }
    if(flag == 0){
        cout<<i<<endl;
    }
}

{{ select(14) }}

  • A
  • B
  • C
  • D

第 15 题:工人工作一天,会得到一个金环作为工资报酬,某个工作需要 15 天完成,一条 15 个环的金环项链,为了严格执行每天工作结束时,完成对工人工资的结算,最少需要将金环项链剪裁成几段,每段几个金环 ( )

{{ select(15) }}

  • 4 段,分别是 1、2、4、8
  • 15 段,每段 1 个
  • 6 段,分别是 3、3、3、3、2、1
  • 9 段,分别是 2、2、2、2、2、2、1、1、1

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

第 1 题:为了简化计算机基本运算电路,使加减法都只需要通过加法电路实现,也就是让减去一个正数或加上一个负数这样的运算可以用加上一个正数来代替。于是改变负数存储的形式,存储成一种可以直接当成正数来相加的形式,这种形式就是补码。

{{ select(16) }}

第 2 题:使用原码进行的计算,2+(-1) 的结果是 -3。

{{ select(17) }}

第 3 题:反码计算加减法:加法与减法结果都是正确的,只是解决不了 -0 的问题。

{{ select(18) }}

第 4 题:10 进制数 63,在转换成二进制的计算过程中,产生了如下的式子:

63/2=31 余 1
31/2=15 余 1
15/2=7 余 1
7/2=3 余 1
3/2=1 余 1
1/2=0 余 1

按照从前往后的顺序,获得 63 的二进制值是 111111。 {{ select(19) }}

第 5 题:5. 下列程序输出的是 A。

char x=65;
x=x&00001111;
cout<<x<<endl;

{{ select(20) }}

第 6 题:下列可执行程序段中,最后pos的值是 4。

string str="chenADai";
int pos = str.find('D');
--pos&11;

{{ select(21) }}

第 7 题:该段程序将不能正确执行。

string ch="chen";
cout<<ch[4]<<endl;

{{ select(22) }}

第 8 题:将输出 97。

char a='A';
a=a+32;
cout<<(int)a<<endl;

{{ select(23) }}

第 9 题:9. 自然界中,最小的素数是 2。

{{ select(24) }}

第 10 题:10. CCF (十六进制) = 12363 (七进制)。

{{ select(25) }}