用C++设计一个全功能计算器,可以实现整数,浮点数,分数,复数的加减乘除运算。并能实现进制转换,由10进制转为2,8,16进制。
时间: 2023-03-30 07:02:32 浏览: 143
好的,我可以回答这个问题。以下是一个简单的 C 代码,可以实现您所需的功能:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// 定义复数结构体
typedef struct {
double real;
double imag;
} Complex;
// 定义分数结构体
typedef struct {
int numerator;
int denominator;
} Fraction;
// 函数声明
void add();
void subtract();
void multiply();
void divide();
void convert();
int main() {
int choice;
printf("请选择要进行的操作:\n");
printf("1. 加法\n");
printf("2. 减法\n");
printf("3. 乘法\n");
printf("4. 除法\n");
printf("5. 进制转换\n");
scanf("%d", &choice);
switch (choice) {
case 1:
add();
break;
case 2:
subtract();
break;
case 3:
multiply();
break;
case 4:
divide();
break;
case 5:
convert();
break;
default:
printf("无效的选择!\n");
break;
}
return ;
}
// 加法
void add() {
double num1, num2;
printf("请输入两个数:\n");
scanf("%lf %lf", &num1, &num2);
printf("结果为:%.2lf\n", num1 + num2);
}
// 减法
void subtract() {
double num1, num2;
printf("请输入两个数:\n");
scanf("%lf %lf", &num1, &num2);
printf("结果为:%.2lf\n", num1 - num2);
}
// 乘法
void multiply() {
double num1, num2;
printf("请输入两个数:\n");
scanf("%lf %lf", &num1, &num2);
printf("结果为:%.2lf\n", num1 * num2);
}
// 除法
void divide() {
double num1, num2;
printf("请输入两个数:\n");
scanf("%lf %lf", &num1, &num2);
if (num2 == ) {
printf("除数不能为!\n");
} else {
printf("结果为:%.2lf\n", num1 / num2);
}
}
// 进制转换
void convert() {
int num, base;
printf("请输入一个十进制数:\n");
scanf("%d", &num);
printf("请选择要转换的进制:\n");
printf("1. 二进制\n");
printf("2. 八进制\n");
printf("3. 十六进制\n");
scanf("%d", &base);
switch (base) {
case 1:
printf("结果为:%d\n", decimalToBinary(num));
break;
case 2:
printf("结果为:%o\n", num);
break;
case 3:
printf("结果为:%X\n", num);
break;
default:
printf("无效的选择!\n");
break;
}
}
// 十进制转二进制
int decimalToBinary(int num) {
int binary = , i = ;
while (num > ) {
binary += (num % 2) * pow(10, i);
num /= 2;
i++;
}
return binary;
}
// 加法(分数)
Fraction addFraction(Fraction f1, Fraction f2) {
Fraction result;
result.numerator = f1.numerator * f2.denominator + f2.numerator * f1.denominator;
result.denominator = f1.denominator * f2.denominator;
return result;
}
// 减法(分数)
Fraction subtractFraction(Fraction f1, Fraction f2) {
Fraction result;
result.numerator = f1.numerator * f2.denominator - f2.numerator * f1.denominator;
result.denominator = f1.denominator * f2.denominator;
return result;
}
// 乘法(分数)
Fraction multiplyFraction(Fraction f1, Fraction f2) {
Fraction result;
result.numerator = f1.numerator * f2.numerator;
result.denominator = f1.denominator * f2.denominator;
return result;
}
// 除法(分数)
Fraction divideFraction(Fraction f1, Fraction f2) {
Fraction result;
result.numerator = f1.numerator * f2.denominator;
result.denominator = f1.denominator * f2.numerator;
return result;
}
// 加法(复数)
Complex addComplex(Complex c1, Complex c2) {
Complex result;
result.real = c1.real + c2.real;
result.imag = c1.imag + c2.imag;
return result;
}
// 减法(复数)
Complex subtractComplex(Complex c1, Complex c2) {
Complex result;
result.real = c1.real - c2.real;
result.imag = c1.imag - c2.imag;
return result;
}
// 乘法(复数)
Complex multiplyComplex(Complex c1, Complex c2) {
Complex result;
result.real = c1.real * c2.real - c1.imag * c2.imag;
result.imag = c1.real * c2.imag + c1.imag * c2.real;
return result;
}
// 除法(复数)
Complex divideComplex(Complex c1, Complex c2) {
Complex result;
double denominator = c2.real * c2.real + c2.imag * c2.imag;
result.real = (c1.real * c2.real + c1.imag * c2.imag) / denominator;
result.imag = (c1.imag * c2.real - c1.real * c2.imag) / denominator;
return result;
}
阅读全文