Week 10
<180523>
1) 지역변수
- 사용 간능한 범위는 중괄호 내부.
- 함수의 매개변수도 지역변수이다. >> 함수 내에서 사용 가능.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <stdio.h> void f() { int k=0; printf("%d\n", k); k += 1; } int main() { int n=5; f(); f(); if(n == 5) { int k = 10; printf("%d\n", k); } //printf("%d\n", k); return 0; } | cs |
>> 13라인 실행결과 : 0
>> 14라인 실행결과 : 0
>> 18라인 실행결과 : 10
>> 20라인은 주석을 해제하면 오류. K는 if문의 중괄호 내에서만 사용 가능하다..!!
2) 전역변수
- 프로그램이 실행될 때 생성, 프로그램이 종료될 때 소멸.
- 별도로 초기화 하지 않으면 자동으로 0으로 초기화된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include <stdio.h> int k; void f() { printf("%d\n", k); k += 1; } int main() { f(); f(); return 0; } | cs |
>> 13라인 실행결과 : 0
>> 14라인 실행결과 : 1
>> 14 라인이 끝났을 때 k에는 2가 저장되어있다.
3) 정적(static)변수
- 지역변수와 전역변수의 특징을 동시에 갖는 변수라고 생각하면 된다
- 전역변수처럼 프로그램이 시작될 때 생성되어, 프로그램이 종료될 때 소멸되고, 자동으로 0으로 초기화 된다.
- 지역변수처름 중괄호 내에서 사용가능하다. 즉 아래의 정적변수 k는 f() 함수 내에서만 사용가능한 전역변수라고 생각하면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <stdio.h> void f() { static int k; printf("%d\n", k); k += 1; } int main() { f(); f(); return 0; } | cs |
>> 13라인 실행결과 : 0
>> 14라인 실행결과 : 1
>> f() 함수가 두번째로 실행되었을 땐 5번 라인은 생략된 상태로 실행된다고 생각하면 된다.
4) 외부변수, 자동변수, 레지스터 변수
참고 : http://jeongchul.tistory.com/342
5) 배열 선언 및 초기화
- 자료형 배열의이름[배열의크기]; 라는 형태로 선언.
- int arr[10]; // 크기가 10인 정수 데이터를 담을 수 있는 배열 arr
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> int main() { int arr[10]; int arr2[5] = {1, 2, 3, 4, 5}; int arr3[5] = {0}; for(int i=0; i<5; i++) printf("%d\n", arr3[i]); return 0; } | cs |
>> 7 라인 : 배열의 모든 요소를 0으로 초기화 하는 방법.
>> arr3 이란 배열의 요소들은 0으로 채워져있다.
6) 최대값, 최소값,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <stdio.h> int main() { int arr[10]; int max, min; for(int i=0; i<10; i++) scanf("%d", &arr[i]); max = min = arr[0]; for(int i=1; i<10; i++) { if(max < arr[i]) max = arr[i]; if(min > arr[i]) min = arr[i]; } printf("max: %d\n", max); printf("min: %d\n", min); return 0; } | cs |
>> i번째 배열요소 값이 최대값일 때, 그때의 값을 갱신
7) 최대값의 인덱스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #include <stdio.h> int main() { int arr[10]; int max, min; int maxI, minI; for(int i=0; i<10; i++) scanf("%d", &arr[i]); max = min = arr[0]; maxI = minI = 0; for(int i=1; i<10; i++) { if(max < arr[i]) { max = arr[i]; maxI = i; } if(min > arr[i]) { min = arr[i]; minI = i; } } printf("maxI: %d\n", maxI); printf("minI: %d\n", minI); return 0; } | cs |
>> i번째 배열요소 값이 최대값일 때, 그때의 인덱스 i도 갱신
8) 재귀함수 호출 과정
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <stdio.h> void f(int n) { if(n < 1) return ; f(n-1); printf("%d\n", n); } int main() { f(5); return 0; } | cs |
>> f(0) 이 호출되었을 때, 5번 라인의 조건을 만족하므로 함수가 종료된다.
>> f(1) 에서 아직 실행되지 않은 7번 라인이 실행(1출력)되고, 더이상 실행할 것이 없으므로 f(1) 은 종료된다. 종료 후 f(1)을 호출한 곳으로 돌아간다.
>> f(2) 에서 아직 실행되지 않은 7번 라인이 실행(2출력)되고, 더이상 실행할 것이 없으므로 f(2) 은 종료된다. 종료 후 f(2)을 호출한 곳으로 돌아간다.
>> f(3) 에서 아직 실행되지 않은 7번 라인이 실행(3출력)되고, 더이상 실행할 것이 없으므로 f(3) 은 종료된다. 종료 후 f(3)을 호출한 곳으로 돌아간다.
>> f(4) 에서 아직 실행되지 않은 7번 라인이 실행(4출력)되고, 더이상 실행할 것이 없으므로 f(4) 은 종료된다. 종료 후 f(4)을 호출한 곳으로 돌아간다.
>> f(5) 에서 아직 실행되지 않은 7번 라인이 실행(5출력)되고, 더이상 실행할 것이 없으므로 f(5) 은 종료된다. 종료 후 f(5)을 호출한 곳(여기서는 main() 함수의 12번 라인)으로 돌아간다.
9) 빈도수
- 다음주..!!
'Tutoring > 18-1 C Lang' 카테고리의 다른 글
Week 12 - 종강 (0) | 2018.06.06 |
---|---|
Week 11 (0) | 2018.05.30 |
Week 09 (0) | 2018.05.16 |
Week 08 (0) | 2018.05.09 |
Week 07 (0) | 2018.05.05 |