CCF编程能力等级认证GESP—C++3级—20241207
CCF编程能力等级认证GESP—C++3级—20241207
单选题(每题 2 分,共 30 分)
1、下列二进制表示的十进制数值分别是( )
[10000011]原=( )
[10000011]补=( )
A. -125,-3
B. -3, -125
C. -3,-3
D. -125,-125
正确答案:B
2、关于计算机中的编码,下列说法中错误的是()
A. 对于无符号数,原码就是真值
B. 正数的反码是其本身
C. 负数的反码和补码是不一样的
D. 负数的反码,在其原码的基础上, 各个位取反
正确答案:D
3、16进制数B2025转换成8进制数是()
A. 2620045
B. 2004526
C. 729125
D. 2420045
正确答案:A
4、625.625变成二进制是( )。
A. 1001110001.101
B. 101.101
C. 101.1001110001
D. 1001110001.1101
正确答案:A
5、下面逻辑运算中,正确的是( )
A. 5&&3==0
B. 5|3==8
C. 5||3==11
D. 5&3==0001
正确答案:D
6、补码1111 1101进行运算1111 1101>>1以后得到的结果是()
A. 1111 1100
B. -2
C. 1111 1101
D. 1111 1010
正确答案:B
7、下列代码输出的是
string s="1234@@chenadai";
string str="12345";
s.replace(1,5,str);
cout<<s<<endl;
A. 12345
B. 2345@
C. 112345chenadai
D. 12345chenadai
正确答案:C
8、a|10(a与10都是10进制,且二进制表示最高位为1)运算的结果是( )。
A. 使a的二进制表示从右往左的第二位为1
B. 使a的二进制表示从右往左的第一位为0
C. 使a的二进制表示从右往左第二位为0
D. 使a的二进制表示最高位为0
正确答案:A
9、下列程序输出的是( )
string ch="hello";
if(ch[5]==NULL){
cout<<"right"<<endl;
}else if (ch[5]=='\0'){
cout<<"wrong"<<endl;
}else{
cout<<"hello"<<endl;
}
A. right
B. wrong
C. hello
D. 不能正确执行
正确答案:A
10、下列程序中,假设一个字符占用的内存空间是1,下列程序中,ch占用的内存空间是 ( )
char ch[] = "hello world";
size_t ret=strlen(ch);
cout<<ret<<endl;
A. 11
B. 10
C. 13
D. 12
正确答案:D
11、下列程序最后输出的是()
int a=65;
cout<<tolower(a)<<endl;
A. 65
B. A
C. a
D. 97
正确答案:D
12、想要计算从数字n到数字m之间(包含n和m)有多少个数字d出现,下列程序哪个能够实现( )。
A.
int n,m,res,d;
cin >> n >> m>>d;
for(int i = n+1; i <= m; i++){
int temp = i;
while (temp){
if (temp % 10 == d) res++;
temp /= 10;
}
}
cout << res << endl;
return 0;
B.
int n,m,res,d;
cin >> n >> m>>d;
for(int i=n;i<=m;i++){
int temp = i;
while(temp){
if(temp % 10 = d) res++;
temp /= 10;
}
}
cout << res << endl;
return 0;
C.
int n,m,res=0,d;
cin >> n >> m>>d;
for(int i=n;i<=m;i++){
int temp = i;
while(temp){
if(temp % 10 == d) res++;
temp /= 10;
}
}
cout << res << endl;
return 0;
D.
int n,m,res=0,d;
cin >> n >> m>>d;
for(int =n;i<=m;i++){
while(temp){
if(temp % 10 == d) res++;
temp /= 10;
}
}
cout << res << endl;
return 0;
正确答案:C
13、兔子五元一只,鸡三元一只,小鸭子一元三只,现在你有一百元要买一百只,兔子、鸡、鸭子,问兔子、 鸡、鸭子各买多少只,每种必须至少一只,下列哪个程序能实现。( )。
A.
for(int i = 0; i <= 100; i++){
for(int j = 0; j <= 100; j++){
for(int k = 0; k <= 100; k++){
if(i + j + k == 100 && 25 * i + 10 * j + k == 300)
cout << i << " " << j << " " << k << endl;
}
}
}
B.
for(int i = 0; i <= 100; i++){
for(int j = 0; j <= 100; j++){
for(int k = 0; k <= 100; k++){
if(i + j + k == 100 && 20 * i + 10 * j + k == 300)
cout << i << " " << j << " " << k << endl;
}
}
}
C.
for(int i=0;i<=20;i++){
for(int j = 0; j <= 34; j++){
for(int k = 0; k <= 20; k++){
if(i + j + k == 100 && 15 * i + 9 * j + k == 300)
cout << i << " " << j << " " << k << endl;
}
}
}
D.
for(int i = 0; i <= 100; i++){
for(int j = 0; j <= 100; j++){
for(int k = 0; k <= 100; k++){
if(i + j + k == 100 && 15 * i + 9 * j + k == 300)
cout << i << " " << j << " " << k << endl;
}
}
}
正确答案:D
14、求小于等于N的素数的方法中,有一种方法是将所有从2到它本身减1的数都除一遍,如果不能整除,就是素 数。下列哪个程序,体现了这种方法()
A.
if(N >= 3){
cout<<2<<endl;
for(int i = 2;i <= N;i ++){
for(int j = 2;j < i;j ++){
if(i % j != 0){
flag = 1;
}
}
if(flag == 0){
cout<<i<<endl;
}
flag = 0;
}
}
B.
if(N >= 2){
for(int i = 3;i <= N;i ++){
for(int j = 2;j < i;j ++){
if(i % j == 0){
flag = 1;
}
}
if(flag == 0){
cout<<i<<endl;
}
flag = 0;
}
}
C.
if(N >= 2){
cout<<2<<endl;
for(int i = 3;i <= N;i ++){
for(int j = 2;j < i;j ++){
if(i % j == 0){
flag = 1;
}
}
if(flag == 0){
cout<<i<<endl;
}
flag = 0;
}
}
D.
if (N >= 2){
cout << 2 << endl;
for(int i = 3;i <= N;i ++){
for(int j = 2;j < i;j ++){
if(i % j == 0){
flag = 1;
}
}
if (flag == 0){
cout << i << endl;
}
}
}
正确答案:C
15、工人工作一天,会得到一个金环作为工资报酬,某个工作需要15天完成,一条15个环的金环项链,为了严格执行每天工作结束时,完成对工人工资的结算,最少需要将金环项链剪裁成几段,每段几个金环( )
A. 4段,分别是1、2,4,8
B. 15段,每段1个
C. 6段,分别是3、3、3、3、2、1
D. 9段,分别是2、2、2、2、2、2、1、1、1
正确答案:A
判断题(每题 2 分,共 20 分)
1、为了简化计算机基本运算电路,使加减法都只需要通过加法电路实现,也就是让减去一个正数或加上一个负 数这样的运算可以用加上一个正数来代替。于是改变负数存储的形式,存储成一种可以直接当成正数来相加的形 式,这种形式就是补码。
正确答案:正确
2、使用原码进行的计算, 2+(-1) 的结果是 -3
正确答案:正确
3、反码计算加减法:加法与减法结果都是正确的,只是解决不了 -0 的问题
正确答案:正确
4、10 进制数 63,在转换成二进制的计算过程中,产生了如下的式子:
63/2=31 余 1
31/2=15 余 1
15/2=7 余1
7/2=3 余1
3/2=1 余1
1/2=0 余1
按照从前往后的顺序,获得 63 的二进制值是 111111
正确答案:错误
5、下列程序输出的是 A
char x=65;
x=x&00001111;
cout<<x<<endl;
正确答案:正确
6、下列可执行程序段中,最后 pos 的值是 4
string str="chenADai";
int pos = str.find('D');
--pos&11;
正确答案:正确
7、该段程序将不能正确执行
string ch="chen";
cout<<ch[4]<<endl;
正确答案:错误
8、将输出 97
char a='A';
a=a+32;
cout<<(int)a<<endl;
正确答案:正确
9、自然界中,最小的素数是 2
正确答案:正确
10、CCF(十六进制) = 12363(七进制)
正确答案:正确
编程题 (每题 25 分,共 50 分)
数字替换
【问题描述】
小杨有一个包含n个数字的序列A,即
A
=
{
a
1
,
a
2
,
.
.
.
,
a
n
}
A = \{a_1, a_2, ..., a_n\}
A={a1,a2,...,an},他想将其中大于k的数字都替换为序列的最大值,将其中小于k的数字都替换为序列的最小值,请你帮他计算出替换后的序列。
【输入格式】
第一行包含两个正整数n,k,含义如题面所示。
第二行包含n个数字,代表序列A。
【输出格式】
输出n个整数,代表替换后的结果。
【样例输入 1】
5 0
-2 -1 0 1 2
【样例输出 1】
-2 -2 0 2 2
对于全部数据,保证有
1
≤
n
≤
1
0
5
,
∣
k
∣
,
∣
a
i
∣
≤
1
0
5
1 \le n \le 10^5, |k|,|a_i| \le 10^5
1≤n≤105,∣k∣,∣ai∣≤105。
打印数字
【问题描述】
小杨为数字0,1,2和3设计了一款表示形式,每个数字占用了5*5的网格。数字0,1,2和3的表示形式如下:
..... ****. ..... .....
.***. ****. ****. ****.
.***. ****. ..... .....
.***. ****. .**** ****.
..... ****. ..... .....
小杨想请你将给定的数字n转换为对应的表示形式。
【输入描述】
第一行包含一个正整数代表n。
【输出描述】
输出对应的表示形式。
【样例输入 1】
12230
【样例输出 1】
****.....................
****.****.****.****..***.
****.................***.
****..****.********..***.
****.....................
对于全部数据,保证有 0 ≤ n ≤ 1 0 6 0 \le n \le 10^6 0≤n≤106,且n仅由数字0,1,2,3组成。
原文地址:https://blog.csdn.net/QD_Jason/article/details/144332551
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!