c언어 함수와 do~while을 활용한 무한반복 계산기 만들기!

안녕하세요. 홍지군입니다. 주말 사람이 많지 않은 곳에서 바다와 맑은 공기를 마시고 돌아왔습니다. 

오늘은 지난번에 배운 것들을 잘 조합해서 계속해서 실행시킬 수 있는 무한반복 할 수 있는 계산기를 만들어보겠습니다. 지금까지 만들어 봤던 소스코드 보다 길어지기는 했지만 하나하나 뜯어보면 쉽게 이해하실 수 있을거에요.

 

값 입력받기

지금까지는 scanf() 함수를 활용해서 계산식을 만들때 2개 또는 3개의 정수만을 입력받아 계산식을 작성했었습니다. 이번 하지만 이번 계산식에는 사칙연산기호까지 입력을 받아 해당 연산기호에 맞는 계산식을 수행하도록 할 예정입니다. 

 

먼저 값을 입력받는 소스를 한번 살펴보겠습니다. 

int num1, num2; // 정수를 입력받을 변수 num1과 num2를 선언 
char sa;     // 사칙연산을 입력받을 문자 변수 sa를 선언 
    
    printf("원하는 계산식을 입력하세요! :");   
		scanf("%d  %c %d", &num1, &sa ,&num2);  // scanf()로 입력받는 순선 정수, 문자, 숫자

소스 코드에서 뜯어와 살펴보면  계산을 할 두개의 정수를 num1과 num2 변수와 사칙연산을 할 문자 변수 sa를 선언해줍니다.! 입력받는 순서는 정수 문자 정수(32 + 5)순서로 입력받습니다. 

 

계산식을 수행하는 함수만들기 및 호출하기

32 + 5를 입력받았습니다. 이 입력은 어떻게 처리가 될까?

1	// 더하기 sum 함수 만들기 
2	void sum(int num1, int num2) {   
3
4		int result = num1 + num2;
5
6		printf("%d + %d = %d\n", num1, num2, result);
7
8
9	}
10
11  //-------------------scanf()입력(생략)-----------------------
12
13	if (sa == '+') { // scanf()로 입력받은 문자변수 sa가 + 와 같은지 비교
14	 	sum(num1, num2);   //위에서 만들었던 sum함수에 입력받은 num1과 num2를 전달하여 호출
15	}

위의 소스코드의 흐름에 대해서 살펴보겠습니다. 11라인에서 이미 scanf()함수를 사용했다고 가정하고 생략했습니다. 

 

13라인의 (sa == '+') 입력받은 문자 변수가 +와 같은지 비교를 하고 만약 +가 같다면 14라인의 sum(num1, num2)를 실행합니다. 

14라인의 sum의 인자값으로는 sum(32,5)를 전달하게 됩니다. 

 

2라인의 정수 반환형의 sum 함수의 num1과 num2에 각각 32와 5를 전달받습니다. 

4라인에서 1과 2를 저장해서 반환시킬 정수를 선언합니다. 

6라인에서 num1값과 num2값 그리고 결과값을 보여주고 결과값은 반환하지 않고 sum함수를 끝냅니다. 

 

계속하여 실행할 수 있는 do ~ while 반복문 
	do {
		printf("원하는 계산식을 입력하세요! :");
		scanf("%d  %c %d", &num1, &sa ,&num2);

		if (sa == '+') {
			sum(num1, num2);   // 변수sa가 +와 같으면 sum함수 실행 
		}
		else if (sa == '-') {
			minus(num1, num2);  // 변수sa가 -와 같으면 minus함수 실행 
		}
		else if (sa == '*') {
			multiply(num1, num2);  // 변수sa가 *와 같으면 multiply함수 실행 
		}
		else if (sa == '/') {
			division(num1, num2);  // 변수sa가 /와 같으면 division함수 실행 
		}
		else if (sa == '%' ){
			quotient(num1, num2);  // 변수sa가 %와 같으면 quotient함수 실행 
		}
		else {  
			printf("잘못된 계산식입니다.\n");  // 사칙연산이 아니라면 잘못된 계산식입니다 출력
		}

		printf("계산식을 계속 하시려면 c를 입력하세요.: ");  
		scanf(" %c", &re);  // scanf() 함수로 문자를 입력받습니다. 

	} while (re == 99 );  // 입력받은 문자변수re의 아스키 코드 값이 == 99와 같으면 반복문을 실행합니다.

사칙연산이 아니라면 ? printf("잘못된 계산식입니다.\n");를 실행시킵니다. 그리고 다시 계산식을 수행하고 싶다면 c를 입력하세요라고 하고 scanf()함수로 문자를 입력받습니다. 소문자 c의 아스키코드 값은 99이기 때문에 while의 조건문에서 re == 99와 같으면 반복문을 수행하고 만약 다른 문자를 입력했다면 while문을 끝내게 됩니다. 

 

전체 소스코드 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

// 더하기 영역 
void sum(int num1, int num2) {

	int result = num1 + num2;

	printf("%d + %d = %d\n", num1, num2, result);

}
// 빼기 영역
void minus(int num1, int num2){

	int result = num1 - num2;

	printf("%d - %d = %d\n", num1, num2, result);

}

// 곱하기 영역
void multiply (int num1, int num2) {

	int result = num1 * num2;

	printf("%d * %d = %d\n", num1, num2, result);
}
// 나누기 영역 
void division(int num1, int num2) {

	int result = num1 / num2;

	printf("%d / %d = %d\n", num1, num2, result);

}

// 나머지 영역 
void quotient(int num1, int num2) {

		int result = num1 % num2;

		printf("%d %% %d = %d\n", num1, num2, result);
}

void main(void) {

	int num1, num2;
	char sa, re; 


	do {
		printf("원하는 계산식을 입력하세요! :");
		scanf("%d  %c %d", &num1, &sa ,&num2);

		if (sa == '+') {
			sum(num1, num2);
		}
		else if (sa == '-') {
			minus(num1, num2);
		}
		else if (sa == '*') {
			multiply(num1, num2);
		}
		else if (sa == '/') {
			division(num1, num2);
		}
		else if (sa == '%' ){
			quotient(num1, num2);
		}
		else {
			printf("잘못된 계산식입니다.\n");
		}

		printf("계산식을 계속 하시려면 c를 입력하세요.: ");
		scanf(" %c", &re);

	} while (re == 99 );
}

 

계속해서 수행할 수 있는 계산식을 만들어봤습니다. 이 처럼 소스가 길어지게 될때 하나하나씩 함수로 나눠서 공략을 하게되면 쉽게 프로그램을 만들 수 있게 됩니다. 처음에는 더하기만 반복하는 함수를 만들고 빼기, 곱하기, 나누기 순서대로 하나하나 추가해보시면 됩니다.

 

댓글

Designed by JB FACTORY