Presentation is loading. Please wait.

Presentation is loading. Please wait.

처음으로 배우는 C 프로그래밍 제3부 함수 제 6 장 함수 작성.

Similar presentations


Presentation on theme: "처음으로 배우는 C 프로그래밍 제3부 함수 제 6 장 함수 작성."— Presentation transcript:

1 처음으로 배우는 C 프로그래밍 제3부 함수 제 6 장 함수 작성

2 제 1 절 함수 정의와 선언 함수 함수의 정의 : 함수 헤더와 함수 몸체로 구성
데이터를 전달 받아 적당한 연산을 수행한 후 결과를 반환 main() 함수 내에서 사용자 정의 함수 호출 예 헤 maxnum = find_max(firstnum, secnum); find_max() 함수는 호출되는 함수(called function) main() 함수는 호출하는 함수(calling function) float find_max(float, float); 인자로 부동소수점 수 두개를 받아 부동소수점 수를 반환하는 find_max() 함수의 프로토타입 함수의 정의 : 함수 헤더와 함수 몸체로 구성 함수 헤더(function header)는 함수에 의해 반환되는 값의 데이터 형, 함수의 이름, 요구되는 인자들의 개수, 순서, 데이터 형을 명시

3 제 1 절 함수 정의와 선언 float find_max(float x, float y) : x, y를 형식 인자라 함 int max_it(float x, float y) max_it(float x, float y) : 반환 값의 형이 생략되면 정수를 반환한다고 가정 void display(int x, double y) : void는 반환하는 값이 없을 때 쓰임 double print_message(void) : void는 전달되는 인자가 없을 때에도 쓰임 함수 몸체(function body)는 전달된 인자를 이용하여 적당한 연산을 수행한 후 많아야 하나의 값을 반환. 열림 중괄호({)로 시작, 변수 선언, 유효한 C문장들, 반환문, 닫힘 중괄호(})로 끝남

4 제 1 절 함수 정의와 선언 함수의 선언: 함수 프로토타입 find_max() 함수의 완전한 정의
float find_max(float x, float y) /* 함수 헤더 */ { /* 함수 몸체의 시작 */ float maxnum; /* 변수 선언 */ if (x >= y) maxnum = x; /* 최대값을 찾는 문장 */ else maxnum = y; return (maxnum); /* 반환문 */ } /* 함수 몸체의 끝, 함수 정의의 끝 */ 함수의 선언: 함수 프로토타입 함수는 호출되기전에 반드시 선언되어야 한다 printf()나 scanf() 함수를 쓰기 위해서 #include <stdio.h> 선언

5 제 1 절 함수 정의와 선언 함수의 호출 함수 프로토타입 형태
return-data-type function-name(list of argument data type); float find_max(float, float); float roi(int, char, char, double); void display(double, double); 함수의 호출 maxnum = find_max(firstnum, secnum); firstnum, secnum은 실인자라고 불리고 함수 호출시 형식인자인 x, y로 복사되어 함수 내에서 사용된다 함수 내에서 x, y를 변경하여도 firstnum, secnum은 변경되지 않는다

6 제 2 절 표준 라이브러리 함수 C언어는 입출력, 수학, 문자열 등을 다루는 미리 프로그램된 함수들의 집합을 제공
표준 라이브러리 함수를 사용하기 전에 알아야 할 사항 함수가 하는 일, 예: 제곱근을 구한다 함수 이름, 예: sqrt 요구되는 인자들: double형의 제곱근을 구하고자 하는 수 반환되는 데이터 형: double형 함수가 선언된 헤더 파일: math.h

7 제 2 절 표준 라이브러리 함수 입출력 라이브러리 함수
헤더 파일: stdio.h, stdio는 standard input/output의 약자 getchar() 함수 한 문자를 입력받는다. 프로토타입: int getchar(void); in_char = getchar(); scanf(“%c”, &in_char); 과 동일 연속적으로 문자열을 입력받을 때 유용 putchar() 함수 한 문자를 출력한다 프로토타입: void putchar(int); putchar(‘a’); printf(“%c”, ‘a’); 와 동일

8 제 2 절 표준 라이브러리 함수 수학 라이브러리 함수 헤더 파일: math.h
int abs(int n); 정수 n의 절대값을 반환한다 double pow(double x, double y); x의 y승을 반환한다 double sin(double r); r 라디안의 사인값을 반환한다 double sqrt(double n); n의 제곱근을 반환한다. n이 음수인 경우는 0을 반환한다 수식도 값을 가지므로 함수의 인자로 쓰일 수 있다 n = pow(5, p * q); n = sqrt(p * q) + pow(p + q, 2); n = sqrt(abs(theta));

9 제 2 절 표준 라이브러리 함수 문자열 라이브러리 함수 헤더 파일: string.h
strcat(string1, string2); string1과 string2를 연결 strchr(string, character); string에서 character가 처음 나타나는 위치를 반환 strcmp(string1, string2); string1과 string2를 비교 strcpy(string1, string2); string1에 string2를 복사 strlen(string); string의 길이를 반환

10 제 2 절 표준 라이브러리 함수 그 밖의 루틴들 ctype.h에 선언된 유용한 함수들
isalpha(character); character가 알파벳이면 참, 아니면 거짓을 반환 isupper(character); character가 대문자이면 참, 아니면 거짓을 반환 islower(character); character가 소문자이면 참, 아니면 거짓을 반환 isdigit(character); character가 숫자이면 참, 아니면 거짓을 반환 toupper(character); character가 소문자이면 대문자를, 아니면 변경되지 않은 character를 반환 tolower(character); character가 대문자이면 소문자를, 아니면 변경되지 않은 character를 반환

11 제 3 절 변수 유효 범위 변수 유효 범위 프로그램 내에서 변수가 유효한 공간, 즉 변수가 사용될 수 있는 위치를 정의
지역 유효 범위 함수 몸체 내에서 선언문에 의해 선언된 변수가 갖는 유효 범위 지역 변수 선언된 함수 내에서만 사용 가능 같은 이름의 변수는 서로 다른 함수에서 사용 가능 전역 유효 범위 함수 밖에서 선언된 변수가 갖는 유효 범위 전역 변수, 외부 변수 변수가 선언된 위치 아래에 있는 모든 함수에서 사용 가능

12 제 3 절 변수 유효 범위 int firstnum; /* 전역 변수 */ void valfun(void) {
int secnum; /* 지역 변수 */ secnum = 30; firstnum = 40; } void main(void) { firstnum = 10; secnum = 20; valfun(); 전역 변수 firstnum, valfun() 함수의 지역 변수 secnum, main() 함수의 지역 변수 secnum 3개의 변수에 대한 저장 공간이 생성된다

13 제 3 절 변수 유효 범위 전역 변수의 잘못된 사용 함수에 인자를 전달하지 않고 모든 변수를 전역 변수로 만들어 함수에서 사용하도록 하는 것은 가능하나 이것은 함수가 서로 독립적이게 하는 특성을 무시하는 것 전역 변수의 무분별한 사용은 프로그램이 커질수록 프로그램은 엉망이 되며 오류를 추적하기 매우 어려워짐 여러 함수가 데이터를 공유할 때는 효율적

14 제 4 절 변수 기억 장소 부류 기억 장소 부류 변수가 어디에서 얼마나 오랫동안 유지되는가를 결정
auto, static, extern, register 등 4개의 기억 장소 부류가 존재 기억 장소 부류 지정 시 변수의 데이터 형 앞에 기술 auto int num; static int miles; register int dist; extern int price; 지역 변수 기억 장소 부류 지역 변수의 기억 장소 부류는 auto, static, register 중의 하나가 될 수 있다

15 제 4 절 변수 기억 장소 부류 기억 장소 부류가 지정되지 않으면 자동으로 auto 기억 장소부류가 할당
static 기억 장소 부류를 갖는 변수는 함수가 비록 제어를 반환했을 지라도 이전 값을 유지, 번역시에 생성되고 초기화되며 실행 시에는 초기화되지 않는다 void foo(void) { static int n = 3; /* static을 생략하면 호출될 때마다 초기화된다 */ }

16 제 4 절 변수 기억 장소 부류 전역 변수 기억 장소 부류
register 기억 장소 부류는 auto와 같은 시간 존속을 가지며 CPU내의 register 내에 기억 공간이 할당, auto는 메모리에 할당, register 기억 장소 부류를 갖는 변수에는 번지 연산자 &를 사용할 수 없음 전역 변수 기억 장소 부류 전역 변수는 프로그램이 종료될 때까지 존재 static, extern의 기억 장소 부류를 가질 수 있음 extern 기억 장소 부류를 갖는 전역 변수는 선언된 파일 뿐만 아니라 다른 파일에서도 접근 가능 extern은 새로이 기억 공간을 할당하지 않으며, 단지 이미 존재하는 변수의 범위를 다른 파일로 확장 static은 변수가 다른 파일로 확장되지 못하게 함

17 제 5 절 주소 전달 값에 의한 호출(call by value) 참조에 의한 호출(call by reference)
함수에게 인자 전달 시, 변수의 값을 그대로 복사하여 전달하는 호출 방식 참조에 의한 호출(call by reference) 함수에게 인자 전달 시, 변수의 주소를 전달함으로써 전달된 변수를 직접 접근할 수 있게 하는 호출 방식 주소의 전달, 저장 그리고 사용 주소 연산자 &: 변수의 주소를 의미 &firstnum: 변수 firstnum의 주소를 의미 &secnum: 변수 secnum의 주소를 의미

18 제 5 절 주소 전달 포인터(poinger) 변수: 주소를 저장하는 변수 간접 연산자 *: 포인터 변수가 가리키는 메모리 내용
char *in_addr; int *num_pt; 포인터 변수의 크기는 데이터형에 관계없이 같으며 데이터형은 주소 접근 시에 얼마나 많은 메모리를 접근하는가에 필요, 즉 num_pt를 이용하여 메모리 접근 시에 int형 크기 만큼의 메모리 접근이 필요 간접 연산자 *: 포인터 변수가 가리키는 메모리 내용 *in_addr: in_addr이 가리키는 메모리에 있는 값 char ch; char *ch_pt; ch = ‘a’; ch_pt = &ch; /* *ch_pt는 ‘a’이다 */

19 제 5 절 주소 전달 주소를 전달 받는 함수의 예제 void sortnum(double *num1_addr, double *num2_addr) { double temp; if (*num1_addr > *num2_addr) { temp = *num1_addr; *num1_addr = *num2_addr; *num2_addr = temp; } 함수 호출 시에 num1_addr, num2_addr 변수가 생성되며 이들은 전달된 변수의 주소 값으로 초기화 된다

20 제 6 절 일반적인 프로그래밍 오류 함수에 틀린 데이터형을 전달: 컴파일러 오류
함수에 틀린 값을 전달: 함수 몸체 시작에서 전달된 모든 값을 찍어 본다 함수 내에 선언된 지역변수가 전역변수의 이름과 같을 때 지역변수의 변경은 전역변수의 변경에 영향을 미치지 못함. 따라서 그 함수에서는 전역변수를 절대로 변경하지 못함 함수의 프로토타입을 생략하는 것 함수 정의시 함수 헤더 마지막에 세미콜론을 찍는 것과 인자의 데이터형을 포함하는 것을 잊는 것

21 제 7 절 요약 함수 호출은 함수 이름과 괄호 내에 전달되는 데이터들을 기술함으로써 이루어지고 함수는 복사본을 받는다
함수의 정의 return-type function-declarator /* 함수 헤더 */ { /* 함수 몸체 시작 */ declarations; statements; } /* 함수 몸체 끝 */ 기억 부류를 명시하지 않으면 extern이 됨

22 제 7 절 요약 함수의 반환형은 함수가 반환하는 데이터형을 말한다.
함수는 많아야 return문을 이용해 하나의 값을 반환한다. 함수 프로토타입 data-type function-name(parameter data types); 함수가 호출되기 전에 반드시 선언되어야 한다 호출되는 함수가 호출하는 함수의 위에 정의되어 있다면 추가의 선언은 필요 없다

23 제 7 절 요약 C언어는 입출력, 수학, 문자열 등의 처리를 위해 미리 프로그램된 라이브러리를 제공한다
모든 변수는 유효 범위를 가지며 그 변수가 사용될 수 있는 곳을 지정한다. 모든 변수는 기억 장소 부류를 가지며 그 변수가 얼마나 오랫동안 유지되는가를 나타낸다. 함수가 변수의 주소를 전달받음으로써 많은 값을 효과적으로 반환할 수 있다

24 제 8 절 추상화에 대한 소개 추상화(abstraction) 데이터형 추상화 내장된 추상 데이터형
그룹내의 어떤 특정 개체와도 독립적으로 객체 그룹의 일반적인 특징과 성질을 정의 데이터형 추상화 받아들일 수 있는 값들의 범위 이들 값들에 적용될 수 있는 연산자 집합 내장된 추상 데이터형 언어가 제공하는 기본적인 데이터형 C++는 사용자 정의 추상 데이터형을 정의할 수 있도록 class 제공

25 제 8 절 추상화에 대한 소개 절차 추상화 함수가 간단히 이름과 인자만으로 호출 가능하도록 함수에 이름을 부여하는 것
사용자 정의 함수 작성은 절차 추상화를 만드는 것 함수가 구체적으로 수행하는 내용을 숨김 높은 수준에서 문제 해결 가능


Download ppt "처음으로 배우는 C 프로그래밍 제3부 함수 제 6 장 함수 작성."

Similar presentations


Ads by Google