五,八,使,十二,十六进制之间的相互转换

1、 实验题目:五,八,十,十二,十六进制之间的相互转化。
二、实验目的:了解进制转化的程序。
三、实验内容:
日期:2019 年12月21日
2、 主要功能:输出选择菜单,选择后使五,八,十,十二,十六进制之间的相互转化。
算法设计要点:对于输入的数据要用getchar(),一一检验,若第一个是“-”号,则将“-”号赋值给一个字母,然后进行”.”前的运算,”.”后面的运算运用另一种方式进行。同时声明一个其他进制转化成十进制,一个十进制转化成其他进制。
4、 实验数据与测试结果

5、 总结:对于含有小数的进制转换,应分步进行转换,先判断正负号,然后进行整数方面的。注意:输入选择的菜单时,要用大写英文字母。
六、附录:
#include
#include<stdio.h>//编译系统中需要用此函数来调用getchar()
#include
using namespace std;
int main() {
char xx = 1; //定义输入的选项字符为xx;
double input; //定义输入数字
string n;
char ip2;
double ATT(char ip2, int jz);
void TTA(double input, int jz);
while (xx != ‘0’) {
cout << “操作菜单:(请输入英文大写字母)” << endl
<< “A. 5进制数 —> 8进制数” << endl
<< “B. 5进制数 —> 10进制数” << endl
<< “C. 5进制数 —> 12进制数” << endl
<< “D. 5进制数 —> 16进制数” << endl
<< “E. 8进制数 —> 5进制数” << endl
<< “F. 8进制数 —> 10进制数” << endl
<< “G. 8进制数 —> 12进制数” << endl
<< “H. 8进制数 —> 16进制数” << endl
<< “I. 10进制数 —> 5进制数” << endl
<< “J. 10进制数 —> 8进制数” << endl
<< “K. 10进制数 —> 12进制数” << endl
<< “L. 10进制数 —> 16进制数” << endl
<< “M. 12进制数 —> 5进制数” << endl
<< “N. 12进制数 —> 8进制数” << endl
<< “O. 12进制数 —> 10进制数” << endl
<< “P. 12进制数 —> 16进制数” << endl
<< “Q. 16进制数 —> 5进制数” << endl
<< “R. 16进制数 —> 8进制数” << endl
<< “S. 16进制数 —> 10进制数” << endl
<< “T. 16进制数 —> 12进制数” << endl
<< “0. 退出” << endl
<< “请输入字母以选择想要进行的操作:”;
cin >> xx;
switch (xx) {
case ‘A’:
cout << “请输入一个5进制数:” << endl <<"(整数请以x.0形式输入)" ;
cin >> ip2;
TTA(ATT(ip2, 5), 8);
cout << endl << “任意键返回上一级”;
getchar();
break;
case ‘B’:
cout << “请输入一个5进制数:” << endl <<"(整数请以x.0形式输入)" ;
cin >> ip2;
cout << ATT(ip2, 5);
cout << endl << “任意键返回上一级”;
getchar();
break;
case ‘C’:
cout << “请输入一个5进制数:” << endl <<"(整数请以x.0形式输入)" ;
cin >> ip2;
TTA(ATT(ip2, 5), 12);
cout << endl << “任意键返回上一级”;
getchar();
break;
case ‘D’:
cout << “请输入一个5进制数:” << endl <<"(整数请以x.0形式输入)" ;
cin >> ip2;
TTA(ATT(ip2, 5), 16);
cout << endl << “任意键返回上一级”;
getchar();
break;
case ‘E’:
cout << “请输入一个8进制数:” << endl <<"(整数请以x.0形式输入)" ;
cin >> ip2;
TTA(ATT(ip2, 8), 5);
cout << endl << “任意键返回上一级”;
getchar();
break;
case ‘F’:
cout << “请输入一个8进制数:” << endl <<"(整数请以x.0形式输入)" ;
cin >> ip2;
cout <<ATT(ip2, 8);
cout << endl << “任意键返回上一级”;
getchar();
break;
case ‘G’:
cout << “请输入一个8进制数:” << endl <<"(整数请以x.0形式输入)" ;
cin >> ip2;
TTA(ATT(ip2, 8), 12);
cout << endl << “任意键返回上一级”;
getchar();
break;
case ‘H’:
cout << “请输入一个8进制数:” << endl <<"(整数请以x.0形式输入)" ;
cin >> ip2;
TTA(ATT(ip2, 8), 16);
cout << endl << “任意键返回上一级”;
getchar();
break;
case ‘I’:
cout << “请输入一个10进制数:” << endl <<"(整数请以x.0形式输入)" ;
cin >> input;
if (input < 1 && input > 0)
cout << 0;
TTA(input, 5);
cout << endl << “任意键返回上一级”;
getchar();
break;
case ‘J’:
cout << “请输入一个10进制数:” << endl <<"(整数请以x.0形式输入)" ;
cin >> input;
if (input < 1 && input > 0)
cout << 0;
TTA(input, 8);
cout << endl << “任意键返回上一级”;
getchar();
break;
case ‘K’:
cout << “请输入一个10进制数:” << endl <<"(整数请以x.0形式输入)" ;
cin >> input;
if (input < 1 && input > 0)
cout << 0;
TTA(input, 12);
cout << endl << “任意键返回上一级”;
getchar();
break;
case ‘L’:
cout << “请输入一个10进制数:” << endl <<"(整数请以x.0形式输入)" ;
cin >> input;
if (input < 1 && input > 0)
cout << 0;
TTA(input, 16);
cout << endl << “任意键返回上一级”;
getchar();
break;
case ‘M’:
cout << “请输入一个12进制数:” << endl <<"(整数请以x.0形式输入)" ;
cin >> ip2;
TTA(ATT(ip2, 12), 5);
cout << endl << “任意键返回上一级”;
getchar();
break;
case ‘N’:
cout << “请输入一个12进制数:” << endl <<"(整数请以x.0形式输入)" ;
cin >> ip2;
TTA(ATT(ip2, 12), 8);
cout << endl << “任意键返回上一级”;
getchar();
break;
case ‘O’:
cout << “请输入一个12进制数:” << endl <<"(整数请以x.0形式输入)" ;
cin >> ip2;
cout << ATT(ip2, 12);
cout << endl << “任意键返回上一级”;
getchar();
break;
case ‘P’:
cout << “请输入一个12进制数:” << endl <<"(整数请以x.0形式输入)" ;
cin >> ip2;
TTA(ATT(ip2, 12), 16);
cout << endl << “任意键返回上一级”;
getchar();
break;
case ‘Q’:
cout << “请输入一个16进制数:” << endl <<"(整数请以x.0形式输入)" ;
cin >> ip2;
TTA(ATT(ip2, 16), 5);
cout << endl << “任意键返回上一级”;
getchar();
break;
case ‘R’:
cout << “请输入一个16进制数:” << endl <<"(整数请以x.0形式输入)" ;
cin >> ip2;
TTA(ATT(ip2, 16), 8);
cout << endl << “任意键返回上一级”;
getchar();
break;
case ‘S’:
cout << “请输入一个16进制数:” << endl <<"(整数请以x.0形式输入)" ;
cin >> ip2;
cout << ATT(ip2, 16);
cout << endl << “任意键返回上一级”;
getchar();
break;
case ‘T’:
cout << “请输入一个16进制数:” << endl <<"(整数请以x.0形式输入)" ;
cin >> ip2;
TTA(ATT(ip2, 16), 12);
cout << endl << “任意键返回上一级”;
getchar();
break;
default:;
break;
}
}
}

double ATT(char ip2, int jz)

{
char b = ‘+’;
double x = 0, t = 1;
if (ip2 == ‘-’) {//电脑会h逐个检查字符
b = ip2;
ip2 = getchar();
}
while (ip2 != ‘.’) {
x = x * jz + (ip2 <= ‘9’ ? ip2 - ‘0’ : ip2 - 55); //非数字必须要用大写字母
ip2 = getchar();
}
ip2 = getchar();
while (ip2 != ‘\n’) {
t /= jz;
x += (ip2 <= ‘9’ ? ip2 - ‘0’ : ip2 - 55) * t;
ip2 = getchar();
}
if (b == ‘-’) {
x = -x;
} else
x = x;
return x;
}

void TTA(double input, int jz)
{
double XS; //变量:输入值、输出整数部分、输出小数部分
int ZS;
double input2;
input2 = input;
if (input < 0)
input = -input;
ZS = int(input); //取整数部分
XS = input - ZS; //减,以取小数部分
int a, m = 0, s[100], q[100];
int jd = 10, l = 0;
while (ZS != 0) {
a = ZS % jz;
ZS = ZS / jz;
m++;
s[m] = a;
}
if (input2 < 0)
cout << ‘-’;
for (int i = m; i >= 1; i–) {
if (s[i] >= 10)
cout << (char) (s[i] + 55);
else
cout << s[i];
}
if (XS > 0)
cout << ‘.’;
while (XS != 0 && l < jd)//数制转换,结果存入数组s[m]
{
XS = XS * jz;
l++;
q[l] = XS; //将余数按顺序存入数组s[m]中s[1]…s[m]
XS = XS - q[l]; //左值n取n得小数部分
}

for (int k = 1; k <= l; k++)//输出转换后的序列
{
    if (q[k] >= 10) //若为十六进制等则输出相对应的字母
        cout << (char) (q[k] + 55);
    else         //否则直接输出数字
        cout << q[k];
}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值