null
vuild_
Nodes
Flows
Hubs
Login
MENU
Notifications
Login
☆ Star
프로젝트: 사칙연산 계산기
#c
#c-lang
#beginner
#project
#calculator
@devpc
|
2026-03-29 05:37:21
|
GET /api/v1/nodes/40?nv=2
History:
v2 (2026-03-29) (Latest)
v1 (2026-03-29)
0
Views
0
Calls
# 프로젝트: 사칙연산 계산기 ## 프로젝트 개요 지금까지 배운 내용을 활용해 **콘솔 계산기**를 만듭니다. | 기능 | 사용 개념 | |------|-----------| | 사칙연산 (+, -, *, /) | 산술 연산자 | | 연산 선택 | switch 문 | | 반복 입력 | do-while 반복문 | | 0 나눗셈 처리 | if 조건문 | | 기능 분리 | 함수 | --- ## 최종 목표 화면 ``` ============================== 간단 계산기 ============================== 첫 번째 숫자: 10 연산자 (+, -, *, /, %): * 두 번째 숫자: 3 ------------------------------ 결과: 10 * 3 = 30 ============================== 계속 계산하시겠습니까? (y/n): y 첫 번째 숫자: 9 연산자 (+, -, *, /, %): / 두 번째 숫자: 0 ------------------------------ 오류: 0으로 나눌 수 없습니다. ============================== 계속 계산하시겠습니까? (y/n): n 계산기를 종료합니다. ``` --- ## 단계별 구현 ### 단계 1 — 기본 계산기 (switch) 먼저 한 번의 계산만 되는 버전을 만듭니다. ```c #include <stdio.h> int main() { double a, b; char op; printf("첫 번째 숫자: "); scanf("%lf", &a); printf("연산자: "); scanf(" %c", &op); // 앞 공백으로 버퍼의 \n 건너뜀 printf("두 번째 숫자: "); scanf("%lf", &b); switch (op) { case '+': printf("결과: %.2f\n", a + b); break; case '-': printf("결과: %.2f\n", a - b); break; case '*': printf("결과: %.2f\n", a * b); break; case '/': if (b == 0) { printf("오류: 0으로 나눌 수 없습니다.\n"); } else { printf("결과: %.2f\n", a / b); } break; default: printf("알 수 없는 연산자입니다.\n"); } return 0; } ``` --- ### 단계 2 — 함수로 분리 계산 로직을 함수로 분리해 구조를 개선합니다. ```c #include <stdio.h> // 함수 선언 void print_header(); void get_input(double *a, char *op, double *b); void calculate(double a, char op, double b); void print_result(double a, char op, double b, double result); int main() { double a, b; char op; print_header(); get_input(&a, &op, &b); calculate(a, op, b); return 0; } void print_header() { printf("==============================\n"); printf(" 간단 계산기\n"); printf("==============================\n"); } void get_input(double *a, char *op, double *b) { printf("첫 번째 숫자: "); scanf("%lf", a); printf("연산자 (+, -, *, /, %%): "); scanf(" %c", op); printf("두 번째 숫자: "); scanf("%lf", b); printf("------------------------------\n"); } void calculate(double a, char op, double b) { double result; switch (op) { case '+': result = a + b; break; case '-': result = a - b; break; case '*': result = a * b; break; case '/': if (b == 0) { printf("오류: 0으로 나눌 수 없습니다.\n"); return; } result = a / b; break; case '%': if ((int)b == 0) { printf("오류: 0으로 나눌 수 없습니다.\n"); return; } result = (int)a % (int)b; break; default: printf("알 수 없는 연산자: %c\n", op); return; } // 정수 결과면 정수로, 아니면 소수로 출력 if (result == (int)result) printf("결과: %.0f %c %.0f = %.0f\n", a, op, b, result); else printf("결과: %.2f %c %.2f = %.2f\n", a, op, b, result); } ``` --- ### 단계 3 — 반복 입력 (최종 버전) `do-while`로 계속 계산할 수 있게 합니다. ```c #include <stdio.h> void print_header(); void get_input(double *a, char *op, double *b); void calculate(double a, char op, double b); int main() { double a, b; char op; char again; print_header(); do { get_input(&a, &op, &b); calculate(a, op, b); printf("==============================\n"); printf("계속 계산하시겠습니까? (y/n): "); scanf(" %c", &again); printf("\n"); } while (again == 'y' || again == 'Y'); printf("계산기를 종료합니다.\n"); return 0; } void print_header() { printf("==============================\n"); printf(" 간단 계산기\n"); printf("==============================\n"); } void get_input(double *a, char *op, double *b) { printf("첫 번째 숫자: "); scanf("%lf", a); printf("연산자 (+, -, *, /, %%): "); scanf(" %c", op); printf("두 번째 숫자: "); scanf("%lf", b); printf("------------------------------\n"); } void calculate(double a, char op, double b) { double result; switch (op) { case '+': result = a + b; break; case '-': result = a - b; break; case '*': result = a * b; break; case '/': if (b == 0) { printf("오류: 0으로 나눌 수 없습니다.\n"); return; } result = a / b; break; case '%': if ((int)b == 0) { printf("오류: 0으로 나눌 수 없습니다.\n"); return; } result = (int)a % (int)b; break; default: printf("알 수 없는 연산자: %c\n", op); return; } if (result == (int)result) printf("결과: %.0f %c %.0f = %.0f\n", a, op, b, result); else printf("결과: %.2f %c %.2f = %.6g\n", a, op, b, result); } ``` --- ## 컴파일 및 실행 ```bash gcc calculator.c -o calculator ./calculator # Linux / macOS calculator.exe # Windows ``` --- ## 추가 도전 과제 기본 계산기를 완성했다면 아래 기능을 직접 추가해보세요! | 난이도 | 도전 과제 | |--------|-----------| | ⭐ | 거듭제곱 연산 (`^`) 추가 | | ⭐⭐ | 계산 이력 저장 (배열 활용) | | ⭐⭐ | 괄호 없는 수식 파싱 (`3 + 4 * 2` 형태) | | ⭐⭐⭐ | 공학용 계산기 (sin, cos, sqrt) | --- ## 커리큘럼 완료 🎉 축하합니다! C언어 입문 과정을 모두 마쳤습니다. **배운 내용 요약:** - 변수, 자료형, 연산자 - 입출력 (printf, scanf) - 제어 흐름 (if-else, switch, 삼항 연산자) - 반복문 (for, while, do-while) - 함수 (정의, 매개변수, 재귀) - 배열 (1차원, 2차원) - 문자열 (기초, 함수) - 실전 프로젝트 (계산기) **다음에 배울 것들:** - 포인터 (pointer) - 구조체 (struct) - 동적 메모리 할당 (malloc, free) - 파일 입출력 - 전처리기 (preprocessor)
// COMMENTS
ON THIS PAGE