用c语言模拟Windows中的计算器程序,实现基本数学运算、数学函数、进制转换等功能:加、减、乘、除、阶乘、正弦、余弦、开平方、指数、对数运算,十进制数、二进制数、八进制数、十六进制之间的相互转换。要求以菜单形式选择需要进行的运算。
时间: 2023-10-31 18:07:14 浏览: 130
C语言程序设计 - 简单的计算器.pdf
以下是用C语言模拟Windows中的计算器程序的代码,实现基本数学运算、数学函数、进制转换等功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// 函数声明
void displayMenu();
void add();
void subtract();
void multiply();
void divide();
void factorial();
void sinFunc();
void cosFunc();
void sqrtFunc();
void expFunc();
void logFunc();
void decToBin();
void decToOct();
void decToHex();
void binToDec();
void octToDec();
void hexToDec();
// 主函数
int main()
{
int choice;
do {
displayMenu();
printf("请输入您的选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
add();
break;
case 2:
subtract();
break;
case 3:
multiply();
break;
case 4:
divide();
break;
case 5:
factorial();
break;
case 6:
sinFunc();
break;
case 7:
cosFunc();
break;
case 8:
sqrtFunc();
break;
case 9:
expFunc();
break;
case 10:
logFunc();
break;
case 11:
decToBin();
break;
case 12:
decToOct();
break;
case 13:
decToHex();
break;
case 14:
binToDec();
break;
case 15:
octToDec();
break;
case 16:
hexToDec();
break;
case 0:
printf("感谢使用,再见!\n");
break;
default:
printf("无效的选择,请重新输入!\n");
break;
}
} while (choice != 0);
return 0;
}
// 显示菜单
void displayMenu()
{
printf("==============================\n");
printf("1.加法\n");
printf("2.减法\n");
printf("3.乘法\n");
printf("4.除法\n");
printf("5.阶乘\n");
printf("6.正弦\n");
printf("7.余弦\n");
printf("8.开平方\n");
printf("9.指数\n");
printf("10.对数\n");
printf("11.十进制转二进制\n");
printf("12.十进制转八进制\n");
printf("13.十进制转十六进制\n");
printf("14.二进制转十进制\n");
printf("15.八进制转十进制\n");
printf("16.十六进制转十进制\n");
printf("0.退出\n");
printf("==============================\n");
}
// 加法
void add()
{
double num1, num2, result;
printf("请输入两个数:");
scanf("%lf %lf", &num1, &num2);
result = num1 + num2;
printf("结果为:%.2lf\n", result);
}
// 减法
void subtract()
{
double num1, num2, result;
printf("请输入两个数:");
scanf("%lf %lf", &num1, &num2);
result = num1 - num2;
printf("结果为:%.2lf\n", result);
}
// 乘法
void multiply()
{
double num1, num2, result;
printf("请输入两个数:");
scanf("%lf %lf", &num1, &num2);
result = num1 * num2;
printf("结果为:%.2lf\n", result);
}
// 除法
void divide()
{
double num1, num2, result;
printf("请输入两个数:");
scanf("%lf %lf", &num1, &num2);
if (num2 == 0) {
printf("除数不能为0!\n");
return;
}
result = num1 / num2;
printf("结果为:%.2lf\n", result);
}
// 阶乘
void factorial()
{
int num, i;
long long result = 1;
printf("请输入一个正整数:");
scanf("%d", &num);
if (num < 0) {
printf("无效的输入!\n");
return;
}
for (i = 1; i <= num; i++) {
result *= i;
}
printf("%d的阶乘为:%lld\n", num, result);
}
// 正弦
void sinFunc()
{
double num, result;
printf("请输入一个角度(单位:度):");
scanf("%lf", &num);
result = sin(num * M_PI / 180);
printf("sin(%.2lf) = %.2lf\n", num, result);
}
// 余弦
void cosFunc()
{
double num, result;
printf("请输入一个角度(单位:度):");
scanf("%lf", &num);
result = cos(num * M_PI / 180);
printf("cos(%.2lf) = %.2lf\n", num, result);
}
// 开平方
void sqrtFunc()
{
double num, result;
printf("请输入一个非负实数:");
scanf("%lf", &num);
if (num < 0) {
printf("无效的输入!\n");
return;
}
result = sqrt(num);
printf("sqrt(%.2lf) = %.2lf\n", num, result);
}
// 指数
void expFunc()
{
double num, result;
printf("请输入一个实数:");
scanf("%lf", &num);
result = exp(num);
printf("exp(%.2lf) = %.2lf\n", num, result);
}
// 对数
void logFunc()
{
double num, result;
printf("请输入一个正实数:");
scanf("%lf", &num);
if (num <= 0) {
printf("无效的输入!\n");
return;
}
result = log(num);
printf("log(%.2lf) = %.2lf\n", num, result);
}
// 十进制转二进制
void decToBin()
{
int num, i, j, k;
int bin[32];
printf("请输入一个十进制整数:");
scanf("%d", &num);
if (num < 0) {
printf("无效的输入!\n");
return;
}
i = 0;
while (num > 0) {
bin[i++] = num % 2;
num /= 2;
}
printf("转换为二进制数为:");
for (j = i - 1; j >= 0; j--) {
printf("%d", bin[j]);
}
printf("\n");
}
// 十进制转八进制
void decToOct()
{
int num, i, j, k;
int oct[32];
printf("请输入一个十进制整数:");
scanf("%d", &num);
if (num < 0) {
printf("无效的输入!\n");
return;
}
i = 0;
while (num > 0) {
oct[i++] = num % 8;
num /= 8;
}
printf("转换为八进制数为:");
for (j = i - 1; j >= 0; j--) {
printf("%d", oct[j]);
}
printf("\n");
}
// 十进制转十六进制
void decToHex()
{
int num, i, j, k;
char hex[32];
printf("请输入一个十进制整数:");
scanf("%d", &num);
if (num < 0) {
printf("无效的输入!\n");
return;
}
i = 0;
while (num > 0) {
k = num % 16;
if (k < 10) {
hex[i++] = k + '0';
} else {
hex[i++] = k - 10 + 'A';
}
num /= 16;
}
printf("转换为十六进制数为:");
for (j = i - 1; j >= 0; j--) {
printf("%c", hex[j]);
}
printf("\n");
}
// 二进制转十进制
void binToDec()
{
int num, i, j, k;
int dec = 0, base = 1;
printf("请输入一个二进制数:");
scanf("%d", &num);
if (num < 0) {
printf("无效的输入!\n");
return;
}
while (num > 0) {
k = num % 10;
if (k != 0 && k != 1) {
printf("无效的输入!\n");
return;
}
dec += k * base;
base *= 2;
num /= 10;
}
printf("转换为十进制数为:%d\n", dec);
}
// 八进制转十进制
void octToDec()
{
int num, i, j, k;
int dec = 0, base = 1;
printf("请输入一个八进制数:");
scanf("%d", &num);
if (num < 0) {
printf("无效的输入!\n");
return;
}
while (num > 0) {
k = num % 10;
if (k >= 8) {
printf("无效的输入!\n");
return;
}
dec += k * base;
base *= 8;
num /= 10;
}
printf("转换为十进制数为:%d\n", dec);
}
// 十六进制转十进制
void hexToDec()
{
char hex[32];
int num, i, j, k;
int dec = 0, base = 1;
printf("请输入一个十六进制数:");
scanf("%s", hex);
for (i = 0; hex[i] != '\0'; i++) {
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;
} else {
printf("无效的输入!\n");
return;
}
dec = dec * 16 + num;
}
printf("转换为十进制数为:%d\n", dec);
}
```
以上代码实现了基本数学运算、数学函数、进制转换等功能,并以菜单形式选择需要进行的运算。
阅读全文