CCF编程能力等级认证GESP—C++2级—20230318
CCF编程能力等级认证GESP—C++2级—20230318
单选题(每题 2 分,共 30 分)
1、以下存储器中的数据不会受到附近强磁场干扰的是( )
A.硬盘
B.U 盘
C.内存
D.光盘
2、下列流程图,属于计算机的哪种程序结构?( )。
A. 顺序结构
B. 循环结构
C. 分支结构
D. 数据结构
3、下列关于 C++语言的叙述,不正确的是( )。
A. double 类型的变量占用内存的大小是浮动的
B. bool 类型的变量占用 1 字节内存
C. int 类型变量的取值范围不是无限的
D. char 类型的变量有 256 种取值
4、下列关于 C++语言的叙述,不正确的是( )。
A. 变量定义后,可以使用赋值语句改变它的值
B. 变量定义时,必须指定类型
C. 变量名必须为合法标识符
D. 合法标识符可以以数字开始
5、以下哪个不是 C++语言的关键字?( )
A. return
B. max
C. else
D. case
6、以下哪个不是 C++语言的运算符?( )
A. \=
B. /=
C. -=
D. !=
7、如果 a 和 b 都是 char 类型的变量,下列哪个语句不符合C++语法?( )
A. b = a + 1;
B. b = a + '1';
C. b = 'a'++;
D. b = a++;
8、如果 a、b、c 和 d 都是 int 类型的变量,则下列哪个表达式能够正确计算它们的平均值?( )
A. (a + b + c + d) / 4
B. (a + b + c + d) % 4
C. (a + b + c + d) / 4.0
D. (a + b + c + d) % 4.0
9、如果 a 为 char 类型的变量,且 a 的值为’2’,则下列哪条语句执行后,a 的值不会变为’3’?( )
A. a = a + 1;
B. a + 1;
C. a = 1 + a;
D. ++a;
10、如果 a 为 int 类型的变量,且 a 的值为 9,则执行 a -= 3;之后,a 的值会是( )。
A. 3
B. 6
C. 9
D. 12
11、如果 a 和 b 均为 int 类型的变量,下列表达式能正确判断“a 等于0 或b 等于0”的是( )
A. (!a) || (!b)
B. (a == b == 0)
C. (a == 0) && (b == 0)
D. (a == 0) - (b == 0) == 0
12、如果 a 为 char 类型的变量,下列哪个表达式可以正确判断“a 是小写字母”?( )
A. a <= a <= z
B. a - 'a' <= 'z' - 'a'
C. 'a' <= a <= 'z'
D. a >= 'a' && a <= 'z'
13、在下列代码的横线处填写( ),使得输出是50 10
。
#include <iostream>
using namespace std;
int main(){
int a = 10, b = 50;
________; // 在此处填入代码
b -= a;
a += b;
cout << a << " " << b << endl;
return 0;
}
A. a -= b
B. a += b
C. a = b - a
D. a = b
14、在下列代码的横线处填写( ),可以使得输出是5
。
#include <iostream>
using namespace std;
int main(){
int cnt = 0;
for (char ch = '1'; ch <= '9'; ch++)
if (________) // 在此处填入代码
cnt++;
cout << cnt << endl;
return 0;
}
A. ch < '5'
B. ch >= 5
C. ch >= '4'
D. ch % 2 == 1
15、执行以下 C++语言程序后,输出结果是( )。
#include <iostream>
using namespace std;
int main(){
int n = 17;
bool isprime = true;
for (int i = 2; i <= n; i++)
if (n % i == 0)
isprime = false;
cout << isprime << endl;
return 0;
}
A. false
B. true
C. 0
D. 1
判断题(每题 2 分,共 20 分)
1、明明和笑笑在“小庙会”上分别抽到一个 4GB 和 4096MB 的U 盘,容量大的盘是笑笑的( )。
2、IPv4 的地址通常用“点分十进制”的表示形式,形如(a.b.c.d),其中a、b、c、d 都是 1~255 之间的十进制整数( )。
3、在 C++语言中,一个程序不能有多个 main 函数。( )
4、在 C++语言中,标识符中可以有下划线 _ ,但不能以下划线 _ 开头。( )
5、如果 a 是 int 类型的变量,而且值为 1,则表达式’a’的值为’1’。( )
6、在 if … else 语句中,else 子句可以嵌套 if … else 语句,但if 子句不可以,因为会造成二义性。( )
7、while 语句的循环体至少会执行一次。( )
8、C++语言中>=是运算符,但=>不是。( )
9、如果 a 为 char 类型的变量,且取值为小写字母,则执行语句a = a - ‘a’ + ‘A’;后,a 的值会变为与原值对应的大写字母。( )
10、表达式(10.0 / 2)的计算结果为 5.0,且结果类型为 double。( )
编程题 (每题 25 分,共 50 分)
画三角形
【问题描述】
输入一个正整数 n,请使用大写字母拼成一个这样的三角形图案(参考样例输入输出):三角形图案的第 1 行有 1 个字母,第 2 行有2 个字母,以此类推;在三角形图案中,由上至下、由左至右依次由大写字母A-Z 填充,每次使用大写字母 Z 填充后,将从头使用大写字母 A 填充。
【输入描述】
输入一行,包含一个正整数 n。约定 2≤n≤40。
【输出描述】
输出符合要求的三角形图案。注意每行三角形图案的右侧不要有多余的空格。
【样例输入 1】
3
【样例输出 1】
A
BC
DEF
【样例输入 2】
7
【样例输出 2】
A
BC
DEF
GHIJ
KLMNO
PQRSTU
VWXYZAB
百鸡问题
【问题描述】
“百鸡问题”是出自我国古代《张丘建算经》的著名数学问题。大意为:“每只公鸡 5 元,每只母鸡 3 元,每 3 只小鸡 1 元;现在有100 元,买了100 只鸡,共有多少种方案?”
小明很喜欢这个故事,他决定对这个问题进行扩展,并使用编程解决:如果每只公鸡 x 元,每只母鸡 y 元,每 z 只小鸡 1 元;现在有n 元,买了m只鸡,共有多少种方案?
【输入描述】
输入一行,包含五个整数,分别为问题描述中的 x、y、z、n、m。约定1≤x, y, z ≤10,1≤ n, m ≤1000。
【输出描述】
输出一行,包含一个整数 C,表示有 C 种方案。
【样例输入 1】
5 3 3 100 100
【样例输出 1】
4
【样例解释1】
这就是问题描述中的“百鸡问题”。4 种方案分别为:
公鸡0 只、母鸡25只、小鸡 75 只;
公鸡 4 只、母鸡 18 只、小鸡 78 只;
公鸡8 只、母鸡11 只、小鸡81 只;
公鸡 12 只、母鸡 4 只、小鸡 84 只。
【样例输入 2】
1 1 1 100 100
【样例输出 2】
5151
答案及解析
单选题
1、
【答案】D
【考纲知识点】计算机的存储(二级)
【解析】光盘是光存储介质,是通过激光高温改变光盘涂覆层的形状来记录数据的,不会因为磁场而改变记录特性。硬盘是磁介质的数据存储设备,会直接受到磁场干扰。强磁场会在 U 盘和内存的电路中产生感应电流,可能会破坏存储器,导致数据受损。所以此题正确答案为 D。
2、
【答案】C
【考纲知识点】计算机基础结构(一级)
【解析】流程图根据是否按下空格键设置了两个分支,符合分支结构的特征,所以本题正确答案为 C。
3、
【答案】A
【考纲知识点】计算机的存储(二级)
【解析】在当前 C++标准下,double 类型通常占用 8 个字节,bool 类型占用1个字节,int 类型通常占用 4 个字节,char 类型占用 1 字节。int 类型的取值范围为? 231~231 ? 1,char 类型的范围是-128~127,所以本题正确答案为A。
4、
【答案】D
【考纲知识点】变量的定义与使用(一级)
【解析】变量定义时,必须指定类型,且变量名必须为合法标识符(只能由字母,数字,下划线组成,且不能以数字开头),所以本题正确答案为D。
5、
【答案】B
【考纲知识点】程序设计语言的特点(二级)
【解析】本题属于考察 C++语言的关键字,max 是 C++中的一个库函数,不属于关键字,所以本题正确答案为 B。
6、
【答案】A
【考纲知识点】算数运算(一级)
【解析】B 选项 a /= b,等价于 a = a / b;C 选项 a -= b 等价于a = a – b;D选项“!=”是不等于。A 选项=并不是 C++语言的运算符,所以本题正确答案为A。
7、
【答案】C
【考纲知识点】基本数据类型(一级)
【解析】
A 选项,赋值号右侧表达式对 a 的 ASCII 码数值加 1,结果为int 类型,赋值给b时转换为 char 类型,也即比 a 的 ASCII 码值大 1 的对应字符。符合C++语法。
B 选项,'1’为 char 类型常量,赋值号右侧表达式对 a 的ASCII 码数值加’1’的ASCII
码数值,结果为 char 类型,赋值给 b。符合 C++语法。
C 选项,'a’为 char 类型常量,常量不能进行++自增运算,不符合C++语法。
D 选项,a 为 char 类型常量,可以进行++自增运算。该语句将a 变为ASCII 码值增加 1 的对应字符,并将变化前的 a 值赋值给 b。符合C++语法。所以本题正确答案为 C。
8、
【答案】C
【考纲知识点】算术运算(一级)
【解析】A 选项中所有参与计算的数都是整型,最终的计算结果也是整型,会默认向下取整,导致平均值不准确。B 选项计算的是 a、b、c、d 四个整数的和除以 4 的余数。C 选项为 a、b、c、d 四个整数的和除以 4.0 的结果,计算过程中会将 4.0 视为浮点数,整型与浮点型的计算结果默认为浮点型。D 选项“%”不能与浮点数参与运算,用法错误。所以本题正确答案为 C。
9、
【答案】B
【考纲知识点】算术运算(一级)
【解析】B 选项中并未对 a + 1 的结果进行任何处理,变量a 在计算过程中未发生改变,所以本题正确答案为 B。
10、
【答案】B
【考纲知识点】算术运算(一级)
【解析】a -= 3;等价于 a = a - 3; 表示把 a - 3 的计算结果重新赋值给a 变量,所以本题正确答案为 B。
11、
【答案】A
【考纲知识点】逻辑运算(一级)
【解析】A 选项中“!a”表示 a 等于 0,同理“!b”表示b 等于0,整个表示式表示 a 等于 0 或 b 等于 0。B 选项会先判断 a 变量和 b 变量是否相等(若a 和b相等,表达式的值为 1,若 a 和 b 不相等,表达式的值为 0),然后再判断表达式(a == b)
的值是否为 0。C 选项表示 a 等于 0 且 b 等于 0。D 选项表示表达式(a == 0)减表达式(b==0)的计算结果是否为 0,表示 a 和 b 同时为 0 或a 和b 同时都不为0。所以本题正确答案为 A。
12、
【答案】D
【考纲知识点】逻辑运算(一级)
【解析】A 选项,a <= a 总是成立,因此表达式等价于1 <= z。B 选项等价于a<=‘z’。C 选项无论’a’ <= a 是否成立,表达式的值 0 或 1 都小于’z’。D 选项表示a大于等于’a’,并且 a 小于等于’z’,说明 a 变量的 ASCII 码在字符’a’和字符’z’对应的ASCII 码之间,即 a 变量为小写字母。所以本题正确答案为D。
13、
【答案】C
【考纲知识点】基本运算(一级)
【解析】本题考察通过算术运算交换两个变量数值,可将选项带入进行计算,本题正确答案为 C。
14、
【答案】D
【考纲知识点】循环结构,字符型,ASCII 码,基本运算(二级)【解析】可以将选项带入排除 A,B,C 选项,需要注意B 选项中5 没有单引号,所以表示的不是字符’5’,D 选项中 ch 虽然是字符类型,但计算时会使用对应的ASCII 码%2,字符’1’到字符’9’之间,所有 ASCII 码中有5 个是奇数,所以本题正确答案为 D。
15、
【答案】C
【考纲知识点】循环结构,布尔型,基本运算 (二级)【解析】题目中 i 的循环范围是 2~n,即分别使用 n 对2~n 之间的所有数进行求余运算,由于 n 能够被自身整除,所以循环结束后 isprime 的值一定为false,但是 bool 类型在输出时不会输出 true 或 false,输出时只会输出1 或0,所以本题正确答案为 C。
判断题
1、
【答案】x
【考纲知识点】计算机的存储(二级)
【解析】本题属于考察数据单位的换算,1GB=1024MB,4GB 和4096MB 容量一样大。所以本题错误。
2、
【答案】x
【考纲知识点】计算机网络(二级)
【解析】IP 地址是一个 32 位的二进制数,通常被分隔为4 个8 位二进制数,常用“点分十进制”的表示形式,形如(a.b.c.d),其中 a、b、c、d 都是0~255 之间的十进制整数。所以本题错误。
3、
【答案】√
【考纲知识点】程序设计语言的特点(二级)
【解析】本题考察 C++程序的基本结构,一个程序只能有一个main 函数。所以本题正确。
4、
【答案】x
【考纲知识点】变量的定义与使用(一级)
【解析】本题考察变量的概念及定义规则。变量定义时,必须指定类型,且变量名必须为合法标识符(只能由字母,数字,下划线组成,且不能以数字开头)。所以本题错误。
5、
【答案】x
【考纲知识点】基本数据类型(一级)
【解析】本题属于考察对不同数据类型的区分,加上单引号后’a’表示字符常量,与变量 a 无关,且与字符常量’1’不同。所以本题错误。
6、
【答案】x
【考纲知识点】多层分支(二级)
【解析】本题考察 if 语句的用法,if 语句可以嵌套 if…else。如果嵌套后与预期语义不符,可以使用复合语句{…}加以区别。所以本题错误。
7、
【答案】x
【考纲知识点】循环结构(二级)
【解析】本题考察 while 语句的用法,while()语句是否会执行循环体,取决于小括号中的条件是否成立,若最开始条件不成立,则一次都不会执行循环体。所以本题错误。
8、
【答案】√
【考纲知识点】基本运算(一级)
【解析】本题考察运算符,>=是表示“大于等于”的关系运算符,=>不是C++中的运算符。所以本题正确。
9、
【答案】√
【考纲知识点】字符型(一级)
【解析】本题考察字符类型中大小写字母转换的方法,小写字母减去’a’会得到025,加上’A’后刚好就是对应从’A’’Z’。所以本题正确。
10、
【答案】√
【考纲知识点】浮点型(一级)
【解析】本题属于考察浮点数类型的计算,浮点数与整数的计算结果类型为浮点型。所以本题正确。
编程题1
【题目大意】输出一个 n 行的大写字母递增的三角形,大写字母递增到’Z’后下一个回到’A’重新开始递增。
【考纲知识点】基本运算(一级), 循环结构、ASCII 码、数据类型转换(二级)
【解题思路】
1 先把 A,B,C…Z 这些大写字母看作 0,1,2…25,借助 for 循环嵌套输出数字三角形;
2. 将三角形中需要输出的数在输出时转换为大写字母输出;
3. 3. 将数转换为大写字母时加上%26,确保输出到’Z’之后下一个字符为’A’。
#include <iostream>
using namespace std;
int main(){
int n, index = 0;
cin >> n;
for (int i = 1; i <= n; i++){
for (int j = 1; j <= i; j++){
cout << char('A' + index % 26);
index++;
}
cout << endl;
}
return 0;
}
编程题2
【题目大意】
百钱买百鸡问题,输入公鸡母鸡和小鸡的价格,以及现有的钱和需要购买的鸡的数量,计算输出方案数。
【考纲知识点】基本运算(一级), 循环结构(二级)
【解题思路】
使用循环嵌套枚举公鸡和母鸡的数量,根据总价计算要求表示出小鸡数量,通过判断每种方案鸡的总数是否满足要求,从而统计出正确的方案数;
#include <iostream>
using namespace std;
int main(){
int x, y, z, n, m;
cin >> x >> y >> z >> n >> m;
int xiao, res = 0;
double feiyong;
for (int gong = 0; gong <= m; gong++){
for (int mu = 0; mu <= m; mu++){
xiao = m - gong - mu;
feiyong = gong * x + mu * y + 1.0 / z * xiao;
if (gong + mu + xiao == m && feiyong == n && xiao >= 0){
res++;
//printf("公鸡: %d, 母鸡: %d, 小鸡: %d\n", gong, mu, xiao);
}
}
}
cout << res;
return 0;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!