Chapter 4

GraGrass·2024년 2월 6일

문장

선언

1. 변수 선언

변수는 사용하기 전에 선언해야 함

변수 선언 형태

int a;
int a,b;
int a=1, b=1;
int a=b=1; // 오류!!
int a; double x;
  • 이전엔 코드 라인 수를 줄이기 위해 한줄에 여러 변수 선언
  • 최근에는 한줄에 하나의 변수를 선언하는 것이 권장됨

변수 이름

  • 변수의 이름은 알파벳, 숫자, 언더바(_)로 구성됨
  • C언어는 대/소분자를 구분
  • 변수의 이름은 숫자로 시작할 수 없고, 키워드 사용 불가능
  • 공백 포함 불가
  • OS와 C 라이브러리들은 2개의 언더바로 시작 가능 -> 피해야 함
    ex. __FILE__, __LINE__

2. 상수 선언

변수 선언에 const(ant) 지정

const int N=1;
int const N=1;
const int N; // 지정 값 X -> 오류
  • 초기값이 동시에 지정되어야 함

#define 선언

#define N 1 // N대신 1 대입
#define N=1 // 등호 사용 -> 오류
#define N 1; // 세미콜론 사용 -> 오류
  • 자료형 지정 없이 기계적인 대입

변수와의 차이

  • 재지정이 금지됨
    ex. const int N-1; N=1; -> 값이 같아도 오류
  • 근본적인 차이: 변수는 메모리 차지, 상수는 컴파일러가 직접 대입
  • l(eft)-value = r(ight)-value 값
    변수는 l-value, r-value 모두 가능 / 상수는 l-value 불가

표현문과 복합문

1. 개요

표현식

4
-6
4+21
a*(b+c/d)/20
q>3
  • 연산자+피연산자의 조합으로 구성
  • 모든 표현식은 하나의 값을 가짐

표현문

  • 표현식으로 이루어진 문장
  • 표현식에 세미콜론(;)을 붙여서 나타냄

null문

  • 가장 간단한, 가능한 문장은 세미콜론만으로 구성된 문장
  • 세미콜론 중복 시 null문이중복된 것으로 인식

복합문(compound statement)

  • 중괄호({})로 묶인 문장 block
  • 하나의 문장과 같이 동작

2. switch 문

Example

#include <stdio.h>

int main(void)
{
	int n;
	printf("Input integer value(1~3): ");
	scanf("%d", &n);

	switch (n) {
	case 1:
		printf("one");
		break;
	case 2:
		printf("two");
		break;
	case 3:
		printf("three");
		break;
	default:
		printf("I don't know");
		break;
	}

	return 0;
}

간결한 if~else 문장

  • 사용될 수 있는 영역은 if~else에 비해 제한적

설명

  • switch(n)의 n: int/char 형 변수 중 하나이며, 실행 영역 결정
  • default: 전달된 n에 해당하는 case문이 없을 때 실행되며, 필수 X
  • break: case문의 끝에 break문이 존재하며, 없다면 아래의 모든 case문 실행

switch vs if~else

  • 분기 수가 많아지면 가급적 switch문을 사용
  • switch문에는 비교 연산이 올 수 없음

3. while문

Example

#include <stdio.h>

int main(void)
{
	int i = 0;
	while (i < 10)
	{
		printf("Hello World!\n");
		i++;
	}
	return 0;
}

특정 조건을 주고 그 조건이 만족될 때까지 반복

  • 반복을 위한 조건 검사는 while문 진입시 한번 + 반복 시 매번 수행
  • while문의 중괄호는 둘 이상의 문장을 묶기 위해 사용
  • 조건문에서 0이 아닌 수는 true로 인식 -> 무한루프 생성 / 탈출 조건 지정 필수
    ex. while(1)

4. do~while문

while문

  • 반복의 조건 검사를 루프 반복 전에 행함
  • 조건이 만족되지 않으면 루프를 한번도 실행하지 X

do~while문

#include <stdio.h>

int main(void)
{
	int i = 0;
	do
	{
		printf("Hello World!\n");
	} while (i < 0);
	return 0;
}
  • 반복의 조건 검사를 루프 반복 1번 실행 후에 행함
  • 한번은 루프를 반드시 실행하게 됨

5. for문

초기문+조건문+증감문 포함

  • 기본적으로 초기문, 조건문, 증감문 포함
  • 반드시 모두 채워야하는 것은 아니고 필요한 것만 채우면 됨
  • 조건문을 비워두면(for( ; ; ))무한루프 생성

6. continue와 break

break

#include <stdio.h>

int main(void)
{
	int sum = 0, num = 0;
	while (1) {
		sum += num;
		if (sum > 500)
			break;
		num++;
	}
	printf("sum: %d, num: %d\n", sum, num);
	return 0;
}

  • break를 만나면 가장 가까이서 감싸고 있는 반복문 하나를 빠져나옴
  • switch문 탈출

continue

#include <stdio.h>

int main(void)
{
	int i = 10;
	for (printf("start!\n"); i < 20; ++i) {
		if (i % 2 == 0 || i % 3 == 0)
			continue;
		printf("%d\n", i);
	}
	printf("end!\n");
	return 0;
}

  • continue를 만나면 돌던 루프의 남아있는 부분을 건너뜀
  • 건너뛴 이후, 다음 루프로 넘어감
profile
올해는 진짜 갓생 산다

0개의 댓글