c语言计算器进制转换功能带注释
时间: 2023-08-14 20:02:45 浏览: 108
以下是一个C语言计算器程序,其中包含进制转换功能的示例代码,带有详细的注释说明。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
// 将一个十进制整数转换为二进制字符串
char* dec2bin(int dec) {
char* result = (char*) malloc(33 * sizeof(char)); // 分配足够的空间,用于存储二进制字符串
int i = 0;
do {
result[i++] = (dec % 2) + '0'; // 取出二进制位,转为字符
dec /= 2;
} while (dec != 0);
result[i] = '\0';
strrev(result); // 翻转字符串
return result;
}
// 将一个二进制字符串转换为十进制整数
int bin2dec(char* bin) {
int result = 0;
int len = strlen(bin);
for (int i = 0; i < len; i++) {
result = result * 2 + (bin[i] - '0'); // 将字符转为数字,累加结果
}
return result;
}
// 将一个十进制整数转换为十六进制字符串
char* dec2hex(int dec) {
char* result = (char*) malloc(9 * sizeof(char)); // 分配足够的空间,用于存储十六进制字符串
sprintf(result, "%X", dec); // 使用 sprintf 函数将整数转为十六进制字符串
return result;
}
// 将一个十六进制字符串转换为十进制整数
int hex2dec(char* hex) {
int result = 0;
int len = strlen(hex);
for (int i = 0; i < len; i++) {
int digit = 0;
if (isdigit(hex[i])) {
digit = hex[i] - '0'; // 如果是数字,直接转换为数字
} else {
digit = toupper(hex[i]) - 'A' + 10; // 如果是字母,转为相应的数字
}
result = result * 16 + digit; // 累加结果
}
return result;
}
int main() {
int a, b;
char op;
printf("请输入一个表达式(例如:10+20):\n");
scanf("%d%c%d", &a, &op, &b); // 读取表达式中的三个部分
switch (op) {
case '+':
printf("%d + %d = %d\n", a, b, a + b);
break;
case '-':
printf("%d - %d = %d\n", a, b, a - b);
break;
case '*':
printf("%d * %d = %d\n", a, b, a * b);
break;
case '/':
printf("%d / %d = %d\n", a, b, a / b);
break;
case '%':
printf("%d %% %d = %d\n", a, b, a % b);
break;
case '&':
printf("%d & %d = %d\n", a, b, a & b); // 位与运算
break;
case '|':
printf("%d | %d = %d\n", a, b, a | b); // 位或运算
break;
case '^':
printf("%d ^ %d = %d\n", a, b, a ^ b); // 位异或运算
break;
case '~':
printf("~%d = %d\n", a, ~a); // 位取反运算
break;
case '<':
printf("%d << %d = %d\n", a, b, a << b); // 左移运算
break;
case '>':
printf("%d >> %d = %d\n", a, b, a >> b); // 右移运算
break;
case 'b':
printf("%d 的二进制表示为:%s\n", a, dec2bin(a)); // 十进制转二进制
break;
case 'd':
printf("%s 的十进制表示为:%d\n", (char*) b, bin2dec((char*) b)); // 二进制转十进制
break;
case 'x':
printf("%d 的十六进制表示为:%s\n", a, dec2hex(a)); // 十进制转十六进制
break;
case 'h':
printf("%s 的十进制表示为:%d\n", (char*) b, hex2dec((char*) b)); // 十六进制转十进制
break;
default:
printf("无效的运算符!\n");
}
return 0;
}
```
该程序首先读取一个表达式,例如 `10+20`,然后使用 `scanf` 函数分别读取表达式中的三个部分,即两个操作数和一个运算符。然后根据运算符进行相应的计算或转换,最后输出结果。
其中,进制转换部分主要使用了 C 语言的字符串处理函数和数值转换函数。例如,将一个十进制整数转换为二进制字符串,可以使用 `do...while` 循环和 `strrev` 函数实现。将一个二进制字符串转换为十进制整数,可以使用 `for` 循环和字符转数字的方法。将一个十进制整数转换为十六进制字符串,可以使用 `sprintf` 函数实现。将一个十六进制字符串转换为十进制整数,可以使用 `for` 循环和字母转数字的方法。
阅读全文