PowerPoint 프레젠테이션

Similar documents
Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - additional01.ppt [호환 모드]

슬라이드 1

금오공대 컴퓨터공학전공 강의자료

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

PowerPoint Presentation

Microsoft PowerPoint - chap06-5 [호환 모드]

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap06-2pointer.ppt

11장 포인터

C 언어 프로그래밊 과제 풀이

Microsoft PowerPoint - Chapter8.pptx

PowerPoint 프레젠테이션

Microsoft PowerPoint - 04_C_Language_Function

설계란 무엇인가?

C 프로그래밊 개요

Microsoft PowerPoint - chap-03.pptx

슬라이드 1

Microsoft Word - FunctionCall

설계란 무엇인가?

Microsoft PowerPoint - Lesson2.pptx

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap-09.pptx

Microsoft PowerPoint - chap05.ppt

PowerPoint 프레젠테이션

untitled

PowerPoint Presentation

C언어 및 실습 C Language and Practice

Microsoft PowerPoint - 05장(함수) [호환 모드]

OCW_C언어 기초

Microsoft PowerPoint - chap10-함수의활용.pptx

Data Structure

제4장 기본 의미구조 (Basic Semantics)

<4D F736F F F696E74202D20C1A639C0E520C7D4BCF6BFCDBAAFBCF6>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

슬라이드 1

OCW_C언어 기초

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

PowerPoint 프레젠테이션

Microsoft PowerPoint - Chapter 6.ppt

Microsoft PowerPoint - chap03-변수와데이터형.pptx

untitled

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

PowerPoint Presentation

C 프로그램의 기본

C++ Programming

Microsoft PowerPoint - ch07 - 포인터 pm0415

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

PowerPoint 프레젠테이션

OCW_C언어 기초

Microsoft PowerPoint - Java7.pptx

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

Microsoft PowerPoint - 제11장 포인터(강의)

컴파일러

Microsoft PowerPoint - 제11장 포인터

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

06 세상을 변화시키는 연산자

PowerPoint Template

중간고사

쉽게 풀어쓴 C 프로그래밍

1. 인라인함수 예 : x, y 값중최소값을반환하는매크로와함수작성 // 매크로로구현한경우 #define MIN(X, Y) ((X) < (Y)? (X) : (Y)) X, Y 각각을괄호 ( ) 안에넣는이유는? // 함수로구현한경우 cout << MIN(4, 5) << en

금오공대 컴퓨터공학전공 강의자료

슬라이드 1

int main(void) int a; int b; a=3; b=a+5; printf("a : %d \n", a); printf("b : %d \n", b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf(" a : %x \

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

Microsoft PowerPoint 세션.ppt

Microsoft PowerPoint - Perpect C 02.ppt [호환 모드]

C# Programming Guide - Types

chap10.PDF

02장.배열과 클래스

슬라이드 1

쉽게 풀어쓴 C 프로그래밍

프로그램의실행화면 주석 (comment) 두수의합 : 300 /* 두개의숫자의합을계산하는프로그램 */ 주석은코드를설명하는글입니다. 주석 3 가지방법의주석 주석의예 /* 한줄로된주석 */ /* 저자 : 홍길동날짜 : 2013.

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

Microsoft PowerPoint - chap05-제어문.pptx

Microsoft PowerPoint - chap04-연산자.pptx

Microsoft PowerPoint - Chapter 1-rev

KNK_C_05_Pointers_Arrays_structures_summary_v02

Microsoft PowerPoint - additional06.ppt [호환 모드]

PowerPoint Presentation

Microsoft PowerPoint - chap-11.pptx

쉽게 풀어쓴 C 프로그래밍

3장 함수

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

PowerPoint Template

윤성우의 열혈 TCP/IP 소켓 프로그래밍

Slide 1

chap x: G입력

JAVA PROGRAMMING 실습 08.다형성

Lab 3. 실습문제 (Single linked list)_해답.hwp

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap12-고급기능.pptx

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

PowerPoint 프레젠테이션

PowerPoint Presentation

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

Transcription:

함수 Heeseung Jo

이장의내용 함수개요프로시저함수호출메커니즘변수와유효범위재귀함수매크로함수 2

함수개요

함수개요 함수란? 함수 (function): 상자수 ; 상자에수를넣으면수가나옴 자동판매기와유사함 수학에서함수는대응관계 (mapping) 를의미함 함수주변상황 인수 : 함수에들어가는값 - 정의구역 (domain) 의원소 리턴값 : 함수가되돌려주는값 - 공변역 (co-domain) 의원소 4

C 언어에서함수 프로그래밍분야에서함수란? 작은프로그램 (subprogram) 인수를받아서리턴값을내는모듈 수학함수와다른점 프로그래밍에서함수는부수효과 (side-effects) 를낼수있음 심지어리턴값이아예없을수도있음 리턴값이없는함수를프로시저 (procedure) 라고함 printf 의부수효과예 : 5

함수정의방법 C 함수정의형태 리턴타입함수이름 ( 매개변수목록 ) { 문장들 } 함수헤더 (function header) 함수본체 (function body) C 함수정의예 int add1(int x) { return x + 1 ; } x 예쁘게들여쓰기 add1 int add1(int x) { return (x + 1); } x+1 6

return 문과리턴타입 return 문 형식 : return 값 ; 함수가어떤값을돌려주는지명시 리턴값은리턴타입 (return type) 과일치해야함 double half(int x) { return (x / 2.0); } 7

add1half.c (1/2) 인수보다하나큰값을구하는함수 인수값의반을구하는함수 8

add1half.c (2/2) 사용자정의함수호출 9

함수프로토타입 함수프로토타입 (prototype) 이란? 함수사용방법만명시한것 어떤자료형의인수를몇개받고 어떤자료형의리턴값을내는지명시함 왜함수프로토타입이중요한가? 함수를사용 ( 호출 ) 하기전에함수정의나함수프로토타입선언중최소한하나는나타나야함 프로토타입작성예 int add1(int x, int y); double half(int x); 매개변수이름생략가능 int add1(int, int); double half(int); 10

prototype.c (1/2) 함수프로토타입선언후에는함수정의가나타나지않았어도선언한함수를사용가능 add1 과 half 의 prototype 11

prototype.c (2/2) add1 과 half 정의 12

프로시저

프로시저 C 함수분류 값리턴함수 (value-returning function): 값을리턴하는함수, 수학적함수와유사함 void 함수 (void functions): 값을리턴하지않는함수, 부수효과만을이용하여어떤작업을수행 - void 함수를 " 프로시저 (procedure)" 라고부르기도함 14

void.c ( 일부 ) 실행결과 : 정수를하나입력하세요. 123 123 의바로다음정수는 124 이고 123 의반은 61.5 입니다. 제가맞게계산했나요? 함수 add1 과 half 를이용하는 void 함수 이함수때문에 main 이간단해졌다. 15

작명법에관한도움말 이름은구체적으로작성 적절하지못한이름 : process(); test(); control(); 적절한이름 : - dot_product(); 두벡터의내적을구하는함수 - all_positive(); 컨테이너원소가모두양수인가검사 - rotate_right(); 순차컨테이너고리형태로간주하고원소를우측으로이동 여러단어로이루어진이름은... 밑줄을이용하는방식 : 전통적인 C 프로그래밍방식 낙타체 : 대소문자를번갈아사용해가며단어를구별하는방식 - Java 에서사용하는방식 - dotproduct(); allpositive(); rotateright(); 16

하향식프로그래밍 하향식프로그래밍 (Top-Down Programming) 단계 문제를한문장으로기술 주어진문제를해결하기위해필요한세부작업을기술 더이상수행할세부작업이없을때까지다음을반복 - C 에서기본적으로제공하는기능을이용하여세부작업을바로구현할수있다면구현 - 세부작업이여전히큰규모라면단계 2 를반복하여다시작업을세분화 하향식프로그래밍의특징 바로구현할수있을단계까지문제를점진적으로세분화하여내려가는방식 (stepwise refinement) 17

하향식프로그램밍예 Top: 정수를하나읽어들인후, 그수의바로다음정수와그수를 2 로나눈수를출력 단계별세분화 18

topdown2.c (1/2) ' 전체문제 ' 를기술하는데필요한함수들 함수 main 에는 ' 전체문제 ' 를기술 19

topdown2.c (2/2) 20

함수호출메커니즘

함수호출과복귀개요 기본적인방식 호출자함수 A 는함수 B 를호출하면수행을멈춤 호출된함수 B 는 1. return 문을만나거나 2. 함수몸체끝에도달할때까지수행 호출된함수 B 의수행이끝나면호출지점바로다음으로복귀 복귀지점 복귀지점은문장단위가아닐수도있음 예를들어, double result = add1(2) * half(3); printf("result = %f\n", result); 에서 half() 가 add1() 보다먼저호출되었다면그복귀지점은 add1(2) 가됨 23

제어흐름예 main 함수에서 f 를호출했다고하면 f 는두가지방식으로복귀가능 25

자료흐름 : 인수전달 함수인수 (argument) 는값을구하여매개변수 (parameter) 에 " 복사 " 하여전달 예 : main 함수에서 print_sign(5); 를호출했을경우 26

자료흐름 : 임시변수사용 인수가수식인경우에는호출자의임시공간 ( 임시변수 ) 를활용하여수식값을구한후전달 예 : 다음과같이호출한경우수식 b - a 값은 main 의임시공간에서계산 27

자료흐름 : 리턴값전달 값반환함수호출 예 : 값반환함수호출은수식으로간주하기때문에리턴값도역시호출자의임시변수에저장 다음과같이호출한경우 read_int() 값과 num*num 값은임시공간에저장 28

sign.c 제어흐름 자료흐름 29

변수와유효범위

유효범위 유효범위 (scope) 란? 어떤변수를사용할수있는프로그램내의범위를그변수의유효범위라고함 유효범위를두지않는다면모든변수를프로그램전체에서사용할수있어야하므로매우복잡해짐 변수유효범위의결정 변수의유효범위는선언된위치에따라결정됨 유효범위에따라 - 지역변수 (local variable) - 비지역변수 (nonlocal variable) 32

유효범위에따른변수분류 지역변수 (local variable) 함수내에선언된변수 함수내부에서만볼수있음 함수가호출될때생성 주의 : 지역변수이지만정적변수로선언되는경우도있음 비지역변수 (nonlocal variable) 함수밖에선언된변수 여러함수에서볼수있음 - 전역변수 (global variable): 프로그램전체에서볼수있음 - 파일범위변수 (file scope variable): 같은파일내의함수에서만볼수있음 프로그램이시작할때생성 33

비지역변수를통한데이터전달 가능하지만, 비지역변수를통해데이터를전달하면데이터를전달하는함수와데이터를전달받는함수외의함수도그데이터를볼수있음 불필요한의존성 (dependency) 이발생하므로바람직하지않음 매개변수를통해데이터를전달하는것이좋은방법 ' 호동 ' 함수가 ' 선영 ' 함수에게사랑을고백하려면, 칠판에고백하는것보다 ' 선영 ' 의다이어리에몰래써두는것이더안전함 34

nonlocal.c 비지역변수 GX 는세함수에서모두사용가능 이렇게선언된 GX 는전역변수 실행결과 : [main 에서 ] GX = 12345 [f 에서 ] GX = 12345 [g 에서 ] GX = 12345 35

파일범위변수 다른파일에서 GX 를볼려면 extern int GX; 선언을해주어야함 함수밖에선언된변수중 static 으로선언된변수 파일범위변수는전역변수와는달리다른파일에서는볼수없음 nonlocal1.c 볼수있음 nonlocal2.c 볼수없음 37

지역정적변수 지역변수를선언할때, static 키워드를붙이면이변수도정적변수가됨 정적변수는함수영역이사라진다고해도사라지지않음 따라서이전호출종료시저장되어있던값을다음호출시사용할수있음 이런변수를 ' 역사에민감한변수 (history sensitive variable)' 라고함 38

count.c 정적변수초기화 모든정적변수는초기화해야함 초기화하지않았을경우엔 0 으로초기화됨 지역정적변수호출사이에값이보존된다. 실행결과 : count = 1 count = 2 count = 3 count = 4 count = 5 39

변수분류 유효범위 (scope): 해당변수를볼수있는범위지속시간 (lifetime): 변수가생성과소멸사이의시간 지속시간이길어짐 지속시간 동적변수 정적변수 유효범위 (dynamic variable) (static variable) 유효범위가넓어짐 지역변수 (local) 파일범위변수 (file-scope) 전역변수 (global) 함수본체내부에그냥선언선언불가선언불가 블록내부에 static으로선언함수외부에 static으로선언함수외부에그냥선언 41

재귀함수

재귀함수 재귀호출 (recursive call) 어떤함수가종료되지않은상황에서자신을다시호출하는것 재귀함수 (recursive function) 재귀호출을이용하는함수 재귀적인그림 43

fact.c 계승 (factorial) 정의 n! = n (n 1) 1 재귀적인계승정의 0! = 1 n! = n (n 1)! 재귀호출 실행결과 : 자연수를하나입력하세요 : 10 fact(10) = 3628800 입니다. 44

재귀함수의제어흐름 재귀함수의호출과리턴 재귀함수의경우에도호출수와리턴수는같음 따라서재귀함수는여러번호출되었다가다시여러번리턴 재귀함수의장단점 장점 : 프로그램구조가깔끔 단점 : 재귀함수의호출과리턴에따른부담으로인해수행속도가느려질수있음 45

매크로함수

max.c : 매크로함수 매크로함수 인수를받는매크로 함수와유사하지만실제로함수는아님 MAX(i, j) 는전처리기를거치면 (i > j)? i : j 로확장 실행결과 : 두수를입력하세요. 2 3 MAX(2, 3) = 3 47

매크로오류 매크로오류 매크로함수는실제로함수가아니므로예기치못한오류를발생시킬수있음 매크로오류예 int i = 2, j = 3, max = 0; max = MAX(++i, ++j); #define MAX(x, y) x > y? x : y printf("i = %d, j = %d, max = %d\n", i, j, max); 어떤값이출력될까? i = 3, j = 5, max = 5 이유는? max = (++i > ++j)? ++i : ++j; 48