CCF编程能力等级认证GESP—C++2级—20240907
单选题(每题 2 分,共 30 分)
1、据有关资料,山东大学于1972年研制成功DJL-1计算机,并于1973年投入运行,其综合性能居当时全国第三 位。DJL-1计算机运算控制部分所使用的磁心存储元件由磁心颗粒组成,设计存贮周期为2μs(微秒)。那么该磁心 存储元件相当于现代计算机的( )。
A. 内存
B. 磁盘
C. CPU
D. 显示器
正确答案:A
2、IPv4版本的因特网总共有( )个A类地址网络。
A. 65000
B. 200万
C. 126
D. 128
正确答案:C
3、在C++中,下列不可做变量的是( )。
A. ccf-gesp
B. ccf_gesp
C. ccfGesp
D. _ccfGesp
正确答案:A
4、在C++中,与for (int i = 1; i < 10; i++)效果相同的是( )。
A. for (int i = 0; i < 10; i++)
B. for (int i = 0; i < 11; i++)
C. for (int i = 1; i < 10; ++i)
D. for (int i = 0; i < 11; ++i)
正确答案:C
5、在C++中,cout << (5 / 2 + 5 % 3)的输出是( )。
A. 1
B. 2
C. 4
D. 5
正确答案:C
6、假定变量a和b可能是整型、字符型或浮点型,则下面C++代码执行时先后输入 -2 和 3.14 后,其输出不可能 是( )。[已知字符 ‘+’、‘-’、‘=’ 的ASCII码值分别是43、45和61]
cin >> a;
cin >> b;
cout<<(a+b);
A. 1
B. 1.14
C. 47
D. 将触发异常
正确答案:D
7、在C++代码中假设N为正整数,则下面代码能获得个位数的是( )。
A. N % 10
B. N / 10
C. N && 10
D. 以上选项均不正确
正确答案:A
8、下面C++代码执行后的输出是( )。
int i
for (int i = 0; i < 10; i++){
if (i % 2)
break;
cout << "0#";
}
if (i == 10) cout << "1#";
A. 0#
B. 1#
C. 0#0#1
D. 没有输出
正确答案:A
9、执行下面C++代码并输入1和0,有关说法正确的是( )。
int a,b;
cin>>a>>b;
if(a&&b)
cout << ("1");
else if(!(a||b))
cout << ("2");
else if(a || b)
cout << ("3");
else
cout << ("4");
A. 1
B. 2
C. 3
D. 4
正确答案:C
10、下面C++代码执行后的输出是( )。
int loopCount = 0;
for(inti=1;i<5;i+=2)
loopCount += 1;
cout << (loopCount);
A. 1
B. 2
C. 3
D. 5
正确答案:B
11、下图是C++程序执行后的输出。为实现其功能,横线处应填入代码是( )。
7
1
2 3
3 4 5
4 5 6 7
5 6 7 8 9
6 7 8 9 10 11
7 8 9 10 11 12 13
//
int lineNum;
cin >> lineNum;
for (int i= 1; i < lineNum+1; i++){
for(int __________________)
cout << j << " ";
cout << endl;
}
A. j = i; j < i; j++
B. j = 1; j < i; j++
C. j = i; j < i*2; j++
D. j = i+1; j < i+i; j++
正确答案:C
12、下面C++代码执行后输出逆序数,如输入 123 则输出 321 。如输入 120 则输出 21 。横线处先后应填入的 代码是( )。
int N;
cin >> N;
int rst = 0;
while (N){
____;
____;
}
cout << (rst);
A.rst=rst*10+N%10 N=N/10
B.rst+=N%10 N=N/10
C.rst=rst*10+N/10 N=N%10
D.rst+= N/10 N=N%10
正确答案:A
13、下面的C++代码用于输入学生成绩,并根据人数计算出平均成绩,有关说法错误的是( )。
float Sum = 0; // 保存总成绩
int cnt = 0; // 保存学生人数
while (1){
int score;
cin >> score;
if (score < 0)
break;
cnt += 1;
Sum+= score;
}
cout <<"总学生数:" << cnt << "平均分:" << Sum/cnt;
A. 代码 while (1) 写法错误
B. 如果输入负数,将结束输入,并正确输出
C. 如果输入的学生成绩含有小数,程序将无法正常执行
D. 变量 int score 初始值不确定,但不影响程序执行
正确答案:A
14、以下C++代码判断输入的正整数是否为质数,如果该数字是质数,则输出 YES ,否则输出 NO 。质数是指仅 能被1和它本身整除的正整数。请在横线上填写代码。( )
int num, i;
cin >> num;
for (int i = 2; i < num; i++)
if (____){
cout << ("NO");
break;
}
if (i == num)
cout << "YES";
A. num % i
B. num % i == 0
C. num / i
D. num / i == 0
正确答案:B
15、一个数如果能被某个数(比如7)整除,或者含有该数,则说该数是某个数的相关数。下面C++代码用于判 定输入的数与7是否有关。下列说法错误的是( )。
int N, M;
bool Flag = false;
cin >> N;
M = N;
if(M % 7 == 0)
Flag = true;
while (!Flag && M){
if (M % 10 == 7){
Flag = true;
break;
}
M /= 10;
}
if (Flag)
cout << N << "与7有关";
else
cout << N << "与7无关";
A. 删除break语句不会导致死循环,但有时会导致结果错误
B. 删除 M /= 10 将可能导致死循环
C. 删除 M = N 并将其后代码中的M变量改为N,并调整输出同样能完成相关功能
D. 删除 break 语句不会导致死循环,但有时会影响效率
正确答案:A
判断题(每题 2 分,共 20 分)
1、小杨最近开始学习C++编程,老师说C++是一门面向对象的编程语言,也是一门高级语言。( )
正确答案:正确
2、在C++中, cout << (3, 4, 5) 可以输出 3 4 5 ,且每个输出项之间用空格分开。( )
正确答案:错误
3、C++表达式12 % 10 % 10的值为2。( )
正确答案:正确
4、C++语句 cout << rand() << ’ ’ << rand(); 的第二个输出值较大。( )
正确答案:错误
5、定义C++的 int 类型的变量 ch ,而且值为 ‘1’ ,则语句 cout << int(ch); 的输出为 1 。( )
正确答案:错误
6、下面C++代码执行后将输出10。( )
int i;
for(i = 0; i < 10; i++)
continue;
if(i == 10)
cout << i;
正确答案:正确
7、下面C++代码能求整数N和M之间所有整数之和,包含N和M。( )
int N, M, Sum;
cin >> N >> M;
if(N > M){
int tmp = N;
N = M, M = tmp;
}
for(int i = N; i < M + 1; i++)
Sum += i;
cout << Sum;
正确答案:错误
8、将下面C++代码中的 L3 标记的代码行调整为 for (int i = 0; i < 5; i++) 后输出结果相同。( )
int loopCount = 0;
for(int i = 1; i < 5; i++)//L3
for (int j = 0; j < i; j++)
loopCount += 1;
cout << loopCount;
正确答案:正确
9、某一系列数据的规律是从第3个数值开始是前两个数之和。下面的代码求第N个数的值,N限定为大于2。( )
int start1; // 第1个数
int start2; // 第2个数
int N; //求N个数的值
int tmp;
cin >> start1 >> start2 >> N;
for(int i = 2;i < N; i++){
tmp = start1 + start2;
start1 = start2;
start2 = tmp;
}
cout << start2;
正确答案:正确
10、下面C++代码执行时如果输入 2024 ,则输出是 4202 。( )
int N, flag = 0;
cin >> N;
while (N){
if(!flag) cout << N % 10;
N /= 10;
flag = (flag + 1)%2;
}
正确答案:错误
编程题 (每题 25 分,共 50 分)
数位之和
【问题描述】
小杨有n个正整数,他认为一个正整数是美丽数字当且仅当该正整数每一位数字的总和是7的倍数。 小杨想请你编写一个程序判断n个正整数哪些是美丽数字。
【输入描述】
第一行包含一个正整数n,代表正整数个数。
之后n行,每行包含一个正整数。
【输出描述】
对于每个正整数,如果是美丽数字则输出 Yes,否则输出 No。
【样例输入 1】
3
7
52
103
【样例输出 1】
YES
YES
NO
7的各位数字之和为7,是7的倍数。52的各位数字之和为 5 + 2 = 7 5 + 2 = 7 5+2=7 ,是7的倍数。 103的各位数字之和为 1 + 0 + 3 = 4 1 + 0 + 3 = 4 1+0+3=4,不是7的倍数。
对于全部数据,保证有 1 < = n < = 1 0 5 , 1 < = a i < = 1 0 5 1 <= n <= 10^5, 1 <= a_i <= 10^5 1<=n<=105,1<=ai<=105。
小杨的矩阵
【问题描述】
小杨想要构造一个
m
∗
m
m * m
m∗m的N字矩阵(m为奇数), 这个矩阵的从左上角到右下角的对角线、第一列和第m列都是半角加号+,其余都是半角减号-。例如,一个
5
∗
5
5 * 5
5∗5的N字矩阵如下:
+---+
++--+
+-+-+
+--++
+---+
请你帮小杨根据给定的m打印出对应的 N 字矩阵。
【输入描述】
第一行包含一个正整数m。
【输出描述】
输出对应的 N 字矩阵。
【样例输入 1】
5
【样例输出 1】
+---+
++--+
+-+-+
+--++
+---+
对于全部数据,保证有 3 < = m < = 49 3 <= m <= 49 3<=m<=49且m为奇数。