본문 바로가기
학점은행제

[C 언어 I] 학습복습 - printf, scanf함수, 반복문, 조건식, 함수, 지역변수, 전역변수, register, 재귀함수, 배열

by 코곰 2021. 5. 22.

복습 내용은 아이티뱅크 C언어 I 수업을 바탕으로 합니다.

 

1. printf, scanf 함수

예시:

printf("my number: %d\n", 2);
int num;
scanf("%d", &num);

C언어에서의 특수문자는 다음과 같이 표현할 수 있다.

(출처 - https://lovelyoverflow.tistory.com/24)

 

printf와 scanf에서의 서식 지정은 다음과 같이 한다.

(출처 - https://opentutorials.org/module/3921/23515)

* 필드 폭 지정하여 출력하기

printf("%-8s \n, "이름");

필드의 폭이 8칸 확보된 채로 출력된다!

 

* 지수 입력

지수를 표현할 때는 e를 사용한다.

printf("실수 입력: ");
scanf("%f", &num1); //1.1e+2 식으로 입력해도 된다!

 

 

2. 반복문

(1) while문

while (조건)
{
	// 반복할 내용
}

 

(2) do - while문

do
{
	// 처음 한 번은 무조건 실행
}
while (조건)
{
	// 조건이 맞을 때 반복될 내용
}

 

(3) for 문

for(초기식;조건식;증감식)
{
	// 반복될 내용
}

 

(4) 반복문 생략 및 탈출

while (true)
{
	if (조건1)
    {
    	break;
    }
    else if (조건2)
    {
    	continue;
    }
    // 반복될 내용
}

* break는 자신을 감싸는 반복문 하나를 빠져나간다 = 종료시킨다.

* continue는 자신을 감싸는 반복문의 가장 위로 올라가 조건 검사를 다시 시행한다.

 

3. 조건식

(1) if ... else if ... else 문

if (조건1)
{
	// 조건1에 해당하는 경우 실행
}
else if (조건2)
{
	// 조건2에 해당하는 경우 실행
}
else if (조건n)
	// 조건n에 해당할 때 실행
}
else
{
	// 나머지 모든 경우에 실행
}

(2) 삼항 연산자 (ternary operator) 

(조건) ? data1 : data2 //조건이 true면 data1 반환,false면 data2 반환!

(3) switch문

switch(x) {
    case 'A': 
    	// x == 'A'일 때 실행될 부분
        break;
    case 'B':
    case 'C':
    	// x == 'B'혹은 x == 'C'일 때 실행될 부분
        break;
    default:
    	// 다른 모든 경우에 실행될 부분
        break;
}

 

4. 함수

* 입력이 주어졌을 때 어떠한 연산을 거쳐 출력을 반환

* 함수로 해당 코드를 관리하면 수정 및 재사용이 쉽다!

* C언어에서 컴파일은 위에서 아래로 된다. 따라서 함수 및 변수의 선언 순서가 중요.

 

5. 지역변수

* 함수, 반복문 등 중괄호 내에 선언되는 변수를 지역변수라 한다.

* 해당 지역을 벗어나면 지역변수는 소멸되며, 함수가 호출될 때마다 새롭게 할당됨.

 

* static 지역변수 : 한 번만 초기화되고 프로그램 종료 시까지 메모리 공간에 존재하되 (전역변수 특성), 중괄호 내에서만 접근이 가능 (지역변수 특성)

static int num = 2;

 

6. 전역변수

* 프로그램의시작과 동시에 메모리에 할당되며, 프로그램 종료 시까지 존재한다.

* 별도로 초기화 안하면 0으로 초기화되며, 프로그램 어디서든 접근이 가능하다.

 

7. register 변수

* register를 앞에 붙여주어 빈번히 사용하니 접근이 제일 빠른 레지스터에 해당 변수를 저장하라는 의미를 담고 있다.

register int num = 2;

 

8. 재귀 함수

* 자기 자신을 재호출하는 형태로 정의된 함수

* 탈출 조건을 정의해주는 것이 중요하다.

* 예시: 팩토리얼

int Factorial(int n)
{
	if (n == 0)
    	return 1;
    else
    	return n * Factorial(n-1);
}
int main(void)
{
	printf("1! =  %d\n", Factorial(1));
}

* 재귀함수는 호출이 반복될 수록 스택 영역의 메모리 사용이 커지고, 작업에서의 오버헤드가 증가하기에 잘 사용해야 한다.

 

9. 배열

* 다수의 변수 선언을 용이하게 하기위함.

// 1차원 배열 예제
int oneDimArr[4]; // int 자료형의 oneDimArr 이름의 [4] 길이의 1차원 배열선언

* 초기화 방법들

int arr[5];
for (let i = 0;i<5;i++)
{
	arr[i] = i;
}

int arr2[5] = {1, 2, 3, 4, 5};

int arr3[5] = {1, 2}; //{1, 2, 0, 0, 0}

* 배열의 길이 구하는 방법

int arr4[] = {1, 2, 3, 4, 5};

arr4Length =sizeof(arr4) / sizeof(int);

 

* 배열 이용한 문자열 변수 표현

: 예시

char str[8] = "Hi bro!"; // 글자 수는 'H', 'i', ' ', 'b', 'r', 'o', '!'로 7개지만, \n까지 포함해 8로 길이 지정

: 문자열 끝에 널 문자 - \n -가 포함된다. 이는 문자열의 끝을 의미함.

: 널 문자(\n)는 자동으로 포함된다.

 

char arr1[]= {'H', 'i', '~'};
char arr2[] ={'H', 'i', '~', '\0'}; // 널 문자가 문자열임을 의미해준다.

 

댓글