함수의선언및정의, 함수호출및인수전달방 법을학습

Similar documents
Microsoft PowerPoint - Chapter8.pptx

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - ch04 - 함수 pm0130

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

중간고사

PowerPoint 프레젠테이션

슬라이드 1

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

쉽게 풀어쓴 C 프로그래밍

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

C 프로그래밊 개요

untitled

untitled

PowerPoint 프레젠테이션

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

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

슬라이드 1

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap-03.pptx

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

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

설계란 무엇인가?

Microsoft PowerPoint - Lesson2.pptx

슬라이드 1

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

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

Microsoft PowerPoint - chap12-고급기능.pptx

11장 포인터

untitled

쉽게 풀어쓴 C 프로그래밍

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

OCW_C언어 기초

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

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

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

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

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

Microsoft PowerPoint - chap-11.pptx

ch15

PowerPoint Presentation

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

Microsoft PowerPoint - 제11장 포인터

C 프로그램의 기본

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

<4D F736F F F696E74202D20C1A63134C0E520C6F7C0CEC5CD5FC8B0BFEB>

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

PowerPoint Template

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

Microsoft PowerPoint - chap06-2pointer.ppt

OCW_C언어 기초

<4D F736F F F696E74202D20C1A639C0E520C7D4BCF6BFCDBAAFBCF6>

Microsoft PowerPoint - chap05-제어문.pptx

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap-09.pptx

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap-07.pptx

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

설계란 무엇인가?

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

Microsoft PowerPoint - ch07 - 포인터 pm0415

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

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

슬라이드 1

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - Chapter 1-rev

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

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

PowerPoint Template

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

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - Lesson6.pptx

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

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

Microsoft PowerPoint - chap04-연산자.pptx

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

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

C 프로그래밊 개요

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

Microsoft PowerPoint - [2009] 02.pptx

17장 클래스와 메소드

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - 04_C_Language_Function

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - C++ 5 .pptx

컴파일러

슬라이드 1

Microsoft PowerPoint - Java7.pptx

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

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

Microsoft PowerPoint - chap-06.pptx

Microsoft PowerPoint - ch01.ppt

Infinity(∞) Strategy

Microsoft PowerPoint - 2주차-1차시 (강의자료) ch01 - C Programming 기초 (part 2)

슬라이드 1

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

Transcription:

함수의선언및정의, 함수호출및인수전달방 법을학습

학습할내용 모듈화 함수의개념, 역할 함수작성방법 반환값 인수전달 함수를사용하는이유

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

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

함수의필요성 #include <stdio.h> int main(void) { int i; for(i = 0; i < 10; i++) printf("*");... for(i = 0; i < 10; i++) printf("*");... for(i = 0; i < 10; i++) printf("*"); return 0; }

함수의장점 함수를사용하면코드가중복되는것을막을수있다. 한번작성된함수는여러번재사용할수있다. 함수를사용하면전체프로그램을모듈로나눌수있어서개발과정이쉬워지고보다체계적이되면서유지보수도쉬워진다.

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

함수의종류 사용자정의함수 라이브러리함수

함수의정의 반환형 (return type) 함수헤더 (function header) 함수몸체 (function body) int get_max(int x, int y) 반환값 : int 함수이름 : get_max 매개변수 : int x, int y

함수의예 정수의제곱값을계산하는함수 int square( int n ) { return(n*n); } 반환값 : int / 함수이름 : square / 매개변수 : int n

함수의예 두개의정수중에서큰수를계산하는함수 int get_max(int x, int y) { } if( x > y ) return(x); else return(y); 반환값 : int / 함수이름 : get_max / 매개변수 : int x, int y

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

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

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

함수호출과반환 함수호출 (function call): 함수를사용하기위하여함수의이름을적어주는것 함수안의문장들이순차적으로실행된다. 문장의실행이끝나면호출한위치로되돌아간다. 결과값을전달할수있다. int main(void) {... } sum = add(2, 3);... int add(int x, int y) {......... }

인수와매개변수 인수 (argument): 실인수, 실매개변수라고도한다. 매개변수 (parameter): 형식인수, 형식매개변수라고도한다.

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

함수예제 // 정수의제곱을계산하는함수예제 #include <stdio.h> int square(int n); int main(void) { int result; result = square(5); printf("%d ", result); } int square(int n) { } return(n * n);

함수예제 / 두수중에서큰수를찾는함수예제 #include <stdio.h> int get_max(int x, int y); int main(void) { int a, b; printf(" 두개의정수를입력하시오 : "); scanf("%d %d", &a, &b); printf(" 두수중에서큰수는 %d입니다.", get_max( a, b )); return 0; } int get_max(int x, int y) { if( x > y ) return(x); else return(y); }

함수예제 // 거듭제곱값을구하는예제 #include <stdio.h>int get_integer(void); int power(int x, int y); int main(void) { int a, b; a = get_integer(); b = get_integer(); printf("%d 의 %d 승은 %d 입니다. ", a, b, power(a, b)); return 0; } // 사용자로부터값을입력받아서반환 int get_integer(void) { int n; printf(" 정수를입력하시오 : "); scanf("%d", &n); return n; }

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

소스 #include <stdio.h> int get_integer(void); int combination(int n, int r); int factorial(int n); 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; int combination(int n, int r) { return (factorial(n)/(factorial(r) * factorial(n-r))); }

소스 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; // result = result * i return result;

중간점검 인수와매개변수는어떤관계가있는가? 반환값이실수로정의된함수에서실수로정수를반환하면어떤일이발생하는가?

실습 : 소수찾기 주어진숫자가소수 (prime) 인지를결정하는프로그램이다. 양의정수 n 이소수가되려면 1 과자기자신만을약수로가져야한다. 암호학에서많이사용 사용자로부터정수를입력받아서변수 n 에저장한다. 약수의개수를 0 으로초기화한다. for( i=1; i<=n ; i++ ) n을 i로나누어서나머지가 0인지본다. 나머지가 0이면약수의개수를증가한다. 약수의개수가 2이면정수 n은소수이다.

소스 { #include <stdio.h> int is_prime(int); int get_integer(void); main() int n, result; n = get_integer(); result = is_prime(n); if ( result == 1 ) printf("%d은소수입니다.\n", n); else printf("%d은소수가아닙니다.\n", n); return 0; }

int get_integer(void) { int n; printf(" 정수를입력하시오 : "); scanf("%d", &n); return n; } int is_prime(int n) { int divisors = 0, i; for ( i = 1 ; i <= n ; i++ ) { if ( n%i == 0 ) divisors++; } return (divisors == 2); }

도전문제 is_prime() 함수의실행속도를바르게하기위하여어떤코드를추가할수있는지생각하여보자. 현재버전은검사하는숫자가매우크면비효율적이다. 예를들어서 1,000,000 에대하여호출되면백만번반복을하여야한다. 한가지방법은 1 보다크고 n 보다작은숫자중에서약수가하나라도발견되면이미 n 은소수가아니라고생각하는것이다. 이것을코드로작성하여추가하여보자.

함수원형 (function prototyping) 함수원형 (function prototyping): 컴파일러에게함수에대하여미리알리는것 반환형함수이름 ( 매개변수 1, 매개변수 2,... ); ( 예 ) int get_integer(void); int combination(int n, int r); ( 예 ) int get_integer(void); int combination(int, int);

함수원형을사용하지않는예제 int compute_sum(int n) { int i; int result = 0; for(i = 1; i <= n; i++) result += i; return result; } { int main(void) int sum; sum = compute_sum(100); printf( sum=%d \n, sum); } 함수정의가함수호출보다먼저오면함수원형을정의하지않아도된다. 그러나일반적인방법은아니다.

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

중간점검 함수정의의첫번째줄에는어떤정보들이포함되는가? 이것을무엇이라고부르는가? 함수가반환할수있는값의개수는? 함수가값을반환하지않는다면반환형은어떻게정의되어야하는가? 함수정의와함수원형의차이점은무엇인가? 함수원형에반드시필요한것은아니지만대개매개변수들의이름을추가하는이유는무엇인가? 다음과같은함수원형을보고우리가알수있는정보는어떤것들인가? double pow(double, double);

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

난수함수 난수 (random number) 는규칙성이없이임의로생성되는수이다. 난수는암호학이나시뮬레이션, 게임등에서필수적이다. rand() 난수를생성하는함수 0 부터 RAND_MAX 까지의난수를생성

예제 : 로또번호생성하기 1 부터 45 번사이의난수발생 { #include <stdio.h> #include <stdlib.h> int main(void) int i; for(i = 0; i < 6; i++) printf("%d ", 1+(rand()%45)); return 0; }

실행할때마다다르게하려면 매번난수를다르게생성하려면시드 (seed) 를다르게하여야한다. srand( (unsigned)time( NULL ) ); #include <stdlib.h> #include <stdio.h> #include <time.h> #define MAX 45 int main( void ) { int i; srand( (unsigned)time( NULL ) ); for( i = 0; i < 6; i++ ) printf("%d ", 1+rand()%MAX ); return 0; }

실습 : 자동차게임 난수를이용하여서자동차게임을작성 사용자가키를누를때마다 1초씩주행하도록하자. 주행거리는난수로결정된다. 난수발생기를초기화한다 for( i=0; i< 주행시간 ; i++) 난수를발생하여서자동차1의주행거리에누적한다. 난수를발생하여서자동차2의주행거리에누적한다. disp_car() 를호출하여서자동차1을화면에 * 표로그린다. disp_car() 를호출하여서자동차2을화면에 * 표로그린다.

소스 #include <stdlib.h> #include <stdio.h> #include <time.h> void disp_car(int car_number, int distance); int main(void) { int i; int car1_dist=0, car2_dist=0; srand( (unsigned)time( NULL ) ); for( i = 0; i < 6; i++ ) { car1_dist += rand() % 100; car2_dist += rand() % 100; disp_car(1, car1_dist); disp_car(2, car2_dist); printf("---------------------\n"); } return 0; } getch();

void disp_car(int car_number, int distance) { int i; printf("car #%d:", car_number); for( i = 0; i < distance/10; i++ ) { printf("*"); } } printf("\n");

도전문제 위의프로그램을참고하여서숫자야구게임을작성해보자. 숫자야구게임은 1~9 까지의숫자중에서 3 개를뽑아서문제를낸다. 단숫자가중복되면안된다. 예를들어 029 라고하자. 사용자는이숫자를맞추게된다. 각자리수와숫자가모두일치하면스트라이크, 숫자만맞으면볼이라고출력한다. 029 vs 092 -> 1 스트라이크 2 볼

삼각함수 // 삼각함수라이브러리 #include <math.h> #include <stdio.h> 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 );

수학라이브러리함수들 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을반환

중간점검 90 도에서의싸인값을계산하는문장을작성하여보라. rand() % 10 이계산하는값의범위는?