用简单的C语言实现,使用循环和递归方法分别编写函数,实现十六进制整数与十进制整数的相 互转换。 1)键盘输入一个值,以 H 或 D 结束(大小写均可),如 90H、10Ah、703D, 以字符串形式获取到输入 inStr[6](指定最大 5 位十六进制数),如果输入以 H 或 h 结尾,将输入的十六进制数转换为十进制数;如果输入以 D 或 d 结尾,将输入 的十进制数转换为十六进制数。 2)自定义函数 htod(),实现用循环方法将十六进制数转换为十进制数。首 先判断数值位数 n,循环控制每位转换,在第 i( i 从 0 开始)位上,数 k 表示的 大小为 k×16 的 i 次方。将计算值返回主函数。 3)自定义函数 dtoh(),实现用递归法将十进制数转换为十六进制数。用除 以 16 取余法,每次作 num/16 运算,将余数保存,直至商为 0。 4)主函数调用两个函数进行转换。并输出转换结果,来印证算法正确。
时间: 2024-03-12 17:42:58 浏览: 255
好的,以下是一个示例代码,实现了十六进制整数与十进制整数的相互转换:
```c
#include <stdio.h>
#include <string.h>
#include <math.h>
// 将十六进制字符串转换为十进制整数
int htod(char* hex) {
int len = strlen(hex);
int dec = 0;
for (int i = 0; i < len - 1; i++) {
int num = 0;
if (hex[i] >= '0' && hex[i] <= '9') {
num = hex[i] - '0';
} else if (hex[i] >= 'A' && hex[i] <= 'F') {
num = hex[i] - 'A' + 10;
} else if (hex[i] >= 'a' && hex[i] <= 'f') {
num = hex[i] - 'a' + 10;
}
dec += num * pow(16, len - i - 2);
}
return dec;
}
// 将十进制整数转换为十六进制字符串
void dtoh(int dec, char* hex) {
if (dec == 0) {
return;
}
dtoh(dec / 16, hex);
int remainder = dec % 16;
if (remainder < 10) {
sprintf(hex + strlen(hex), "%d", remainder);
} else {
sprintf(hex + strlen(hex), "%c", 'A' + remainder - 10);
}
}
int main() {
char inStr[6];
printf("请输入一个十六进制数或十进制数:");
fgets(inStr, 6, stdin);
int len = strlen(inStr);
if (inStr[len - 2] == 'H' || inStr[len - 2] == 'h') {
// 十六进制转十进制
inStr[len - 2] = '\0';
int dec = htod(inStr);
printf("转换后的十进制数为:%d\n", dec);
} else if (inStr[len - 2] == 'D' || inStr[len - 2] == 'd') {
// 十进制转十六进制
inStr[len - 2] = '\0';
int dec = atoi(inStr);
char hex[10] = "";
dtoh(dec, hex);
printf("转换后的十六进制数为:%sH\n", hex);
} else {
printf("无法识别的输入!\n");
}
return 0;
}
```
这个程序使用了自定义的 `htod()` 函数和 `dtoh()` 函数,分别实现了十六进制转十进制和十进制转十六进制的功能。在主函数中,先通过判断输入的字符串的最后一个字符来确定要进行的转换,然后分别调用对应的函数进行转换,并输出转换结果。
阅读全文