#4997. [客观题]进制转换程序阅读

[客观题]进制转换程序阅读

一.程序补全题

下列程序能够将输入的十进制整数转换成二进制并输出,尝试补全程序。

#include<bits/stdc++.h>
using namespace std;
int dTob(int d){
int b=①,q=②;
while(d>0){
int u=d%2;
b+=u*q;
d/=③;
q*=④;
}
return ⑤;
}
int main() {
int n;
cin>>n;
cout<<dTob(n);
return 0;
}

{{ select(1) }}

  • 0
  • 1
  • -1
  • d

{{ select(2) }}

  • 0
  • 1
  • -1
  • d

{{ select(3) }}

  • 10
  • 2
  • u
  • b

{{ select(4) }}

  • 10
  • 2
  • u
  • b

{{ select(5) }}

  • u
  • b
  • d
  • q

二.程序阅读题

阅读以下程序,回答问题

#include<bits/stdc++.h>
using namespace std;
int bToC(int b){
int c=0,q=1;
while(b>0){
c+=(b%10)*q;
b/=10;
q*=3;
}
return c;
}
int main() {
int n;
cin>>n;
cout<<bToC(n);
return 0;
}
  1. 输入122,程序将输出(){{ select(6) }}
  • 17
  • 16
  • 15
  • 14
  1. 该程序的作用是(){{ select(7) }}
  • 把十进制的数转成三进制输出
  • 把三进制数转成十进制输出
  • 计算十进制数的数位和
  • 计算三进制数的数位和
  1. 该程序在正常运行情况下,输出的取值范围是(){{ select(8) }}
  • 2312311-2^{31} \sim 2^{31}-1
  • 023110 \sim 2^{31}-1
  • 0524870 \sim 52487
  • 5248852487-52488 \sim 52487
  1. 为了解决该程序不能处理负数的问题,可以将第5行的b > 0改成b != 0(){{ select(9) }}
  1. 若输出结果为23,则输入的是(){{ select(10) }}
  • 210
  • 211
  • 212
  • 213

三.程序阅读题

阅读以下程序回答问题

#include<bits/stdc++.h>
using namespace std;
int fun(int b){
int d=0,q=1;
while(b>0){
d+=(b%2)*q;
b/=10;
q*=2;
}
return d;
}
int bToO(int b){
int res=0,q=1,f=1;
if(b<0){
f=-1;
b*=f;
}
while(b>0){//第18行
res+=fun(b%1000)*q;
b/=1000;
q*=10;
}
return res*f;
}
int main() {
int n;
cin>>n;
cout<<bToO(n);
return 0;
}
  1. 若输入10000,则输出结果为(){{ select(11) }}
  • 2
  • 10
  • 20
  • 100
  1. 若输入1011,则输出结果为(){{ select(12) }}
  • 12
  • 13
  • 14
  • 15
  1. 该程序能正常处理合理范围内的负数(){{ select(13) }}
  1. fun函数的功能是?(){{ select(14) }}
  • 把二进制整数转化为十进制
  • 把十进制整数转化为二进制
  • 把二进制整数转化为八进制
  • 把八进制整数转化为二进制
  1. 把第18行代码改成while(b),不改变程序的输出结果(){{ select(15) }}

四.程序阅读题

下列程序借助二进制与十六进制之间的特殊转换关系,实现十六进制正整数转换成二进制形式的过程.阅读程序回答问题

#include<bits/stdc++.h>
using namespace std;
int fun(int d){
int b=0,q=1;
while(d>0){
b+=(d%2)*q;
d/=2;
q*=10;
}
return b;
}
string hToB(string h){
string b="";
for(int i=h.size()-1;i>=0;i--){//第14行
int num;
if(h[i]>='A' && h[i]<='F'){
num=h[i]-'A'+10;
}else{
num=h[i]-'0';
}
string t=to_string(fun(num));//to_string函数能够将数字转成字符串形式,比如123转换为"123"
int cnt=4-t.size();//第22行
for(int j=0;j<cnt;j++){//第23行
t="0"+t;
}
b=t+b;	
}
return b;
}
int main() {
string n;
cin>>n;
cout<<hToB(n);
return 0;
}
  1. 若输入1C,则输出(){{ select(16) }}
  • 11100000
  • 00011100
  • 11100
  • 28
  1. 若输出为101010111100,则输入应该为{{ select(17) }}
  • AAB
  • ABB
  • ABC
  • BBC
  1. 若输入中带有小写字母,则该程序会发生哪种错误?(){{ select(18) }}
  • 死循环
  • 数组越界
  • 输出错误
  • 编译错误
  1. 将第22、23行合并为for (int j = 0; j < 4 - t.size(); j++),不影响程序输出结果(){{ select(19) }}
  1. 把第14行改写成for(int i=0;i<h.size();i++) 不影响程序输出结果(){{ select(20) }}

五.程序阅读题

下列程序中的dToTC函数是将十进制整数转换成八位二进制原码,dToOC函数是将十进制整数转换成八位二进制反码,请阅读程序回答以下问题

#include<bits/stdc++.h>
using namespace std;
int dToB(int d){
int b=0,q=1;
while(b>0){
b+=(d%2)*q;
d/2;
q*=10;
}
return b;
}
string dToTC(int d){
string f=①;
if(d<0){
f=②;
d*=-1;
}
string tc=to_string(dToB(d));
int cnt=③-tc.size();
for(int i=0;i<cnt;i++) tc="0"+tc;
return f+tc;
}
string dToOC(int d){
string oc=dToTC(d);
if(d<0){
for(int i=④;i<8;i++){
oc[i]=⑤;
}
}
return oc;
}
int main() {
int n;cin>>n;
cout<<dToTC(n)<<' '<<dToOC(n);
return 0;
}
  1. 该程序可以正确处理输入的合理范围内的负整数(){{ select(21) }}
  1. 该程序能正确处理的数据范围是-128~127{{ select(22) }}
  1. ①②③处依次应填(){{ select(23) }}
  • "0","1",7
  • "1","0",7
  • "0","1",8
  • "1","0",8
  1. ④处应填(){{ select(24) }}
  • 0
  • 1
  • 2
  • 3
  1. ⑤处应填(){{ select(25) }}
  • 1-oc[i]+'0'
  • oc[i]-'0'+1
  • 1-(oc[i]-'0')+'0'
  • 0-(oc[i]-'1')+'1'