5. C/C++ 함수 기초

C++ 언어 2020. 11. 23. 15:55
반응형

 

edukoi.tistory.com/97?category=894960

 

2. C/C++ 함수 - 인수 전달 방법

함수란 무엇인가? 함수는 자주 사용하는 코드를 묶어 놓은 거라고 할 수 있습니다. 예를 들면 두 수를 입력해서 두 수의 합을 구하는 프로그램을 작성한다고 하면, 간단히 한 줄로 코딩 할 수 있

edukoi.tistory.com

 

1. 사용자 정의 함수란(User Define Function) ?

  ★ 프로그램 작성자가 직접 만들어 사용하는 일종의 부 프로그램(Sub Program)으로 구조화 프로그램의 기본 단위가 됩니다.

 

[ 함수 실습 예제1 ]

 [ 함수 실습 예제 1-1 ] 함수로 분리하지 않는 경우

#include <cstdio>
int main()
{
	printf("aaa\n");
	printf("sub 함수 호출됨\n");
	printf("sub 함수 실행중\n");
	printf("sub 함수 종료됨\n");
	
	printf("bbb\n");
	printf("sub 함수 호출됨\n");
	printf("sub 함수 실행중\n");
	printf("sub 함수 종료됨\n");
	
	printf("ccc\n");
	printf("sub 함수 호출됨\n");
	printf("sub 함수 실행중\n");
	printf("sub 함수 종료됨\n");
	return 0;
}

[ 함수 실습 예제 1-2 ] 함수로 분리한 경우

#include <cstdio>
int main()
{
	printf("출력 1\n");
	sub();               //함수호출 
	printf("출력 2\n");
	sub();              //함수호출 
	printf("출력 3\n");
	sub();              //함수호출 
	return 0;
}
void sub()
{
	printf("sub 함수 호출됨\n");
	printf("sub 함수 실행중\n");
	printf("sub 함수 종료됨\n");
}
// 에러 발생함

★ 프로그램 중간 중간에 같은 내용이 반복되는 경우 [ 함수 실습 예제 1-1] 과 같이 전부 기술하면 프로그램이 길어지게 됩니다. [ 함수 실습 예제 1-2 ] 예제와 같이 분리해서 적어놓고 호출해 사용하는 것이 효율적인 프로그램이 되고 재사용도 편리하게 됩니다.

 

★ [ 함수 실습 예제 1-2 ]에서 sub();를  "sub함수를 호출한다"라고 하고 함수가 호출되면 현재 위치 main함수의 실행을 잠시 멈추고 호출된 함수(sub함수)의 본체의 내용이 실행됩니다. 호출된 함수의 실행이 끝나면 호출된 곳 (main함수) 으로 되돌아와서 차례로 실행합니다. 이때 되돌아오는 것을 "복귀한다"라고 합니다.

 

★ 이제부터는 프로그램을 함수 단위로 작성하는 숙달을 해야 합니다. 함수로 분리하지 않고 작성하는 것이 쉬워 보이더라도 무조건 함수로 분리하여 작성하세요.

 

2. 함수의 위치

1) C/C++에서 함수의 위치는 main 함수의 위쪽이나 아래쪽 어디에 위치해도 상관이 없습니다.

2) 우리들이 작성한 프로그램은 일단 컴퓨터가 사용하는 기계어로 번역(Compile) 되는데 Compile 은 위에서 아래로 한 행식 번역됩니다.  [ 함수 실습 예제 1-2 ] 를 컴파일 시키면 위부터 한 행식 번역하다가 sub 함수를 호출하는 "sub();"를 만나면 "sub : undeclared identifier" error를 발생시킵니다.

  그 이유는 Compiler가 아래쪽의 sub함수 부분을 읽어보지 않은 상태이므로 sub()가 아직 선언이 되지 않은 것으로 인식하기 때문입니다. 사람이 직접 번역한다면 아래쪽 부분을 살펴보고 sub()가 여기 있으니까 번역을 하겠지만 컴퓨터는 모든 것을 단순하게 처리하고 위에서 아래로 한 줄씩밖에는 못 보니까 아래쪽에 sub()를 보지 못하고 Error를 발생시킵니다.

3) 이런 경우를 방지하려면 첫째 : main() 함수 위에 sub 함수를 위치시키면 됩니다.

4) 둘째 : 함수를 선언해 주면 됩니다 main 함수 위에 void sub(); 을 추가해 주면 됩니다.

 

[ 함수 실습 예제2 ] 인수가 없는 함수

#include<stdio.h>
void sub1 (void);
void sub2 (void);
void sub3 (void);
int main (void)
{
	printf("프로그램 시작\n");
	printf("sub1() 호출\n");
	sub1();
	
	printf("sub2() 호출\n");
	sub2();
	
	printf("sub3() 호풀\n");
	sub3();
	
	printf("프로그램 끝\n");
}
void sub1(void)
{
	printf("sub1 함수 실행 중\n");
}
void sub2(void)
{
	printf("sub2 함수 실행 중\n");
	printf("sub2() 에서 sub3() 호출\n");
	sub3();
	printf("sub2 함수 끝\n");
}
void sub3(void)
{
	printf("sub3 함수 실행 중\n");
	//함수가 종료되면 자신을 호출했던 곳으로 되돌아 감
}

 

[ 함수 실습 예제3 ] 인수를 사용한 함수 호출

#include<stdio.h>
void Sub1(int val);
void Sub2(int val1, int val2);
int main(void)
{
	printf("프로그램 시작\n");
 	Sub1 (33);
 	
 	Sub2 (55, 77+1);
 	printf("프로그램 끝\n");
}
void Sub1(int val)
{
	printf("Sub1에 전달된 값은 %5d\n", val);
}
void Sub2(int val1, int val2)
{
	printf("Sub2에 전달된 값은 %5d, %5d\n", val1, val2);
}

 

[ 함수 실습 예제4 ] 1-10까지의 합을 계산하여 출력하는 함수와 1~100까지의 합을 계산하여 합을 출력하는 함수를 작성하세요

  << 인수를 사용하지 않고 프로그램을 작성한 경우  >>

#include<stdio.h>
void Hap1(void);
void Hap2(void);
int main()
{
	printf("프로그램 시작\n");
	Hap1();
	Hap2();
	printf("프로그램 끝\n");
}
void Hap1(void)
{
	int i,tot=0;
	for(i=1;i<=10;i++)
	{
		tot += i; 
	}
	printf("1부터 10까지의 합 = %d\n",tot);
}
void Hap2(void)
{
	int i,tot=0;
	for(i=1;i<=100;i++)
	{
		tot += i;
	}
	printf("1부터 100까지의 합 = %d\n",tot);
}

 

<< 인수를 사용하고 프로그램을 작성한 경우  >>

#include<stdio.h>
void Hap(int cnt);
int main()
{
	printf("프로그램 시작\n");
	Hap(10);
	Hap(100);
	printf("프로그램 끝\n");
}
void Hap(int cnt)
{
	int i,tot=0;
	for(i=1;i<=cnt;i++)
	{
		tot += i;
	}
	printf("1부터 %3d까지 합 = %5d\n",cnt,tot);
}

 

[ 함수 실습 예제5 ] 

#include<stdio.h>
#include<string.h>
#define NAME "명문코딩컴퓨터"
#define ADDR "서울시 도봉구 쌍문동"
#define TEL "02-993-0042"
void Line(int cnt, char ch);
void Spc(int cnt);
int main()
{
	Line(60, '=');
	Spc((60-strlen(ADDR))/2);
	printf("%s\n", ADDR);
	Spc((60-strlen(NAME))/2);
	printf("%s\n", NAME);
	Spc((60-strlen(TEL))/2);
	printf("%s\n", TEL);
	Line(60,'-');
}
void Line(int cnt, char ch)
{
	int i;
	for(i=1;i<=cnt;i++)
	{
		putchar(ch);
	}
	putchar('\n');
}
void Spc(int cnt)
{
	int i;
	for(i=0;i<cnt;i++)
	{
		putchar(' ');
	}
}

 

[ 함수 실습 예제5 ] 입력 받은 구구단을 출력하는 프로그램을 함수로 작성하시오.

#include<stdio.h>
void Hap(int cnt);
int main()
{
	int s;
	scanf("%d", &s);
	Hap(s);

}
void Hap(int cnt)
{
	int i;
	for(i=1;i<=9;i++)
	{
		printf("%d X %d = %d\n", cnt, i, i*cnt);
	}
	
}
반응형

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

7. C/C++ 단순 연결 리스트  (0) 2021.01.28
6. C/C++ 연결리스트  (0) 2021.01.18
4. C/C++ 동적 메모리  (0) 2020.11.05
3. C/C++ 연산자  (0) 2020.09.25
2. C/C++ 함수 - 인수 전달 방법  (0) 2020.09.24
Posted by 명문코딩컴퓨터
,