CCF 编程能力等级认证 C++ 三级(2024 年 12 月)试卷讲解

一、单选题

  1. 第1题
    • 题目:下列二进制表示的十进制数值分别是( ),[10000011]原=( ),[10000011]补=( )。
    • 选项:
      • A. -125,-3
      • B. -3, -125
      • C. -3,-3
      • D. -125,-125
    • 答案:D
    • 知识点:原码、补码与十进制数的转换。
    • 解析:对于原码[10000011],最高位为1表示负数,其真值为−1×27+1×21+1×20=−125-1\times2^7 + 1\times2^1 + 1\times2^0 = -1251×27+1×21+1×20=125;补码是在原码的基础上,除符号位外各位取反再加1,[10000011]补码的真值也为 -125。
  2. 第2题
    • 题目:关于计算机中的编码,下列说法中错误的是()。
    • 选项:
      • A. 对于无符号数,原码就是真值。
      • B. 正数的反码是其本身。
      • C. 负数的反码和补码是不一样的。
      • D. 负数的反码,在其原码的基础上,各个位取反。
    • 答案:D
    • 知识点:计算机中编码的相关概念,包括原码、反码、补码以及它们之间的关系,特别是负数的编码规则。
    • 解析:
      • A选项:对于无符号数,原码就是其本身,也就是真值,该说法正确。
      • B选项:正数的反码确实是其本身,该说法正确。
      • C选项:负数的反码是在其原码的基础上,除符号位外各位取反,补码是在反码的基础上加1,所以负数的反码和补码不一样,该说法正确。
      • D选项:负数的反码,在其原码的基础上,除符号位外各个位取反,而不是所有位取反,该说法错误。
  3. 第3题
    • 题目:16进制数B2025转换成8进制数是()。
    • 选项:
      • A. 2620045
      • B. 2004526
      • C. 729125
      • D. 2420045
    • 答案:A
    • 知识点:不同进制数之间的转换,重点是十六进制转八进制。
    • 解析:先将十六进制数B2025转换为二进制为10110010000000100101,再从右至左每三位一组转换为八进制,得到2620045。
  4. 第4题
    • 题目:625.625变成二进制是( )。
    • 选项:
      • A. 1001110001.101
      • B. 101.101
      • C. 101.1001110001
      • D. 1001110001.1101
    • 答案:A
    • 知识点:十进制小数转换为二进制小数。
    • 解析:整数部分625转换为二进制是1001110001,小数部分0.625转换为二进制是0.101,合起来就是1001110001.101。
  5. 第5题
    • 题目:下面逻辑运算中,正确的是( )。
    • 选项:
      • A. 5&&3==0
      • B. 5|3==8
      • C. 5||3==11
      • D. 5&3==0001
    • 答案:D
    • 知识点:逻辑运算,包括逻辑与(&&)、逻辑或(||)、按位与(&)、按位或(|)的运算规则。
    • 解析:
      • A选项:5&&3的结果是1(因为5和3都为真),而不是0,该选项错误。
      • B选项:5|3的结果是7(按位或运算),而不是8,该选项错误。
      • C选项:5||3的结果是1(因为5为真,只要有一个为真结果就为真),而不是11,该选项错误。
      • D选项:5&3的结果是1(按位与运算),用二进制表示为0001,该选项正确。
  6. 第6题
    • 题目:补码1111 1101进行运算1111 1101>>1以后得到的结果是()。
    • 选项:
      • A. 1111 1100
      • B. -2
      • C. 1111 1101
      • D. 1111 1010
    • 答案:B
    • 知识点:补码的右移运算规则。
    • 解析:补码1111 1101右移1位后,最高位补1,得到1111 1110,其真值为 -2。
  7. 第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
  • 知识点:string类的replace函数的使用。
  • 解析:s.replace(1,5,str)表示从s的下标1开始,替换5个字符为str,所以结果是112345chenadai。
  1. 第8题
    • 题目:a|10(a与10都是10进制,且二进制表示最高位为1)运算的结果是( )。
    • 选项:
      • A. 使a的二进制表示从右往左的第二位为1
      • B. 使a的二进制表示从右往左的第一位为0
      • C. 使a的二进制表示从右往左第二位为0
      • D. 使a的二进制表示最高位为0
    • 答案:A
    • 知识点:按位或(|)运算对二进制数特定位的影响。
    • 解析:a|10,10的二进制表示为1010,进行按位或运算会使a的二进制表示从右往左的第二位变为1(只要有一个为1结果就为1)。
  2. 第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. 不能正确执行
  • 答案:B
  • 知识点:字符串的下标访问以及’\0’在字符串中的作用。
  • 解析:字符串"hello"的长度为5,下标从0到4,ch[5]访问越界,但是在C++中,字符串以’\0’结尾,当访问到字符串结尾的’\0’时,条件ch[5]=='\0’成立,所以输出"wrong"。
  1. 第10题
  • 题目:下列程序中,假设一个字符占用的内存空间是1,下列程序中,ch占用的内存空间是 ( )
size_t ret=strlen(ch);
char ch[] = "hello world";
cout<<ret<<endl;
  • 选项:
    • A. 11
    • B. 10
    • C. 13
    • D. 12
  • 答案:D
  • 知识点:字符串数组的内存占用以及strlen函数的计算。
  • 解析:char ch[] = “hello world”,字符串"hello world"实际占用12个字节(包括’\0’),但是strlen函数计算字符串长度时不包括’\0’,所以长度为11。而ch数组本身占用的内存空间是12字节。
  1. 第11题
  • 题目:下列程序最后输出的是()
int a=65;
cout<<tolower(a)<<endl;
  • 选项:
    • A. 65
    • B. A
    • C. a
    • D. 97
  • 答案:D
  • 解析:int a = 65,对应的字符是’A’,tolower(a)将其转换为小写字母’a’,其ASCII码值为97。
  1. 第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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值