学习C++从娃娃抓起!记录下CCF-GESP备考学习过程中的题目,记录每一个瞬间。
附上汇总贴:GESP编程能力等级认证C++编程真题解析 | 汇总
单选题
第1题
在C++中,下列不可做变量的是( )。
A.five-Star
B.five_star
C.fiveStar
D._fiveStar
【答案】:A
【解析】
C++的变量命名只能由字母、数字、下划线组成,并且数字不能作为开头
第2题
C++表达式3 - 3 * 3 / 5的值是( )。
A.-1.2
B.1
C.0
D.2
【答案】:D
【解析】
根据优先级,首先计算3 * 3 / 5得到1,3 - 1的结果为2
第3题
在C++中, 假设N为正整数, 则表达式cout<<(N%3+N%7) 可能输出的最大值是( )。
A.6
B.8
C.9
D.10
【答案】:B
【解析】
N%3的最大值为2,N%7的最大值为6
第4题
C++语句printf(“5%%2={%d} \n”, 5%2) 执行后的输出是( )。
A.1={1}
B.5%2={5%2}
C.5%2={1}
D.5 ={1}
【答案】:C
【解析】
printf(“%%”) 的输出为%,"%d"为5%2的计算结果
第5题
对整型变量i, 执行C++语句cin>>i, cout<<i如果输入5+2, 下述说法正确的是( )。
A.将输出整数7
B.将输出5
C.语句执行将报错,输入表达式不能作为输出的参数
D.语句能执行,但输出内容不确定
【答案】:B
【解析】
cin首先将5识别为有效的整数部分, +不是数字部分, 停止读入, 此时i为5
第6题
下面C++代码执行后的输出是( )
float a;
a = 101.101;
a = 101;
print("a+1=(%.0f)", a+1);
A.101={102}
B.a+1={a+1}
C.a+1={102}
D.a先被赋值为浮点数,后被赋值为整数,执行将报错
【答案】:C
【解析】
a在第二次赋值后变为101,a+1的计算结果为102,%.0f需要将浮点数的小数部分四舍五入
第7题
表达式9/4-6%(6-2)*10的值是( )。
A.-17.75C
B.-18
C.-14
D.-12.75
【答案】:B
【解析】
9/4的结果为2,6%(6-2)*10的结果为20,2-20的结果为-18
第8题
下面C++代码执行时输入10后,正确的输出是( )。
int N;
cout << "请输入正整数:";
cin >> N;
if (N % 3)
printf("第5行代码%2d", N % 3);
else
printf("第6行代码%2d", N % 3);
A.第5行代码1
B.第6行代码1
C.第5行代码 1
D.第6行代码 1
【答案】:C
【解析】
10%3的结果为1,表达式为真,%2d表示输出数字占两位,不足两位的在数字前用空格补全
第9题
下面C++代码执行后输出是( )
int Sum = 0, i = 0;
for ( ; i<10; )
Sum += i++;
cout << i << " " << Sum;
A.9 45
B.10 55
C.10 45
D.11 55
【答案】:C
【解析】
在for循环中, Sum+=i++等价于Sum=i, i++, 循环执行的条件为i <10, 所以输出的i为10, Sum为1+2+…+9的结果为45
第10题
下面C++代码用于判断N是否为质数(只能被1和它本身整除的正整数)。程序执行后,下面有关描述正确的是( )。
int N;
cout << "请输入整数:";
cin >> N;
bool Flag = false;
if (N>=2) {
Flag = true;
for (int i=2; i<N; i++)
if (N % i == 0) {
Flag = false;
break;
}
}
if (Flag)
cout << "是质数";
else
cout << "不是质数";
A.如果输入负整数,可能输出“是质数”
B.如果输入2,将输出“不是质数”,因为此时循环不起作用
C.如果输入2,将输出“是质数”,即便此时循环体没有被执行
D.如果将if(N>=2)改为if(N>2)将能正确判断N是否质数
【答案】:C
【解析】
A选项,如果输入负整数,不满足N>=2,输出“不是质数”;B选项,输入2, 满足N>=2, 执行Flag=true; , 不满足for循环条件, 最终输出“是质数”;C选项同B选项;D选项,如果输入2,不满足N>2。输出“不是质数”,与实际不符
第11题
下面的C++代码用于求1~N之间所有奇数之和,其中N为正整数,如果N为奇数,则求和时包括N。有关描述错误的是( )。
int N;
cout << "请输入正整数:";
cin >> N;
int i=1, Sum=0;
while (i<=N) {
if (i%2==1)
Sum += i;
i += 1;
}
cout << i << " " << Sum;
A.执行代码时如果输入10,则最后一行输出将是11 25
B.执行代码时如果输入5,则最后一行输出将是6 9
C.将i+=1移到if(i % 2 == 1) 前一行,同样能实现题目要求
D.删除 if (i % 2 == 1),并将i+=1改为i+=2,同样可以实现题目要求
【答案】:C
【解析】
C选项,移动后,循环开始时i为1,执行i+=1;后i为2,此时奇数1没有被加到Sum中
第12题
如果一个整数N能够表示为X*X的形式,那么它就是一个完全平方数,下面C++代码用于完成判断N是否为一个完全平方数,在横线处应填入的代码是( )。
int N;
cin >> N;
for (int i=0; i<=N; i++)
if (____)
cout << N << "是一个完全平方数\n";
A.i == N * N
B.i * 10 == N
C.i + i == N
D.i * i == N
【答案】:D
【解析】
从0开始循环枚举,当找到满足i*i==N的i时,证明N是一个完全平方数
第13题
执行下面C++代码后输出的cnt的值是( ) 。
int cnt = 0;
for (int i=0; i*i<64; i+=2)
cnt++;
cout <<cnt;
A.8
B.7
C.4
D.1
【答案】:C
【解析】
在for循环中, i的值分别为0, 2, 4, 6, 所以循环4次, 执行4次cnt++; , 最终cnt为4
第14题
小杨父母带他到某培训机构给他报名参加CCF组织的G ESP认证考试的第1级, 那他可以选择的认证语言有几种?( )
A.1
B.2
C.3
D.4
【答案】:C
【解析】
GESP一级可选择的认证语言有图形化、Python、C++三种语言
第15题
ENIAC于1946年投入运行, 是世界上第一台真正意义上的计算机, 它的主要部件都是( )组成的。
A.感应线圈口
B.电子管
C.晶体管
D.集成电路
【答案】:B
【解析】
ENIAC的主要部件为电子管
判断题
第16题
在C++代码中变量X被赋值为16.44, 则cout<<X / 10执行后输出的一定是1。( )
A.正确
B.错误
【答案】:B
【解析】
double类型与int类型进行运算时, 结果会隐式转换为double类型,结果为1.644
第17题
C++的整型变量N被赋值为10, 则语句cout<<N/4<<“->”<<N%4<<“->”<<N/4.0执行后输出是2->2->2.0。( )
A.正确
B.错误
【答案】:B
【解析】
double类型与int类型进行运算时, 结果会隐式转换为double类型,结果为2.5
第18题
定义C++的float型变量N, 则语句c in>>N; cout<<int(float(N)) 可以输入正负整数和浮点数,并将其转换为整数后输出。( )
A.正确
B.错误
【答案】:B
【解析】
double类型与int类型进行运算时, 结果会隐式转换为double类型,结果为2.5
第19题
C++的整型N被赋值为5, 语句printf(“%d*2”, N) 执行后将输出10。( )
A.正确
B.错误
【答案】:B
【解析】
如果想输出10, 应写为printf(“%d”, N * 2) , 题目中输出5 * 2
第20题
在C++中, break语句用于终止当前层次的循环, 循环可以是for循环, 也可以是while循环。( )
A.正确
B.错误
【答案】:A
【解析】
break可以终止当前层的循环
第21题
在C++, continue语句通常与if语句配合使用。( )
A.正确
B.错误
【答案】:A
【解析】
continue为结束本次循环, 直接开始下一次循环一般在满足某些指定条件时使用
第22题
在C++代码中, 不可以将变量命名为printf, 因为printf是C++语言的关键字。( )
A.正确
B.错误
【答案】:B
【解析】
printf是一个标准库函数, 不是关键字
第23题
在C++中有整型变量N,则表达式N+=8/4//2相当于N+=8/(4/2)。( )
A.正确
B.错误
【答案】:B
【解析】
// 并不是C++的算数运算符
第24题
C++中定义变量int N, 则表达式(!!N) 的值也是N的值。( )
A.正确
B.错误
【答案】:B
【解析】
逻辑非!的结果为1或0,如果N初始不是1或0,则运算结果不等于N
第25题
GESP测试是对认证者的编程能力进行等级认证, 同一级别的能力基本上与编程语言无关。( )
A.正确
B.错误
【答案】:A
【解析】
作为能力认证考试,GESP不仅做到了拉开不同等级之间的试题难度,同时也保证了不同编程语言之间的难度一致性。
编程题
第26题
【题目描述】
小杨计划在某个时刻开始学习,并决定在学习k秒后开始休息。
小杨想知道自己开始休息的时刻是多少。
【输入】
前三行每行包含一个整数,分别表示小杨开始学习时刻的时h、分m、秒s(h,m,s的值符合1≤h≤12,0≤m≤59,0≤s≤59)。
第四行包含一个整数k、表示小杨学习的总秒数(注:k的值符合1≤k≤3600)
【输出】
输出一行,包含三个整数,分别表示小杨开始休息时刻的时、分、秒。
【输入样例】
12
59
59
10
【输出样例】
13 0 9
【代码详解】
#include <bits/stdc++.h>
using namespace std;
int main()
{
int h,m,s;
cin >> h >> m >>s;
int k;
cin >> k;
int now = h * 60 * 60 + m * 60 + s;
now += k;
int hh = now/3600;
now %= 3600;
int mm = now/60;
now %= 60;
cout << hh << " " << mm << " " << now << endl;
return 0;
}
【运行详解】
12
59
59
10
13 0 9
第27题
【题目描述】
小杨有一个正整数n,他想知道n是否是一个立方数。
一个正整数n是立方数当且仅当存在一个正整数x满足 x × x × x = n x \times x \times x = n x×x×x=n。
【输入】
第一行包含一个正整数n。
【输出】
如果正整数n是一个立方数, 输出Yes, 否则输出No。
【输入样例】
8
【输出样例】
Yes
【代码详解】
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
int fl = 0;
for (int i=1; i<=n; i++) {
if (i * i * i == n) {
fl = 1;
break;
}
}
if (fl) cout << "Yes" << endl;
else cout << "No" << endl;
return 0;
}
【运行结果】
8
Yes