用C语言编程实现输入一个整数,然后计算并输出其二进制、八进制、十六进制形式的数据,用函数完成编写一个函数convert,函数有3个形式参数v、m、n,实现将m进制数v转换为n进制的值,在主函数中调用该函数并验证其结果。注意:m和n的值均为正整数,函数应当能够对错误输入进行相应的处理和提示
时间: 2024-02-13 09:05:44 浏览: 97
好的,以下是用C语言编写的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
// 将一个十进制数转换为二进制、八进制或十六进制数
void convert(int v, int n) {
switch(n) {
case 2:
printf("二进制数为:%d\n", v);
break;
case 8:
printf("八进制数为:%o\n", v);
break;
case 16:
printf("十六进制数为:%X\n", v);
break;
default:
printf("Error: 目标进制必须为2、8或16!\n");
}
}
// 将一个m进制数转换为n进制数
void base_convert(char *v, int m, int n) {
int decimal_v = 0, i;
// 先将输入的m进制数转换为十进制数
for(i = 0; v[i] != '\0'; i++) {
if(isdigit(v[i])) {
decimal_v = decimal_v * m + (v[i] - '0');
} else if(isalpha(v[i])) {
decimal_v = decimal_v * m + (toupper(v[i]) - 'A' + 10);
} else {
printf("Error: 输入的数值不是有效的%d进制数!\n", m);
return;
}
}
// 判断转换后的十进制数是否为负数
if(decimal_v < 0) {
printf("Error: 输入的数值必须为正整数!\n");
return;
}
convert(decimal_v, n); // 将十进制数转换为目标进制数
}
int main() {
char v[100];
int m, n;
printf("请输入一个整数:");
scanf("%s", v);
printf("请输入该整数的进制:");
scanf("%d", &m);
printf("请输入目标进制:");
scanf("%d", &n);
if(m != 2 && m != 8 && m != 10 && m != 16) {
printf("Error: 输入的进制必须为2、8、10或16!\n");
return 0;
}
if(n != 2 && n != 8 && n != 16) {
printf("Error: 目标进制必须为2、8或16!\n");
return 0;
}
base_convert(v, m, n);
return 0;
}
```
函数convert和函数base_convert分别实现了将一个十进制数转换为二进制、八进制或十六进制数,以及将一个m进制数转换为n进制数的功能。函数base_convert首先将输入的m进制数转换为十进制数,然后调用函数convert将十进制数转换为目标进制数。函数特别处理了输入值不合法的情况,例如输入的数值不是正整数,或者输入的数值不是有效的m进制数,或者输入的进制不是2、8、10或16,或者目标进制不是2、8或16,这些情况下函数会返回相应的错误提示。
在主函数中,您可以通过调用base_convert函数来验证其结果。例如,输入1010作为二进制数,m为2,n为8时,输出的八进制数应该为12。
阅读全文