본강의자료는문정욱교수님의강의자료를활용하여작성하였습니다. C 언어맛보기 #3 함수 1 부산대학교전기컴퓨터공학부 김종덕 Intelligence Networking and Computing Lab.

Similar documents
슬라이드 1

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

PowerPoint 프레젠테이션

슬라이드 1

C 프로그래밊 개요

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

untitled

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

중간고사

C 프로그래밊 개요

11장 포인터

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

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

untitled

PowerPoint 프레젠테이션

설계란 무엇인가?

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

<4D F736F F F696E74202D20C1A639C0E520C7D4BCF6BFCDBAAFBCF6>

Microsoft PowerPoint - chap-09.pptx

untitled

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - Chapter8.pptx

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

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

PowerPoint Presentation

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

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

Microsoft PowerPoint - ch07 - 포인터 pm0415

OCW_C언어 기초

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

Microsoft PowerPoint - 제11장 포인터

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

gdb 사용법 Debugging Debug라는말은 bug를없앤다는말이다. Bug란, 컴퓨터프로그램상의논리적오류를말하며, 이것을찾아해결하는과정이바로, debugging이다. 초기컴퓨터들은실제벌레가컴퓨터에들어가서오작동을일으키는경우가있었다고하며, 여기서 debug 이라는말이

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 \

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

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

C++ Programming

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

; struct point p[10] = {{1, 2, {5, -3, {-3, 5, {-6, -2, {2, 2, {-3, -3, {-9, 2, {7, 8, {-6, 4, {8, -5; for (i = 0; i < 10; i++){ if (p[i].x > 0 && p[i

Microsoft PowerPoint - chap-11.pptx

강의10

Microsoft PowerPoint - chap06-2pointer.ppt

PowerPoint Presentation

02장.배열과 클래스

17장 클래스와 메소드

예제 1.1 ( 관계연산자 ) >> A=1:9, B=9-A A = B = >> tf = A>4 % 4 보다큰 A 의원소들을찾을경우 tf = >> tf = (A==B) % A

Microsoft Word - FunctionCall

4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf("hihi\n"); } warning: conflicting types for functiona

Microsoft PowerPoint - ch 전처리기, 다중 소스파일 pm1015

쉽게 풀어쓴 C 프로그래밍

윈도우즈프로그래밍(1)

3장 함수

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

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

컴파일러

Microsoft PowerPoint - Chapter_05.pptx

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

OCW_C언어 기초

2017 년 6 월한국소프트웨어감정평가학회논문지제 13 권제 1 호 Abstract

Microsoft PowerPoint - chap12-고급기능.pptx

Microsoft PowerPoint - ch07 - 포인터 pm0415

vi 사용법

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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

Data Structure

Microsoft PowerPoint - Chapter_08.pptx

KAA2005.9/10 Ãâ·Â

03장.스택.key

PowerPoint Template


Microsoft PowerPoint - chap05.ppt

PowerPoint Presentation

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

설계란 무엇인가?

Microsoft PowerPoint - chap-03.pptx

JAVA PROGRAMMING 실습 08.다형성

untitled

chap x: G입력

adfasdfasfdasfasfadf

2002년 2학기 자료구조

Microsoft PowerPoint - Java7.pptx

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

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Microsoft Word - ExecutionStack

11장 포인터

슬라이드 1

<4D F736F F F696E74202D204C BAB8C3E6BCB3B8ED202D20C7C1B7CEB1D7B7A1B9D6C0DBBCBAB0FAC1A42C C F>

Transcription:

본강의자료는문정욱교수님의강의자료를활용하여작성하였습니다. C 언어맛보기 #3 함수 1 부산대학교전기컴퓨터공학부 김종덕 (kimjd@pusan.ac.kr) Intelligence Networking and Computing Lab.

강의의목표 프로그래밍에서 Function( 함수 ) 의의미를이해한다. 함수의호출구조를이해한다. 함수가포함된코드를 Debugging 할수있다. 함수의재귀적호출을이해한다. Intelligence Networking and Computing Lab. 2

함수의개념 함수 (function)? 함수 (function; 函數 ): 상자수 ; 상자에 수를넣으면수가나옴 입력값을넣으면출력값이나오는 (Black) Box 2.5 a 인수, 인자, 매개변수 (argument) square 함수 double square(double a) return a*a; double x=2.5; double z; z=square(x); printf("%f\n", z); 리턴값 6.25 6.250000 입출력결과 3

Function Definition Function Body Function Definition function_definition: ret_type funct_name(arguments) return expression; 함수가반환하는값의 Type 함수의이름 함수호출에필요한인자 / 매개변수 double square(double a) a = a 1; return a*a; double x=2.5; double z; Function Call 함수호출시 ( ) 안의변수또는 expression의값이매개변수로복사됨. 변수자체가함수로전달되는것이아님 z=square(x); printf("%f, %f\n", x, z); 이런함수호출방식을 Call by Value 라고함 Call by Reference 와구별 2.500000, 6.250000 입출력결과 함수내에서매개변수의값이변하더라도원래변수에는변화가없음!!! 4

함수의호출구조 여러개의인자전달 int add(int a, int b) return a+b; int x=2; int y=3; int z; z = add(x,y); printf("%d\n",z); 여러함수의호출 double square(double a) return a*a; double circle(double r) return 3.14*square(r); double area; area = circle(2.5); printf("%f\n", area); 5

함수호출 Debug 아래코드를 Debug 수행하라 square() 내의 return 문의줄번호위에 마우스커서를두고 double-click 을수 행해보라 Break-Point 설정 / 해제 Debug를다시수행하고 Resume(F8) 을눌렀을때 Break-Point의존재여부가미치는영향을이해하라. 디버깅모드에서커서가위 Break- Point에존재할때아래그림과같은 Debug 창을확인하라. Debug를시행하면위그림과같이 circle() 함수호출라인에서 Debugging이시작된다. 이때 Resume(F8), step-into(f5), step-over(f6) 의차이점을이해하라. F8 F5 F6 위 Debug 창을 Call Stack 이라고도 한다. 6

함수의호출구조 Call Stack double square(double a) return a*a; double circle(double r) return 3.14*square(r); double area; call call square() circle() main() return return Call Depth 3 (3) square(2.5) (2) circle(2.5) (1) main() Call Number = 3 area = circle(2.5); printf("%f\n", area); Stack : 쌓다 7

함수의호출구조 인자밖호출 double square(double a) return a*a; double pi(double b) return 3.14*b; double area,sq; 인자안호출 double square(double a) return a*a; double pi(double b) return 3.14*b; double area; sq = square(2.5); area = pi(sq); printf("%f\n", area); area = pi(square(2.5)); printf("%f\n", area); main() 을기준으로 square() 와 pi() 의 main() 을기준으로 square() 와 pi() 의 Call Depth 와 Call Number 는? Call Depth 와 Call Number 는? 8

함수의형태 함수에는인자가없거나 Return 값이없는함수도있을수있다. 인자가없거나 Return 값이없을때모두 void 를사용한다. 에서 void 의의미가인자가없는함수임을의미한다. 인자가없는함수의예 int read_integer(void) int n; scanf("%d",&n); return n; Return 값이없는함수의예 void print_integer(int a) printf("%d\n", a); Intelligence Networking and Computing Lab. Return 이없는함수를 Procedure 라고도한다. Return 문이없거나인자없이 return 을쓴다. void print_hello(int n) int i; if (n<=0) return; for (i=0; i<n; i=i+1) printf("hello World\n"); 9

함수에서다양한반환값처리 Return 값이있는함수에서 return 은여러번쓰일수있다. 다만모 든수행상황에대해 return 이호출되어야한다. 오류의예 int compare_integer(int a, int b) if (a > b) return 1; // positive: a > b if (a < b) return 1; // negative: a < b // a == b?..\main.c:9:1: warning: control reaches end of non void function [ Wreturn type] int compare_integer(int a, int b) if (a > b) return 1; // positive: a > b if (a < b) return 1; // negative: a < b if (a == b) // zero: a == b 조건과관련없이무조건실행되는 return 문이있는것이바람직 int compare_integer(int a, int b) if (a > b) return 1; // positive: a > b if (a < b) return 1; // negative: a < b // zero: a == b int compare_integer(int a, int b) return a b; int compare_integer(int a, int b) int ret_val = 0; if (a > b) ret_val = 1; if (a < b) ret_val = 1; return ret_val; Intelligence Networking and Computing Lab. 10

함수의재귀호출 (recursive call) Factorial! 1 0 1 1 Call sequence (7) factorial(0) (6) 1 factorial(1) int factorial(int n) if( n==0 ) return 1; return n*factorial(n 1); printf("%d\n",factorial(5)); 120 입출력결과 Call Depth = 7 1 (5) factorial(2) 2 (4) factorial(3) (3) 6 factorial(4) (2) 24 factorial(5) (1) 120 main() 11

함수의재귀호출 (recursive call) Fibonacci Sequence Call sequence 0 0 1 1 1 2 2 int fibo(int n) if ( n==0 ) if ( n==1 ) return 1; return fibo(n 1)+fibo(n 2); printf("%d\n",fibo(4)); 3 입출력결과 Call Depth = 5 (5) (6) fibo(1) fibo(0) 1 0 (4) (7) (9) (10) fibo(2) fibo(1) fibo(1) fibo(0) 1 1 1 0 (3) (8) fibo(3) fibo(2) 2 1 (2) fibo(4) 3 (1) main() ( 참고 ) Call Depth : 함수의호출깊이, 필요한메모리 (Stack) 양과관련있음. Call Number : 함수의호출횟수, 계산에필요한시간과관련있음 12

Hanoi Tower 재귀적처리의대표적예제 ) 하노이탑은다음그림처럼원반 n 개로구성된탑이다. 첫번째막대기에있는하노이탑을세번째막대기로옮기고자한다. 원반은한번에하나씩만옮길수있으며옮기는과정중에작은원반위에큰원반을올리면안된다. 이문제를풀기위한재귀함수 hanoi_tower() 를작성하라. void hanoi_tower(int n, int ox, int tx, int mx); int n : 이동할원반의수 int ox : 이동할 n개의원반이현재존재하는막대기의번호 int tx : 원반을이동시킬목적막대기번호 int mx : 나머지막대기번호 main 함수에서의호출 이때, 어떻게원반을움직여야하는지출력하는프로그램을작성하라. 막대기 1의맨위원반을 2의맨위로옮기는것은다음과같이출력한다. 1 -> 2 프로그램은하노이탑높이 n만입력으로받고막대기 1의높이 n인하노이탑을막대기 3으로옮기는데필요한원반이동을출력한다 void hanoi_tower(int n, int ox, int tx, int mx) // Your Code Here int n; printf("enter the height of the tower"); scanf("%d",&n); hanoi_tower(n, 1, 3, 2); 13

n=1 일때먼저생각해보자. Hanoi Tower void hanoi_tower(int n, int ox, int tx, int mx) // Your Code Here printf("%d > %d\n", ox, tx); n=k(>1) 일때 ox에있는 k개의원반중위로부터 k-1개의원반을 mx로옮긴다. : ox -> mx ox에남은하나 (k번째) 의원반을 tx로옮긴다. : ox -> tx mx에있는 k-1개의원반을 tx로옮긴다 : mx -> tx 위 Logic을재귀적함수을통해구현한다면? Intelligence Networking and Computing Lab. 14