#1319. GESP-C++二级(2024-12)

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

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

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

第 1 题:2024 年 10 月 8 日,诺贝尔物理学奖 “意外地” 颁给了两位计算机科学家约翰・霍普菲尔德 (John J. Hopfield) 和杰弗里・辛顿 (Geoffrey E. Hinton)。这两位科学家的主要研究方向是 ( )。

{{ select(1) }}

  • 天体物理
  • 流体力学
  • 人工智能
  • 量子理论

第 2 题:计算机系统中存储的基本单位用 B 来表示,它代表的是 ( ),比如某个照片大小为 3MB。

{{ select(2) }}

  • Byte
  • Block
  • Bulk
  • Bit

第 3 题:C++ 语句cout << (3 + 3 % 3 * 2 - 1)执行后输出的值是 ( )。

{{ select(3) }}

  • -1
  • 4
  • 56
  • 2

第 4 题:下面 C++ 代码执行后其输出是 ( )。

for (int i=0; i<10; i++)
    printf("%d",i);

{{ select(4) }}

  • 123456789
  • 0123456789
  • 12345678910
  • 012345678910

第 5 题:下面 C++ 代码的相关说法中,正确的是 ( )。

int tnt;
for (int i=0; i<10; i++)
    tnt += i;
cout << tnt;

{{ select(5) }}

  • 上述代码执行后其输出相当于求 1 - 10 的和 (包含 10)
  • 上述代码执行后其输出相当于求 1 - 10 的和 (不包含 10)
  • 上述代码执行后其输出相当于求 0 - 10 的和 (不包含 10)
  • 上述代码执行后将输出不确定的值

第 6 题:下面 C++ 代码执行后输出是 ( )。

int i;
for (i=1; i<10; i++) 
    if (i % 2)
        continue;
    else
        break;
cout << i;

{{ select(6) }}

  • 1
  • 2
  • 9
  • 10

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

for (i=0; i<10; i++){
    if (i % 3)
        continue;
    printf("0#");
    if(i>=10) }
printf("1#");

{{ select(7) }}

  • 0#0#0#0#0#0#0#1#
  • 0#0#0#0#0#0#1#
  • 0#0#0#0#1#
  • 0#0#0#0#

第 8 题:下面 C++ 代码用于输出 0 - 100 之前 (包含 100) 能被 7 整除但不能被 3 整除的数,横线处不能填入的代码是 ( )。

for (i=0; i<100; i++)
    if( )
        cout << i << endl;

{{ select(8) }}

  • i % 7 == 0 && i % 3 != 0
  • !(i % 7) && i % 3 != 0
  • i % 7 && i % 3
  • i % 7 == 0 &&!(i % 3 == 0)

第 9 题:下面 C++ 代码用于求正整数各位数字之和,横线处不应填入代码是 ( )。

int tnt, N;
printf("请输入正整数:");
cin >> N;
while (N != 0){ 
    tnt = 0;
    N /= 10;
    cout <<tnt;
}

{{ select(9) }}

  • tnt = tnt + N % 10
  • tnt += N % 10
  • tnt = N % 10 + tnt
  • tnt = N % 10

第 10 题:下图的 C++ 程序执行后的输出是 ( )。

for (i=0; i<5; i++)
    for (j=0; j<i; j++)
        cout <<j;

{{ select(10) }}

  • 0010120123
  • 01012012301234
  • 001012012301234
  • 01012012301234012345

第 11 题:下面 C++ 代码用于实现图示的九九乘法表。相关说法错误的是 ( )。

/* 
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
*/
for (int Hang=1; Hang<10; Hang++){
    for (int Lie=1; Lie<Hang+1; Lie++){
        if (Lie * Hang > 9)
            printf("%d*%d=%d ", Lie, Hang, Lie*Hang); 
        else 
            printf("%d*%d=%d ", Lie, Hang, Lie*Hang); 
    }
    printf("\n"); 
}

{{ select(11) }}

  • 将 L1 注释的printf("\n")移到 L2 注释所在行,效果相同
  • 将 L1 注释的printf("\n")修改为print("%c", '\n')效果相同
  • 将Lie * Hang > 9修改为Lie * Hang >= 10效果相同
  • 将Lie * Hang > 9修改为Hang * Lie > 9效果相同

第 12 题:在数学中 N! 表示 N 的阶乘,即 1 到 N 的乘积,如 3!=123 。下面的 C++ 用于求 1 - N 的阶乘之和,如 N 为 3,则是 1!+2!+3! 。下面代码段补充选项后用于实现上述功能,其中不能实现阶乘和的选项是 ( )。

int N;
cin >> N;
int tnt=0, nowNum = 1; 
for (int i=1; i < N + 1; i++){
    ______________// 基于上一个计算出当前数的阶乘
    ______________// 从1到i每个数阶乘之和
}
cout << tnt;

{{ select(12) }}

  • nowNum *= i;
    tnt += nowNum;

  • nowNum = nowNum * i;
    tnt = tnt + nowNum;

  • nowNum *= i;
    tnt = nowNum + tnt;

  • nowNum = nowNum + i;
    tnt *= nowNum;

第 13 题:下面 C++ 代码用于输出 N 和 M 之间 (可以包括 N 和 M) 的孪生素数。孪生素数是指间隔为 2 的两个数均为素数,如 11 和 13 分别是素数,且间隔为 2。isPrime(N)用于判断 N 是否为素数的函数。为完成上述功能,横线处应填上的代码是 ( )。

int N,M;
//本题假设N小于M
cin >> N >> M;
for (int i = N; i < __________; i++)
    if (isPrime(i) && isPrime(i + 2))
        printf("%d %d\n",i, i + 2);

{{ select(13) }}

  • M - 2
  • M - 1
  • M
  • M + 1

第 14 题:下面 C++ 代码实现输出如下图形,横线应填入的代码是 ( )。


int height;
cout << "高度: ";
//获取用户输入的高度
cin >> height;
for (i=0; i<height; i++){ 
    //打印每行前面的空格
    for (j = 0; j < ; j++)
        cout << " ";
    //打印每行的星号 
    for (k = 0; k < ; k++)
        cout << "*";
    //输出一行后,换行 
    cout << endl;
}

{{ select(14) }}

  • height - i
    2 * i
  • height
    2 * i
  • height - i
    2 * i + 1
  • height - i - 1
    2 * i + 1

第 15 题:下面 C++ 代码执行后的输出是 30,则横线处不能填入 ( )。

int a=10,b=20,c=30;
cout <<___________ << endl;
cout << endl;

{{ select(15) }}

  • max(max(a, b), c)
  • min(a+b, c)
  • sqrt(a+b+c)
  • (a+b+c)/2

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

第 1 题:在 Windows 的资源管理器中为已有文件 A 建立副本的操作是 Ctrl+C,然后 Ctrl+V。( )

{{ select(16) }}

第 2 题:在 C++ 代码中,假设 N 为正整数,则cout << (N - N / 10 * 10)将获得 N 的个位数。( )

{{ select(17) }}

第 3 题:在 C++ 语句cout << (10 <= N <= 12)中,假设 N 为 12,则其输出为 1。( )

{{ select(18) }}

第 4 题:如果 C++ 表达式int(sqrt(N))*int(sqrt(N)) == N的值为 True,则说明 N 为完全平方数,如 4、9、25 等。( )

{{ select(19) }}

第 5 题:下面 C++ 代码执行后将输出 2*3=6。 ( )

int a = 2, b = 3;
printf("%%a*%%b=%d",a*b);

{{ select(20) }}

第 6 题:以下 C++ 代码因为循环变量为将导致错误,即不能作为变量名称,不符合 C++ 变量命名规范。( )

for (int _ = 0; _ < 10; _++)
    continue;

{{ select(21) }}

第 7 题:下面 C++ 代码执行后因为有 break,将输出 0。

int i;
for (i = 0; i < 10; i++){
    continue;
    break;
}
cout << i;

{{ select(22) }}

第 8 题:下面的 C++ 代码执行后将输出 18 行 “OK”。( )

int i,j;
for (i = 8; i > 2; i-=2) 
    for (j =0; j < i; j++)
        printf("OK\n");

{{ select(23) }}

第 9 题:将下面 C++ 代码中的i = 1调整为i = 0的输出结果相同。( )

int i; 
int cnt = 0;
for (i = 1; i < 5; i++)
    if(i%2) 
        cnt += 1;
cout << cnt;

{{ select(24) }}

第 10 题:下面两段 C++ 代码都是用于求 1 - 10 的和,其运行结果相同。通常说来,for 循环都可以用 while 循环实现。( )

int tnt;
int i;
tnt = 0;
for (i = 1; i < 10 + 1; i++)
    tnt += i;
cout << tnt << endl;
int tnt; 
int i;
tnt = 0;
i = 1;
while (i <= 10){
    tnt += i;
    i += 1;
}
cout << tnt << endl;

{{ select(25) }}