How We Coding

Week 10

Tutoring/18-1 C Lang2018. 5. 23. 16:51

<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= {12345};
    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) 재귀함수 호출 과정


8-1) 1부터 n까지 출력하는 함수
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
void f(int n)
{
    if(n < 1return ;
    f(n-1);
    printf("%d\n",  n);
}
 
int main()
{
    f(5); 
    return 0;
}
cs

>> f(n) 은 1부터 n까지 출력하는 함수.
>> 1부터 n까지 출력을 하는 것은 1부터 n-1까지 출력한 다음 n을 출력한 것과 같다.

>> f(5) 가 호출되었을 때, 5번 라인의 조건을 만족하지 않아, 6번 라인인 f(4)가 실행된다. f(5) 에서 7번 라인은 아직 실행되지 않은 상태.
>> f(4) 가 호출되었을 때, 5번 라인의 조건을 만족하지 않아, 6번 라인인 f(3)가 실행된다. f(4) 에서 7번 라인은 아직 실행되지 않은 상태.
>> f(3) 가 호출되었을 때, 5번 라인의 조건을 만족하지 않아, 6번 라인인 f(2)가 실행된다. f(3) 에서 7번 라인은 아직 실행되지 않은 상태.
>> f(2) 가 호출되었을 때, 5번 라인의 조건을 만족하지 않아, 6번 라인인 f(1)가 실행된다. f(2) 에서 7번 라인은 아직 실행되지 않은 상태.
>> f(1) 가 호출되었을 때, 5번 라인의 조건을 만족하지 않아, 6번 라인인 f(0)가 실행된다. f(1) 에서 7번 라인은 아직 실행되지 않은 상태.

>> 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