본문 바로가기
정보처리산업기사

정보처리산업기사 실기 C언어 문법 정리

by Hwangminseo 2026. 4. 7.

1. C 프로그램의 기본 구조

C언어 프로그램은 보통 main() 함수부터 실행된다.

예시

#include <stdio.h>

int main() {
    printf("Hello\n");
    return 0;
}

핵심 개념

  • #include <stdio.h>는 표준 입출력 헤더 파일
  • main()은 프로그램 시작 함수
  • printf()는 출력 함수
  • return 0;은 정상 종료 의미

시험 포인트

  • main() 구조
  • printf() 출력 결과
  • 개행 문자 \n

2. 변수와 자료형

변수는 값을 저장하는 공간이다.

기본 자료형

  • int : 정수
  • char : 문자 1개
  • float : 실수
  • double : 더 정밀한 실수

예시

int a = 10;
char c = 'A';
float f = 3.14f;
double d = 3.14;

핵심 개념

  • 문자 하나는 'A'
  • 문자열은 "ABC"
  • char는 문자 1개
  • float는 보통 f를 붙여서 표현

시험 포인트

  • 문자와 문자열 구분
  • 정수형, 실수형 구분

3. 연산자

산술 연산자

  • + : 더하기
  • - : 빼기
  • * : 곱하기
  • / : 나누기
  • % : 나머지

비교 연산자

  • ==, !=, >, <, >=, <=

논리 연산자

  • && : AND
  • || : OR
  • ! : NOT

대입 연산자

  • =
  • +=
  • -=
  • *=
  • /=
  • %=

핵심 개념

  • 정수끼리 나누면 정수 결과가 나온다
  • %는 나머지를 구한다

예시

int a = 7 / 2;
int b = 7 % 2;
printf("%d %d", a, b);

출력

3 1

시험 포인트

  • 정수 나눗셈
  • 나머지 계산
  • 복합 대입 연산

4. 증감 연산자

  • ++a : 먼저 증가, 나중 사용
  • a++ : 먼저 사용, 나중 증가
  • --a : 먼저 감소, 나중 사용
  • a-- : 먼저 사용, 나중 감소

예시

int a = 5;
printf("%d\n", a++);
printf("%d\n", a);

출력

5
6

핵심 개념

  • 전위와 후위는 결과가 다를 수 있다

시험 포인트

  • a++ + ++a 같은 식의 결과
  • 전위/후위 증가 순서

5. 조건문

if문

if (x > 0) {
    printf("양수");
}

if ~ else

if (x % 2 == 0) {
    printf("짝수");
} else {
    printf("홀수");
}

switch문

switch (n) {
    case 1:
        printf("one");
        break;
    case 2:
        printf("two");
        break;
    default:
        printf("other");
}

핵심 개념

  • if는 조건이 참일 때 실행
  • switchbreak가 없으면 아래 case까지 계속 실행 가능

시험 포인트

  • switchbreak
  • 조건문 실행 흐름

6. 반복문

for문

for (int i = 0; i < 3; i++) {
    printf("%d ", i);
}

while문

int i = 0;
while (i < 3) {
    printf("%d ", i);
    i++;
}

do-while문

int i = 0;
do {
    printf("%d ", i);
    i++;
} while (i < 3);

핵심 개념

  • for : 초기식, 조건식, 증감식
  • while : 조건 먼저 검사
  • do-while : 일단 한 번 실행 후 검사

시험 포인트

  • 반복 횟수
  • 중첩 반복문
  • break, continue

7. 배열

배열은 같은 자료형 여러 개를 연속된 공간에 저장한 것이다.

예시

int arr[3] = {10, 20, 30};
printf("%d", arr[0]);

핵심 개념

  • 인덱스는 0부터 시작
  • arr[0], arr[1], arr[2]
  • 배열 크기보다 큰 인덱스 접근은 위험

시험 포인트

  • 배열 요소 접근
  • 반복문과 배열 조합
  • 배열 초기화

8. 2차원 배열

행과 열 구조를 가진 배열이다.

예시

int a[2][3] = {
    {1, 2, 3},
    {4, 5, 6}
};
printf("%d", a[1][2]);

출력

6

핵심 개념

  • a[행][열]
  • 반복문과 함께 자주 나옴

시험 포인트

  • 2차원 배열 채우기
  • 대각선, 삼각형 형태 출력

9. 함수

함수는 특정 작업을 수행하는 코드 묶음이다.

예시

int add(int a, int b) {
    return a + b;
}

핵심 개념

  • 반환형
  • 함수명
  • 매개변수
  • return

예시

#include <stdio.h>

int add(int a, int b) {
    return a + b;
}

int main() {
    printf("%d", add(2, 3));
    return 0;
}

시험 포인트

  • 함수 호출 결과
  • 반환값
  • 함수 실행 순서

10. 값에 의한 전달

C언어는 기본적으로 값에 의한 전달이다.

예시

void func(int x) {
    x = 100;
}

int main() {
    int a = 10;
    func(a);
    printf("%d", a);
}

출력

10

핵심 개념

  • 함수에 값을 넘기면 복사본이 전달된다
  • 함수 안에서 바꿔도 원본은 안 바뀐다

시험 포인트

  • 원본이 바뀌는지 안 바뀌는지 판단

11. 포인터

포인터는 주소를 저장하는 변수다.

예시

int a = 10;
int *p = &a;
printf("%d", *p);

핵심 개념

  • &a : a의 주소
  • p : 주소 저장
  • *p : p가 가리키는 값

시험 포인트

  • &*의 의미
  • 포인터가 가리키는 값 변경

12. 포인터를 이용한 원본 변경

포인터를 매개변수로 넘기면 원본 값을 바꿀 수 있다.

예시

void func(int *p) {
    *p = 20;
}

int main() {
    int a = 10;
    func(&a);
    printf("%d", a);
}

출력

20

핵심 개념

  • 주소를 넘기면 함수 안에서 원본 변경 가능
  • *p = 20은 원본 값을 수정

시험 포인트

  • 값 전달과 포인터 전달 차이

13. 배열과 포인터의 관계

배열 이름은 첫 번째 요소의 주소처럼 사용될 수 있다.

예시

int arr[3] = {3, 4, 5};
int *p = arr;

printf("%d %d", arr[0], p[0]);

출력

3 3

핵심 개념

  • arr&arr[0]처럼 사용 가능
  • p[0]*p와 같은 뜻

시험 포인트

  • 배열과 포인터 접근 방식
  • 배열 전달 시 원본 변경 여부

14. 함수 안에서 포인터 재대입

이 부분이 시험에 자주 나온다.

예시

void func(int *p) {
    int temp[] = {0, 1, 2};
    p = temp;
    p[0] = 9;
}

int main() {
    int arr[] = {3, 4, 5};
    func(arr);
    printf("%d", arr[0]);
}

출력

3

핵심 개념

  • 처음 parr를 가리킨다
  • p = temp; 이후에는 지역 배열 temp를 가리킨다
  • 따라서 p[0] = 9temp[0]만 바꾸고 arr[0]은 안 바뀐다

시험 포인트

  • 포인터를 넘겼다고 무조건 원본이 바뀌는 건 아님
  • 현재 무엇을 가리키는지가 중요

15. 문자열

C언어 문자열은 char 배열로 표현한다.

예시

char str[] = "ABC";
printf("%s", str);

핵심 개념

  • 문자열 끝에는 '\0'이 자동으로 붙는다
  • %s로 문자열 출력

시험 포인트

  • 문자열 길이
  • 문자 배열과 문자열 차이
  • '\0' 의미

16. 문자와 문자열

예시

char c = 'A';
char s[] = "A";

핵심 개념

  • 'A' : 문자 1개
  • "A" : 문자열
  • 문자와 문자열은 다르다

시험 포인트

  • charchar[] 차이

17. 구조체

구조체는 서로 다른 자료형을 하나로 묶는 사용자 정의 자료형이다.

예시

struct Student {
    int id;
    char grade;
};

사용 예시

struct Student s;
s.id = 1;
s.grade = 'A';

핵심 개념

  • 여러 속성을 하나의 단위로 묶음
  • . 연산자로 멤버 접근

시험 포인트

  • 구조체 선언
  • 멤버 접근

18. typedef와 구조체

typedef를 사용하면 자료형 이름을 새로 붙일 수 있다.

예시

typedef struct {
    int x;
} Struct;

사용 예시

Struct a;
a.x = 10;
printf("%d", a.x);

핵심 개념

  • typedef로 구조체 이름을 간단히 사용 가능

시험 포인트

  • typedef struct 형태
  • 구조체 변수 선언

19. 구조체와 포인터

구조체 포인터는 -> 연산자를 사용한다.

예시

typedef struct {
    int x;
} Struct;

int main() {
    Struct a = {10};
    Struct *p = &a;
    printf("%d", p->x);
    return 0;
}

핵심 개념

  • p->x(*p).x와 같다

시험 포인트

  • .-> 차이

20. 구조체 값 전달과 포인터 전달 차이

예시

typedef struct {
    int x;
} Struct;

void change(Struct *a, Struct b) {
    a->x += b.x;
    b.x = 100;
}

int main() {
    Struct b1 = {3};
    Struct b2 = {4};
    change(&b1, b2);
    printf("%d", b1.x);
}

출력

7

핵심 개념

  • a는 포인터라 원본 b1을 바꾼다
  • b는 값 전달이라 복사본만 바뀐다

시험 포인트

  • 구조체 포인터와 구조체 값 전달 차이

21. 재귀함수

함수가 자기 자신을 다시 호출하는 방식이다.

예시

int func(int n) {
    if (n == 0) return 0;
    return n + func(n - 1);
}

핵심 개념

  • 종료 조건이 반드시 있어야 한다
  • 호출 순서를 따라가며 계산해야 한다

시험 포인트

  • 재귀 호출 결과
  • 종료 조건

22. 비트 연산자

  • & : AND
  • | : OR
  • ^ : XOR
  • ~ : NOT
  • << : 왼쪽 시프트
  • >> : 오른쪽 시프트

예시

int a = 3 << 1;
printf("%d", a);

출력

6

핵심 개념

  • 왼쪽 시프트는 보통 2배 효과
  • 오른쪽 시프트는 보통 2로 나누는 효과

시험 포인트

  • 비트 연산 결과
  • <<, >>, & 자주 나옴

23. scanf와 printf

printf

출력 함수

printf("%d", a);

scanf

입력 함수

scanf("%d", &a);

핵심 개념

  • %d : 정수
  • %c : 문자
  • %f : 실수
  • %s : 문자열

시험 포인트

  • scanf에서 변수 앞에 & 붙이는지
  • 서식 지정자 구분