2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf ·...

30
07 함수 07 함수 조선대학교 전자공학과 장순석 교수 1

Transcript of 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf ·...

Page 1: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

07 함수07 함수

조선대학교 전자공학과 장순석 교수

1

Page 2: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

함수의 의미함수의 의미

함수

함수는원하는특정한작업을수행하는독립된프로그램단위 함수는원하는특정한작업을수행하는독립된프로그램단위

blackbox

한국대학교 객체지향연구소2

Page 3: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

프로그램에서의 함수의 이용프로그램에서의 함수의 이용

결국 C 프로그램이란 함수의 집합 하나이상의여러함수로구성 하나이상의여러함수로구성

main()도이름이이미정의된특수한하나의함수로프로그램의실행이시작되는함수

프로그램 실행

C 프로그램은main() 함수의첫줄에서시작하여마지막줄을마지막으로실행한후종료마지막으로실행한후종료

함수를만들어사용하려면• 함수선언, 함수호출, 함수정의가필요

하나의응용프로그램은하나의메인함수와여러개의다른함수로구성되며, 필요에따라여러소스파일에나누어코딩할수있음

한국대학교 객체지향연구소3

Page 4: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

응용 프로그램응용 프로그램

구성

한국대학교 객체지향연구소4

Page 5: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

함수의 구분함수의 구분

함수의 구분

시스템 정의 함수와 사용자 시스템 정의 함수와 사용자정의 함수로 구분

시스템 정의 함수

라이 러리 함수 이미 라이브러리 함수는 이미개발도구에 구현되어 있는프로그램 부품(component) 함수함수

한 예로 출력함수 printf() 사용자 함수

사용자 프로그래머가 필요에의하여 직접 정의하여 이용하는함수함수

개발자가 직접 개발하는 함수

한국대학교 객체지향연구소5

Page 6: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

함수 장점함수 장점

함수는 문제 해결의 방법

주어진 문제를 작은 문제 즉 여러 함수로 나누어 생각할 수 주어진 문제를 작은 문제, 즉 여러 함수로 나누어 생각할 수있으므로 함수를 만드는 것은 문제 해결의 하나의 방법

함수 이용의 장점

함수로 구성된 프로그램은 함수 단위로 구성되어 있어, 읽기 쉽고,이해하기 쉬움

이미 정의된 함수는 여러 번 호출이 가능하므로 소스의 중복을 이미 정의된 함수는 여러 번 호출이 가능하므로 소스의 중복을최소화하여 프로그램의 양을 줄이는 효과

Structured Program 적절한 함수로 잘 구성된 프로그램을 모듈화 프로그램(Modular

Program), 구조화된 프로그램(Structured Program) 한 번 잘 구현된 함수는 라이브러리 함수와 같이 여러 한 번 잘 구현된 함수는 라이브러리 함수와 같이 여러

프로그램에서 손쉽게 이용이 가능

이러한 함수 중심의 구조화 프로그램 방식을 절차적

한국대학교 객체지향연구소6

프로그래밍(Procedural Programming) 방식

Page 7: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

함수가 있는 프로그램 구조함수가 있는 프로그램 구조

요소 함수선언인함수원형(prototype)

• 함수원형은함수호출(function call)이있기전에먼저있어야한다.• 함수원형은소스파일과같은파일또는헤더파일에있을수도있음

메인(main) 프로그램 그리고함수의정의(구현) 그리고함수의정의(구현)

한국대학교 객체지향연구소7

Page 8: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

함수의 정의함수의 정의

함수의 정의(구현)는 함수의 머리(header)와 몸체(body)로 구성

• 함수의 머리(헤더)는 함수의 반환값 자료유형과 함수의 이름, 그리고 괄호함수의 머리(헤더)는 함수의 반환값 자 유형과 함수의 이름, 리 괄사이에 인자 목록으로 구성

한국대학교 객체지향연구소8

Page 9: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

함수정의에 이용되는 자료유형함수정의에 이용되는 자료유형

모든 기본 자료 유형은 반환 값이나 인자의 자료유형으로 이용 가능 char, short, int, long, float, double 등이가능

void 반환값이없는경우에는 void라는키워드를이용 함수의매개변수가하나도없는경우에는 void라는키워드를인자목록에기술하여이용기술하여이용

반환 값을 아예 생략 반환값이 int 형이라고가정 반환값을생략하는프로그램코딩방법은적절하지못한방법으로 반환 반환값을생략하는프로그램코딩방법은적절하지못한방법으로, 반환값을반드시기술하도록

한국대학교 객체지향연구소9

Page 10: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

return 문return 문 반환 값 역할

함수 인자가 함수를 호출하는 부분에서 함수를 호출하는 영역으로 자료를전달하는데 주로 사용

함수 인자는 여러 개를 사용할 수 있으나 반환 값은 하나만 이용

return 문 문장은 반환 값을 전달하는 목적과 함께 함수의 작업 종료도 의미 return 문장은 반환 값을 전달하는 목적과 함께 함수의 작업 종료도 의미

반환 값을 전달 할 때 return 문장을 이용하며, 반환 값이 없는 함수는 return 문장 뒤에 반환 값을 기술하지 않음

return ;return 연산식; // return a+b;return (연산식); // return (a+b);

한국대학교 객체지향연구소10

Page 11: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

함수원형 개념과 주조함수원형 개념과 주조

함수 원형 함수를 사용(호출)하기 이전에 함수의 머리(헤더) 부분을 기술하는 단계

함수 원형의 기술 방법이 다음 두 가지 방법으로 가능 자료유형 목록을 변수 선언 하듯이 변수유형과 변수이름이 함께 나오는

방식함수 반환값 자료유형이 나오고 빈 공간을 띄운 후 적당한 함수이름이 나타냄• 함수 반환값 자료유형이 나오고 빈 공간을 띄운 후 적당한 함수이름이 나타냄

• 괄호 ()안에는 인자 목록이 기술되고, 마지막으로 세미콜론(;)으로 종료

한국대학교 객체지향연구소11

Page 12: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

예제 7-1예제 7 1

한국대학교 객체지향연구소12

Page 13: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

함수 호출함수 호출

정의된 함수의 이용

함수의이름에적당한인자를이용하여기술 함수의이름에적당한인자를이용하여기술• 인자의유형과순서에맞는변수나상수를기술

인자 잘 기술하면 제가 발생 인자를 잘못 기술하면 문제가 발생

• 즉 인자의 순서와 개수, 그리고 자료유형이 일치해야

• 예로 다음과 같은 함수호출은 잘못예 다음과 같은 함수 출은 잘못

한국대학교 객체지향연구소13

Page 14: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

함수호출에 의한 프로그램 실행 순서함수호출에 의한 프로그램 실행 순서

한국대학교 객체지향연구소14

Page 15: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

예제 7-3예제 7 3

한국대학교 객체지향연구소15

Page 16: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

함수 매개변수함수 매개변수

함수 인자의 필요

함수를호출하는부분에서함수의내부로값을전달하기위해사용함수를호출하는부분에서함수의내부로값을전달하기위해사용• 즉매개변수는함수내부로입력값을전달하기위한방법

함수의매개변수는필요한경우이용필요없으면함수의매개변수부분에는키워드 void를기술하거나• 필요없으면함수의매개변수부분에는키워드 void를기술하거나아무것도기술하지않음.

한국대학교 객체지향연구소16

Page 17: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

함수 반환 값함수 반환 값

역할

함수를호출하는부분에서함수가작업을수행한후, 다시함수를호출한,영역으로결과값을전달할때는반환값을이용

제약

함수인자는여러개를사용할수있으나반환값은하나만이용할수있다는제약

한국대학교 객체지향연구소17

Page 18: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

형식인자와 실인자형식인자와 실인자

형식인자 함수 정의 구문에서 기술되는 인자를 형식인자(formal parameters) 함수 정의 구문에서 기술되는 인자를 형식인자(formal parameters)

실인자 함수를 호출할 때 기술되는 인자를 실인자(real parameters) 실인자를 기술할 때는 함수의 헤더에 정의된 자료유형과 일치하도록 해야 함실인자를 기술할 때는 함수의 헤더에 정의된 자료유형과 일치하도록 해야 함

한국대학교 객체지향연구소18

Page 19: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

재귀 함수재귀 함수

재귀

함수는 함수 구현에서 자기 자신의 함수를 호출

특징

구현하려는 알고리즘 자체가 재귀적 특성을 갖는다면, 재귀 함수를 이용하면 쉽게구현이 가능

재귀 함수는 계속적인 함수의 호출로 인하여 시간과 메모리 공간의 효율성이떨어지는 단점

일반적으로 재귀 함수는 반복문을 이용한 함수로 변환이 가능

한국대학교 객체지향연구소19

Page 20: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

예제 7-5예제 7 5

한국대학교 객체지향연구소20

Page 21: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

재귀 특성 추출재귀 특성 추출

n! 수식 n!(n factorial)은 1 * 2 * 3 * … * (n-2) * (n-1) * n을 의미수식 n!(n factorial)은 1 2 3 … (n 2) (n 1) n을 의미

계승 수식은 재귀적 특성을 갖음

즉 n!을 구하기 위해서 (n-1)!을 먼저 구한다면 쉽게 n!을 구할 수있음

그러나 재귀적 호출이 종료되는 조건이 없다면 무한 호출에 의해 문제가 발생

한국대학교 객체지향연구소21

Page 22: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

예제 7-6예제 7 6

한국대학교 객체지향연구소22

Page 23: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

값의 의한 호출값의 의한 호출

call by value 함수의 형식 인자가 일반 변수형(기본 자료형을 의미)일 때 실제 함수가 호출되는

경우 실인자의 값을 형식인자에 할당된 새로운 변수에 복사 저장경우, 실인자의 값을 형식인자에 할당된 새로운 변수에 복사 저장 호출 전에는 변수 number에 10이 저장되었고, 변수 number를 실인자로 함수

increment(number)를 호출 함수 호출 후 변수 number의 값은 변했을까?

한국대학교 객체지향연구소23

Page 24: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

인자와 반환 값인자와 반환 값

인자 전달 방법이 값에 의한 호출 방법(call by value)에서의 함수 인자는 함수를호출하는 부분에서 함수를 호출하는 영역으로 자료를 전달하는데 주로 사용

반대로 호출 함수가 작업을 수행한 후 함수를 호출한 영역으로 결과 값을 전달할 반대로 호출 함수가 작업을 수행한 후, 함수를 호출한 영역으로 결과 값을 전달할때는 반환 값(return value)을 이용

한국대학교 객체지향연구소24

Page 25: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

예제 7-7예제 7 7

한국대학교 객체지향연구소25

Page 26: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

헤더 파일헤더 파일

함수 원형이 코딩되는 부분은 일반 소스 파일 또는 헤더 파일

시스템 라이브러리인 경우에는 모든 함수의 함수 원형이 여러 헤더 시스템 라이브러리인 경우에는 모든 함수의 함수 원형이 여러 헤더파일에 나뉘어 코딩

• 즉 함수 printf()의 원형은 헤더 파일 stdio.h 파일에 정의

• 시스템은 다음과 같이 처리 작업에 따라 여러 헤더 파일을 제공

• 헤더 파일에는 여러 함수에 대한 함수 원형이 정의

한국대학교 객체지향연구소26

Page 27: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

난수난수

Random number임의의 수를 난수( andom n mbe )라 하는데 시스템 임의의 수를 난수(random number)라 하는데, 시스템라이브러리에서 난수를 만드는 함수를 제공

함수 rand()를 이용하면 난수를 발생시킬 수 있는데, 이 함수를사용하기 위해서는 헤더 파일 tdlib h 파일을 첨가사용하기 위해서는 헤더 파일 stdlib.h 파일을 첨가

함수 rand()에 의해 생성되는 정수는 [0, n] 사이의 임의의 정수

• n은 일반적으로 헤더 파일 stdlib.h 파일에 기호 상수 RAND_MAX에 의해정의, 다음은 Visual C++의 헤더 파일 stdlib.h 파일의 일부로서 기호,상수 RAND_MAX는 16진수로 7fff이고 십진수로 32767

한국대학교 객체지향연구소27

Page 28: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

시드 이용시드 이용

매번 난수를 다르게 발생시키기 위하여

시드 (seed) 값을 주는 방법( ) 시드 값이 다르면 함수 rand()에서 발생시키는 난수가 다름

• 난수 발생 함수 rand()에서 시드 값이 난수의 값을 결정

• 함수 time()으로 반환되는 값을 함수 srand()의 인자로 이용() ()– 함수 time(NULL)은 1970년 1월 1일 이후의 경과된 시간을 초 단위로 반환 함수

– 함수 time()을 이용하려면 헤더 파일 time.h를 첨가

난수에 시드를 주기 위해 함수 srand( time(NULL) )을 호출

한국대학교 객체지향연구소28

Page 29: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

수학 라이브러리 함수수학 라이브러리 함수

수학 관련 라이브러리

수학에서 이용하는 여러 함수는 이미 시스템 라이브러리 함수로 수학에서 이용하는 여러 함수는 이미 시스템 라이브러리 함수로정의

다음이 간단한 수학 관련 함수

위의 함수를 이용하기 위해서는 위 함수의 함수 원형이 정의된헤더파일 math.h 파일을 추가

한국대학교 객체지향연구소29

Page 30: 2008 Kang s C 2nd Edition 07 함수.ppt [호환 모드]ssjarng.chosun.ac.kr/c/chapter07.pdf · 2017. 5. 29. · 예제7-7 한국대학교 ... Microsoft PowerPoint - 2008 Kang_s C

C로 배우는 프로그래밍 기초 2nd Edition

30