一、单选题
- 第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 = -125−1×27+1×21+1×20=−125;补码是在原码的基础上,除符号位外各位取反再加1,[10000011]补码的真值也为 -125。
- 第2题
- 题目:关于计算机中的编码,下列说法中错误的是()。
- 选项:
- A. 对于无符号数,原码就是真值。
- B. 正数的反码是其本身。
- C. 负数的反码和补码是不一样的。
- D. 负数的反码,在其原码的基础上,各个位取反。
- 答案:D
- 知识点:计算机中编码的相关概念,包括原码、反码、补码以及它们之间的关系,特别是负数的编码规则。
- 解析:
- A选项:对于无符号数,原码就是其本身,也就是真值,该说法正确。
- B选项:正数的反码确实是其本身,该说法正确。
- C选项:负数的反码是在其原码的基础上,除符号位外各位取反,补码是在反码的基础上加1,所以负数的反码和补码不一样,该说法正确。
- D选项:负数的反码,在其原码的基础上,除符号位外各个位取反,而不是所有位取反,该说法错误。
- 第3题
- 题目:16进制数B2025转换成8进制数是()。
- 选项:
- A. 2620045
- B. 2004526
- C. 729125
- D. 2420045
- 答案:A
- 知识点:不同进制数之间的转换,重点是十六进制转八进制。
- 解析:先将十六进制数B2025转换为二进制为10110010000000100101,再从右至左每三位一组转换为八进制,得到2620045。
- 第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题
- 题目:下面逻辑运算中,正确的是( )。
- 选项:
- 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题
- 题目:补码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题
- 题目:下列代码输出的是
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。
- 第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)。
- 第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"。
- 第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字节。
- 第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。
- 第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>