• 검색 결과가 없습니다.

제9장 함수와 변수

N/A
N/A
Protected

Academic year: 2022

Share "제9장 함수와 변수"

Copied!
3
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

제9장 함수와 변수

9.1 변수의 유효 범위

- 지역변수(local variables) : 함수 안에서 선언하며, 함수 안에서만 유효하다.

- 전역변수(global variables) : 함수 밖에서 선언하며, 파일 내부 및 외부의 함수에서 유효하다.

- 블록변수(block variables) : 블록 안에서 선언하며, 블록 안에서만 유효하다.

- 함수원형변수(prototype variables) : 함수 원형 안에서만 유효하다.

#include <stdio.h>

void print_result(int n); // n = 함수 원형 변수 int sum = 0; // sum = 전역 변수 void main()

{

int n; // n = 지역변수 printf(“Enter a integer : ”);

scanf(“%d”, &n);

for (int i=1; i<=n; i++) { // i = 블록 변수 sum += i;

}

printf_result(n);

}

void print_result(int n) {

printf(“1+2+...+%d = %d\n”, n, sum);

}

9.2 지역 변수

- 값을 넣지 않고 (쓰레기 값을 그대로) 사용하면 오류가 발생한다.

9.3 전역 변수

- 전역변수의 초기값은 0이다. (default)

- 명칭 중복 : 지역변수와 전역변수의 이름이 같으면 지역변수로 사용된다.

9.4 저장 유형 지정자

- auto 변수 : 스택(stack=쌓기)에 할당 (함수가 종료되면 변수가 사라진다) - static 변수 : 힙(heap=더미)에 할당 (프로그램이 종료될 때 변수가 사라진다) - register 변수 : CPU의 레지스터에 할당 (속도가 빠르다)

- extern 변수 : 할당하지 않음 (실제 변수는 다른 파일에 있다)

- volatile [vάlətil] (휘발성) 변수 : 문장을 실행할 때마다 메모리에서 읽는다. (최적화 금지)

(2)

(교재 388쪽) 은행 계좌 구현하기

#include <stdio.h>

void save(int amount) {

static long balance = 0;

if (amount >= 0) {

printf(“%d \t\t”, amount);

} else printf(“\t %d \t”, -amount);

balance += amount;

printf(“%d \n”, balance);

}

void main() {

printf(“==========================\n”);

printf(“입금 \t출금\t 잔고\n”);

printf(“==========================\n”);

save(10000);

save(50000);

save(-10000);

save(30000);

printf(“==========================\n”);

}

10000 10000

50000 60000

-10000 50000

30000 80000

9.5 연결

- 무연결 : 지역변수는 외부와 연결을 가지지 않는다.

- 외부 연결 : 전역변수, 함수는 외부(다른 파일)에서 사용할 수 있다.

(외부 파일에서는 extern 지정자를 변수나 함수 이름 앞에 붙여 사용한다.) - 내부 연결 : 전역변수, 함수의 앞에 static을 붙이면 내부 파일에서만 사용할 수 있다.

9.6 저장 유형의 사용 요령

(1) 보통 지역변수를 사용한다.

(2) 함수 호출이 끝나도 값을 유지해야 한다면 지역 정적을 사용한다.

(3) 여러 함수에서 공유할 데이터 및 함수는 정적 전역변수로 한다.

(4) 여러 파일에서 공유할 데이터 및 함수는 전역변수로 한다.

9.7 가변 매개변수를 가진 함수

- 가변 매개변수를 가진 함수 : 함수의 매개변수의 수가 가변인 함수 - 가변 매개변수를 사용하는 함수를 만드는 순서

(1) 가변 매개 변수를 사용하는 함수의 원형은 ...을 사용하여 선언한다.

(2) 함수 내부에서 va_start()를 호출한다. 함수의 첫 번째 인수는 매개 변수의 개수를 나타낸다.

(3) va_arg()를 호출할 때마다 인수들이 하나씩 반환된다.

(4) 인수의 개수만큼 va_arg()를 호출한다.

(5) va_end(va_list)를 호출하여 가변 매개 변수 기능을 종료한다.

(3)

9.8 순환 호출 (recursive call)

- 수학적 귀납법 : ① n=1일 때 성립한다. ② n일 때 성립하면 n+1일때도 성립한다.

- 팩토리얼 : n! = n * (n-1)!, 0!=1 (교재 397쪽) 팩토리얼을 계산하는 함수

// 반복문을 사용하는 방법 long factorial(int n)

{

int fact = 1;

for (int i=2; i<=n; i++) fact *= i;

return fact;

}

// 순환 호출을 사용하는 방법 long factorial(int n)

{

if (n == 0) return 1;

else return n * factorial(n-1);

}

(교재 404쪽) 하노이 탑 문제

#include <stdio.h>

void hanoi_tower(int n, char from, char tmp, char to) {

if (n == 0) return;

hanoi_tower(n-1, from, to, tmp);

printf(“원판 %d: %c -> %c\n”, n, from, to);

hanoi_tower(n-1, tmp, from, to);

}

void main() {

hanoi_tower(3, ‘A’, ‘B’, ‘C’);

}

참조

관련 문서

after image 모든 레코드 공통 type에 따라 추가되는 필드.. DBS는 파일들을 메모리에 두고 필요할 때 디스크를 갱신 하려,,.. 그림자 페이지 및 현행

- 치료자는 내담자와 함께 목표를 설정하고 내담자 문제의 해결책과 성공방법을 발견 하도록 도와 내담자의 변화를 도모한다... •

경력개발이란 개인이 경력목표를 설정하고 이를 달성하기 위한 경력계획 을 수립하여 조직의 욕구와 개인의 욕구가 합치될 수 있도록 각 개인의 경 력을 개발하는 활동...

™ 선언된 이름의 바인딩 정보를

 검찰은 구속비준, 직접 수리핚 사건의 수사, 공소제기, 심판은 인민법원이 책 임짂다고 규정하고 있다.  공앆기관 외에 인민검찰원, 인민법원,

③ 학습자는 매일의 일상적 상황에서 자신의 잘못된 선택에 의해 발생 할 수 있는 결과에 대한 대가를 실제로 치르지 않으면서도 시뮬레이션에 의해 그 선택의 결과를 경험하는

사채 발행에 의한 자금조달과

´ 읽기를 위한 학습활동에서는 문자 해독의 정확성과 읽기 유창성이 중요. ´ 학습을 위한 읽기활동에서는 효과적이고 다양한 읽기 전략을