제 6장 함수 Hello!! C 언어 강성호 김학배 최우영.

Slides:



Advertisements
Similar presentations
기본 자료형 순천향대학교 정보기술공학부 이 상 정. 자료형의 선언 컴퓨터프로그래밍 1 순천향대학교 정보기술공학부 이 상 정 3 자료형 선언 기본 자료형문자형 char 정수형 int 실수형 float double 형없음 void.
Advertisements

제6장 조건문.
데이터의 표현과 연산 (1) (Chapter 3)
제 3 장 변수와 자료형.
Recursion SANGJI University KO Kwangman
슬라이드 1~21까지는 각자 복습! 슬라이드 22부터는 수업시간에 복습
Power C++ 제6장 포인터와 문자열.
배열, 포인터 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
C++ Espresso 제2장 제어문과 함수.
9장 부프로그램(2) 순천향대학교 컴퓨터공학부 하 상 호.
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express.
C 프로그래밍.
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express.
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
쉽게 풀어쓴 C언어 Express 제8장 함수 C Express Slide 1 (of 26)
C 10장. 함수의 활용 #include <stdio.h> int main(void) { int num;
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
C언어: 배열 (Arrays).
컴퓨터의 기초 제 4강 - 표준 입출력, 함수의 기초 2006년 4월 10일.
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
6장. printf와 scanf 함수에 대한 고찰
쉽게 풀어쓴 C언어 Express 제9장 함수와 변수 C Express.
누구나 즐기는 C언어 콘서트 제4장 수식과 연산자.
-Part3- 제5장 전처리기와 파일 분할 컴파일
연산자 대입 연산자 산술 연산자 관계 연산자 논리 연산자 비트 연산자 콤마 연산자 축약 연산자 sizeof 연산자
C 7장. 배열과 문자열 #include <stdio.h> int main(void) { int num;
기초C언어 제3주 C프로그램 구성요소, 변수와 자료형 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express.
Chapter 06. 선택문.
6장 배열.
제 3 장 상수와 변수
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
C 4장. 연산자 #include <stdio.h> int main(void) { int num;
2장 표준 입출력 표준 입출력 함수의 종류 형식화된 입출력 문자 입출력 문자열 입출력.
개정판 누구나 즐기는 C언어 콘서트 제6장 반복문 출처: pixabay.
Chapter 2 Lexical Elements, Operators, and the C System
제2장 데이터형과 표준 입출력문 문봉근.
자전거를 배우려면 안장에 올라가 페달을 밟아라.
컴퓨터 프로그래밍 기초 - 4th : 수식과 연산자 -
함수와 변수 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
제어문 & 반복문 C스터디 2주차.
CHAP 2:순환.
제 1 강.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
컴퓨터 프로그램 제2,3장 간단한 C 프로그램 김 문 기.
프로그래밍 기초와 실습 Chapter 11 Recursion.
Chapter 11. 배열과 포인터.
CHAP 2:순환 순천향대학교 컴퓨터공학과.
실습과제 1(조건문, ) 표준입력으로 수축기 혈압을 입력 받아 그에 따른 적당한 표현을 화면에 출력하는 프로그램을 if-else 문을 이용하여 작성.
제 3장 데이터형과 연산자 Hello!! C 언어 강성호 김학배 최우영.
-Part2- 제1장 1차원 배열이란 무엇인가.
9장 부프로그램(2) 순천향대학교 컴퓨터공학부 하 상 호.
누구나 즐기는 C언어 콘서트 제2장 기초 사항 IT응용시스템공학과 김형진 교수.
-Part1- 제7장 반복문이란 무엇인가.
18장. 다차원 배열 그리고 포인터.
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express Slide 1 (of 25)
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
C언어 프로그래밍의 이해 Ch03. 기본 자료형, 변수와 상수.
반복문의 기능 반복문 반복문 특정 영역을 특정 조건이 만족하는 동안에 반복 실행하기 위한 문장 while문
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
어서와 C언어는 처음이지 제16장.
argc, argv 의 사용방법 #include <stdio.h>
C 4장. 연산자 #include <stdio.h> int main(void) { int num;
C.
printf("Global Korea\n");
배열, 포인터, 함수 Review & 과제 1, 2.
프로그래밍 기법 최적화 프로그래밍.
Presentation transcript:

제 6장 함수 Hello!! C 언어 강성호 김학배 최우영

순서 함수의 개념 함수의 원형, 선언 및 정의 함수의 호출 함수 결과의 귀환 저장 클래스 함수간 데이터 전달 방법 순환문 제 6장 함수 함수의 개념 함수의 원형, 선언 및 정의 함수의 호출 함수 결과의 귀환 저장 클래스 함수간 데이터 전달 방법 순환문 테스트모드 함수와 메모리관리 함수

함수의 개념 중간 제목함수의 형식 함수형 함수이름 (인자1, 인자2, ...) { 선언문; 일반문; } 함수 인자 제 6장 함수 중간 제목함수의 형식 함수형 함수이름 (인자1, 인자2, ...) { 선언문; 일반문; } 함수 인자 괄호, `( )' 안에 쓰여지며, 함수에 전달되어지는 값 함수형 함수가 리턴 해주는 리턴값의 형 선언문과 일반문 main( ) 안에서 사용되는 것과 같은 방식으로 작성

함수의 개념 [예제 6-1] #include <stdio.h> 제 6장 함수 [예제 6-1] #include <stdio.h> int add(int x, int y){ /* add 함수의 정의 부분 */ int z; z = x + y; return z; /* 함수결과를 리턴해 주는 부분 */ } main(){ int a; a = add(10, 20); /* add함수 호출 */ printf("The sum of two number is %d\n", a); [실행결과] The sum of two number is 30

함수의 원형, 선언 및 정의 함수의 원형 함수의 정의 함수의 선언 제 6장 함수 함수의 원형 다른 함수에서 또 다른 어떤 함수를 사용 할 때 함수를 미리 선언하는 일 함수의 정의 실제로 함수가 만들어지는 것을 말함 함수의 선언 미리 정의된 함수들은 헤더파일에 선언되어 있음

함수의 원형, 선언 및 정의 [예제 6-2] /* 이 예제는 실행되지 않음 */ #include <stdio.h> 제 6장 함수 [예제 6-2] /* 이 예제는 실행되지 않음 */ #include <stdio.h> main(){ int a; a = add(10, 20); printf("The sum of two numbers is %d\n", a); } int add(int x, int y){ /* add함수 정의 */ int z; z = x + y; return z;

함수의 원형, 선언 및 정의 [예제 6-3] #include <stdio.h> 제 6장 함수 [예제 6-3] #include <stdio.h> int add(int, int); /* add함수 선언 */ /* 다음과 같이 선언해도 된다. int add(int x, int y); */ main(){ int a; a = add(10, 20); /* add함수 호출 */ printf("The sum of two number is %d \n", a); } int add(int x, int y){ /* add함수 정의 */ int z; z = x + y; return z; [실행결과] The sum of two number is 30

함수의 호출 다른 함수에서 특정의 함수를 사용하게 위해 부르는 것 함수가 하나의 문장으로 호출 제 6장 함수 다른 함수에서 특정의 함수를 사용하게 위해 부르는 것 함수가 하나의 문장으로 호출 단지 함수의 이름과 그 인자만 표시 clrscr(); 함수가 리턴값을 가질 때 함수를 C의 수식처럼 사용할 수 있음 a = add(10, 20); printf("%d \n",a); 재귀적인 호출 함수의 내부에서 자기 자신을 다시 호출하는 것

함수 결과의 귀환 : return 문 함수내에서 계산된 결과를 호출한 곳으로 되돌려 줌 제 6장 함수 함수내에서 계산된 결과를 호출한 곳으로 되돌려 줌 return 문의 여러 가지 올바른 형식 return 3; return a; return a * 4 -2; return (a); return (a * 4 - 2); return 문의 역할 어떤 값을 리턴해 줌 함수의 실행을 강제로 종료 시킴 void형 함수의 경우 원칙적으로 return문을 사용할 필요가 없음 return을 사용할 경우 단독으로 return만을 사용

함수 결과의 귀환 : return 문 [예제 6-4] #include <stdio.h> 제 6장 함수 [예제 6-4] #include <stdio.h> int power(int, int); /* power함수 선언 */ void main(){ int a, b, c; printf("Input two numbers \n"); printf("They must not be negative numbers \n"); scanf("%d %d", &a, &b); c = power(a, b); /* power함수 호출 */ if(c == -1){ printf("The input has (a) wrong number(s). \n"); return; /* 프로그램 종료 */ } printf("%d^%d is %d \n", a, b, c); 계속

함수 결과의 귀환 : return 문 [예제 6-4] 계속 제 6장 함수 [예제 6-4] 계속 int power(int x, int y) /* power함수 정의 */ { int i; int result = 1; if(x < 0 || y < 0) return -1; /* 첫 번째 return */ for( i = 1 ; i <= y ; i++) result *= x; return result; /* 두 번째 return */ } [실행결과] Input two numbers They must not be negative numbers 2 3 2^3 is 8

저장 클래스 저장 클래스의 종류와 통용범위 규칙 자동 변수 제 6장 함수 저장 클래스의 종류와 통용범위 규칙 자동 변수 선언된 함수나 구역 내부에서만 유지되고, 함수를 벗어나게 되면 자동으로 소멸되는 변수 메모리 스택에 위치 정적 변수 소멸되지 않고 프로그램 전체나 특정 함수 내에서 계속적으로 유지하는 변수 내부 정적 변수 선언된 함수나 구역 내에서만 효력이 있음 외부 정적 변수 함수 외부에서 정의되는 변수 정적 변수의 선언 방법 static 데이터형 변수명, 변수명, . . . ;

저장 클래스 [예제 6-5] #include<stdio.h> main(){ int x; 제 6장 함수 [예제 6-5] #include<stdio.h> main(){ int x; printf("%d\n",x); x=5; { int x; [실행결과] printf("%d\n",x); 926 x=10; 5 printf("%d\n",x); 938 } 10 printf("%d\n",x); 5 }

저장 클래스 [예제 6-6] #include<stdio.h> void sub(void); main(){ sub(); 제 6장 함수 [예제 6-6] #include<stdio.h> void sub(void); main(){ sub(); } void sub(void){ static int i = 1; /* static int i; 와 i = 1;로 나누어 쓰면 i 값은 항상 1이 됨 */ auto int j = 1; printf("i = %d\tj = %d \n", i, j); i++ ; [실행결과] j++ ; i = 1 j = 1 } i = 2 j = 1 i = 3 j = 1

저장 클래스 [예제 6-7] #include<stdio.h> 제 6장 함수 [예제 6-7] #include<stdio.h> static int external ; /* 외부정적변수 */ int sub(int x); main(){ static int internal ; /* 내부정적변수 */ internal = 1 ; external = 2 ; printf("The summation of external and internal is %d \n", sub(internal) ) ; } int sub(int x){ int total ; total = x + external ; return(total) ; } [실행결과] The summation of external and internal is 3

저장 클래스 저장 클래스의 종류와 통용범위 규칙 외부 변수 프로그램의 모든 부분에 적용되는 변수 정의하는 위치가 함수 외부 제 6장 함수 저장 클래스의 종류와 통용범위 규칙 외부 변수 프로그램의 모든 부분에 적용되는 변수 정의하는 위치가 함수 외부 레지스터 변수 임시 기억장치인 레지스터에 저장되는 변수 빠른 속도로 프로그램 실행 터보 C 에서는 SI 레지스터와 DI 레지스터의 두 개의 레지스터만 사용할 수 있음 선언 방법 register 데이터형, 변수명, 변수명, . . .

저장 클래스 [예제 6-8] #include<stdio.h> 제 6장 함수 [예제 6-8] #include<stdio.h> int sub (int value1); /* 함수의 정의 */ char format; /* 외부 변수 정의 */ int number; /* 이 후의 모든 함수에서 사용가능 */ main(){ int imsi1 ; /* 자동 변수의 정의 */ float imsi2 ; imsi1 = sub(10) ; } char string ; /* 외부 변수의 정의 */ /* 이후에 나타나는 함수에서 사용 가능 */ int sub(int value1){ float imsi2 ; /* 자동 변수의 정의 */

저장 클래스 [예제 6-9] /* <file_1.c> */ int ext; /* 외부변수의 정의 */ main(){ 제 6장 함수 [예제 6-9] /* <file_1.c> */ int ext; /* 외부변수의 정의 */ main(){ ext = 1 ; sub_1() ; sub_2() ; sub_3() ; } sub_1(){ ext++ ; /* ext 변수의 값은 2 */ /* <file_2.c> */ sub_2(){ /* 외부변수의 선언, file_1에서 ext=2 extern int ext ; 의 값을 그대로 이어 받는다. */ ext++ ; /* ext 변수의 값은 3 */

저장 크래스 [예제 6-10] #include<stdio.h> main(){ register int i ; 제 6장 함수 [예제 6-10] #include<stdio.h> main(){ register int i ; register char c ; register int k; /* 두 개 이상의 레지스터변수이므로 자동변수로 정의 */ for (i = 0 ; i < 3 ; i++){ c = i + 65 ; printf("ASCII value of %c is %d\n", c, c) ; } [실행결과] ASCII value of A is 65 ASCII value of B is 66 ASCII value of C is 67

저장 클래스 함수와 저장 클래스 함수에 적용할 수 있는 저장 클래스는 외부 형의 함수와 정적 함수 두 가지뿐이다 제 6장 함수 함수와 저장 클래스 함수에 적용할 수 있는 저장 클래스는 외부 형의 함수와 정적 함수 두 가지뿐이다 정적함수의 형식 선언 static 함수형 함수명(매개변수 리스트); 정의 static 함수형 함수명 (매개변수 리스트) { }

함수간 데이터 전달 방법 return 문에 의한 직접 전달 값에 의한 전달 함수에서 실행된 연산결과를 호출한 함수에 돌려줌 제 6장 함수 return 문에 의한 직접 전달 함수에서 실행된 연산결과를 호출한 함수에 돌려줌 return 문의 형식 return(돌려줄 값) ; 값에 의한 전달 가장 일반적으로 쓰이는 전달 방법 매개변수라는 형식으로 값을 주고받음 매개변수에는 실매개변수와 형식매개변수가 있음 형식 매개변수의 값을 변화시켜도 실매개 변수의 값은 변하지 않음

함수간 데이터 전달 방법 [예제 6-11] #include<stdio.h> 제 6장 함수 [예제 6-11] #include<stdio.h> void change (int x,int y); /* change 함수 선언 */ main(){ int a,b; a = 1; b = 2; change (a, b); /* 함수 호출 */ printf("a = %d\tb = %d \n",a,b); } void change (int x, int y){ /* 두 변수의 값을 교환하는 함수 */ int temp ; temp = x ; x = y ; [실행결과] y = temp ; x = 2 y = 1 printf("x = %d\ty = %d \n",x,y) ; a = 1 b = 2

함수간 데이터 전달 방법 참조에 의한 전달 데이터가 저장된 번지를 전달하는 방법 번지 연산자와 간접지정 연산자 번지 연산자 & 제 6장 함수 참조에 의한 전달 데이터가 저장된 번지를 전달하는 방법 번지 연산자와 간접지정 연산자 번지 연산자 & &x : x가 저장되어 있는 선두 번지값을 나타냄 간접지정 연산자 *px : 변수 px 가 가리키는 곳의 데이터 값 px는 데이터가 있는 장소와 데이터 값의 종류에 관한 정보만 가지고 있음 : 간접 지정 연산자로 불림 참조에 의한 실매개변수의 변환 하위함수로 실매개변수가 있는 번지를 보내 주는 간접적인 지정에 의해 실매개변수에 접근 가능

함수간 데이터 전달 방법 [예제 6-12] #include<stdio.h> main(){ 제 6장 함수 [예제 6-12] #include<stdio.h> main(){ int x=100; /* 변수 선언 및 초기화*/ int *px; /* 포인터선언 */ px = &x; /* x의 주소를 px에 대입 */ printf("%d \n",x); /* x를 출력 */ printf("%d \n",px); /* px를 출력 */ printf("%d \n",&px); /* px의 주소를 출력 */ printf("%d \n",*px); /* px가 가리키는 데이터 출력 */ } [실행결과] 100 4094 4090

함수간 데이터 전달 방법 [예제 6-13] #include<stdio.h> 제 6장 함수 [예제 6-13] #include<stdio.h> void change (int *x,int *y); /* change 함수 선언 */ main(){ int a,b ; a = 1 ; b = 2 ; change(&a, &b); /* a, b 의 번지값을 change 함수로 넘김 */ printf("a = %d \t b = %d \n",a,b); } void change (int *x, int *y){ /* 두 변수의 값을 교환시키는 함수 */ int temp ; temp = *x ; *x = *y ; *y = temp ; [실행결과] printf("x = %d \t y = %d \n",*x,*y) ; x = 2 y = 1 } a = 2 b = 1

순환문 함수가 자기 자신을 다시 호출하는 것 자신을 그만 불러낼 시기를 알기 위해 반드시 함수내에 초기화 루틴이 있어야 함 제 6장 함수 함수가 자기 자신을 다시 호출하는 것 자신을 그만 불러낼 시기를 알기 위해 반드시 함수내에 초기화 루틴이 있어야 함 장점 프로그램이 매우 간결해지고 이해하기 쉬움 단점 메모리를 많이 사용하게 되어 처리속도가 느려짐

순환문 [예제 6-14] #include <stdio.h> double factorial (int n); 제 6장 함수 [예제 6-14] #include <stdio.h> double factorial (int n); void main(){ int number ; printf("Input integer number : ") ; scanf("%d", &number) ; printf("%d!=%.15g\n", number, factorial(number)); } double factorial(int n){ if(n == 0) return 1 ; else return ((double) n * factorial(n-1)) ; } [실행결과] Input integer number :3 3!=6