c언어에서의 함수문
본 자료는 4페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
해당 자료는 4페이지 까지만 미리보기를 제공합니다.
4페이지 이후부터 다운로드 후 확인할 수 있습니다.

목차

1 표준 함수

2 함수의 기본 형식
2.1 형(type)
2.2 함수명(function name)
2.3 매개 변수 리스트와 매개 변수 형 선언
2.4 내부 변수 선언
2.5 return()문
2.6 함수의 호출

3 함수간의 데이터 전달 방법
3.1 값에 의한 전달
3.2 주소에 의한 전달
3.3 일차원 배열의 주소 전달
3.4 문자열의 인수 전달

4 함수의 재귀적 호출(recursive call)

5 main() 함수와 인수

본문내용

;
printf("함수 실행 전 값 x = %d, y =
swap(&x, &y);
printf("함수 실행 후 값 x =%d, y =
}
swap(a, b)
short *a, *b;
{
short temp;
printf("함수내 교환 전 a %d, b =
temp = *a;
*a = *b;
*b = temp;
printf("함수내 교환 후 a = %d, b =
}
[ 프로그램 해석 ]
main() 함수에서 swap() 함수를 호출할 때 실인수로 기억 장소의 값이 아니라 실인수의 조소값을 넘겨준다. swap() 함수가 호풀될 때 실제 주소를 그 인자로 넘겨준다. 즉 이것은 call by address로 매개 변수를 전달하는 것과 같은 효과를 갖는다.
[ 문제 1] 키보드로부터 받은 반지름을 인수로 주면, 원의 면적, 공의 표면적, 공의 부피값을 돌려주는 함수 형태로 아래의 ㅍ로그램을 완성하시오.
#include
main()
{
float r, s1, s2, v;
scanf("%f", &r);
ball(r, , , );
printf("원의 면적 =
printf("공의 면적 =
printt("공의 부피 =
}
ball()
.
.
.
[ 힌트 ] 원의 면적 =
공의 면적 =
공의 부피 =
[ 문제 2 ] 문제 1의 프로그램을 완성한 후 함수에 return문이 없으므로 void형으로 고쳐서 프로그램을 완성하시오.
3.3 일차원 배열의 주소 전달
call by reference 방식으로 배열의 시작 주소를 전달한다.
배열 크기에 관한 정보가 없기 때문에 프로그램 작성자가 크기를 알려주어야 하는데 배열의 마지막 요소에 어떤 특정 값으로 파악하는 방법과 배열의 크기를 인수로 전달하여 처리하는 방법이 있다.
[ 예제 7-4.C ]
#include
void subprog1(int *data);
void subprog2(int data[]);
void subprog3(int data[], int n);
main()
{
int a[10] = { 10, 20, 30, 40, 50, 60, 70, -1); /* -1은 데이터의 끝 */
subprog1(a); /* 배열의 크기를 인수로 전달 */
subprog2(a);
subprog3(a, 7); /* 가인수를 포인터로 표현 */
}
void subprog1(data) /* 배열의 끝이 -1 */
int *data;
{
int sum = 0;
while(*data ! = -1) /& 배열의 끝이 -1 */
{
sum += *data;
++data;
}
printf("sum =
}
void subprog2(data) ?* 가인수를 배열로 표현 */
int data[] ;
{
int sum = 0, I ;
for (I =-; data[I] ! = -1; ++I)
sum += data[I];
printf("sum =
}
void subprog3(data, n) /* 배열 크기의 정보를 인수로 넘겨줌 */
int data[], n;
{
int sum = 0, I;
for (I=0; I sum += data[I];
printf("sum =
}
3.4 문자열의 인수 전달
C 언어에서의 문자열은 char 형의 1차원 배열로 표현하기 때문에 1차원 배열의 주소 전달 방식과 같다.
[ 예제 7-5.C ]
#include
void subprog1(char pt);
void subprog2(char str[]);
main()
{
staric char s1[] = "배열 형태의 문자열";
char *s2 = 포인터 형태의 문자열';
strdsp1(s1); /* s1[]의 선두 주소를 전달 */
strdsp1(s1);
strdsp1(s2); /* s2의 포인터 형태의 주소 */
strdsp1(s2);
}
void strdsp1(pt)
char *pt
{
printf("
}
void strdsp2(str)
char str[];
{
printf("
}
4 함수의 재귀적 호출(recursive call)
C 언어의 함수가 자기 자신을 호출할 수도 있고, 한번 별도의 함수를 호출하여 그 함수로부터 자기 자신을 호출 할 수 있는 즉, 재귀적 호출의 특징이 있다.
recursive call을 할 때 조건
(1) 함수내에서 사용하는 변수는 자동 변수이어야 한다.
(2) 함수의 인수 전달 방식은 call by value로 해야 한다.
재귀적 호출은 자기 자신을 호출하기 때문에 호출되어진 횟수만큼 기억 장소가 배정되어야 하므로 스택 영역의 오버플로우(overflow)를 주의해야 한다.
반복적으로 자기 자신을 호출하므로 순환을 멈출 수 있는 탈출 조건이 있어야 한다.
일반적으로 재귀적 호출을 수행하면 처리 속도가 늦고, 기억 장소를 많이 사용하기 때문에 좋은 기법은 아니다.
[ 예제 7-7.C ]
#include
iong factorial(long n);
main()
{
long a;
a = factorial(7);
printf("7! =
}
long factorial(n)
long n;
{
if(n == 0)
return(1);
else
return(n*factoria1 (n-1);
}
5 main() 함수와 인수
C 언어에서 main() 함수도 하나의 함수로 취급하기 때문에 이를 호출하는 운영체제로부터 인수를 전달 받을 수 있다.
main() 함수의 일반적인 형식
int main(argc, argv)
int argc;
char *argv[];
{
. . . .
return();
}
① argc : 정수형으로 명령형 인수의 개수
① argv : 일차원 문자열 배열
argv[0] : 경로명을 포함한 실행되는 프로그램명
argv[1] : 프로그램명 다음의 첫 번째 인수
.
.
.
.
argv[argc-1] : 마지막 인수
[ 예제 7-8.C ]
#include
main(argc, argv)
int argc;
char *argv[];
{
int i;
printf("argc =
for (I=0; i printf("argv[%d] =
}
  • 가격3,500
  • 페이지수12페이지
  • 등록일2008.01.06
  • 저작시기2007.12
  • 파일형식한글(hwp)
  • 자료번호#445997
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니