함수 정의, void 자료형 함수 원형선언 함수 호출 변수 영역 규칙 재귀 함수

Slides:



Advertisements
Similar presentations
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
Advertisements

1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
Part 03 상수, 변수, 자료형 ©우균, 창병모 © 우균, 창병모.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
제 9 장 포인터.
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
컴퓨터 프로그래밍 기초 [Final] 기말고사
-Part2- 제3장 포인터란 무엇인가.
개정판 누구나 즐기는 C언어 콘서트 제8장 함수 출처: pixabay.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
10장 함수.
Chapter 02 순환 (Recursion).
07 그룹 함수 그룹 함수의 개념 그룹 함수의 종류 데이터 그룹 생성 HAVING 절.
C 프로그래밍.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
6주차: Functions in C and Others
2주차: 변수, 수식, Control Flow.
보고서 #5(제출기한: 10/14) 다음 문제를 해결하시오.
Tail-recursive Function, High-order Function
쉽게 풀어쓴 C언어 Express 제9장 함수와 변수 C Express Slide 1 (of 33)
14장. 포인터와 함수에 대한 이해.
11장. 1차원 배열.
C#.
13. 연산자 오버로딩.
Method & library.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
프로그래밍 개요
어서와 C언어는 처음이지 제14장.
27장. 모듈화 프로그래밍.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
19. 함수 포인터와 void 포인터.
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
10장 부프로그램 구현 순천향대학교 컴퓨터공학과 하 상 호.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
Hanoi Tower.
김선균 컴퓨터 프로그래밍 기초 - 7th : 함수 - 김선균
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
8주차: Strings, Arrays and Pointers
5장 선택제어문 if 선택문 switch-case 선택문 다양한 프로그램 작성 조건 연산자.
Chapter 08. 함수.
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
컴퓨터 프로그래밍 기초 [01] Visual Studio 설치 및 사용방법
Fucntion 요약.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
함수(Function) ◈ 함수의 개념 및 사용 이유 ◈ 함수 정의, 호출 및 선언 ◈ 지역변수와 전역변수 ◈ return 문
제 6 장 함수(functions).
에어 PHP 입문.
7장 함수(Function).
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
7주차: Functions and Arrays
함수, 모듈.
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
Chapter 11 구조체.
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
제 29 강 스트링(string) 다루기 s a i s . s T i h t g r i n.
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
어서와 C언어는 처음이지 제21장.
수업 내용 수업 목표 강의 내용 강의 계획서 교과서 및 참고도서 평가 방법 수강생의 학습 방법 제안 강의자료 사이트
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

함수 정의, void 자료형 함수 원형선언 함수 호출 변수 영역 규칙 재귀 함수 5장 함수 함수 정의, void 자료형 함수 원형선언 함수 호출 변수 영역 규칙 재귀 함수

함수 함수 문제 해결 방법 C 프로그램은 어떠한 일을 수행하는 프로그램의 부분 문제를 여러 개의 작은 문제로 나누고 작은 문제를 해결하는 함수들을 작성 모듈화 이 함수들을 사용하여 문제를 해결 함수의 반복 사용(재사용) 가능 C 프로그램은 하나 이상의 함수로 구성 main 함수를 반드시 포함하며, main 함수부터 실행함 함수는 인수를 받아서 함수의 프로그램을 실행하고 실행 결과를 반환값으로 돌려줌 C 언어 프로그래밍

함수 소개 함수를 사용하지 않은 프로그램 #include <stdio.h> int main(void) { printf("Begin\n"); printf("Welcome\n"); printf("Learn C function\n"); printf("End\n"); return 0; } 함수를 사용한 프로그램 #include <stdio.h> void welcome(void) … 함수 정의 { printf("Welcome\n"); printf("Learn C function\n"); } int main(void) printf("Begin\n"); welcome(); … 함수 호출 printf("End\n"); return 0; [출력] Begin Welcome Learn C function End C 언어 프로그래밍

함수 소개 – 함수 재사용 함수를 사용한 프로그램 함수를 사용하지 않는 프로그램 #include <stdio.h> int main(void) { printf("Welcome\n"); printf("Learn C function\n"); printf("Begin\n"); printf("End\n'); return 0; } 함수를 사용한 프로그램 #include <stdio.h> void welcome(void) … 함수 정의 { printf("Welcome\n"); printf("Learn C function\n"); } int main(void) welcome(); … 함수 호출 printf("Begin\n"); printf("End\n"); return 0; 3번 반복 C 언어 프로그래밍

함수를 사용한 프로그램 (예 5.1) 함수 원형선언, 함수 정의, 함수 호출로 구성 C 언어 프로그래밍

함수를 사용한 프로그램의 실행 과정 main 함수 add 함수 1. printf("begin ...") 실행 2. 함수 호출: add(10, 20)  인수 10과 20을 함수 add로 보냄 3. 매개변수 a, b가 인수 10, 20을 받음 4. printf("Welcome ...") 실행 5. a + b를 계산하여 결과를 반환(30) 6. add(10,20)의 반환값을 sum에 저장 7. printf("sum ...") 실행 8. 0을 반환하고 프로그램 종료 C 언어 프로그래밍

함수의 정의 함수의 정의 return문 함수가 수행할 일을 기술하는 부분 자료형 함수이름(매개변수 목록) … 함수 header { 변수 선언 함수의 프로그램 … 함수 body } return문 함수의 반환값(결과)을 함수를 호출한 곳에 반환 return 수식; … 수식의 값을 반환하며 함수 종료 return; … 함수 종료 (반환값 없음) 반환값의 자료형 C 언어 프로그래밍

void 자료형 void 자료형: 반환값의 자료형을 선언하지 않으면 int형으로 간주 (권장하지않음) 자료가 없음을 나타내는 특수한 자료형 void print_char(char c, int n) … 함수의 반환값이 없음을 나타냄 { … } void welcome(void) … 괄호 안의 void는 인수가 없음을 나타냄 반환값의 자료형을 선언하지 않으면 int형으로 간주 (권장하지않음) func( … ) int func( …) 와 같음 { { … ... } } C 언어 프로그래밍

예제 (예 5.3) 함수 print_char(): 문자 c를 n번 출력하고 줄 바꾸는 함수 출력만 수행하고 반환값은 없음  void 자료형 [출력] ********** ----- C 언어 프로그래밍

함수 원형 선언과 함수 호출 함수 원형(prototype) 선언 함수의 호출 함수를 사용하기 전에 함수의 반환값과 매개변수들의 자료형을 선언하는 것 void print_char(char, int); 또는 void print_char(char c, int n); … 함수정의의 헤더에 ; 을 붙인 것 함수 호출할 때에 잘못 사용하는 것을 컴파일러가 알 수 있도록 함. 함수의 호출 함수에게 인수 값을 제공하여 함수를 실행시키고 결과를 반환 받음 함수(인수값1, 인수값2, …) 호출하는 함수는 앞에 함수 원형 선언 또는 함수 정의가 있어야 함. C 언어 프로그래밍

예제 (1) (2) 함수 원형 선언 (함수 정의가 뒤에 있는 경우에 반드시 해야 함) 함수 호출 함수 정의 함수 정의 함수 원형 선언 (함수 정의가 뒤에 있는 경우에 반드시 해야 함) 함수 호출 함수 정의 함수 정의 함수 호출 C 언어 프로그래밍

함수 호출과 인수 전달 인수와 매개변수 함수 호출과 인수 전달 인수(실 매개변수): 함수를 호출할 때에 함수에 제공되는 값 인수(실 매개변수): 함수를 호출할 때에 함수에 제공되는 값 매개변수(형식 매개변수): 함수 정의에서 인수를 받기 위해서 사용되는 변수 함수 호출과 인수 전달 함수를 호출할 때에 인수의 값이 매개변수로 복사되어 전달된다.  값에 의한 호출(call by value) 매개변수 값의 변화가 인수(실 매개변수)에는 영향을 주지 않음 실 인수 형식 인수 복사 a = x; b = 20; main() { … a = max(x, 20); } int max(int a, int b) { if (a >= b) return a; else return b; } C 언어 프로그래밍

예제: 매개변수 값이 변하는 함수 (예 5.6) 예 5.3의 print_char 함수를 재작성 count는 함수 호출 후에도 값이 변하지 않고 10임 n은 0으로 감소되어 반복문이 종료함 인수 count 값이 매개변수 n으로 복사되어 전달됨 매개변수 n 값이 함수 내에서 변화함 C 언어 프로그래밍

예제 (예 5.15) 다음 합을 계산하는 프로그램을 함수로 작성하고 n=10에 대해서 k=1부터 5까지의 결과를 출력 S = 1k + 2k + ... + nk 두 함수 작성 int sum_of_power(int n, int k) ... 1k + 2k + ... + nk 계산 int power(int n, int k) ... nk 계산 C 언어 프로그래밍

C 언어 프로그래밍

지역변수와 전역변수 변수의 영역규칙(scope rule) 지역변수와 전역변수 지역변수와 전역변수의 이름은 같을 수 있다. 변수를 사용할 수 있는 유효 범위에 대한 규칙 지역변수와 전역변수 지역변수(local variable) 함수 내에서 선언, 함수 내에서만 사용 가능 { } 내에서 선언, { } 내에서만 사용 가능 전역변수(global variable) 함수바깥에서 선언, 선언한 이후의 모든 함수에서 사용 가능 extern을 사용하면 유효범위를 넓힐 수 있음. 지역변수와 전역변수의 이름은 같을 수 있다. 지역변수와 전역변수의 이름이 같으면 지역변수가 유효함 중첩된 블록의 지역변수들의 이름이 같으면 가장 안쪽에서 정의된 지역변수가 유효함 같은 이름을 사용하지 않을 것을 권장함. C 언어 프로그래밍

예제: 지역변수와 전역변수의 유효범위 지역변수와 전역변수의 유효범위 int b, i; … 전역변수 int main(void) { int b, i; … 지역변수 1 … int c, i; … 지역변수 2 } 변수 b, i는 지역변수1의 것 변수 i는 지역변수2의 것 C 언어 프로그래밍

예제: 전역변수의 사용 전역변수의 사용 (예5.9) 전역변수에 결과를 저장하는 함수 add_sub() 많은 함수에서 사용하는 공용성이 높은 변수에 대해서 주로 사용 함수의 독립성을 위해서 전역변수의 사용을 최소화하는 것이 바람직함 (예5.9) 전역변수에 결과를 저장하는 함수 add_sub() int sum(int a, int b); void add_sub(int a, int b); int sum_glb, diff_glb; … 전역변수 int main(void) { int sum_loc; … 지역변수 sum_loc = sum(10, 20); printf("sum_loc = %d\n", sum_loc); add_sub(10, 20); printf("sum_glb = %d, diff_glb = %d\n", sum_glb, diff_glb); return 0; } int sum(int a, int b) { return a+b; } void add_sub(int a, int b) sum_glb = a+b; diff_glb = a-b; C 언어 프로그래밍

기억장소 할당 방법 기억장소 할당방법 지역변수의 기억장소 할당 전역변수의 기억장소 할당 정적할당: 프로그램 실행 처음부터 끝까지 기억장소를 할당 동적할당: 필요한 동안에만 기억장소를 할당, 효율적인 기억장소 사용 지역변수의 기억장소 할당 기본적으로 동적할당 (auto와 함께 선언한 것과 같음, auto는 생략가능) int a; … auto int a; static을 함께 사용하면 지역변수를 정적할당 static int count; register를 함께 사용하면 지역변수를 CPU내의 레지스터에 할당 register int i; 전역변수의 기억장소 할당 정적할당 프로그램 전체에서 같은 이름의 전역변수는 한 개만 가능 C 언어 프로그래밍

예제: 정적 지역변수 사용 (예 5.10) 자동변수와 지역변수의 차이점을 확인하는 예 #include <stdio.h> void sum(void); int main(void) { sum(); return 0; } void sum(void) { static int a = 0; … 한번만 초기화 int b = 0; … 호출될 때마다 초기화 a++; b++; printf("a = %d, b = %d\n", a, b); } [출력] a = 1, b = 1 a = 2, b = 1 a = 3, b = 1 C 언어 프로그래밍

예제: 정적 지역변수 사용 main() { printf(“First=%d\n”,receip()); printf(“Second=%d\n”,receip()); } receip() static int number=1; return (number++); C 언어 프로그래밍

변수의 구분 C 언어 프로그래밍

재귀함수 함수는 자기 자신을 호출 가능  재귀 호출 재귀함수(recursive function) 함수는 자기 자신을 호출 가능  재귀 호출 재귀함수(recursive function) 직접 또는 간접적으로 자기자신을 호출하는 함수 f_direct() f_indirect() { { … … f_direct(); f_another(); } } f_another() { f_indirect(); } C 언어 프로그래밍

예제: 재귀 함수 사용 (예 5.11) 인수 n을 받아서 1부터 n까지의 정수의 합을 계산하는 함수를 재귀함수로 작성 S(n) = S(n-1) + n (n > 1) … 재귀함수로 구현 가능 S(1) = 1 재귀 호출 C 언어 프로그래밍

예제(계속) 재귀함수 동작 재귀 함수는 궁극적으로는 재귀 호출을 하지 않고 종료될 수 있어야 함. 재귀 재귀 C 언어 프로그래밍

예제: 하노이 탑 1 1 2 2 3 3 a b c a b c (예 5.13) 하노이 탑 문제 3개의 막대: a, b, c 초기상태: 막대 a에 n개의 원반이 크기 순서대로 놓여 있음 다음 규칙을 지키면서 원반을 막대 a에서 막대 c로 이동 1. 원반은 한 번에 하나씩 이동 2. 큰 원반은 작은 원판 위에 놓일 수 없다. 1 1  2 2 3 3 a b c a b c 초기막대 작업막대 목표막대 C 언어 프로그래밍

예제(계속) 해결 방법: 함수 hanoi() 1. n-1 개의 원반을 막대 a에서 막대 b로 이동 … 같은 문제, 크기 n-1 2. n번째 원판을 막대 a에서 막대 c로 이동 3. n-1 개의 원반을 막대 b에서 막대 c로 이동 … 같은 문제, 크기 n-1 함수 hanoi() /* n: 원반 수, x: 초기막대, y: 작업막대, z: 목표막대 */ /* 원반 n개를 막대 x에서 막대 z로 이동시키는 과정을 출력 */ void hanoi(int n, char x, char y, char z) { if (n > 1) { hanoi(n-1, a, c, b); printf("원반 %d: %c => %c\n", n, a, c); /* 출력형식: 원반 3: a => c */ hanoi(n-1, b, a, c); } .... } C 언어 프로그래밍

예제(계속) [출력] 원반 1 : a ==> c 원반 2 : a ==> b 원반 1 : c ==> b 원반 1 : b ==> a 원반 2 : b ==> c [출력] C 언어 프로그래밍