제 6 장 함
수
C 프로그램에서 함수 (function) 의 개념과 종류를 설명할 수 있다 . 함수를 이용하여 간단한 사칙 계산기 프로그램을 개발 학 수 있다 .
6.1 함수의 기본 구성 6.2 함수의 종류 6.3 함수의 호출 6.4 함수에서 결과 값 되돌려 받기 6.5 라이브러리 함수
제 6 장에서 설명은 ?
6.1
함수의 기본 구성
☞ 전달되는 어떤 값을 받아서 함수 코드를 수행하며 , 그 결과 값을 반환(1)
함수는 ?
(2)
함수의 기능은 ?
☞ 특정한 작업을 수행하도록 만들어진 하나의 독립된 프로그램[ 사용형식 ] 함수데이터형 함수명 () { /* 함수 본체의 시작점 */ 변수 문장 } /* 함수 본체의 시작점 */
6.1
함수의 기본 구성
6.1
함수의 기본 구성
퀴즈 풀어보기
교제 163 쪽 ( 1 번 ~ 5
번 )
6.2
함수의 종류
main function
user defined function
library function
① main
함수
- 하나의 프로그램 전체를 통제하는 함수 - 하나의 프로그램 파일에 꼭 하나만 존재해야만 하는 함수 - 이 함수는 다른 함수의 호출 없이 자동으로 실행되는 함수② 사용자 정의 함수
- 사용자가 필요에 따라 직접 정의하여 사용하는 함수 - 이 함수는 필요한 만큼 정의하여 사용할 수 있음 - 단독으로는 독립된 역할을 못함 - 다른 함수의 호출이 있어야만 실행 - 함수의 원형을 main() 함수 위에 선언해 주어야 하는 함수③ 라이브러리 함수
- C 언어 컴파일러 자체에서 지원해주는 함수 - 이 함수는 함수의 사용법에 따라 정의해야만 사용이 가능 - 함수의 본체가 정의된 해더파일을 포함시켜야만 사용 가능한 함수6.2
함수의 종류
◀6-1.C▶ 메인 함수만으로 프로그래밍한 경우 실행결과 누구신가요 ? 한송이 <Enter> 한송이 님 안녕하세요 . #include <stdio.h> void main() { char irum[20]; printf(" 누구신가요 ? "); scanf("%s", irum); printf("%s 님 안녕하세요 . \n", irum); }
6.2
함수의 종류
#include <stdio.h>
void who(char name[20]);
void main() { char irum[20]; printf(" 누구신가요 ? "); scanf("%s", irum); who( irum ); }
void who( char name[20] )
{ printf("%s 님 안녕하세요 . \n", name); } ◀6-2.C▶ 사용자정의 함수 who() 를 이용한 경 우 실행결과 누구신가요 ? 한송이 <En-ter> 한송이 님 안녕하세요 .
6.2
함수의 종류
6.2
함수의 종류
퀴즈 풀어보기
교제 167 쪽 ( 6 번 ~ 14
번 )
6.3
함수의 호출
사용자 정의 함수와 라이브러리 함수는
다른 함수의 호출이 있어야 그 함수가 동작한다 .
return
문이 없는 경우
return
문이 있는 경우
(1)
리턴 (return) 문이 없는 경우
◀6-3.C▶ 값을 전달하지 않고 호출하는 경우 실행결과 합계 : 306.3
함수의 호출
#include <stdio.h> void add(); void main() { add(); } void add() { int aa=10, bb=20, cc; cc = aa + bb; printf(" 함계 : %d \n", cc); }◀6-4.C▶ 값을 전달하면서 호출하는 경우
#include <stdio.h>
void add(int aa, int bb); void main()
{
int a=10, b=20; add( a, b );
}
void add( int aa, int bb ) { int cc; cc = aa + bb; printf(" 합계 : %d \n", cc); } 실행결과 합계 : 30
6.3
함수의 호출
(2)
리턴 (return) 문이 있는 경우
◀6-5.C▶ 값을 전달하지 않고 호출하는 경우 #include <stdio.h> int add(); void main() { int sum; sum = add(); printf(" 합계 : %d \n", sum); } int add() { int aa=10, bb=20, cc; cc = aa + bb; return( cc ); } 실행결과6.3
함수의 호출
◀6-6.C▶ 값을 전달하면서 호출하는 경우
#include <stdio.h> int add(int aa, int bb); void main() { int sum; int a=10, b=20; sum = add( a ,b ); printf(“ 합계 : %d \n", sum); }
int add( int aa, int bb ) { int cc; cc = aa + bb; return(cc); } 실행결과 합계 : 30
6.3
함수의 호출
6.3
함수의 호출
퀴즈 풀어보기
교제 173 쪽 ( 15 번 ~
17
번 )
6.4
함수에서 결과 값 되돌려 받기
1
개의 결과 값 되돌려 받기
여러 개의 결과 값 되돌려 받기
(1)
한 개의 결과 값 되돌려 받기
◀6-7.C▶
#include <stdio.h> int add(int a, int b); void main() { int hab; hab = add( 1, 100 ); printf(" 합계 : %d \n", hab); }
int add( int a, int b ) { int c=0, n; for(n=a; n<=b; n++) c = c + a; return( c ); } 실행결과 합계 : 5050
6.4
함수에서 결과 값 되돌려 받기
여러 개의 결과 값을 되돌려 받기 위해서는 함수의 인자를 포인터 (pointer) 형으로 사용한다 . 그 이유는 리턴 (return) 문을 이용하면 , 하나의 결과 값만 되돌려 받기 때문이다 .
(2)
여러 개의 결과 값 되돌려 받기
6.4
함수에서 결과 값 되돌려 받기
◀6-8.C▶
#include <stdio.h>
void abc(int *x, int *y); void main()
{
int a=100, b=200;
printf(" 호출 전 : a=%d b=%d \n", a, b); abc( &a, &b );
printf(" 호출 후 : a=%d b=%d \n", a, b); }
void abc( int *x, int *y ) { *x = 300; *y = 500; } 실행결과 호출하기 전 : a=100 b=200 호출한 후 : a=300 b=500
6.4
함수에서 결과 값 되돌려 받기
6.4
함수에서 결과 값 되돌려 받기
퀴즈 풀어보기
교제 177 쪽 ( 18 번 ~
20
번 )
함수의 원형을 가지고 있는 헤더파일을 포함시켜야만
사용 가능한 함수이다 .
6.5
라이브러리 함수
문자 (character) 처리 라이브러리 함수
문자열 (string) 처리 라이브러리 함수
데이터 변환 라이브러리 함수
수학관련 함수 등
- 문자 처리 함수에는 문자의 종류를 구분하기 위한 is_ 형 함수가 있 다 . - 그리고 문자를 변환하기 위한 to_ 형 함수가 정의되어 있다 . - 문자처리 라이브러리함수를 이용할 때에는 ctype.h 해더파일을 포함시켜야 한다 .
(1)
문자 처리 함수
함수 설명 isalnum(c) isalpha(c) isdigit(c) islower(c) isupper(c) tolower(c) toupper(c) c 가 영문자 .(A ~ Z, a ~ z) 이거나 숫자 (0 ~ 9) 이면 결과는 1( 참 ) 이다 . c 가 영문자 (A ~ Z, a ~ z) 이면 결과는 1( 참 ) 이다 . c 가 숫자 (0 ~ 9) 이면 1( 참 ) 이다 . c 가 소문자 (a ~ z) 이면 1( 참 ) 이다 . c 가 대문자 (A ~ Z) 이면 1( 참 ) 이다 . 문자 c 를 소문자로 변환시킨다 . 문자 c 를 대문자로 변환기킨다 .6.5
라이브러리 함수
◀6-9.C▶ #include <stdio.h> #include <ctype.h> void main() { int n; char ch; for(n='a'; n<='z'; n++){ if( islower(n) ){ ch = toupper(n); printf("%c", ch); } } } 실행결과 ABCDEFGHIJKLMNOPQRSTUVWXYZ
6.5
라이브러리 함수
- 문자열을 처리하는 데 필요한 함수들이 정의되어 있다 . - 포함시켜야 할 해더파일은 string.h 이다 . 함수 설명 strlen(s) strcpy(s1, s2) strcat(s1, s2) strcmp(s1, s2) 문자열 s 의 길이를 구해준다 . 문자열 s1 에 문자열 s2 를 복사시킨다 . 문자열 s1 의 뒤에 문자열 s2 를 연결한 다 . 문자열 s1 과 s2 의 값을 비교한다 . 이때 s1>s2 이면 양수 값을 , s1<s2 이면 음수 값을 , s1==s2 이면 0 값을 반환한 다 .
(2)
문자열 처리 함수
6.5
라이브러리 함수
◀6-10▶
#include <stdio.h>
#include <string.h>
void main() {
char s1[20]="abcde", s2[20] ="ABC"; printf("(1) %s \n", s1 ); strcpy(s1, s2); printf("(2) %s \n", s1); strcat(s1, s2); printf("(3) %s \n", s1);; } 실행결과 (1) abcde (2) ABC
6.5
라이브러리 함수
- 문자열 데이터를 숫자로 변환하는 함수들이 정의되어 있다 . - 포함시켜야 할 해더화일은 stdlib.h 이다 . 함수 설명 atoi(s) atol(s) atof(s) 문자열 s 를 int 형으로 변환시킨다 . 문자열 s 를 long int 형으로 변환시킨다 . 문자열 s 를 double 형으로 변환시킨다 .
(3)
데이터 변환 함수
6.5
라이브러리 함수
◀6-11.C▶ #include <stdio.h> #include <stdlib.h> void main() { int a; double b; char s[20]="123.456"; printf("s=%s \n", s); a=atoi(s); printf("a=%d \n", a); b=atof(s); printf("b=%f \n", b); } 실행결과 s = 123.456 a = 123 d = 123.456000
6.5
라이브러리 함수
- 수학 상수 및 함수를 처리해주는 함수들이 정의되어 있다 .
- 포함시켜야 할 해더화일은 math.h 이다 .
(4)
수학관련 함수
함수 설명 exp(x) sqrt(x) pow(x,y) sin(x) cos(x) tan(x) acos(x) asin(x) atan(x) sinh(x) cosh(x) tanh(x) fabs(x) fmod(x,y) log(x) log10(x) e(=2.718) 의 자승을 구합니다 . x 의 제곱근을 구합니다 . x 의 y 승을 구합니다 . sine 값을 구합니다 . cosine 값을 구합니다 . tangent 값을 구합니다 . arccosine 값을 구합니다 . arcsine 값을 구합니다 . arctangent 값을 구합니다 . hyperbolic sine 값을 구합니다 . hyperbolic cosine 값을 구합니다 . hyperbolic tangent 값을 구합니다 . x 의 절대치 값을 구합니다 . x/y 의 나머지를 구합니다 . 자연 로그 값을 구합니다 .
6.5
라이브러리 함수
◀6-12.C▶ #include <stdio.h> #include <math.h> void main() { printf("2 의 3 승은 %f \n", pow(2.0, 3.0) ); printf("2 의 제곱근은 %f \n", sqrt(2.0) ); printf("e 의 3 승은 %f \n", exp(3.0) ); } 실행결과 2 의 3 승은 8.000000 2 의 제곱근은 1.414214 e의 3 승은 20.085537