[C] 계산기 프로그램 (사칙연산, 삼각함수, 거듭제곱, 진법변환)
2021. 11. 20. 22:45ㆍC
728x90
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
//연산기호 문자상수를 정의함
#define Mul 42
#define Plus 43
#define Minus 45
#define Div 47
#define PI 3.1415926535
#define Inv 94
//계산기 프로그램 종료
void Finish()
{
char select;
printf("\n계산기 프로그램을 종료하려면 n(N), 계속 하려면 y(Y)를 입력해주세요.\n");
printf("입력 : ");
scanf(" %c", &select);
if (select == 'n' || select == 'N') //사용자가 종료를 원해서 N을 입력했을 때
{
printf("\n사칙연산 계산기가 종료되었습니다.\n");
exit(0);
}
else if (select == 'y' || select == 'Y') // Y를 입력해서 계산기 프로그램을 계속 실행할 때
{
printf("\n계산기 프로그램을 계속 실행합니다.\n");
printf("\n=====================================================================\n");
}
else // Y와 N이 아닌 키를 입력했을 때
{
printf("\n보기에 없는 입력을 하셨습니다.\n다시 선택해주세요.\n");
//계산기 프로그램을 종료할 건지 물어보는 함수 호출
Finish();
}
}
//사칙연산
void Arithmetic()
{
int num1, num2, result;
char operator = 0;
//사칙연산을 수행하기 위한 방법 소개
printf("\n사칙연산을 수행할 연산식을 입력해주세요.\n(+, -, *, /)\n");
printf("(입력 예시) 102 + 308 [엔터]\n");
printf("입력 : ");
scanf(" %d %c %d", &num1, &operator, &num2); //연산식 입력
//사칙연산 수행
if (operator == 43) {
result = num1 + num2;
printf("\n%d + %d = %d\n", num1, num2, result); //덧셈
}
else if (operator == 45) {
result = num1 - num2;
printf("\n%d - %d = %d\n", num1, num2, result); //뺄셈
}
else if (operator == 42) {
result = num1 * num2;
printf("\n%d × %d = %d\n", num1, num2, num1 * num2); //곱셈
}
else if (operator == 47) {
result = num1 / num2;
printf("\n%d ÷ %d = %.2f\n", num1, num2, (double)result); //나눗셈
}
}
//삼각함수를 구하기 위한 함수
double getRadian(int num)
{
return num * (PI / 180);
}
//삼각함수
void Trigonometrical()
{
int formula;
double num, result;
char select;
printf("\n삼각함수 계산을 합니다. 원하는 기능을 선택해주세요.\n");
printf("1. sin\n2. cos\n3. tan\n");
printf("\n선택 : ");
scanf(" %c", &select);
switch (select) {
case '1':
//sin 계산을 위한 안내
printf("\nsin 함수값을 계산합니다.\n계산을 원하는 값을 입력해주세요.\n");
printf("90을 입력하면 sin(90)이 계산됩니다.\n");
printf("\n입력 : ");
scanf(" %d", &formula);
//sin 계산
num = getRadian(formula); //계산을 위한 함수 호출
result = sin(num);
printf("\nsin(%d)는 %f입니다.\n", formula, result);
break;
case '2':
//cos 계산을 위한 안내
printf("\ncos 함수값을 계산합니다.\n계산을 원하는 값을 입력해주세요.\n");
printf("90을 입력하면 cos(90)이 계산됩니다.\n");
printf("\n입력 : ");
scanf(" %d", &formula);
//cos 계산
num = getRadian(formula); //계산을 위한 함수 호출
result = cos(num);
printf("\ncos(%d)는 %f입니다.\n", formula, result);
break;
case '3':
//tan 계산을 위한 안내
printf("\ntan 함수값을 계산합니다.\n계산을 원하는 값을 입력해주세요.\n");
printf("90을 입력하면 tan(90)이 계산됩니다.\n");
printf("\n입력 : ");
scanf(" %d", &formula);
//tan 계산
num = getRadian(formula); //계산을 위한 함수 호출
result = tan(num);
printf("\ntan(%d)는 %f입니다.\n", formula, result);
break;
}
}
//거듭제곱
void Involution()
{
unsigned long long temp = 0, num1, num2;
char operator = 0;
//거듭제곱을 수행하기 위한 방법 소개
printf("\n거듭제곱을 계산할 연산식을 입력해주세요.\n");
printf("(2의 10제곱의 입력 예시) 2 ^ 10 [엔터]\n\n");
printf("입력 : ");
scanf("%lld %c %lld", &num1, &operator, &num2);
temp = num1;
//거듭제곱을 하는 함수
if (num2 == 0)
num1 = 1;
if (num2 % 2 == 0)
{
//n제곱을 할 수가 짝수일 때
num1 = pow((num1 * num1), (num2 / 2));
}
else
{
//n제곱을 할 수가 홀수일 때
num1 = num1 * pow((num1 * num1), ((num2 - 1) / 2));
}
printf("%llu의 %llu 제곱은 %llu입니다.\n", temp, num2, num1);
}
//2진법으로 변환
void Binary(int num)
{
int binary[50] = { 0, };
int i, position = 0;
while (1)
{
binary[position] = num % 2; // 2로 나누었을 때 나머지를 배열에 저장
num = num / 2; // 2로 나눈 몫을 저장
position++; // 자릿수 변경
if (num == 0) // 몫이 0이 되면 반복을 끝냄
break;
}
// 배열의 요소를 역순으로 출력
for (i = position - 1; i >= 0; i--)
{
printf("%d", binary[i]);
}
}
//진법변환
void Numeral()
{
int formula, select;
//진법변환을 수행하기 위한 방법 소개
printf("\n진법을 변환할 수를 입력해주세요.\n");
printf("(입력 예시) 100 [엔터]\n");
printf("입력 : ");
scanf(" %d", &formula);
printf("\n몇 진법으로 변환할지 원하는 진법을 선택해주세요.\n");
printf("1. 2진수\n2. 8진수\n3. 16진수\n");
printf("입력 : ");
scanf(" %d", &select);
if (select == 1) {
printf("\n%d를 2진수로 표현하면 ", formula);
Binary(formula); //2진법으로 변환하는 함수를 호출
printf("입니다.\n");
}
else if (select == 2) { //8진수로 변환
printf("\n%d를 8진수로 표현하면 %o입니다.\n", formula, formula);
}
else if (select == 3) { //16진수로 변환
printf("\n%d를 16진수로 표현하면 %x입니다.\n", formula, formula);
}
}
int main()
{
char select;
//계산기 소개
printf("<MultiFunction Calculator Program >\n다기능 계산을 수행하는 계산기입니다.");
while (1)
{
//원하는 계산 종류 선택
printf("\n원하는 기능을 선택하세요.\n");
printf("1. 사칙연산\n2. 삼각함수\n3. 거듭제곱\n4. 진법변환\nx. 종료\n\n");
printf("선택 : ");
scanf(" %c", &select);
switch (select) {
case '1':
Arithmetic(); //사칙연산을 하는 함수를 호출
break;
case '2':
Trigonometrical(); //삼각함수 계산을 하는 함수를 호출
break;
case '3':
Involution(); //거듭제곱을 하는 함수를 호출
break;
case '4':
Numeral(); //진법변환을 하는 함수를 호출
break;
case 'x':
Finish(); //프로그램을 종료할 건지 물어보는 함수 호출
default:
printf("\n보기에서 없는 키를 입력하셨습니다.\n");
Finish(); //프로그램을 종료할 건지 물어보는 함수 호출
}
Finish(); //프로그램을 종료할 건지 물어보는 함수 호출
}
return 0;
}
728x90
'C' 카테고리의 다른 글
[C] 전화번호부 프로그램 (연결리스트 이용) (0) | 2021.11.20 |
---|---|
[C] 패스워드 생성 및 확인 프로그램 (0) | 2021.11.20 |
[C] 자판기 프로그램 (0) | 2021.11.20 |
[C] 스택을 이용해서 문자열의 괄호 검사 (0) | 2021.11.20 |
[C] 구조체 포인터 + 동적할당 + 파일입출력 을 이용해서 학생 성적표 만들기 (0) | 2021.11.20 |