自学内容网 自学内容网

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段,分别是1248
B. 15段,每段1个
C. 6段,分别是333321
D. 9段,分别是222222111

正确答案:A

判断题(每题 2 分,共 20 分)

1、为了简化计算机基本运算电路,使加减法都只需要通过加法电路实现,也就是让减去一个正数或加上一个负 数这样的运算可以用加上一个正数来代替。于是改变负数存储的形式,存储成一种可以直接当成正数来相加的形 式,这种形式就是补码。

正确答案:正确

2、使用原码进行的计算, 2+(-1) 的结果是 -3

正确答案:正确

3、反码计算加减法:加法与减法结果都是正确的,只是解决不了 -0 的问题

正确答案:正确

4、10 进制数 63,在转换成二进制的计算过程中,产生了如下的式子:

63/2=311
31/2=151
15/2=71
7/2=31
3/2=11
1/2=01
按照从前往后的顺序,获得 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 1n105,k,ai105

打印数字

【问题描述】
小杨为数字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 0n106,且n仅由数字0,1,2,3组成。


原文地址:https://blog.csdn.net/QD_Jason/article/details/144332551

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!