Microsoft PowerPoint - Chapter8.pptx

Similar documents
쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - ch04 - 함수 pm0130

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

PowerPoint 프레젠테이션

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

untitled

Microsoft PowerPoint - Lesson2.pptx

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

중간고사

쉽게 풀어쓴 C 프로그래밍

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

슬라이드 1

C 프로그래밊 개요

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

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

untitled

untitled

Microsoft PowerPoint - chap-03.pptx

PowerPoint 프레젠테이션

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

Microsoft PowerPoint - chap12-고급기능.pptx

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

쉽게 풀어쓴 C 프로그래밍

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

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

Microsoft PowerPoint - Lesson6.pptx

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

11장 포인터

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

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

Microsoft PowerPoint - chap11-포인터의활용.pptx

OCW_C언어 기초

슬라이드 1

PowerPoint Template

슬라이드 1

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

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

Microsoft PowerPoint - chap-09.pptx

<4D F736F F F696E74202D20C1A639C0E520C7D4BCF6BFCDBAAFBCF6>

슬라이드 1

쉽게 풀어쓴 C 프로그래밍

ch15

Microsoft PowerPoint - 제11장 포인터

Microsoft PowerPoint - chap-11.pptx

Microsoft PowerPoint - Chapter 1-rev

쉽게 풀어쓴 C 프로그래밍

<4D F736F F F696E74202D20C1A63134C0E520C6F7C0CEC5CD5FC8B0BFEB>

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

PowerPoint Template

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

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

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

PowerPoint Presentation

Microsoft PowerPoint - chap05-제어문.pptx

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

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

PowerPoint 프레젠테이션

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

02장.배열과 클래스

Microsoft PowerPoint - chap-07.pptx

C 프로그램의 기본

Microsoft PowerPoint - chap05.ppt

PowerPoint 프레젠테이션

설계란 무엇인가?

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

Microsoft PowerPoint - chap-06.pptx

Microsoft PowerPoint - 04_C_Language_Function

Microsoft PowerPoint - Chapter14_17.pptx

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - Lesson14.pptx

Microsoft PowerPoint - Lesson14.pptx

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

슬라이드 1

Microsoft PowerPoint - ch07 - 포인터 pm0415

11장 포인터

PowerPoint Presentation

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

제 15 장전처리및비트연산 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

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

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

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

untitled

ch08

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

; 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

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

쉽게 풀어쓴 C 프로그래밍

untitled

C 프로그래밊 개요

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap01-C언어개요.pptx

쉽게 풀어쓴 C 프로그래밍

1. 표준입출력 C++ : C의모든라이브러리를포함 printf, scanf 함수사용가능예 : int, double, 문자열값을입력받고출력하기 #include <cstdio> int ivar; double dvar; char str[20]; printf("int, dou

OCW_C언어 기초

Microsoft PowerPoint - chap04-연산자.pptx

Microsoft PowerPoint - ch07 - 포인터 pm0415

Transcription:

Computer Engineering g Programming g 2 제 8 장함수 Lecturer: JUNBEOM YOO jbyoo@konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

이번장에서학습할내용 모듈화 함수의개념, 역할 함수작성방법 반환값 인수전달 규모가큰프로그램은전체문제를보다단순하고이해하기쉬운함수로나누어서프로그램을작성하여야합니다. Konkuk University 2

모듈의개념 모듈 (module) 독립되어있는프로그램의일부분 Modular Programming 모듈개념을사용하는프로그래밍기법 Modular Porgramming 의장점 각모듈들은독자적으로개발가능 다른모듈과독립적으로변경가능 유지보수가쉬워진다. 모듈의재사용가능 C 에서는모듈 == 함수 Konkuk University 3

함수의개념 함수 (function): 특정한작업을수행하는독립적인부분 함수호출 (function call): 함수를호출하여사용하는것 함수는입력을받으며출력을생성한다. Konkuk University 4

함수들의연결 프로그램은여러개의함수들로이루어진다. 함수호출을통하여서로서로연결된다. 제일먼저호출되는함수는 main() 이다. Konkuk University 5

함수의종류 Konkuk University 6

함수의정의 반환형 (return type) 함수헤더 (function header) 함수몸체 (function body) Konkuk University 7

함수의구조 Konkuk University 8

함수정의예제 함수를프로그램을이루는부품이라고가정하자. 입력을받아서작업한후에결과를생성한다. Konkuk University 9

예제 #1 정수의제곱값을계산하는함수 반환값 : int 함수이름 : square 매개변수 : int n int square(int n) return(n*n); Konkuk University 10

예제 #2 두개의정수중에서큰수를계산하는함수 반환값 : int 함수이름 : get_max 매개변수 : int x, int y int get_max(int t x, int y) if( x > y ) return(x); else return(y); Konkuk University 11

예제 #3 정수의절대값을계산하는함수 반환값 : int 함수이름 : absolute 매개변수 : int x int absolute(int x) if( x > 0 ) return x; else return -x; Konkuk University 12

예제 #4 별표기호를이용하여정사각형을그리는함수 반환값 : void 함수이름 : draw_rect 매개변수 : int side void draw_rect(int side) int x, y; for(y = 0; y < side; y++) for(x = 0; x < side; x++) printf("*"); printf("\n"); return; Konkuk University 13

예제 #5 사용자로부터한개의정수를받아서반환하는함수 반환값 : int 함수이름 : get_integer er 매개변수 : void int get_integer(void) int n; printf(" 정수를입력하시오 : "); scanf("%d", &n); return n; Konkuk University 14

예제 #6 정수의거듭제곱값 (x y ) 을계산하는함수 반환값 : int 함수이름 : power 매개변수 : int x, int y int power(int x, int y) int i; long result = 1; for(i = 0; i < y; i++) result *= x; return result; Konkuk University 15

예제 #7 팩토리얼값 (n!) 을계산하는함수 반환값 : int 함수이름: factorial 매개변수 : int n int factorial(int n) int i; long result = 1; for(i = 1; i <= n; i++) result *= i; // result = result * x return result; Konkuk University 16

함수호출과반환 함수호출 (function call): 함수를사용하기위하여함수의이름을적어주는것 함수안의문장들이순차적으로실행된다. 문장의실행이끝나면호출한위치로되돌아간다. 결과값을전달할수있다. Konkuk University 17

인수와매개변수 인수 (argument): 실인수, 실매개변수라고도한다. 매개변수 (parameter): 형식인수, 형식매개변수라고도한다. #include <stdio.h> int add(int x, int y) return (x + y); int main(void) // 2와 3이 add() 의인수가된다. add(2, 3); // 5와 6이 add() 의인수가된다. add(5, 6); return 0; Konkuk University 18

반환값 반환값 (return value): ) 호출된함수가호출한곳으로작업의결과값을전달하는것 인수는여러개가가능하나반환값은하나만가능 return 0; return(0); return x; return x+y; return x*x+2*x+1; Konkuk University 19

함수원형 함수원형 (function prototyping): ) 컴파일러에게함수에대하여미리알리는것 // 정수의제곱을계산하는함수예제 #include <stdio.h> int square(int n); // 함수원형 int main(void) id) int i, result; 함수원형 for(i = 0; i < 5; i++) result = square(i); // 함수호출 printf("%d \n", result); return 0; int square(int n) // 함수정의 return(n * n); Konkuk University 20

조합 (combination) 계산함수 팩토리얼계산함수와 get_integer() 함수를호출하여조합을계산한다 Konkuk University 21

예제 #include <stdio.h> int get_integer(void); t id) int combination(int n, int r); int factorial(int n); int main(void) int a, b; a = get_integer(); b = get_integer(); g printf("c(%d, %d) = %d \n", a, b, combination(a, b)); return 0; int combination(int n, int r) return (factorial(n)/(factorial(r) * factorial(n-r))); Konkuk University 22

예제 int get_integer(void) int n; printf(" 정수를입력하시오 : "); scanf("%d", &n); return n; int factorial(int n) int i; long result = 1; for(i = 1; i <= n; i++) result *= i; return result; // result = result * i 정수를입력하시오 : 10 정수를입력하시오 : 3 C(10, 3) = 120 Konkuk University 23

함수원형 함수원형 (function prototype) : 미리컴파일러에게함수에대한정보를알리는것 반환형함수이름 ( 매개변수 1, 매개변수 2,... ); int compute_sum(int n); int get_integer(void); int combination(int n, int r); void draw_rect(int rect(int side); OR int compute_sum(int); int get_integer(void); int combination(int, int); void draw_rect(int); Konkuk University 24

함수원형예제 #include <stdio.h> // 함수원형 int compute_sum(int n); 정수를입력하시오 : 10 1 부터 10 까지의합은 55 입니다. int main(void) int n, sum; printf(" 정수를입력하시오 : "); scanf("%d", &n); sum = compute_sum(n); // 함수사용 printf("1 부터 %d까지의합은 %d입니다. \n", n, sum); int compute_sum(int n) int i; int result = 0; for(i = 1; i <= n; i++) result += i; return result; Konkuk University 25

함수원형을사용하지않는예제 #include <stdio.h> // 함수정의 int compute_sum(int n) 정수를입력하시오 : 10 1부터 10까지의합은 55입니다. int i; int result = 0; for(i = 1; i <= n; i++) result += i; return result; int main(void) int n, sum; printf(" 정수를입력하시오 : "); scanf("%d", &n); sum = compute_sum(n); // 함수사용 printf("1부터 %d까지의합은 %d입니다. \n", n, sum); return 0; Konkuk University 26

함수원형과헤더파일 보통은헤더파일에함수원형이선언되어있음 Konkuk University 27

다중소스프로그램 함수원형정의는헤더파일에들어있고여러파일에서헤더파일을포함 Konkuk University 28

common.h // 헤더파일 #include <stdio.h> #define MAX_INPUT 30 다중소스프로그램예제 int get_integer(void); int combination(int n, int r); int factorial(int n); main.c // 수학적인조합값을구하는예제 #include "common.h" int main(void) int a, b; a = get_integer(); b = get_integer(); printf("c(%d, %d) = %d \n", a, b, combination(a, b)); return 0; Konkuk University 29

combination.c 다중소스프로그램예제 // 수학적인조합값을계산 #include "common.h" int combination(int n, int r) return (factorial(n)/(factorial(r) * factorial(n-r))); factorial.cc // 팩토리얼계산 #include "common.h" int factorial(int n) int i; long result = 1; for(i = 1; i <= n; i++) result *= i; return result; // result = result * i Konkuk University 30

다중소스프로그램예제 get_integer.c // 사용자로부터정수를입력받는함수정의 #include "common.h" int get_integer(void) int n; printf(" 정수를입력하시오 : "); scanf("%d", &n); return n; Konkuk University 31

라이브러리함수 라이브러리함수 (library function): 컴파일러에서제공하는함수 표준입출력 수학연산 문자열처리 시간처리 오류처리 데이터검색과정렬 Konkuk University 32

수학라이브러리함수 Konkuk University 33

예제 // 삼각함수라이브러리 #include <math.h> h sin( 1.570796 ) = 1.000000 #include <stdio.h> sinh( 1.570796 ) = 2.301299 cos( 1.570796 ) = 0.000000 cosh( 1.570796 ) = 2.509178 int main( void ) double pi = 3.1415926535; double x, y; x = pi / 2; y = sin( x ); printf( "sin( %f ) = %f\n", x, y ); y = sinh( x ); printf( "sinh( %f ) = %f\n",x, y ); y = cos( x ); printf( "cos( %f ) = %f\n", x, y ); y = cosh( x ); printf( "cosh( %f ) = %f\n",x, y ); Konkuk University 34

직각삼각형예제 #include <stdio.h> #include <math.h> #define RAD_TO_DEG (45.0/atan(1)) int main(void) double w, h, r, theta; printf(" 밑변과높이를입력하시오 :"); scanf("%lf %lf", &w, &h); r = sqrt(w * w + h * h); theta = RAD_TO_DEG * atan2(h, w); printf(" 빗변 = %f 각도 = %f\n", r, theta); return 0; 밑변과높이를입력하시오 : 10.0 10.0 빗변 = 14.142136 각도 = 45.000000 Konkuk University 35

수학라이브러리함수들 abs(int x), fabs(double x) abs(-9) // 9 를반환 fabs(-3.67) // 3.67을반환 pow(double x, double y) 인수 x 의 y- 거듭제곱인 x y 을계산한다. pow( 2.0, 3.0 ); // 8.0 을반환 sqrt(double x) 주어진수의제곱근을구한다. 만약에음수가입력되면오류가발생한다. sqrt( 9.0 ); // 3.0을반환 ceil(double x) ceil은 x보다작지않은가장작은정수를반환 ceil( -2.9 ); // -2.0을반환 ceil( 2.9 ); // 3.0 을반환 floor(double x) floor() 는 x보다크지않은가장큰정수를반환한다. floor( -2.9 ); // -3.0을반환 floor( 2.9 ); // 2.0을반환 Konkuk University 36

난수생성라이브러리함수 // 난수생성프로그램 21783 #include <stdlib.h> 14153 #include <stdio.h> 4693 #include <time.h> 13117 // n개의난수를화면에출력한다. void get_random( int n ) int i; for( i = 0; i < n; i++ ) printf( " %6d\n", rand() ); // 0부터 RAND_MAX까지의난수를생성한다. 21900 19957 15212 20710 4357 16495 int main( void ) // 일반적으로난수발생기의시드 (seed) 를현재시간으로설정한다. // 현재시간은수행할때마다달라지기때문이다. srand( (unsigned)time( NULL ) ); get_random( 10 ); return 0; Konkuk University 37

함수를사용하는이유 소스코드의중복을없애준다. 한번만들어진함수를여러번호출하여사용할수있다. 한번작성된함수를다른프로그램에서도사용할수있다. 복잡한문제를단순한부분으로분해할수있다. void print_heading(void) int main(void) printf("*************************************"); printf(" NAME ADDRESS PHONE ");... printf("*************************************"); read_list(); sort_list(); int main(void) print_list();... // 출력이필요한위치 #1 print_heading();... // 출력이필요한위치 #2 print_heading();...... Konkuk University 38

Q&A Konkuk University 39