본문 바로가기

정보처리기사/c언어강의

[C언어(강의)] 1~8강 (변수, 데이터 타입, 연산자)

 

[ 흥달쌤 유투브 강의 정리 ] 


 

(1강) 프로그래밍이란?

 

* 프로그래밍 동작 과정 : 선언 > 입력 > 처리 > 출력  

 

* scanf() : 입력받는 함수.       scanf("%d%d, &age1, &age2);

* & : 주소연산자, 변수의 주소를 반환

 


 

(2강) 컴파일러, 인터프리터

 

* 컴파일이란? 

 - 인간이 만든 고급언어를 컴퓨터가 해석할 수 있는 저급언어로 번역.

 

* C언어 컴파일 과정

.c  == 전처리기 ==>  .i  == 컴파일러 ==>  .s  == 어셈블러 ==> .o  == 링커 ==>  .exe(실행파일)

 

 - 전처리기 : 전처리 구문을 처리하는 과정  Ex) #include<stdio.h>    (확장자 : .c )  

 - 컴파일러 : 고수준언를 저수준 언어로 변환, 기계어와 가장 가까운 형태의 언어  (확장자 : .i )

 - 어셈블러 : 완전히 기계어로 바꾸어 주는 역할  (확장자 :  .o )

 - 링커 : 여러 개의 오브젝트 파일을 합치거나, 라이브러리를 합치는 역할    (확장자 :  .exe )

 

* 컴파일러

 - 고급언어로 작성된 프로그램을 컴퓨터에서 실행하기 위해 컴퓨터가 이해할 수 있는 언어로 번역.

 - 전체를 번역하므로 번역시간이 오래 걸리지만, 한 번 번역한 후에는 다시 번역하지 않으므로 실행 속도가 빠름.

 - 종류 : C, C++, JAVA 등

 

* 인터프리터

 - 고급언어로 작성된 프로그램을 한 줄씩 읽어 들여서 실행하는 프로그램 (통역)

 - 번역과 실행이 동시에 이루어지므로, 별도의 실행파일이 존재하지 않음.

 - 종류 : Ruby, php, javascript, Basic

 


 

(3강) 변수

 

* 변수 : 데이터를 저장할 수 있는 메모리의 기억공간.

  그릇                                                      밥상

 

* 변수생성 규칙 및 특징

 - 예약어(키워드)는 사용할 수 없다.

 - 공백을 포함할 수 없다.

 - 첫 글자는 영문과 언더바(_)만 사용이 가능하다. (숫자X)

 - 언더바(_) 이외의 특수문자는 사용할 수 없다.

 - 대소문자를 구분한다. (Java, C)

 

 

* 데이터 타입(자료형)

 

 

* 변수 선언

 Int 변수명;                    Int age;

 Int 변수명 = 초기값;     Int age = 4;

 


 

(4강) 변수의 종류와 유효범위

 

* 지역변수

 - 함수/블록 안에서 선언하는 변수

 - 함수/블록의 종료와 함께 메모리상에서 소멸

 - 초기값이 없으면 쓰레기 값이 들어감

 - 스택 영역에 저장됨

 

=> num1이라는 변수는 if문(블록)내에서 선언했기 때문에 블록 밖에서 출력 불가

 

 

* 전역변수

 - 함수 블록 밖에서 선언하며 전체 함수에 영향을 미친다.

 - 프로그램이 종료될 떄 메모리상에서 소멸

 - 초기값이 없으면 0값이 들어감

 - 데이터 영역에 저장됨

 

출력결과

=>  1020

 

 

* 정적변수

 - static으로 선언하며 선언된 블록 내에서만 사용가능

 - 함수가 종료되어도 소멸되지 않고, 값이 그대로 유지됨

 - 프로그램이 종료될 때 메모리상에서 소멸

 - 초기값이 없으면 0이 입력되고, 단 한번만 초기화

 - 데이터 영역에 저장됨

출력결과

=>  sum : 10

      sum : 15

      sum : 18

 

* sum이 static으로 선언되지 않았다면

=>  sum : 10

      sum : 5

      sum : 3

 

 

* 동적변수                                               _ 그때그때 만들어지는거

 - 메모리 동적할당으로 생성되는 변수

 - Run time 시간에 메모리를 할당

 - 동적 기억장소에 할당하여 메모리 낭비를 피하려는 목적

 - 무조건 포인터를 사용해야 함

 - 힙 영역에 저장됨


 

* 프로그램의 실행 시작 시점에 기억장소를 할당받아 실행이 끝날 때까지 지속적으로 기억장소를 유지

 => 전역변수, 정적변수

 


 

(5강) 산술연산자

 

* 산술연산자 종류

 

1) 3 / 4 = 0

 

2) a = 10;

    b = a++;

    c = ++a

=>  b : 10

      c : 12

 

3) a = 10;

    a += 10; 

=>  a = ( a + 10 ) 20

 

=> 0  (a=1, b=0)

 

 


 

(6강) 연산자 우선순위

 

* 산술연산자 종류

 

int a = 3;

int b = 4;

int c = 5;

int d = 6;

 

1) a * b + c >= d && d / a - b != 0 =  1 (True)

           True         &&        True 

 

2) d % b + ++a * c-- = 22

        2     +    20                   (c는 연산 이후 --적용)

 

2-1) d % b + a++ * c-- = 17

           2     +    15                (a, c는 연산 이후 각각 ++, --적용)

 

 

 

=> 40  6


 

(7강) 관계/논리연산자, 조건문

 

* 관계연산자 종류

 

 

* 논리연산자 종류

 

 

* 조건문

 - 단순 if문

 

 - if ~ else 문

 

- 다중 if문


 

 

=> 3 ( i = 3, j = 2 )

* if문에서 &&앞의 첫번째 조건식만 판별 후 else로 넘어가 연산계속 *

 


 

(8강) 논리연산자, 증감연산

 

 

=> 9 3 0 8 2

 

a = 8 > 9

b = 1 > 3

c = 0

ap = 8

bp = 2