#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'