2025年3月CCF—GESP(C++二级)编程能力等级认证试卷
二级
2025
2025-06-22 16:43:07
136次
一、单选题
在数学中N!表示N的阶乘,即1到N的乘积,如3! = 123,且0! = 1。下面的两段C++代码用于求1到N的阶 乘之和,如N为3,则结果是9( 1! + 2! + 3!的值)。选项中的说法正确的是( )。
// 实现1
int i, N;
cin >> N;
int tnt = 0, last = 1;
for (i = 1; i < N + 1; i++) {
last *= i;
tnt += last;
}
cout << tnt << endl;// 实现2
int i, N;
cin >> N;
int tnt = 0, tmp;
for (i = 1; i < N + 1; i++) {
tmp = 1;
for (int j = 1; j < i + 1; j++)
tmp *= j;
tnt += tmp;
}
cout << tnt << endl; | A. 虽然实现1的代码短小,但效率并不高 |
B. 实现2的代码效率更高,且更易于理解 |
| C. 实现1因为应用了前项计算结果,计算量更小,因此效率高 |
D. 两种实现,效率几乎—致 |
【知识点】 CCF—GESP C++二级
下面C++代码执行后,将输出能被2整除且除以7余数为2的数。下列选项不能实现的是( )。
for (int i = 0; i < 100; i++) if ________________________ cout << i << " ";
| A. ((i % 2 == 0) && (i % 7 == 2)) |
B. ((!(i % 2)) && (i % 7 == 2)) |
| C. ((!(i % 2)) && (!(i % 7))) |
D. ((i % 2 != 1) && (i % 7 == 2)) |
【知识点】 CCF—GESP C++二级
下面C++代码用于求1到N之间正整数中含有3的数的个数,比如 123 和 32 都是符合条件的数。则前后两 处横线应填入代码分别是( )。
int i,j;
int cnt = 0, N;
cout << "请输入正整数N: ";
cin >> N;
for (i = 1; (j=i) < N; i++)
while (j != 0)
if (j % 10 == 3){
cnt +=1;
___________;
}
else
___________;
cout << cnt << " "; | A. continue j /= 10 |
B. break j /= 10 |
| C. continue j %= 10 |
D. break j %= 10 |
【知识点】 CCF—GESP C++二级
已知C++代码和执行后的期望输出如下,相关说法正确的是( )。
int i, j;
int last, N;
cout << "请输入层数N: ";
cin >> N;
last = 1;
for (i = 1; i < N; i++) {
for (j = 1; j < i + 1; j++) { // L1
if (last > 9)
last = 1;
cout << last << " ";
last += 1;
}
printf("\n");
}请输入层数N:10
1
2 3
4 5 6
7 8 9 1
2 3 4 5 6
7 8 9 1 2 3
4 5 6 7 8 9 1
2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
| A. 倒数第二行的 printf("\n") 有错,应该修改为 cout << endl; ,printf()函数不能输出换行 |
B. last += 1 修改为 last = last + 1 执行效果相同 |
| C. 代码中L1标记行中的 j < i + 1 应修改为 j < i |
D. 外层for循环前的 last = 1 修改为 last = 0 执行效果相同 |
【知识点】 CCF—GESP C++二级
哥德巴赫猜想是指大于2的偶数都可以分解为两个质数之和,下面的代码用于验证4-1000之内的偶数能否 分解为两个质数之和。下面C++代码中假设isPrime()是已经定义好用于判断正整数N是否为质数,返回bool值。对 该段代码,错误的说法是( )。
for (i = 4; i < 1000; i += 2)
for (j = 2; j < i; j++)
if (isPrime(j) && isPrime(i - j)) {
printf("%d=%d+%d\n", i, j, i - j);
break;
} | A. 将代码 isPrime(j) && isPrime(i-j) 修改为 isPrime(j) == true && isPrime(i-j) == true 效果相同 |
B. 代码执行后,输出的—对质数, —定是小的数在前 |
| C. 即便将外层循环中i的上界1000修改为很大的整数,也不能说从数学上证明了哥德巴赫猜想 |
D. 根据题意, break语句应该移到if语句块之外 |
【知识点】 CCF—GESP C++二级
求三色彩球的颜色。有数量无限的红(Red)绿(Green)蓝(Blue)三种彩球排成—行,每组先为5个红色球,随 后3个绿色,最后为2个蓝色。每个球都有编号,从左到右依次为1,2,3……。输入整数代表编号,求该编号球的颜 色。下面是C++代码实现,正确说法是( )。
int N, remainder; cin >> N; remainder = N % 10; // remainder变量保存余数 if((1 <= remainder) && (remainder<= 5)) cout << "Red"; else if ((6 <= remainder) && (remainder <= 8)) cout << "Green"; else if ((remainder == 9) || (remainder == 0)) cout << "Blue";
| A. 将 else if ((remainder == 9) || (remainder == 0)) 修改为 else 效果相同 |
B. 将 ((1 <= remainder) && (remainder<= 5)) 修改为 (remainder <= 5) 效果相同 |
| C. else if ((6 <= remainder) && (remainder <= 8)) 写法错误,应修改为 else if (6 <= remainder <= 8) |
D. 根据题意 remainder = N % 10 应修改为 remainder = N / 10 |
【知识点】 CCF—GESP C++二级
二、判断题
三、编程题
时间跨越
时间限制: 1.0 s
内存限制: 512.0 MB
题目描述
假设现在是 y 年 m ⽉ d ⽇ h 时,k 小时后是 y' 年 m' ⽉ d' ⽇ h' 时。对于给定的 y, m, d, h, k,计算出对应的 y', m', d', h'。
输入格式
输入包含五行,每行—个正整数,分别代表 y, m, d, h, k。
输出格式
输出四个正整数,代表 y', m', d', h'。
输入样例
2008 2 28 23 1
输出样例
2008 2 29 0
数据范围
对于全部数据,保证有2000 ≤ y ≤ 3000 , 1 ≤ m ≤ 12 , 1 ≤ d ≤ 31 ,0 ≤ h ≤ 23 , 1 ≤ k ≤ 24。数据保证为合法时间。
提示
闰年判断规则:
·普通闰年:年份能被4整除,但不能被100整除。
·世纪闰年:年份能被400整除。
满足以上任意—条规则的年份就是闰年,否则是平年。
【知识点】 CCF—GESP C++二级
