1절 조선분기 제어문

1.     if

1)    단순 if

(1)   조건식

o  조건식의 결과 논리값이 참(true)이면 종속문장 실행, 거짓(false)이면 ifans을 빠져 나와 다음문장 실행

 

(2)   복합문

o  조선식이 참일 때 실행할 문장이 두 개 이상일 경우 { } 사용해 문장을 하나로 묶어줌

o  { } : 블록!

 

2)    if ~ else

u  두 문장 중 하나를 선택하여 처리할 경우 사용

(1) 조건식

o  if문의 조건이 참이면 종속문장 1 실행한 후 if문 빠져나오고, 거짓이면 else로 이동해 종속문장 2 실행하고 if문 종료

o  조건식의 결과에 따라 종속문장1, 종속문장2 중 하나를 선택적으로 실행

 

(2)   주의사항

o  조건식 뒤에 ; 붙이지 않음

o  else 뒤에 조건식 단독으로 사용할 수 없음

 

3)    중첩된 if

u  if문 안에 또 다른 if문 포함시키는 것

(1)  조건식

o  마지막 else 뒤의 문장 n은 조건식1 ~ 조건식n-1이 모두 거짓인 경우에 실행

 

(2)   주의사항

o  중첩된 if문이 else와 짝이 맞지 않을 때 해석 상 문제 발생

o  사용 범위를 명확하게 표시하기 위해 { }로 표시

 

2.     switch

n  중첩된 if문 사용하면 프로그램이 복잡해지고 이해하기 힘들ㅇㅇ

n  다중 분기문 : switch문은 조건식 값에 따라 여러 종류 중 한 가지만 선택해 실행할 때 많이 사용됨

n  1개 이상의 case문과 default문으로 구성됨

n  여러 case문 중 조건식의 결과 값이 일치하는 case를 찾아서 그 뒤에 나오는 문장들 실행

 

1)    switch문의 형식과 실행 흐름

(1)   조건식

o  조건식의 결과 값은 반드시 정수여야 함

è 논리식은 결과가 참일 때 정수 1, 거짓일 때 정수 0으로 변환

o  ASCII 코드 값이 정수형이므로 문자인 수식도 결과 값으로 사용 가능

 

(2)   case

o  case문에 명시하는 값은 반드시 정수형 상수 한 개만 가능

o  변수를 포함한 수식은 가능한데 상수끼리의 수식은 불가능

o  문자상수 가능

o  case문 뒤 문장에 일반적으로 break문 가짐(switch문 종료)

 

(3)   실행의 흐름

o  switch문은 조건식을 평가한 결과 값이 case문의 값을 차례대로 비교해 같은 값을 가진 case문 뒤의 문장을 실행

그 후 break문 만나면 switch문 빠져나옴

 

(4)   default

o  조건식 결과 값과 case 뒤의 값을 비교하여 일치하는 값을 찾지 못하면 default문 뒤의 내용 실행

o  불필요하면 생략 가능

o  default문이 case문 중간에 위치하면 default문 뒤의 내용을 실행한 다음 뒤의 case문 계속 실행

 

2)    주의사항

(1)   switch문에서 break문을 생략할 경우

o  실행문장 뒤에 break문 없으면 그 뒤 case문과 상관없이 다음 문장을 계속 실행해 모든 문장 실행한 후 switch문을 빠져 나옴

 

(2)   여러 결과 값에 따라 동일한 코드를 처리할 경우

o  break를 사용하지 않음으로써 조건식의 여러 결과 값에 따라 동일 코드 처리 가능

case 1 : case 2 : 실행문

casel 3 : case 4 : 실행문

case 1, 2 : <- 이렇게는 안됨

 

2절 반복 제어문

l  동일한 내용을 특정횟수만큼 반복하여 처리할 때 사용

l  Loop 루프라고도 함

l  반복문 작성할 때는 먼저 어떤 내용을 반복해야 하는지부터 분석해야 함!

 

1.     for

n  for문은 반복횟수가 분명할 때 사용

1)    for문의 형식과 실행 흐름

(1)   for문 헤더

o  for문의 첫 행

o  세 부분으로 나뉘고 반드시 ;로 구분

    초기식 : 반복 루프가 시작될 때 한 번만 실행. 루프 반복을 제어하는 제어변수 초기화하는 용도로 사용. 제어변수도 변수를 먼저 선언해야 함.

    조건식 : 조건식의 결과 값이 참이면 for문의 본체를 실행, 거짓이면 본체를 실행하지 않음

    증감식 : 제어변수를 증가시키거나 감소시키는데 사용. for문의 본체를 실행하면 실행 순서가 증감식으로 이동

-      증감식 실행 한 후에는 언제나 조건식 부분으로 이동

-      증감식의 실행으로 제어변수의 값이 변경되어 조건식의 결과 값이 거짓이 되면 반복이 끝남

 

(2)   for문 본체

o  본체의 마지막 문장을 실행하면 언제나 헤더의 증감식으로 돌아감

 

(3)   주의사항

o  for문의 헤더 뒤에 처리문장 없이 ;로만 구성된 문장(null문장)

-      for문의 헤더 부분만 반복 -> 결국 1번만 실행됨

-      int i;

for(i = 1; i <= 5; i++) ; <- 요걸로 끝

 

o  for문의 헤더에서 초기식, 조건식, 증감식을 구분하기 위해 ; 써야 함

 

2)    다양한 for문의 헤더

(1)   초기식에서 콤마 연산자를 이용하는 여러 문장 사용 가능, 증감식도 다양하게 사용 가능

o  초기화를 하는 식이니 다양한 변수를 초기화 할 수 있다

o  int i, sum;

for(sum = 0, i = 1 ; i <=10 ; i++) { } // 뭐 이렇게

for(i = 9 ; i > 0 ; i--, sum++) {} // 이렇게도 ok

 

(2)   for문의 조건식에서는 논리연산자를 이용해 여러 조건 결합 가능

o  int i, sum, n;

for(sum = 0, i = 1; i <= 5 && sum <= 10; i++) sum += i ; // 이런 식

 

(3)   초기식, 조건식, 증감식을 모두 생략할 수 있음

o  무조건 for문의 본체를 실행함. 무한반복!

o  본체 안에서 for문 탈출하는 방법을 반드시 포함시켜야 함

break문을 쓰는 것 같이

 

3)    중첩된 for

(1)   형식과 실행 흐름

o  반복문 안에 또 다른 반복문이 포함된 것

o  각 반복문의 제어변수가 달라야 함

 

(2)   중첩된 for문에서 제어변수의 활용

o  중첩된 for문에서 안쪽으로 중첩되는 for문들은 자신보다 밖에 있는 for문의 제어변수들을 많이 활용함

int line, star;

for(line = 1; line <= 5; line++){

           for(star=1; star <= line; star ++){}

}

for의 반복 횟수를 고정시키지 않고 외부 for문의 제어변수로 지정

-> 외부 제어변수가 증가할 때 내부 제어변수 반복 횟수가 같이 증가함

 

2.     while

n  while문은 반복횟수는 정확히 모르며 특정 조건을 만족하는 한 반복할 때 사용

1)    while문과 for문의 비교

u  while문 이전에 제어변수가 초기화되고 while문의 본체가 끝나기 전에 제어변수의 증감식이 포함됨

 

2)    while문과 무한루프

u  while문에서 무한루프를 만들려면 조건식이 항상 참이면 됨

u  보통 조건식으로 1을 넣으면 됨

u  반복을 끝내고 while문 탈출할 수 있도록 break문을 이용하는 경우가 많음

 

3.     do ~ while

n  do ~ while문은 반복횟수는 정확히 모르지만 무조건 한 번은 반복한 후 특정 조건을 만족하는 한 반복이 필요할 때 사용

1)    do ~ while문의 형식과 실행 흐름

(1)   형식과 실행 흐름

o  do문 뒤에 조건식이 없으므로 무조건 본체를 실행함. 본체를 실행한 후 while 뒤의 조건식을 검사해 참이면 다시 본체를 실행하고 거짓이면 do ~ while문을 탈출함

 

2)    do ~ while문의 본체

u  반복할 문장이 하나뿐이더라도 반드시 { }로 묶어야 함

u  본체가 끝난 후 while(조건식)을 붙임

u  마지막은 ;로 끝남

 

3절 기타 제어문

1.     break

n  switch, while, do ~ while문을 실행하는 중간에 완전히 탈출할 때 사용

n  break문 사용 시 주의 사항

u  개수에는 제한이 없음. 많이 쓰면 코드 복잡해짐

u  중첩된 루프인 경우 내부 루프에서 break문 사용하면 break문이 속한 내부루프만 탈출

u  if문 탈출은 안됨

u  break문은 반복문과 switch문에서만 사용.

 

2.     continue

u  continue문의 다음 내용만 실행하지 않은 채 다음 반복으로 진행하기 위해 루프의 시작이나 끝으로 이동

u  continue를 만나면

o  for : 무조건 헤더의 증감식으로 이동

o  while : 헤더의 조건식으로 이동

o  do ~ while : 맨 끝 while 뒤의 조건식으로 이동

 

3.     goto

n  프로그램 실행 중 레이블이 붙은 위치로 제어를 무조건 이동시킴

n  문장을 가리키는 레이블이 필요

n  레이블 구별하기 위한 이름과 콜론( : )이 필요

 

1)    goto문의 주의사항

u  중첩된 반복 루프에서 문제가 발생하였을 때 중첩된 루프를 단번에 빠져나올 수 있어 유용

u  C언어의 레이블 (세 가지)

o  switch ~ case문의 case 레이블, default 레이블

o  goto 레이블

u  레이블 이름은 작명규칙 준수, 레이블 이름 뒤에는 반드시 콜론

u  goto문은 switch문의 레이블에 갈 수 없고 해당 레이블 이름 있는 곳으로만 이동


1절  표준 입 ∙ 출력함수

1.     표준 ∙ 출력함수

n  <stdio.h>에 정의되어 있음

1)    표준 출력 함수

u  printf() : 화면에 형식화된 여러 종류의 자료 출력

u  putchar() : 화면에 1개 문자 출력

u  puts() : 화면에 문자열 출력

 

2)    표준 입력 함수

u  scanf() : 키보드로 1개 이상의 형식화된 자료를 입력 받음

u  getchar() : 키보드로 1개 문자 입력 받음

u  gets() : 키보드로 문자열 입력 받음

 

3)    변환명세

u  % 기호로 시작하는 형식문자열

u  형식 플래그, 필드폭, 정밀도, 출력변환 지시자로 구성

u  기본 자료형의 변환 명세 : %d(정수 int), %lf(실수 double), %c(문자)

변환명세

자료형

형식

정수

%d

int

정수를 10진 형태로 입∙출력

%i

int

정수를 10진 형태로 출력 (only출력)

%u

unsigned int

부호 없는 정수를 10진 형태로 입∙출력

%o

int

정수를 8진수로 출력, 8진수를 10진수로 변환 후 입력

%x

int

정수를 16진수로 출력, 16진수를 10진수로 변환 후 입력

실수

%f

float

실수를 소수점아래 6자리로 출력, float형으로 입력

%lf

double

실수를 소수점아래 6자리로 출력, double형으로 입력

%e

float

지수 형식(과학적 표기) float형으로 입∙출력

%le

double

가수e지수형식, 실수값 double형으로 입력

문자

%c

char

문자 1개 입∙출력

문자열

%s

문자열

문자열 입∙출력

 

u  필드폭, 플래그, 정밀도

o  필드폭을 명시하지 않을 시 수치 데이터는 기본 왼쪽부터 정렬하여 출력

필드폭을 명시하면 오른쪽으로 정렬하여 출력

o  필드폭을 명시하지 않을 시 문자 데이터는 기본 오른쪽부터 정렬하여 출력

o  지정된 필드폭보다 출력할 값의 자릿수가 크면 출력 형태가 흐트러져 출력됨

 

2.     출력함수 printf()

n  printf(“형식 문자열”, 인수1, 인수2, 인수3,…);

1)    변환명세 포함하지 않은 printf()

u  단순한 특정 문자열 출력

u  이스케이프 문자 출력

 

2)    변환명세 포함한 printf()

u  변환명세가 n개면 뒤의 인수도 n

u  필드폭, 플래그, 정밀도를 이용하여 출력한다. (scanf에는 잘 사용하지 않음)

(1)   %d를 사용한 정수 출력

o  %필드폭d : 필드폭 만큼 칸수 확보, 오른쪽 정렬 됨(필드폭 지정했으므로)

o  %+필드폭d : 필드폭 만큼 칸수 확보, 오른쪽 정렬, ( + )양수 부호 출력(필드차지)

o  %-필드폭d : 필드폭 만큼 칸수 확보, ( - )왼쪽 정렬

ex) “%-+5d”, 10 -> 5칸 확보, 왼쪽 정렬, 양수부호 표시 + 1 0 _ _

o  %0필드폭d : 필드폭 만큼 칸수 확보, 오른쪽 정렬, 왼쪽 빈자리 0으로 채우기

 

(2)   %lf를 사용한 실수 출력

o  필드폭 : 전체 자릿수. 소수점 위 + 소수점 아래

o  정밀도 : 소수점 이하 자릿수

o  기본적으로 실수는 f lf든 소수점 이하 6자리 표시하는 것을 명심 ㅎㅎ

o  %필드폭.정밀도lf  : 필드폭 만큼 전체 자릿수 잡고 정밀도 만큼 소수점 아래 표현

o  %정밀도lf : 정밀도 만큼 소수점 이하 자릿수까지 출력

o  %필드폭lf : 소수점 위, 아래 포함한 필드폭. 소수점 아래는 6자리까지 확보하여 출력.

만약 자릿수가 모자라면 자릿수 무시하고 소수점 아래까지 모두 출력함

o  %필드폭.lf(엘에프 LF) : 소수점 아래 첫 자리에서 반올림하여 출력.

필드폭만큼 칸을 확보해 출력

%필드폭.0lf와 같음

(3)   %c를 사용한 문자 출력

o  문자 1개를 출력할 때 사용

o  기본 정렬 방식 : 오른쪽 정렬! (정수, 실수는 왼쪽.. 부호표시가 반대로 되는 거지!)

o  %필드폭c : 필드폭만큼 자리 확보하고 문자형식으로, 오른쪽 정렬하여 출력

o  %-필드폭c : 필드폭만큼 자리 확보하고 문자형식으로, 왼쪽 정렬하여 출력

 

(4)   %s를 사용한 문자열 출력

o  문자열 출력

o  기본 정렬 방식 : 오른쪽 정렬

o  기본 자료형이 없음.(문자는 char이지만)

o  %필드폭s : 필드폭만큼 자리 확보하고 문자열 형식으로 오른쪽 정렬하여 출력

o  %-필드폭s : 필드폭만큼 자리 확보하고 문자열 형식으로 왼쪽 정렬하여 출력

 

3.     문자와 문자열 전용 출력 함수

n  변환명세를 사용하지 않는 함수

1)    문자 전용 출력함수 putchar()

u  printf  함수보다 실행속도 빠르고, 문자 출력 여러 번 반복할 때 사용

u  putchar(‘문자’ or 문자형 변수);

 

2)    문자형 자료의 ASCII code 값의 변환

u  기본적으로 문자형의 char자료형으로 선언하고 컴퓨터 메모리에서 1byte 저장공간을 확보한 후 변수를 저장함

u  변수 저장 시 ASCII code 값으로 저장되는 것

u  문자와 ASCII code 값의 변환은 변환명세 ‘%c’로 자유롭게 바꿀 수 있음

u  ASCII code 값은 2진수, 10진수, 16진수 등으로 표현 가능하므로 이 값들을 산술연산 한 결과를 문자 변환명세로 표현가능

char ch1 = ‘A’ + 1;

putchar(ch1); // B 출력 ( A : ASCII code 65 + 1 = 66 -> B ASCII code : 66)

 

3)    문자열 전용 출력함수 puts()

u  한 문자열을 출력한 후 커서의 위치를 자동으로 다음 행에 이동시킴

u  puts(“문자열” or 문자열을 저장한 변수);

 

4.     입력함수 scanf()

1)    한 개의 자료만 입력

u  메모리 기억장소를 알 수 있는 연산자 ‘&’를 변수명 앞에 붙여줌

u  scanf(“변환명세”, &변수명);

 

(1)   한 개의 자료만 입력 시 주의사항

o  변환명세 후에 공백이나 이스케이프 문자를 사용하지 않는다.

     프로그램 실행하면 키보드로부터 자료입력 후에도 계속 커서 깜박이며 입력 기다림

     공백 제외한 자료를 입력해야 프로그램이 진행되고, 두 번째 입력 받은 값은 그 다음 입력 함수에서 지정한 변수에 저장됨

     변환명세는 %d, %lf, %c, %s 등만을 사용하는 것이 안전함

o  변환명세에 필드폭은 꼭 필요할 때에만 사용한다.

     필드폭보다 더 긴 수를 입력하면 그 후 자릿수는 입력되지 않고, 필드폭만큼의 자료만 입력 받음

o  자료형에 맞는 변환 지시자(%d, %lf, %c, %s)를 사용한다.

     이상한 결과값을 얻음

 

(2)   %s를 사용한 문자열 입력

o  문자열을 저장하는 변수명이나 배열명은 그 자체가 문자열을 저장하게 될 메모리 시작번지

ð  & 붙이지 않음 (& : 변수의 주소를 가리키라는 연산자! 그런데 배열명이나 문자열 변수명은 자기 자신이 이미 포인터임)

o  scanf(“%s”, 문자열을 저장할 변수명);

char name[10];

scanf(“%s”, name); // name이 배열이므로 변수명이 포인터

 

2)    여러 개의 자료를 한꺼번에 입력

u  scanf(“변환명세 n개 포함한 형식 문자열” ,&변수명1, &변수명2, … ,&변수명n);

(1)   scanf(“%d %d %d”, &변수명1, &변수명2, &변수명3);

o  변환명세 사이에 구분자가 없음.

o  변환명세 사이에 공백을 넣어도 됨(자료 한 개 입력 받을 때는 안됨)

o  자료 간 구분은 C언어의 공백문자(스페이스바, , 엔터키) 사용

o  입력의 끝은 엔터키

(2)   scanf(“%d, %d, %d”, &변수명1, &변수명2, &변수명3);

o  변환명세 사이에 구분자를 넣었음

o  자료 입력 시 명세 사이 구분자와 같은 구분자를 써줘야 함

(3)   여러 개 자료 입력 시 주의사항

o  scanf() 함수의 형식 문자열안의 변환 명세 개수와 입력 변수의 개수가 같아야 함

    변환명세 개수 < 입력변수 개수

쓰레기 값이 합산되어 출력되어 이상한 결과가 나옴

    변환명세 개수 > 입력변수 개수

출력의 결과는 표시되지 않고 프로그램 종료됨

 

5.     문자와 문자열 전용 입력함수

1)    문자 전용 입력함수 getchar()

u  한 개의 문자를 반환 값으로 변수에 저장

u  변수 = getchar();

char grade;

grade = getchar();

 

 

2)    문자의 연산

u  문자는 ASCII code값이 부여되어 있으며, 문자와 정수 간 상호 변환을 활용

u  대소문자 변환, 문자 숫자 변환 등

char small, large;

small = getchar();

large = ‘A’+(small - ‘a’); // A – a = 65 – 97 두 문자간 차이가 음수이므로..ㅎㅎ

printf(“입력한 소문자%c의 대문자는 %c이다.”, small, large);

 

3)    문자열 전용 입력함수 gets()

u  변환 명세 필요 없고 엔터키 입력하기 전까지의 모든 문자가 문자열로 저장됨

u  gets(문자열 저장할 변수); (문자열 변수는 변수명이 포인터)

 

2절  C언어의 연산자

1.     연산자의 종류

1)    논리 연산자

u  논리 값을 이용한 논리연산

u  논리곱(AND, &&), 논리합(OR, | |), 부정(NOT, !)

u  연산 결과는 1(, true), 0(거짓, false)로 나타남

u  && : 둘 다 1일때만 1, | | : 둘 중 하나만 1이어도 1

변수

기능

a

b

a && b

a | | b

a !

b !

0

0

0

0

1

1

0

1

0

1

1

0

1

0

0

1

0

1

1

1

1

1

0

0

 

2)    증감 연산자

u  변수의 값을 1만큼 증가 또는 감소시킴

u  전위형과 후위형으로 구분하여 연산

 

종류

증감 연산자

연산 결과

전위형

++a

a 값이 1 증가한 후, 증가한 값으로 연산 수행

--a

a 값이 1 감소한 후, 감소한 값으로 연산 수행

후위형

a++

현재 a 값이 연산에 사용된 후, a 값이 1 증가

a--

현재 a 값이 연산에 사용된 후, a 값이 1 감소

 

int a = 10, b = 3, c = 0;

a++;

printf(“a = %d”, a);

a = ++a * 5;

printf(“a = %d”, a);

c = a-- * ++b;

printf(“c = %d”, c--);

è 변수 선언

è a 후위 연산. 연산할 게 없으니

è a = 11 출력

è a전위연산으로 12 * 5

è a = 60 출력

è a 후위연산 b 전위연산 60 * 4 연산

è c = 240 출력. c가 후위연산이므로 후에 연산 하고

 

3)    비트 연산자

u  컴퓨터 통신에 많이 사용됨

u  비트연산의 대상이 되는 자료형은 반드시 정수형

(1)   비트 논리 연산자

o  2 진수 각 자리에 대한 연산 수행

o  AND(&), OR( | ), XOR(^), NOT(~) 연산

비트변수

a&b

a|b

a^b

~a

~b

설명

a

b

0

0

0

0

0

1

1

입력 비트 중 하나라도 0이면 연산 결과 0

0

1

0

1

1

1

0

입력 비트 중 하나라도 1이면 연산 결과 1

1

0

0

1

1

0

1

두 비트 입력이 서로 다른 경우 연산 결과 1

1

1

1

1

0

0

0

단항 연산자. 입력 비트 반전을 연산

C 컴파일러는 int 메모리를 4byte 확보하니 그 모든 비트를 다 계산하는 것

 

(2)   비트 이동 연산자

    왼쪽 비트 이동 연산자

    피연산자 << n;

    피연산자 각 비트값을 왼쪽으로 한 비트씩 이동하기를 n번 반복

    왼쪽으로 밀려난 비트값 제거되고, 오른쪽 비트는 0으로 채워짐

    곱셈효과 : 왼쪽으로 n비트 이동 -> 피연산자 * 2^n

    부호 비트 값이 바뀔 수 있으므로 부호 없는 자료형에 사용하는 것이 바람직

    오른쪽 비트 이동 연산자

    피연산자 각 비트값을 오른쪽으로 한 비트씩 이동하기를 n번 반복

    오른쪽으로 밀려난 비트값 제거되고, 왼쪽 빈 비트에 부호 비트값 채워짐

    나눗셈 효과 : 오른쪽으로 n비트 이동 -> 피연산자 ÷ 2^n

    정수 간 연산이므로 몫을 구하는 효과!!

    일반 곱셈 나눗셈 연산보다 빠름

 

4)    형 변환 연산자

u  두 피연산자의 자료형이 일치하는 경우에만 연산

u  피연산자의 자료형이 서로 다를 경우 연산을 수행할 떄 자료형을 하나로 통일하는 형변환 발생

(1)   자동(암시적) 형 변환

    형 넓힘(promotion) 변환

    표현 범위에서 큰 표현범위의 자료형으로 변환

    char < short < int, long < float< double

    형 좁힘(demotion) 변환

    대입할 때 발행

    왼쪽 변수의 자료형에 맞추어 형 변환 발생

 

(2)   강제(명시적) 형 변환

o  형 변환 연산자를 이용해 사용된 곳에서만 일시적으로 형 변환 발생

o  (자료형) 피연산자

o  변수 자체의 기억장소 크기가 변경되는 것이 아니므로 대입문 왼쪽의 변수는 사용 불가능

 

5)    콤마 연산자, 주소 연산자, sizeof 연산자

(1)   콤마 연산자

o  수식을 분리하는 연산자

o  우선순위가 가장 낮음

o  출력 : 콤마 연산자 중심으로 왼쪽과 오른쪽에 수식이 올 수 있음. 왼쪽부터 수식 연산하고 오른쪽 수식을 연산 후 좌측항 변수에 대입하여 저장함

int a, b;

b = (a = 10 + 20, a -5); // -> a=30 연산 후 30-5 a = 25 된 뒤 대입 연산 됨

 

(2)   주소 연산자

o  앰퍼샌드 ( & ) : scanf() 함수의 변수 앞에 사용하는 연산자

o  변수에 할당된 기억 공간의 주소 알 수 있음

o  기억장치 주소는 일반적으로 1byte 단위임

o  메모리 주소 표시할 떄는 printf() 함수의 변환명세를 16진수로 표시

int a;

scanf(“%d”, &a);

printf(“입력 받은 a의 주기억장치 주소는 -> %x이다.”, &a);

 

(3)   sizeof 연산자

o  자료가 저장된 공간의 크기를 byte 반환

 

2.     연산자 우선순위와 결합 방향

우선순위

분류

연산자

결합방향

1

단항

( ) :함수 호출, [ ] :인덱스, :간접지정,  . : 직접지정

2

++, --, + : 부호, - :부호, sizeof, ~ , ! , * :참조, & :자료형, 주소연산자

3

산술

*, /, %

4

+ , -

5

이동

<<, >>

6

관계

<<=, >>=

7

==, !==

8

비트

&

9

^

10

|

11

논리

&&

12

| |

13

조건

? : : 삼항 연산자

14

대입

=, +=, -=, *=, /=, %=, &=, !=, ^=, <<=, >>=

15

콤마

,  : 수식 분리. 가장 낮은 우선순위

 


1절  변수와 자료형

1.     변수의 표현

n  변수 : 자료를 저장하기 위한 공간

n  변수 선언 : 기억 공간을 확보하는 행위

n  변수명 : 기억 공간에 적절한 이름을 붙이는데, 주소 대신 이름을 이용할 수 있게 한 것

1)    변수명의 생성 규칙

주기억장치 일부 공간에 값을 보관하고, 이름으로 그 값을 가리킴 (이름으로 호출)

(1)   식별자 : 프로그램에서 사용할 변수, 함수, 구조체에 대해 프로그래머가 직접 지정한 이름

(2)   식별자 생성 규칙

o  영어 대소문자(구별함), 숫자, _(언더스코어)

o  첫 글자는 숫자 X

o  중간에 공백 X , 예약어 사용 X

o  변수명 길이 제한 없으나 가능한 31자 이내

(3)   식별자 관습 규칙

o  여러 단어 사용할 경우 : _로 구분, 카멜(두 번째 단어 첫 글자 대문자),

 파스칼(모든 단어 첫 글자 대문자)

(4)   예약어

 

2)    변수의 선언

u  변수에 자료 값을 저장할 주기억장치의 기억공간을 할당하는 것

u  실행문 이전에만 올 수 있음

u  { 다음에 곧바로 선언문 위치, 선언문 끝나고 실행문 옴

(1)   변수의 선언

o  자료형 변수명;

o  자료형 변수명 = 초깃값;

o  자료형 변수명1, 변수명2, 변수명3 , … , 변수명n;

o  본체 안의 다른 실행문 뒤에 선언문이 오는 것은 오류로 처리

 

(2)   변수 선언의 의미

o  값을 대입한다(assign) : 변수에 해당하는 기억 공간에 값을 저장하는 행위

o  초기화 하지 않으면 변수의 기억 공간에는 임의의 값(쓰레기값)이 저장되어 있음

 

2.     자료형

1)    문자형

u  문자 1개 표현

u  1Byte 기억공간 차지

문자 자료형

크기

유효 범위

char

1 byte

-128 ~ 127

signed char

1 byte

-128 ~ 127

unsigned char

1 byte

0      ~ 255

u  아스키코드 : 7비트 표현방식 -> 128( )개의 문자조합

아스키 코드

10진수

16진수

0 ~ 9

48 ~ 57

0x30 ~ 0x39

A ~ Z

65 ~ 90

0x41 ~ 0x5A

a ~ z

97 ~ 122

0x61 ~ 0x7A

 

2)    정수형(고정 정수형)

u  소수점을 표시하지 않는 수치를 위한 자료형

정수 자료형

의미

크기

유효 범위

(signed) short (int)

작은 정수

2 byte

-32768 ~ 32767

unsigned short (int)

부호 없는

2 byte

0 ~ 65535

(signed) int

정수

4 byte

-21 ~ 21

Unsigned (int)

부호 없는

4 byte

0 ~ 42

(signed) long (int)

큰 정수

4 byte

-21 ~ 21

Unsigned long (int)

부호 없는 큰 정수

4 byte

0 ~ 42

3)    실수형

실수 자료형

크기

유효 자릿수

유효 범위

float

4 byte

소수점 이하 6

약 

double

8 byte

소수점 이하 15

long double

8 byte

소수점 이하 15

2절 상수

1.     리터럴 상수

n  프로그램이 실행되는 도중에는 값이 변경될 수 없음

1)    숫자 상수

u  정수형 상수 : 숫자 (10진수), 0숫자 (8진수) 0x숫자 (16진수)

u  실수형 상수

o  3.14(8바이트 더블) =/= 3.14f(4바이트 플로트)

소수점 표기법 : 3.14 (더블형 상수로 8바이트) / 0.873f (플로트형 상수로 4바이트)

지수 표기법

     지수 표기는 실수를 가수와 지수로 분리해서 표현

     실수를 가수 * , 가수 e 지수로 표현

     가수 : 실수나 정수, 지수 : 정수, e 는 대소문자 둘다 가능

 

2)    문자, 문자열 상수

(1)   문자 체계

o  ASCII : 7비트 이용해 128개 문자, 숫자, 특수문자 표현

o  0 : 48 / A : 65 / a : 97

(2)   문자 상수 표현

o  문자’, ‘\문자’, ‘\8진수’, ‘\16진수’, “문자열

    문자 상수 : 단일 인용 부호 ( ‘ ) 로 묶어서 표현

문자 1개만 표현한 것

    escape문자 : 특별 문자 표현. 백슬래시로 시작 \

Escape

ASCII

의미

Escape

ASCII

의미

\0

Null

널 문자

\n

LF

개행

\a

BEL

beep

\r

CR

열 복귀

\b

BS

백스페이스

\t

HT

(3)   문자열 상수 표현

o  이중 인용부호 ( “ ) 로 묶어서 표현

o  문자열이 메모리에 저장될 떄 문자 마지막에 널 문자(\0) 추가

o  저장장소 크기 : 문자열 크기 + 1(null)

 

2.     심볼릭 상수

1)    Const 상수

u  상수인 const로 지정하면 그 값을 절대로 바꿀 수 없음

u  처음 상수 정의할 때 값을 초기화 해줘야 함

u  상수의 기호화” : 변수처럼 이름이 있는 상수

2)    매크로 상수

u  #define문 이용

 

3절 선행처리기

l  선행처리기(전처리기) : 소스 프로그램을 오브젝트 프로그램으로 컴파일하기 전에 수행

l  프로그램 소스 파일이 컴파일 될 수 있도록 준비하는 역할

l  #으로 시작하고 명령어 끝에 ; 붙이지 않고, 한 행에 하나만 쓸 수 있음

 

1.     #define 지시자

n  특정 기호 상수를 프로그래머가 정의한 치환 문자열로 대체하는 역할

n  매크로 상수 / 매크로 함수로 나뉨

n  매크로 상수 : 인수를 가지지 않고 단순 치환

n  매크로 함수 : 함수처럼 인수를 가짐

1)    #define 사용 시 유의사항

(1)   프로그램에서 첫 칸에 #기호로 시작, 원시 프로그램 내의 어느 곳에서나 지정 가능

(2)   보통 대문자 많이 사용. 중간에 공백 X (소문자로 써도 문법적 오류는 안남)

(3)   끝에 ; 붙이지 않음

(4)   지정 한 줄 내에서만 가능하고, 치환문자열 전부 쓸 수 없을 때 백슬래시 하여 다음 줄에 계속 지정 가능

(5)   매크로를 문자열 상수처럼 이중 인용부호 사이에 지정하면 치환문자열로 치환되지 않음

(6)   매크로명과 인수 기입 위한 괄호 사이에 공백 X, 문자열 전체를 괄호 속에 넣기도 X

 

2)    매크로 상수 (인수 없는 단순 치환)

u  # define 매크로 치환할 값 -> #define MAX 200

u  # define 매크로명 치환 문자열 -> #define BEGIN { / #define IINT int

u  # define 매크로명 문자 상수’ -> #define STOP ‘@’

u  # define 매크로명 문자열 상수” -> #define STOP “end of data”

 

3)    매크로 함수 (인수 있는 함수 같은 것)

u  함수처럼 상황에 따라 인수를 지정하기도 하고 문자열 치환도 함

u  컴파일 할 때 함수가 호출되는 것이 아니라 호출된 곳에 코드가 직접 삽입 -> 속도 빨라짐

u  전처리기는 함수가 사용된 곳을 찾아 ( ) 안에 매크로 함수의 인수를 치환할 내용에 매핑하여 문자열 치환을 수행

u  #define 매크로 함수명 (인수1, 인수2, … ) 치환할 내용

è #define ADD(x, y) ((x) + (y))

è #define SQUARE(x) ((x) * (y))

(1)   매크로 함수 사용 시 주의사항

     매크로명과 매개변수를 나타내는 괄호 사이에 공백 X

    매개변수 내영의 전체 및 각 요소 자제에도 괄호 삽입해야 함

#define EXE1(x) x * x -> EXE1(2+3); -> 2+3 * 2+3으로 결과가 달라짐

#define EXE2(x) ((x) * (x)) -> EXE2(2+3); -> (2+3) * (2+3) 잘 나옴

    매개변수로 증감연산자 사용 X

    반드시 한 행으로 작성하고, 여러 행 쓸 시 백슬래시 씀

(2)   매크로 함수 사용 시 장단점

     실제 함수 호출이 일어나지 않아 프로그램 실행 속도 빨라짐

    사용하는 곳 마다 정의된 코드 치환되므로 코드가 여러 번 복사 되 프로그램 크기가 커짐

    크기가 작은 함수만 매크로 함수로 정의하는 것이 효과적

 

2.     #include 지시자

l  파일을 포함하는 지시자 -> 헤더파일 포함하기 위해 사용

l  함수 사용 시 프로그램 안에 해당 함수의 원형 선언이 반드시 포함되어야 되므로 사용

l  라이브러리 함수 사용 시 라이브러리 헤더파일 포함

l  #include <라이브러리 헤더 파일> / #include “라이브러리 헤더 파일

l  #include “사용자 정의 헤더 파일” -> 경로 다 적어 줘야 됨(절대 경로)

l  #include “사용자 정의 파일

l  표준 라이브러리 함수와 헤더 파일

헤더 파일

기능

함수

stdio.h

표준 입출력 함수

printf(), scanf(), puts(), gets(), …

stdlib.h

기본 라이브러리 함수

rand(), exit(), atoi(),…

string.h

문자열 처리 함수

strcpy(), strlen(), strcmp(),…

conio.h

콘솔 입출력 함수

getch(), putch(),

math.h

수학 관련 함수

abs(), sin(), sqr(),…

time.h

시간 관련 함수

time(), localtime(), asctime(),…

ctype.h

문자 분류 함수

isalpha(), islower(), isspace(),…

memory.h

메모리 관련 함수

memcpy(), memset(), memmove(),…

 

 

3.     조건부 컴파일을 위한 지시자

n  특정 조건을 만족할 때만 특정 코드를 프로그램에 삽입하여 컴파일

1)    #if

u  전처리기는 #if를 만나면 조건식이 참일 때 문자 1’을 거짓일 때 문장2’를 소스파일에 삽입

u  두 문장 중 한 개만 선택하여 소스파일에 포함

u  매크로를 정수와 비교하거나 연산할 수는 있지만 실수나 문자열과 비교하는 것은 불가능

u  #else문에서 또 다른 조건문을 검사라혀면 #elif문 사용

#if 조건식

문장 1;

#elif 조건식

문장 2;

#else

문장 3;

#endif

#if (NATION ==1)

   #include “korea.h”

#elif (NATION ==2)

   #include “usa.h”

#else

   #include “tai.h”

#endif

 

2)    #ifdef, #ifndef, #undef

(1)   #ifdef (if defined)

o  매크로가 정의되어 있으면 #ifdef#endif 사이의 문장이 소스파일에 삽입되어 컴파일

o  매크로가 정의되어 있지 않으면 #else 뒤의 문장이 소스파일에 삽입되어 컴파일

o  #else문은 생략 가능, #elif문 사용 X

(2)   #ifndef (if not defined)

o  매크로가 정의되어 있지 않은 경우에 #ifndef#endif 사이의 문장이 소스파일에 삽입되어 컴파일

o  매크로가 정의되어 있으면 #else 뒤의 문장이 소스파일에 삽입되어 컴파일

o  #else문은 생략 가능, #elif문 사용 X

(3)   #undef

o  매크로 정의를 해제

o  이전에 정의된 매크로 정의를 무효로 함

 

#ifdef 매크로명

   문장 1;

#else

   문장 2;

#endif

#ifndef 매크로명

   문장 1;

#else

   문장 2;

#endif

#undef 매크로명

 

4.     매크로 연산자 #, ##

n  # : 인수를 인용 부호가 있는 문자열로 치환 (#있는 곳에 인수를 치환)

#define STR1(A, B) “AB의 수도이다.”

è puts(STR1(서울, 대한민국)); -> A B의 수도이다.

#define STR2(A, B) #A”“#B”의 수도이다.”

è puts(STR2(서울, 대한민국)); -> 서울은 대한민국의 수도이다.

 

n  ## : 두 식별자를 하나로 결합.. concat한다..

#define STR3(Y, M, D) Y ## M ## D

è printf(“생년월일:  %d\n”,STR3(93, 04, 21)); -> 생년월일: 930421

 

 

 

 

1절  C언어의 역사 및 특징

1.      컴퓨터 프로그램의 개념

n  개발자 도구, 개발환경(IDE) : 프로그래밍 하는 도구

n  프로그래머 : 프로그래밍을 하는 사람

n  프로그래밍 언어 : 프로그래밍 하는 방식 또는 절차

 

2.       C언어의 개요

1)    C언어의 탄생

u  켐 톰슨과 데니스 리치가 1972년 벨 연구소에서 유닉스 운영 체제에 사용하기 위해 개발한 프로그래밍 언어

u  데니스 리치가 B언어를 개선해서 C언어를 만듦

2)    C언어와 UNIX 운영체제

u  UNIX의 기반이 되는 C언어

 

3.      C언어의 특징

n  시스템 프로그래밍 언어! -> 운영체제, 언어처리계, 편집기, 디버깅 등 소프트웨어 작성을 지원하는 프로그램

n  고급언어이면서 저급언어인 양면성을 가짐

저급언어 측면 : 시스템 ∙ 하드웨어를 제어

고급언어 측면 : 사용자 ∙ 소프트웨어 중심

1)     이식성이 뛰어남

2)     범용 프로그래밍 언어

3)     구문이 간결하고 명확

4)     C언어 익히면 다른 프로그래밍 언어도 쉽게 이해 가능

4.      C언어의 사용분야

1)    운영체제

u  UNIX 만들기 위해 탄생한 언어

u  UNIX기반으로 만들어진 리눅스, 윈도우, 솔라리스. 매킨토시 등이 C언어로 만들어짐

u  휴대폰, PDA, 셋톱박스의 리얼타임 운영체제도 C언어로 주로 개발

2)    컴파일러

u  C언어로 개발할 수 있게 해주는 컴파일러들은 Xcode로 작성됨

3)    게임

u  DirectX, openGL

4)    유틸리티와 상용 소프트웨어

5)    산업용 소프트웨어

 

2C프로그램의 작성 및 준비

[프로그램 개발단계]

1.     프로그램의 목적을 정의 (요구사항 분석)

n  개발할 프로그램의 내용과 성격을 파악하고 프로그램 사용자가 요구하는 사항 분석

n  프로그램의 입력 : 데이터

n  프로그램의 결과 : 정보

u  결과화면 구성

2.     프로그램의 설계 (알고리즘 설계 단계)

u  알고리즘 : 주어진 문제를 풀기 위한 방법을 순서대로 표현

u  순서도나 의사코드를 이용

3.     프로그램 코딩 (coding)

n  C컴파일러가 알아들을 수 있는 C문법형식으로 작성

n  소스 코드(source code) : 코딩 과정을 마친 프로그램 (=소스 파일, 소스 프로그램)

4.     소스 코드의 번역 (compiling)

n  고급 언어로 작성한 소스 프로그램을 기계어로 번역하는 작업

n  컴파일러 프로그램이 번역을 수행

n  소스 프로그램 (C언어) à 컴파일러 à 오브젝트 프로그램 (기계어)

5.     실행파일 생성 (linking)

n  링킹 : 여러 소스 프로그램 파일들을 하나로 합치고 라이브러리와 관련된 프로그램 코드를 실제 오브젝트 프로그램 안에 포함시키는 과정

6.     프로그램 실행 (execution)

n  링킹 과정을 마친 *.exe 파일은 로더(loader)에 의해 주기억장치에 적재된 후 CPU에 의해 실행됨

7.     테스트와 디버깅

n  버그 : 프로그램이 제대로 실행되는 것을 방해하는 오류

n  디버깅 : 버그를 찾아서 제거하는 작업

n  프로그램 오류의 종류와 예

종류 (발생 시점)

컴파일 시간 오류

(컴파일 과정)

l  result 란 변수 선언하지 않고, result=0;과 같이 변수를 사용한 경우

l  int result 선언문 뒤에 ;를 빠트린 경우

링커 오류

(링킹 과정)

l  main 함수의 이름을 잘못 지정해서 main함수가 프로그램에 없는 경우

실행 시간 오류

(실행 과정)

l  나누기 연산에서 0으로 나누기를 시도한 경우

논리 오류

(알고리즘 설계 과정)

l  무한반복이 되어 프로그램 실행이 끝나지 않는 경우

l  a, b, c 중 실제 제일 큰 값은 c인데 제일 큰 값의 결과가 a가 나오는 경우

 

3C프로그램의 구성

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

1)    전처리기 지시영역

u  컴파일 하기 전 문법 외적인 작업을 먼저 처리하는 과정

파일 포함

문자열 치환

u  #으로 시작

u  ; 붙이지 않음

u  연산 없이 치환만 이루어짐

2)    main함수 (없으면 링킹 과정에서 오류)

u  콘솔 응용 프로그램을 실행하면 처음으로 실행되는 함수

u  반드시 존재

u  프로젝트에 하나만 존재

(1)   함수의 본체 (body) : { }로 묶은 내용 – block

본체 외에 한 개 이상의 문장을 묶을 때 사용

(2)   변수 선언 : 실행부 이전에 변수 선언문이 있어야 함

(3)   자료 입력 : 프로그램에 필요한 값 입력

(4)   자료 처리 : 처리할 명령문 모아둠

주어진 자료로부터 필요한 정보를 얻기 위한 처리과정이 C언어에 맞게

(5)   자료 출력 : 실행 결과를 형식에 맞추어 출력장치에 표시

(6)   함수 결과값 반환 : main함수의 결과값을 main함수를 호출했던 곳으로 돌려줌

(7)   사용자 정의 함수

[C프로그래밍 작성 시 규칙]

u  반드시 하나 이상의 함수 포함

u  Main() 함수 반드시 존재하고 한 번만 쓰임

u  중괄호 { }이용해 함수의 시작과 끝 알리고 그 안에 명령을 기입

u  문장의 끝에 ; 세미콜론 사용하여 각 문장 구문. 단 선행처리기 끝에는 ; 없음

u  주석은 어느 위치든 추가 가능

 

2.     C프로그램의 구성요소

1)    예약어 (키워드)

u  명령어나 의미 있게 사용되는 단어들

2)    식별자

u  이름!

u  영문 대소문자, 숫자, _(언더스코어)만 사용 가능

u  키워드가 식별자가 될 수 없음

u  _은 특수문자가 아님

u  명칭의 첫 글자는 반드시 영문자나 _을 사용 (숫자 X)

u  문자 사이에 공백 및 예약어 불가

u  모든 변수는 사용하기 전 반드시 정의

u  영문자 대문자와 소문자는 서로 구별됨

u  명칭의 길이는 일반적으로 32자까지 지원

u  $ 사용 불가 (Visual Studio 2010이상 버전)

3)    상수

u  변환되지 않는 값. 재정의가 불가능

4)    연산자

u  선언된 변수에 값을 넣어 값을 계산하는데 사용하는 기호

5)    주석 (설명문)

u  /* */ : C , C++의 주석기호. /* */ 사이의 구문이 무시됨

u  // : C++의 주석기호. 행 뒤쪽이 무시됨. C에서도 사용 가능

3.     Visual Studio 2015 설치와 사용방법

1)    소스파일 (*.c or *.cpp) : 프로젝트 폴더 안에 생성

2)    실행파일 (*.exe) : 솔루션 폴더의 debug 폴더에 프로젝트이름.exe’로 생성

아.. 이것도 역시 합격하고 꽤 지나서 후기를 남기게 되는 것 같다.

이것저것 끝나고 몸과 마음에 휴식을 도모하느라 

여행을 다녀왔기 때문...ㅋㅋ


살 많이 쪄서 왔다. 

맘 고생 다이어트로 피골이 상접했던 내 모습을 보니 한층 더 늙어보여 슬펐는데 

순식간에 그 슬픔은 또 다른 슬픔으로 변했다....


여튼 후기



와ㅜㅜㅜㅜㅜㅜ 어마무시하게 아슬아슬..


정말 . 솔직하게 말해서 2주도 공부 안했다.

문제집 샀는데(이기적) 엄청 얇고 안에 내용이 정보처리기사 데이터베이스 과목과 다른게 거의 없어서

일주일 덜렁 읽어보고 기출문제를 풀었는데

왠걸


정말 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 너무 어려웠다


깜짝놀라서 기출 예상문제와 복원문제, 책의 내용 다 비교해봤는데 책 내용에 없는 것이 훠얼씬 더 많이 출제되었다.


sql 기본 및 활용 저 파트가 엄청 어렵다;

sql 구문을 주고 고치라는 식의 문제가 많았는데

select 문으로 subquery 사용하는 것, 윈도우 함수, 그룹함수, 계층형 조회가 섞여서 나왔다.

정말 계층형 조회가.. 내용도 어렵지만 문제가 어렵게 나오려면 이렇게도 나오는구나 싶었다.

그룹함수 윈도우 함수도 응용하려면 이렇게도 하는구나 싶었다.


좀 더 정확한 감상으로는

문법이 생각보다 까다롭고 섬세해서, 대충 눈으로 읽고 문제를 풀면 다 똑같이 맞게 보인다는 것.

각 함수가 사용하는 자료형도 맞춰야 하고 그 한 구문구문 나오는 순서까지 꼼꼼히 봐야

"알고" 풀 수 있다.


그래서 책으로는 이해할 수 없이 데이터 전문가 지식포털(sqld, sqlp 시행처)

http://www.dbguide.net/index.db (클릭 가능)에 들어가서 확인해 보니

책 요약본이 있더라.. ㅜㅜ



다 읽어 봤다.. 책의 내용과 함께 비교해서 공부했다 ㅜㅜ 아 눈물밖에 안나오는 것 같았다 ㅋㅋㅋㅋ진심으로..

그런데 저 요약본이 내용이 모순되는 지점이 조금씩 있다. 열심히 찾아서 나 혼자 공부해보고 혼자 정리하고 했던 시간이

엄청 길었다. 2주의 나머지 1주일을 저걸로 채우고 시험 하루 전 기출문제 밤새서 풀고 3시간 자고 시험장으로 갔다...ㅜㅜ아 눈물이여


그 노력의 결과물...   。。ㄴr 는 r끔 눈물을 흘린r。。★ ↓↓

책이 너무 비싸길래 좀 아껴보려 했다가 음 나름 성공하긴 한 것 같다.

5만원이 넘는 책이라서 그런지 선뜻 결제할 기분이 안들었다.

최근 5개월동안 개발 공부하고 수험 준비하느라 책 값만 15만원정도 쓴 것 같다.... ㅜㅜㅜㅜㅜㅜㅜ 힘들다 백수는


일단 저 내용을 싹다 외우고 가서 문제 읽으며 고민이나 해볼 수 있었던 것 같다.

기출예상문제와 기출복원문제에 비해 본 시험이 더 어렵다! 주의하시길 ㅜㅜㅜ


문제의 난이도가 높다보니 (나의 예상보다..) 시험시간이 너무 짧게 느껴져서

조바심이나 얼른 치고 나왔다 10분? 남겨두고 덜덜 떨리는 손으로 마킹했다. ㄷㄷ ... ㄷㄷ...



여튼 2주간의 눈물나는 수험 끝에 아슬아슬하게나마 합격했다.

2020년 첫번째나 두번째 회차의 sqlp 시험을 도전해 볼 생각이고

그 땐 책 사야지 ^^ 


잊어버리지 않게 열시미 복습중이다.


* 덧붙여서

유효기간이 있는 것 같아 찾아보니 보수교육을 들으면 된다더라.

위의 db가이드넷에 들어가서 보수교육 찾아보니 뜨는 것이 있어서

해당 기간 안에 한번 들어야겠따고 생각했다.


듣고 나면 영구 자격증이 된다고 하니 마음이 든든해진다 ㅜ!!


개발자로 다시 시작하는 인생에 꽃이 활짝 폈으면 좋겠다.


ㄴH 눈물로 ㉧ㅓ난 꽃¿?ㅇㅣㅇㅕ。。㈜™ (아 은근 재밌네 요거)

시험 합격 하고 꽤 지나서 후기를 쓰게 된다.

직업훈련이랑 자격증 여러개를 동시에 준비하다 보니 ㅜㅜ 정신이 없어서 ㅜㅜ


솔직하게 말해서 공부는 필기 2주 실기 3주 정도 했고

하루 5시간 정도 공부했고 마지막주는 7시간 정도 공부했던 것 같다. 


-- 필기 --

책이 두꺼워서 고민하다가 필기는 summary책을 사서 공부했는데

...

사실, 이해가 잘 안된다.

비전공자로 처음 공부를 시작하다 보니 summary책에 적혀있는 내용으로는 감이 안온다;;

좀 힘들었지만 어찌되었든 1차는 4지선다형이므로 summary 1회독 ㅋㅋㅋ 하고 나서 기출문제를 바짝 풀었다.

확실히 기출문제집에는 summary에 나오지 않는 개념들, 또 풀이방법들이 있어서

기출문제집을 토대로 겁나게 공부했던 것 같다.


연습장에 1번 풀고 모르는 것 또 연습장에 1번 풀고, 책에 1번 풀고 모르는 것 연습장에 한번 더 풀고..

뭐 대충 공부하는 방식으로 기출문제를 풀었고, 외웠따! 기출문제에 자주 나오는 빈출이 있는데 그걸 토대로 키워드를 잡아 외웠다.

생각보다 기출 적중률이 좋았다.

평균 89점을 받았으니 말이다.


-- 실기 --

소위 필답 시험이고 시험지에 직접 답안을 적어 시험지 자체를 제출하는 시험방식이다.

이건 필기에서 쓴 맛을 본 터라 시나공 두꺼운 책을 사서 공부했는데

정말.. 신기술 동향때문에 짜증이 많이 났다..

일단 달달달 외운다고 표로 만들어 돌려가며 외웠다

▼ 공부한 흔적들..ㅜ


알고리즘은 기출문제를 보는 방법밖엔 없고. 나머지도 열심히 외웠다.

데이터베이스가 조금 쉬웠고 신기술이 가장 어려웠는데

내가 쳤을 떄는 기출에서 많이 나왔다고 하더라(나는 전혀 모르겠음;; 옛날 기출에서 나왔나 본가)

내가 산 2019년 서적은 2018년 2019년 정도의 최근 기출문제만 나와서 사실 그 전 기출문제는 안나왔는데

내친구가 풀던 어디 잘 모르겠던 책은 -제본상태는 엉망이었으나- 거기서는 나왔다.


기출빈도 등급 A B C 만 보고 D는 무시했다 아에! 안나오더라.. C도 나올까 말까 하고 ..

따라서 3과목 업무프로세스 실무 응용은 기출문제만 보면 될 것 같고

4과목 정보보안 및 신기술 동향은 기출에서 나오는 것만 봐도.. 나올지 안나올 지 모르지만 같은 해 기출로 나온 것을 중심으로 

보는게 좋을 것 같다.

1과목 알고리즘은 기출문제와 예상문제 싹다 보고 알고리즘에 대한 사고 방식을 키워놓는 것도 중요하고

2과목 데이터베이스는 어려운 SQL구문이 없으니 걍 외우는 것이 개발자로서 좋은 것 같다.

실기도 72점 받고 합격!


-- 총평 --

운이 좋았고, 운이 좋았다.

공부한 것이 기억에 날 만큼 운이 좋았다고 생각한다.

마지막 시험이라 문제가 쉬웠던 것도 한 몫 한다고 생각한다.


뭐 이래나 저래나 바뀐다고 하는데

바뀌는 과목 보니; 조금 더 실무에 가깝게 나오는 것 같더라

그래도 결국 기본적인 틀과 내용이 변하지는 않아 보인다.




+ Recent posts