#TK1157. 2025年3月CCF-GESP编程能力等级认证C++编程三级真题

2025年3月CCF-GESP编程能力等级认证C++编程三级真题

2025年3月CCF-GESP编程能力等级认证C++编程三级真题

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

第 1 题 Base64 编码将每3字节的输入数据编码为4字节的输出数据。如果输入数据长度不是3的倍数,会用=号填充。在Base64编码中,如果输入字符串的长度为10字节,编码后的字符串长度是多少( )
{{ select(1) }}

  • 12 字节
  • 13 字节
  • 14 字节
  • 16 字节

第 2 题 UTF-8 编码规则如下:
1 字节:0xxxxxxx
2 字节:110xxxxx 10xxxxxx
3 字节:1110xxxx 10xxxxxx 10xxxxxx
4 字节:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
以下哪个字节序列是合法的 UTF-8 编码( )
{{ select(2) }}

  • 0xC0 0x80
  • 0xF0 0x90 0x80 0x80
  • 0x80 0x80 0x80
  • 0xFF 0xFE 0xFD

第 3 题 在8位二进制原码表示中,八进制数 -5 的二进制形式是什么( )
{{ select(3) }}

  • 10000101
  • 11111010
  • 11111011
  • 00000101

第 4 题 十进制数 111.111 的二进制表示可以是下面的( )
{{ select(4) }}

  • 1101111.0001110001
  • 1101110.1001110001
  • 1101111.1001110001
  • 1101111.0011110001

第 5 题 在C++中,补码的主要作用是()
{{ select(5) }}

  • 提高浮点数的精度
  • 简化整数的加减法运算
  • 增加整数的表示范围
  • 优化内存分配

第 6 题 在C++中,一个8位有符号整数(使用补码表示)的范围是()
{{ select(6) }}

  • -128 到 127
  • -127 到 128
  • -256 到 255
  • 0 到 255

第 7 题 在C++中,以下代码的输出是什么()

int a = -5; 
unsigned int b = a; 
cout << b;

{{ select(7) }}

  • -5
  • 5
  • 4294967291
  • 编译错误

第 8 题 下列程序的作用是()

int main() { 
  int decimal = 25; 
  cout << oct << decimal; 
  return 0; 
}

{{ select(8) }}

  • 将十进制数转换成八进制数
  • 将八进制数转换成十进制数
  • 将二进制数转换成八进制数
  • 将八进制数转换成16进制数

第 9 题 下面程序是将十进制转十六进制,横线处应该填入的是()

#include <iostream>
using namespace std;
int main() { 
  int decimal = 255; 
  ________________________
  return 0; 
}

{{ select(9) }}

  • cout << oct << decimal;
  • cout << decimal << decimal;
  • cout << hex << decimal;
  • 不能正确执行

第 10 题 以下代码的说法正确的是什么( )

#include <iostream>
using namespace std;

int main() { 
  int a = 0b1101;
  int b = 0b1011; 
  cout << (a ^ b); 
  return 0; 
}

{{ select(10) }}

  • 进行的是整体异或运算
  • 进行的是按位同或运算
  • 进行的是按位与运算
  • 进行的是按位异或运算

第 11 题 下面枚举法查找最大值索引程序中,横线处应该填写的是()

#include <iostream>
using namespace std;

int main() { 
  int arr[] = {3, 7, 2, 9, 5}; 
  int maxIndex = 0; 
  for (int i = 1; i < 5; i++) { 
    ________________________ { 
      maxIndex = i; 
    } 
  } 
  cout << maxIndex; 
  return 0; 
}

{{ select(11) }}

  • if (arr[maxIndex] > arr[i])
  • if (arr[i]-1 > arr[maxIndex])
  • if (arr[i]+1 > arr[maxIndex])
  • if (arr[i] > arr[maxIndex])

第 12 题 以下代码的功能是将数组中的奇数和偶数分别放在数组的前半部分和后半部分,横线处应该填入的是()

#include <iostream>
using namespace std;

int main() { 
  int arr[] = {1, 2, 3, 4, 5}; 
  int left = 0, right = 4; 
  while (left < right) { 
    while (arr[left] % 2 == 1 && left < right) left++; 
    ________________________ 
    if (left < right) { 
      swap(arr[left], arr[right]); 
    } 
  } 
  for (int i = 0; i < 5; i++) { 
    cout << arr[i] << " "; 
  } 
  return 0; 
}

{{ select(12) }}

  • while (arr[left] % 2 == 0 && left < right) right--;
  • while (arr[right] % 2 == 0 && left < right) left--;
  • while (arr[right] % 2 != 0 && left < right) right--;
  • while (arr[right] % 2 == 0 && left < right) right--;

第 13 题 下面程序最后能够得到 "HelloC++" 的是()

int main() { 
  string str = "HelloWorld"; 
  ________________________ 
  cout << str; 
  return 0; 
}

{{ select(13) }}

  • str.replace(0, 5, "C++");
  • str.replace(5, 5, "C++");
  • str.replace(1, 5, "C++");
  • str.replace(4, 5, "C++");

第 14 题 想要得到字符串 "world" ,下面程序横线处应该填入的是()

#include <iostream>
#include <string>
using namespace std;

int main() { 
  string str = "HelloC++"; 
  ________________________ 
  ________________________ 
  return 0; 
}

{{ select(14) }}

  • str.insert(4, "World"); cout << str.substr(4, 4);
  • cout << str.substr(5, 5);
  • str.insert("World"); cout << str.substr(5, 5);
  • str.insert(5, "World"); cout << str.substr(5, 5);

第 15 题 有 n 个正整数,假设一个正整数是美丽数字当且仅当该正整数是 9 的倍数但不是 8 的倍数。下面的程序是编写计算 n 个正整数中美丽数字的数量,横线处应该填入的是()

for (int i = 1; i <= n; i++) { 
  cin >> a; 
  __________________________ 
  cnt++; 
}

{{ select(15) }}

  • if (a % 9 != 0 && a % 8 != 0)
  • if (a % 9 == 0 & a % 8 == 0)
  • if (a % 9 == 0 && a % 8 != 0)
  • if (a % 9 == 0 & a % 8 != 0)

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

第 1 题 判断一个三角形是否成立的条件只有:任意两边长度之和大于第三条边的长度。( )
{{ select(16) }}

第 2 题 这段程序进行的是判断一个从键盘输入的字符的ASCII 是否是奇数,若是,输出 YES,否则,输出 NO。( )

int main() { 
  char x; 
  scanf("%c", &x); 
  int ASCII = (int)x; 
  cout << (x & 1 ? "YES" : "NO") << '\n';
  return 0; 
}

{{ select(17) }}

第 3 题 闰年的定义:
普通闰年:公历年份是 4 的倍数,且不是 100 的倍数的,为闰年(如 2004 年、2020 年等就是闰年)。
世纪闰年:公历年份是整百数的,必须是 400 的倍数才是闰年(如 1900 年不是闰年,2000 年是闰年)。
下面程序是判断是否是闰年的正确程序。( )

cin>>n; 
cout<<((n%4==0&&n%100!=0)||(n%400==0))?1:0; 
return 0;

{{ select(18) }}

第 4 题 C++语句 cout<<(n%15==0? "YES":"NO"); 能够判断一个整数能否被3和5同时整除。( )
{{ select(19) }}

第 5 题 有 n 个同学,从中抽取任意个人数来参加学校组织的大合唱,共有 2 的 n 次幂个方法。( )
{{ select(20) }}

第 6 题 若将一个正整数化为二进制数,在此二进制数中,我们将数字 1 的个数是偶数的这类二进制数称为 A 类数,否则就称其为 B 类数。例如:
(13)₁₀ =(1101)₂ ,其中 1 的个数为 3 则称此数为 B 类数;
(10)₁₀ =(1010)₂ ,其中 1 的个数为 2,称此数为 A 类数;
判断(2025)₁₀化为二进制后,1 的个数为偶数个,因此 2025 为 A 类数。( )
{{ select(21) }}

第 7 题 该段程序将 n 不停地除以 2,并输出此时的商和余数,直到 n=0 为止。( )

long long n; 
cin >> n; 
while(n != 0) { 
  cout << n/2 << ' ' << n%2 << '\n'; 
  n /= 2; 
}

{{ select(22) }}

第 8 题 两个 13 进制的数 A 和 B,在 10 进制下分别表示 10 和 11。(A+B)₁₃=(18)₁₃,也就是说 13 进制数 A 加上 13 进制数 B,和是 13 进制数 18。( )
{{ select(23) }}

第 9 题 k 进制,逢 k 进第二位,逢 k² 进百位,逢 k³ 进千位;( )
{{ select(24) }}

第 10 题 CCF(十九进制) = 21AC(十三进制)(不区分大小写)( )
{{ select(25) }}

三、编程题(每题 25 分,共 50 分)