본문 바로가기

C언어_VisualStudio

#1 프로그래밍언어 C

  오늘은 내가 배우고 정리할 C언어에 대한 기본 소개(이것저것 잡다하게 알면 좋은 것들)를 좀 적어볼려고 한다. :-)

 

  컴퓨터에서는 가전제품처럼 프로그램 설치 없이 바로 동작되도록 하지 않고 사용자가 프로그램을 설치하게 한다. 컴퓨터는 범용적인 기계이기 때문이다. 가전제품의 경우는 미리 정해진 작업밖에 못하지만 컴퓨터는 프로그램만 바꾸어주면 다양한 작업을 할 수 있다. (SF 영화에서는 인공지능이나 감정을 가지고 있는 컴퓨터가 있지만,, 현실에선 시키는 대로 일하는 컴퓨터만 있다.)

 

  옛날에는 컴퓨터의 기본적인 임무는 숫자를 빠르게 계산하는 것이었다. 하지만 현대의 컴퓨터는 명령어(instruction)들의 리스트에 따라 데이터를 처리하는 기계라고 할 수 있다. 특정한 작업을 수행하도록 설계된 명령들의 리스트가 프로그램(program)이다. 

 

  19세기 말까지 실용적인 컴퓨터를 구현할 수 있는 많은 요소 기술들이 등장했다. 펀치 카드, 불 대수, 진공관, 텔레타이프 등이 있다. 나는 여기서 아는 것이라곤 불대수밖에 없다. (나머지는 정리하면서 처음 본 것과도 같은 느낌..) 불 대수란 수학자 불(Bool)에 의하여 제안된 것으로 참(1)과 거짓(0)을 나타내는 0과 1만을 가지고 논리 과정을 표현하는 수학의 한 분야이다. 전자스위치로 한 번쯤은 들어봤을 것이다. 불이 들어오면 (전자 회로가 잘 작동하면) 1(참) 불이 들어오지 않으면 (전자 회로가 작동하지 않으면) 0(거짓). 이런 식으로 중고등 교과과정에서 들어본 것 같다.

 

  우리가 원하는 작업이 달라지면 사용하는 프로그램도 달라져야 한다. 배그에 접속하기 위해 엑셀을 사용하지는 않듯이.. 다시 말하자면 프로그램이라는 것은 우리가 원하는 작업을 컴퓨터에게 전달해 주는 역할인 것이다.

 

  프로그래머들이 선택할 수 있는 언어는 굉장히 많다. 이것들은 세 가지로 분류할 수 있다. 고급일수록 사용자에게 친숙한 언어이고 저급일수록 컴퓨터에 친숙한 언어이다.

1) 기계어 : 컴퓨터가 바로 이해할 수 있는 단 하나의 언어이다. 어떠한 언어라도 전처리와 컴파일을 거치면 결국은 기계어가 된다. 기계어는 특정 컴퓨터의 명령어를 이진수로 표시한 것이며 컴퓨터 하드웨어를 설계할 때 결정된다. 또한 하드웨어에 따라 달라지기 때문에 하드웨어에 종속된다.

 

2) 어셈블리어 : 사용자가 사용하기에 기계어는 너무 어렵고 오류가 발생하기 쉬웠기 때문에 프로그래머들은 어셈블리 언어를 개발하게 된다. 이 언어를 사용하면 CPU의 명령어들을 기호(symbolic name)로 표기할 수 있다. 프로그래머가 기계어보다는 더 높은 수준에서 프로그램을 작성하는 것을 가능하게 하였다. 

 

3) 고급 언어 : 어셈블리 언어가 비록 기계어보다는 편리하였지만 아직도 사용자가 사용하기에는 너무나 번잡한 언어였다. 간단한 작업을 하려고 해도 많은 명령어를 기호로 기술해야 했기 때문이다. 따라서 좀 더 높은 수준에서 작업을 할 수 있는 언어가 필요했다. 이러한 목적으로 고급 언어가 개발되었고 프로그래머들은 더 이상 특정한 컴퓨터의 구조에 얽매이지 않아도 되었다.

 

고급언어의 종류

 

나는 이중에서 C언어에대해 공부한다.

C언어의 특징은 다음과 같다.

1) 간결한 언어이다.

2) 효율적인 언어이다.

3) 저수준의 프로그래밍도 가능하고 고수준의 프로그래밍도 가능하다.

4) 이식성이 뛰어나다.

5) 초보자가 배우기 어렵다. (진짜, 나는 어렵게 느껴졌다. 배우고 까먹고 무한반복..)

 

알고리즘

  사실상 이부분부터가 어려움의 시작이지않을까.. 생각한다. C언어를 배우기 전에 막연하게 생각했던 프로그래머의 모습과는 많이 달랐다. 풀이를 충분히 고민하고나서 컴퓨터 키보드에 손을 올릴 수 있었다. 즉, 문제를 푸는 알고리짐을 먼저 생각해야 한다. 그렇지않고 무작정 컴퓨터 앞에 앉아서 키보드를 뚱땅뚱땅 두들기고 있으면 대다수 효율적인 프로그램을 작성할 수 없기 때문이다. 그렇기때문에 알고리즘의 설계부터 탄탄하게 시작해야 한다. (그리고 나는 여기서부터 좌절을,,,했다.)

  알고리즘을 기술하는 데는 3가지 방법이 있다.

1) 영어와 국어와 같은 자연어

2) 순서도 : 프로그램에서 논리 순서 또는 작업 순서를 그림으로 표현하는 방법이다.

3) 의사코드 : 자연어 보다는 더 체계적이고 프로그래밍 언어보다는 덜 엄격한 언어로서 알고리즘의 표현에 주로 사용되는 코드이다. 

 

스크래치(SCRATCH)

  프로그램을 전혀 작성해보지 않은 나같은 사람은 프로그램의 개념을 파악하는 데 상당히 어려움을 느낀다. (사실 지금도 잘 모르겠다.) 그래서 여기저기 질문해보다가 스크래치라는 것을 소개 받았다. 스크래치(Scratch)는 MIT에서 개발된 도구로서 프로그래밍 개념을 학습하기 위한 환경이다. 초보 프로그래머들이 문법에 신경쓰지 않으면서 주어진 문제를 해결하고 결과를 얻을 수 있다. 애니메이션이나 게임 등을 작성할 수 있지만 프로그래밍의 개념을 학습하는 용도로만 간단히 사용해보면 많은 도움을 얻을 수 있다.

http://scratch.mit.edu

스크래치가 궁금하면 다음 글도 참고해보면 좋다. :-)

https://cwithvisual.tistory.com/entry/%EC%8A%A4%ED%81%AC%EB%9E%98%EC%B9%98Scratch

 

#2 스크래치(Scratch)

오늘은 스크래치를 통해 프로그래밍의 기본 개념을 학습해보려고 한다. :-) 스크래치의 기본 개념은 스프라이트를 스크립트로 제어하여 애니메이션을 작성하는 것이다. 스프라이트는 무대에서

cwithvisual.tistory.com

 

참고자료: 쉽게 풀어쓴 C언어 Express, 천인국지음