C언어 산술 계산기 - ceon-eo sansul gyesangi

C언어를 공부하다 보면 제어문(반복문, 조건문)에서 상단한 연습이 필요한 부분이 많습니다. for문이나 if문의 경우는 워낙 다른 언어에서도의 사용빈도가 높아 익숙하지만 switch case문의 경우 C언어 이외에서는 사용빈도가 낮아 쉽게 까먹곤합니다.

 '깔끔하지 않은 코드는 의미가 없다'라는 말이 있듯이 조건문을 switch case문을 이용하여 더욱 깔끔하게 코딩할 수 있다면 당연히 switch case문을 사용하는 것이 맞다고 생각합니다. 그렇기 때문에 switch case문 또한 확실히 익혀 두는 것이 좋습니다.

 오늘은 switch case문의 기본예제인 사칙연산 계산기 만들기를 소개하려고 합니다.

C언어 산술 계산기 - ceon-eo sansul gyesangi

[코드]

#include<stdio.h>
 
int main( void ){
	int num1 = 0;
	int num2 = 0;
	int value = 0;
	char a = 0;
 
	printf( "수식을 입력하시오 : " );
	scanf( "%d %c %d", &num1, &a, &num2 );
 
	switch(a){  //char a의 값에 따라서 case를 설정
	case '+'//char a의 값이 +일경우 +연산을 한다.
		value = num1 + num2;
		printf( "%d %c %d = %d", num1, a, num2, value );
		break;
	case '-'//char a의 값이 -일경우 -연산을 한다.
		value = num1 - num2;
		printf( "%d %c %d = %d", num1, a, num2, value );
		break;
	case '*':  //char a의 값이 *일경우 *연산을 한다.
		value = num1 * num2;
		printf( "%d %c %d = %d", num1, a, num2, value );
		break;
	case '/':  //char a의 값이 /일경우 /연산을 한다.
		printf( "%d/%d = %lf", num1, num2, (double)num1/num2 );
		break;
	default:
		printf( "계산할 수 없음" );
		break;
	}
 
	return 0;
}

[결과]

※공감은 블로거에게 큰힘이 됩니다.

#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;
}

TAG