본문 바로가기
2학년 2학기/c언어

8장 함수

by kkkkk1023 2024. 10. 25.

1. 함수의 정의

 

 

 

 

2. 지역변수와 전역변수

: 함수 안에서 정의되는 변수는 지역 변수라고 부르고, 해당 함수 안에서 만 사용이 가능하다. 반면에 함수의 외부에서 선언되는 변수는 전역 변수라고 불린다.

 

함수의 매개변수는 지역 변수일까?

맞다! 다만 초기값은 인자로 받는 다는 점에서만 다르고 나머지는 지역 변수의 특징과 같다.

 

  지역 변수 전역 변수
기본 초기값 쓰레기 값 0
동시에 존재할 경우 { } 내부에서는 지역 변수가 우선이다.  { } 외부에서는 전역 변수가 우선이다. 

 

 

3. 정적 지역 변수

: 블록에서만 사용되지만 블록을 벗어나도 자동으로 삭제되지 않는 변수 / 앞에 static을 붙인다. 

: 함수가 여러번 선언되어도 새로 초기화하지 않고 호출된 이후 연산된 값을 유지한다. 

: 정적 지역변수는 함수내부에서만 사용이 가능하고, 전역 변수는 함수 밖에서도 사용이 가능하다.

#include<stdio.h>
void sub(void){
	int auto_count = 0;
    static int static_count = 0;
    
    auto_count++;
    static_count++;
    printf("auto_count=%d\n, auto_count);
    printf("static_count=%d\n, static_count);
}

int main(void){
	sub(); //auto_count=1 / static_count=1
    sub(); //auto_count=1 / static_count=2
    sub(); //auto_count=1 / static_count=3
    return 0;
}

 

 

4. 순환 호출

: 순환은 함수가 자기 자신을 호출하여 문제를 해결하는 프록래밍 기법이다.

 

5. 순환 호출을 이용해서 팩토리얼 구현하기

#include <stdio.h>

int factorial(int);

int main(void)
{
    int x = 0, result;

    printf("정수를 입력하시오: ");
    scanf("%d", &x);

    result = factorial(x);
    printf("%d!은 %d입니다.\n", x, result);

    return 0;
}

int factorial(int n){
    printf("factorial(%d)\n", n);

    if(n<=1) return 1;
    else return n*factorial(n-1);
}

 

 

6. 순환 호출을 이용해서 피보나치 수열

#include <stdio.h>

int fibbonacci(int);

int main(void)
{
    for(int i=0; i<10; i++){
        printf("%d", fibbonacci(i));
    }
}

int fibbonacci(int n){
    if(n==0) return 0;
    else if(n==1) return 1;
    else return (fibbonacci(n-2) + fibbonacci(n-1));
}

 

 

7. 순환 호출을 이용해서 테일러 급수

#include <stdio.h>
#include <math.h>

int factorial(int);

int main(void)
{
    double sum = 0.0;
    int x, n;
    printf("x와 n의 값을 입력하시오: ");
    scanf("%d %d", &x, &n);
    for(int i = 0; i <= n; i++){
        sum += pow(x, i) / factorial(i);
    }
    printf("e^%d = %.3lf\n", x, sum);
}

int factorial(int n){
    printf("factorial(%d)\n", n);

    if(n<=1) return 1;
    else return n*factorial(n-1);
}

'2학년 2학기 > c언어' 카테고리의 다른 글

9-2장 포인터의 연산  (0) 2024.10.28
9-1장 포인터란?  (0) 2024.10.28
7장 배열  (1) 2024.10.25
6장  (1) 2024.10.25
5장 조건문  (0) 2024.10.24