티스토리 뷰

C++

함수의 선언 및 호출

yoooon1212 2024. 12. 5. 11:34

 

함수 사용 이유

 

함수를 사용하지 않은 코드(2로 나눈다는 부분이 중복됨)

#include <iostream> 
using namespace std;

int main() {
	int a = 10;
	cout << "a의 값은" << a << "입니다" << endl;
	a = a / 2;
	cout << "a를 2로 나눈 값은" << a << "입니다" << endl;

	int b = 4;
	cout << "b의 값은" << b << "입니다" << endl;
	b = b / 2;
	cout << "b를 2로 나눈 값은" << b << "입니다" << endl;

	int c = 8;
	cout << "c의 값은" << c << "입니다" << endl;
	c = c / 2;
	cout << "c를 2로 나눈 값은" << c << "입니다" << endl;
	return 0;
}

 

 

함수를 사용한 코드(코드 재사용, 간편함)

#include <iostream> 
using namespace std;

void fun2(int x) {
	cout << "값은 " << x << "입니다" << endl;
	x = x / 2;
	cout << "2로 나눈 값은 " << x << "입니다" << endl;
}

int main() {
	int a = 10;
	fun2(a); // 함수 호출

	int b = 4;
	fun2(b); // 함수 호출

	int c = 8;
	fun2(c);
	return 0; // 함수 호출
}

 

출력 결과

함수를 사용한 코드와 사용하지 않은 코드

모두 동일한 결과값을 도출해냄

 

 

함수 선언 및 호출

함수 형식

float 계란후라이만들기(int 식용유, float 계란, char 소금){
    후라이팬에 식용유를 두른다;
    후라이팬에 계란을 깨뜨려 넣는다;
    소금으로 약간 간을 한다;
    return 계란후라이;
}

--> float : 자료형

--> 계란후라이만들기 : 함수명

--> return 계란후라이의 계란후라이는 float 자료형이어야 한다.

 

float 계란후라이만들기( ){
    return 계란후라이;
}

--> ( ) 입력값(매개변수)이 필요 없을 때는 아무것도 적지 않는다.

 

void 계란후라이만들기(int 식용유, float 계란, char 소금){
    후라이팬에 식용유를 두른다;
    후라이팬에 계란을 깨뜨려 넣는다;
    소금으로 약간 간을 한다;
}

--> return 값이 필요 없을 때 void를 쓰거나, 아무것도 적지 않는다.

 

 

함수 선언/ 구현/ 호출

 

함수 선언

- 함수 형태를 명시하는 것(이름, 입력, 출력)

- main 이전에 해야 함

 

함수 호출

#include <iostream> 
using namespace std;

float plus2(float x); // 함수 선언
// float : 출력
// plus2 : 이름
// float x : 입력

int main() {
	float a = 10;
	float b = plus2(a); // 함수 호출
	cout << "결과는 " << b << "입니다" << endl;
	return 0;
}

// { } 안에 함수 구현
float plus2(float x) {
	float result = x + 2;
	return result;
}

 

독립적인 기능 모듈화

- 프로그램을 단순하고 간결하게 표현

- 프로그램의 가독성을 높임

- 디버깅하기 편해짐

- 유지보수에 용이함

- 다른 프로그램 코딩 시 재활용 가능

 

함수 정의(구현)

- 함수 선언 부분 코드에서 세미콜론(;)을 제외한 나머지를 작성

- 중괄호 { } 안에 함수가 수행할 일을 작성

- main 이전에 정의를 하면 함수 선언을 생략해도 됨

=> 그러나, main 함수의 가독성이 떨어짐

 

 

실습 문제 1

#include <iostream> 
using namespace std;

float plus2(float x); // 함수 선언

int main() {
	float a = 10;
	float b = plus2(a);

	cout << "결과는 " << b;
	return 0;
}

// 함수 구현
float plus2(float x) {
	float result = x + 2;
	return result;
}

 

출력 결과

 

 

 

 

 

지역변수

- 함수에서 생성한 변수는 함수 사용이 끝나면 사라짐

- 함수 안에서만 사용할 수 있음

- 함수 사용이 끝나면 변수에 할당된 메모리를 다시 반환함(변수 인식을 못함)

 

 

코드 예시

main()에서의 a, b와 plus2 함수에서의 a, b는 서로 다른 존재이다.

'동명이인' 개념

#include <iostream> 
using namespace std;

int plus2(int a, int b); // 함수 선언

int main() {
	int a = 10;
	int b = 20;
	plus2(a, b);
	return 0;
}

// 함수 구현
int plus2(int a, int b) {
	int result;
	result = a + b;
	return result;
}

 

 

전역변수

- 함수 밖에서 선언된 변수

- 현재 프로그래밍 되고 있는 프로그램 안의 모든 함수에서 자유롭게 접근 가능

 

코드 예시

#include <iostream> 
using namespace std;

void order();
int number = 1;

int main() {
	order();
	order();
	number++;
	order();
	return 0;
}

void order() {
	cout << "손님의 주문번호는 " << number << "입니다" << endl;
	number++;
}

 

실행 결과

 

지역변수 전역변수 정적변수
함수 안에서 선언
변수가 선언된 함수에서만
사용 가능
함수가 끝나면 메모리를
반환함
함수 밖에서 선언
어떤 함수에서도 접근 가능
프로그램이 마칠 때까지
계속 메모리를 가짐
static
지역변수를 정적변수로 변환해주는 키워드
함수 실행이 끝나더라도 사라지지 않고 계속 유지됨
단 한 번만 생성되고 초기화함
함수가 재호출되어서 다시 초기화 코드를
만나더라도 이것을 무시함 

 

 

 

정적변수 코드 예시

#include <iostream> 
using namespace std;

void order();

int main() {
	order(); // 1
	order(); // 2
	order(); // 3
	return 0;
}

void order() {
	static int number = 1;

	cout << "손님의 주문번호는 " << number << "입니다" << endl;
	number++;
}

 

출력 결과

 

static은 한 번만 선언되고 초기화됨

첫 번째는 1로 초기화된 후 number++로 2가 됨

 

두 번째는 이미 생성하고 초기화된 상태라서

static 선언 코드 무시하고 바로 cout 출력된 후 number++로 3이 됨

 

세 번째도 이미 생성하고 초기화된 상태라서 

static 선언 코드 무시하고 바로 cout 출력됨

 

 

static 변수를 사용하지 않을 경우 

출력 결과 

 

 

실습 문제 1

0을 입력할 때까지 무한반복하여 두 수를 입력받고 두 수의 곱을 출력하는 프로그램을 만드세요
이때, 두 수를 곱할 때에는 함수를 사용하여 구현하세요
#include <iostream> 
using namespace std;

int func(int x, int y);

int main() {
	int a, b;
	int result;

	while (1) {
		cout << "곱셈 프로그램입니다" << endl;
		cout << "프로그램을 멈추려면 숫자 0을 입력하세요" << endl;
		cout << "첫번째 수 입력: ";
		cin >> a;

		if (a == 0)
			break;
            // return 0; 도 가능함

		cout << "두번째 수 입력: ";
		cin >> b;

		result = func(a, b);
		cout << "결과는 " << result << endl;
	}
	return 0;
}

int func(int x, int y) {
	return x * y;
}

 

출력 결과

 

 

 

 

실습 문제 2

4.32시간은 몇 시간, 분, 초인지 계산하는 프로그램을 함수 3개를 사용하여 구현하세요
#include <iostream> 
using namespace std;

int hour(double x);
int minute(double x);
int secs(double x);

int main() {
	double time = 4.32;
	int hh, mm, ss;

	hh = hour(time); // 4
	time -= hh; // 0.32 시간
	time = time * 60; // 분 단위로 변경
	mm = minute(time);
	time -= mm; 

	time = time * 60; // 초 단위로 변경
	ss = secs(time);

	cout << "4.32시간은 " << hh << "시간 " << mm << "분 " << ss << "초 입니다";
	return 0;
}


// 시, 분, 초 --> 함수 생성
int hour(double x) {
	int h;
	h = (int)x; // 4.32 시간 --> 4 (int)로 형변환
	return h;
}

int minute(double x) {
	int m;
	m = (int)x; 
	return m;
}

int secs(double x) {
	int s;
	s = (int)x; 
	return s;
}

 

출력 결과

 

'C++' 카테고리의 다른 글

문자열  (0) 2024.12.06
배열의 선언과 접근 및 반복문  (0) 2024.12.05
반복문(while, do while)  (0) 2024.12.05
반복문(for, 이중 for문 - 별찍기)  (0) 2024.10.21
조건문(if, if else, else if)  (0) 2024.10.12
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함