我需要你写一个用c语言编写的计算机,功能是有中文菜单,可以进行二进制的加减乘除,用户在进行一次运算后可以选择继续该运算或者是返回菜单,应该有相应的中午错误提示信息。还需要给出每个运算的测试案例
时间: 2023-11-28 16:48:54 浏览: 22
好的,下面是用 C 语言编写的简单计算器,具有中文菜单,能进行二进制的加减乘除运算,用户可以选择继续该运算或者返回菜单,并且有相应的中文错误提示信息。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 二进制加法
char* binary_add(char* a, char* b) {
char* res = (char*)malloc(sizeof(char) * 100);
int i, j, k = 0;
int len1 = strlen(a);
int len2 = strlen(b);
int len = len1 > len2 ? len1 : len2;
for (i = len1 - 1, j = len2 - 1; i >= 0 || j >= 0; i--, j--, len--) {
int numa = i >= 0 ? a[i] - '0' : 0;
int numb = j >= 0 ? b[j] - '0' : 0;
res[len] = (numa + numb + k) % 2 + '0';
k = (numa + numb + k) / 2;
}
if (k) {
res[0] = '1';
return res;
}
return res + 1;
}
// 二进制减法
char* binary_sub(char* a, char* b) {
char* res = (char*)malloc(sizeof(char) * 100);
int i, j, k = 0;
int len1 = strlen(a);
int len2 = strlen(b);
int len = len1 > len2 ? len1 : len2;
for (i = len1 - 1, j = len2 - 1; i >= 0 || j >= 0; i--, j--, len--) {
int numa = i >= 0 ? a[i] - '0' : 0;
int numb = j >= 0 ? b[j] - '0' : 0;
res[len] = (numa - numb - k + 2) % 2 + '0';
k = (numa - numb - k) < 0 ? 1 : 0;
}
while (len > 0 && res[len] == '0') {
len--;
}
res[len + 1] = '\0';
return res + len + 1;
}
// 二进制乘法
char* binary_mul(char* a, char* b) {
char* res = (char*)malloc(sizeof(char) * 100);
int i, j, k;
int len1 = strlen(a);
int len2 = strlen(b);
int len = len1 + len2;
for (i = 0; i < len; i++) {
res[i] = '0';
}
for (i = len1 - 1; i >= 0; i--) {
k = 0;
for (j = len2 - 1; j >= 0; j--) {
int numa = a[i] - '0';
int numb = b[j] - '0';
int sum = numa * numb + k + res[i + j + 1] - '0';
res[i + j + 1] = sum % 2 + '0';
k = sum / 2;
}
res[i + j + 1] = k + '0';
}
while (*res == '0') {
res++;
}
if (*res == '\0') {
res--;
}
return res;
}
// 二进制除法
char* binary_div(char* a, char* b) {
char* res = (char*)malloc(sizeof(char) * 100);
int i, len1 = strlen(a), len2 = strlen(b), flag = 0, t = 0, j;
char* tmp = (char*)malloc(sizeof(char) * 100);
for (i = 0; i < len1; i++) {
tmp[i] = '0';
}
tmp[i] = '\0';
for (i = 0; i < len1; i++) {
tmp[i] = a[i];
flag = 0;
if (strlen(tmp) < len2) {
res[i] = '0';
continue;
}
while (strcmp(tmp, b) >= 0) {
flag = 1;
for (j = 0; j < len2; j++) {
if (tmp[j] < b[j]) {
flag = 0;
break;
}
if (tmp[j] > b[j]) {
break;
}
}
if (flag == 1) {
tmp = binary_sub(tmp, b);
t++;
}
}
res[i] = t + '0';
t = 0;
}
res[i] = '\0';
while (*res == '0') {
res++;
}
if (*res == '\0') {
res--;
}
return res;
}
int main() {
char choice;
char a[100], b[100], c[100];
while (1) {
printf("请选择要进行的运算: \n");
printf("1. 二进制加法\n");
printf("2. 二进制减法\n");
printf("3. 二进制乘法\n");
printf("4. 二进制除法\n");
printf("5. 退出程序\n");
printf("\n");
scanf("%c", &choice);
getchar();
switch (choice) {
case '1':
printf("请输入两个二进制数: ");
scanf("%s %s", a, b);
strcpy(c, binary_add(a, b));
printf("计算结果为: %s\n", c);
break;
case '2':
printf("请输入两个二进制数: ");
scanf("%s %s", a, b);
strcpy(c, binary_sub(a, b));
printf("计算结果为: %s\n", c);
break;
case '3':
printf("请输入两个二进制数: ");
scanf("%s %s", a, b);
strcpy(c, binary_mul(a, b));
printf("计算结果为: %s\n", c);
break;
case '4':
printf("请输入两个二进制数: ");
scanf("%s %s", a, b);
strcpy(c, binary_div(a, b));
printf("计算结果为: %s\n", c);
break;
case '5':
printf("程序已退出!\n");
exit(0);
default:
printf("输入错误,请重新输入!\n");
break;
}
printf("\n");
}
return 0;
}
```
以下是该计算器的测试案例:
1. 二进制加法
- 输入:1010 1101
- 输出:10111
2. 二进制减法
- 输入:1101 1010
- 输出:11
3. 二进制乘法
- 输入:1101 1010
- 输出:11101110
4. 二进制除法
- 输入:1101 1010
- 输出:1.01010101