一、单选题
第 1 题

解析:
答案 C,a、b 都为 int,计算不出小数部分,10/3=3
第 2 题

解析:
答案 C,
(10!=10) || (5>=3) false || true true
第 3 题

解析:
答案 D,arr[5]数组,最后一个元素的下标是 4
第 4 题

解析:
答案 B,

第 5 题

解析:
答案 B,创建函数的格式如下
返回值类型 函数名 (参数列表) { // 函数体:实现具体功能的代码 语句块; return 返回值; // 若返回值类型非 void,需返回对应类型的值 }
例如创建'实现加法函数'int add(int a,int b) { return a+b; }
第 6 题

解析:
答案 B,
int arr[4]={1,2,3}; // arr[0]=1 arr[1]=2 arr[2]=3 arr[3]=arr[0]+arr[2]; //arr[3]=1+3=4
第 7 题

解析:
答案 B,
A 选项,void 表示无返回参数

B 选项,通过函数引用传递,间接返回多个值

C 选项,main()调用会导致无限循环

D 选项,无法嵌套定义函数

第 8 题

解析:
答案 D,continue 导致 count++一直没有执行
第 9 题

解析:
答案 A,
第 10 题

解析:
答案 C,

第 11 题

解析:
答案 D,int 的最大值是 2147483647,反转后就是 7463847412,7 要改为 1 否则 int 存储不了,即为 1463847412
第 12 题

解析:
答案 C,假设 arr[0]是最大值,之后在循环和后面所有数据做比较
第 13 题

解析:
答案 D,
A 选项,不只有值传递

B 选项,形参调用完后,内存会自动释放

C 选项,不声明 void,也可以没返回值

第 14 题

解析:
答案 C,
第一处:for 循环,不能 SIZE,会造成数组越界
第二处:cout<<arr[SIZE] 会造成数组越界
第 15 题

解析:
答案 D,
A 选项,char 数组需要用 strcpy
#include<bits/stdc++.h> using namespace std; int main() { string s1="abc"; char s2[]="abc"; strcpy(s2,"bcd"); cout<<s2; return 0; }
B 选项,string 获取长度用 size 或 length,char 数组要用 strlen
#include<bits/stdc++.h> using namespace std; int main() { string s1="abc"; char s2[]="abc"; cout<<s1.length()<<" "<<s1.size()<<endl; cout<<strlen(s2); return 0; }
C 选项,string 的长度就是动态变化的
D 选项,string 和 char 数组不能用==判断相等
二、判断题
第 1 题

解析:
答案×,sizeof 是获取数据类型所占内存大小,1 是因为 'a'是 char 类型
第 2 题

解析:
答案√,
#include<bits/stdc++.h> using namespace std; int a;//全局变量 int main() { cout<<a;//0 }
第 3 题

解析:
答案√,会先 do,在进行 while 判断,所以至少执行一次
第 4 题

解析:
答案√,
#include<bits/stdc++.h> using namespace std; int main() { int a=1; cout<<a++<<endl;//1 cout<<++a;//3 }
第 5 题

解析:
答案×,是 color 类型
#include <iostream> using namespace std; // 定义枚举类型 Color enum Color { RED, GREEN, BLUE }; int main() { // 枚举常量的类型是 Color,而非 int Color c = RED; // 正确:RED 是 Color 类型,可赋值给 Color 变量 return 0; }
第 6 题

解析:
答案×,
#include <iostream> using namespace std; #define SQUARE(x) x*x; int main() { cout<<SQUARE(2+3);// 2+3*2+3=11 return 0; }
第 7 题

解析:
答案×,是 0 至 127,对应 ASCII 表

第 8 题

解析:
答案×,当 b 是 string 类型,b=10 会不合法
第 9 题

解析:
答案×,
#include"file.h" 是从本地文件开始搜索,搜索不到,就查找 C++库文件 #include<file.h> 是直接查找 c++库文件
第 10 题

解析:
答案×,
#include <iostream> using namespace std; // 变量定义(分配内存),作用域内仅一次 int a = 10; int main() { // extern 声明(仅表明变量在别处定义,可多次出现) extern int a; // 若尝试'定义'多次,会报错 int a = 20; // 错误:同一作用域内变量定义重复 return 0; }
三、编程题
第 1 题 [GESP202509 三级] 数组清零
题目描述
小 A 有一个由 n 个非负整数构成的数组 a=[a1,a2,…,an]。他会对阵组 a 重复进行以下操作,直到数组 a 只包含 0。在一次操作中,小 A 会依次完成以下三个步骤:
- 在数组 a 中找到最大的整数,记其下标为 k。如果有多个最大值,那么选择其中下标最大的。
- 从数组 a 所有不为零的整数中找到最小的整数 aj。
- 将第一步找出的 ak 减去 aj。
例如,数组 a=[2,3,4] 需要 7 次操作变成 [0,0,0]:
[2,3,4]→[2,3,2]→[2,1,2]→[2,1,1]→[1,1,1]→[1,1,0]→[1,0,0]→[0,0,0]
小 A 想知道,对于给定的数组 a,需要多少次操作才能使得 a 中的整数全部变成 0。可以证明,a 中整数必然可以在有限次操作后全部变成 0。你能帮他计算出答案吗?
输入格式
第一行,一个正整数 n,表示数组 a 的长度。
第二行,n 个非负整数 a1,a2,…,an,表示数组 a 中的整数。
输出格式
一行,一个正整数,表示 a 中整数全部变成 0 所需要的操作次数。
输入输出样例
输入 #1
3 2 3 4
输出 #1
7
输入 #2
5 1 3 2 2 5
输出 #2
13
说明/提示
对于所有测试点,保证 1 ≤ n ≤ 100,0 ≤ ai ≤ 100。
参考代码
#include <bits/stdc++.h> using namespace std; int main(){ //1)填充数据 //1.1)确定大小 n int n;cin>>n; //1.2)确定数组 int a[110]={}; for(int i=1;i<=n;i++) cin>>a[i]; //2)模拟'数组清零' int ans=0; while(true){ int maxx=INT_MIN,max_i,minn=INT_MAX; for(int i=1;i<=n;i++){ if(a[i]!=0){ //2.1)找到最大值的下标 if(a[i]>=maxx){ maxx=a[i]; max_i=i; } //2.2)找到最小值 if(a[i]<minn) minn=a[i]; } } //2.3)判断是否找到最大值 if(maxx==INT_MIN) break; //2.4)修改 a[max_i]=a[max_i]-minn; a[max_i]=a[max_i]-minn; ans++; } cout<<ans; }
第 2 题 [GESP202509 三级] 日历制作
题目描述
小 A 想制作 2025 年每个月的日历。他希望你能编写一个程序,按照格式输出给定月份的日历。
具体来说,第一行需要输出 MON TUE WED THU FRI SAT SUN,分别表示星期一到星期日。接下来若干行中依次输出这个月所包含的日期,日期的个位需要和对应星期几的缩写最后一个字母对齐。例如,2025 年 9 月 1 日是星期一,在输出九月的日历时,1 号的个位 1 就需要与星期一 MON 的最后一个字母 N 对齐。九月的日历输出效果如下:
MON TUE WED THU FRI SAT SUN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
你能帮助小 A 完成日历的制作吗?
输入格式
一行,一个正整数 m,表示需要按照格式输出 2025 年 m 月的日历。
输出格式
输出包含若干行,表示 2025 年 m 月的日历。
输入输出样例
输入 #1
9
输出 #1
MON TUE WED THU FRI SAT SUN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
输入 #2
6
输出 #2
MON TUE WED THU FRI SAT SUN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
说明/提示
对于所有测试点,保证 1 ≤ m ≤ 12。
参考代码
#include <bits/stdc++.h> using namespace std; int main(){ //1)确定月份 m int m;cin>>m; //2)数组标记 月份 空格 int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int kong[13]={0,2,5,5,1,3,6,1,4,0,2,5,0}; //3)输出 顶部英文 cout<<"MON TUE WED THU FRI SAT SUN"<<endl; //4)输出空格 for(int i=1;i<=kong[m];i++){ cout<<" "; } //5)输出数字 for(int i=1;i<=days[m];i++){ printf("%3d ",i); if( (kong[m]+i)%7==0 ) cout<<endl; } }


