C 언어 시험대비 글로 설명하기

기계어는 이진수 형태(0,1)로 이루어진 언어이다. 이를 사람이 사용하기에는 너무 힘들기 때문에
프로그래밍 언어, 컴퓨터 언어인 C언어를 사용한다. 
이때 C언어를 사용한다 해도 컴퓨터는 기계어 밖에 이해하지 못하기 때문에 컴파일러 를 사용하여 기계어로 변환시켜 줘야한다.
그 외에 기계어에 가까운 어셈블리어(저급언어)와 컴퓨터 구조와 프로세서에 무관한 독립프로그램을 작성 가능한 고급언어가 있다
그 예로 C, C++, Java, C# 가 있다. 여기서 언어마다의 특징을 잠깐 훑어보고 가자
FORTRAN 은 수치계산과 과학기술 계산에 적합하다, COBOL 은 기업의 사무처리에 적합하고 구어체로 작성 가능한 특징이 있다.
PASCAL 은 교육언어이다. C 언어는 운영체제에 사용되는 언어로 객체 지향 개념이 추가되면 C++이라 부른다. Java 는 인터넷상에서 용이하게 사용되는 언어이다. 

이런 언어를 사용하여 프로그램을 짜기 위해선 머리속으로 순서도를 만들어야 되는데 이때 사용되는 개념이 알고리즘이다.
수행시작, 처리, 판단, 입출력 으로 구성되어 있다. 프로그램 개발 과정은 6개의 순서인데, 요구사항 분석, 알고리즘 개발, 소스작성, 컴파일 링크, 실행과 디버깅, 유지 보수이다. 
이제 단계별로 무엇인지 알아보자.

소스작성을 하여 코드 파일로 저장을 한다.
코드 파일을 컴파일하여 obj 파일로 변환시키고 라이브러리를 연결하는 링크를 하면 exe 파일이 생성된다. 
프로그램 실행과 디버깅은 디버깅이 중요한데,
프로그램 실행의 오류에는 문법적 오류와 논리적 오류가 존재한다. 문법적 오류란 코드 자체의 오류로서 
괄호, 함수 이름, 세미콜론 등등 무엇인가 빼먹거나 다르게 사용하였을때 나타는 오류이다.
논리적 오류란, 말 그래도 논리적 문제에 따라 원했던 결과가 나오지 않는 문제이다. 그 외에 에러와 경고가 있다
에러는 컴파일과 링크가 불가능할때, 경고는 컴파일과 링크는 가능하지만 경미한 오류가 있을 경우이다.

기본적으로 코딩에 사용되는 것들을 보고가자

#, 이 샾은 전처리기 지시자로 컴파일전에 사전 정지 작업을 하는 부분이다.
h, 헤더파일로서 소스코드안에 현재파일을 특정 위치에 포함하라고 할때 들어가는 파일이다. 
main, 메인 함수로 C프로그램에서 가장 먼저 실행되는 함수이다.
int main 함수는 int 정수형으로, 메인 함수가 출력하는 값이 정수일때이다.
Void 는 함수의 입력이 없다는 뜻이다. return 은 함수 수행후 작업 결과를 반환할때 사용된다. return 0은 외부로 0 값을
보내는 것으로, 0은 프로그램의 정상 종료를 뜻한다.

//, /* */, /**** ****/ 는 주석을 뜻하는데 코드를 설명하는 글로 코드에는 아무 영향을 끼치지 않는다.  
Standard input output 은 표준 입력과 표준출력에 관한 라이브러리 함수들의 정의가 들어있다.
표준 입력은 키보드 입력값을 말하고 표준출력은 모니터 출력을 말한다.  

함수에는 라이브러리 함수와 사용자 정의 함수가 있다.
라이브러리 함수는 외부에서 가져와 사용하는 함수이고 사용자 정의 함수는 직업 작성하는 함수이다.
변수란 프로그램에 사용되는 데이터를 일시적 저상하는 메모리 공간이다. 변수는 선을 해줘야 한다.

자료형은 데이터의 종류를 말하는데, 적절한 자료형으로 변수를 선언해줘야지만 메모리의 절약과 실행속도 증가를 얻을수 있다.
자료형의 종류는 간단히 세가지로 나눌수 있다. 정수형, 실수형, 문자형
자료형에는 int, short, long
short 는 16비트, int 32비트, long 은 32비트 
실수형에는 float, double, long double
문자형에는 char 

식별자, 변수이름은 함수 이름에 사용되어 다른것들과 식별될 수 있게 해주는 것이다.
 식별자에는 규칙이 있다.
영문자,숫자,밑줄문자'_' 로만으로 이루어져야 한다. 
공백이 있으면 안된다. 
첫글자는 영어, 밑줄문자'_'만 가능
대소문자는 구분된다.

변수선언은 [ 자료형 변수이름, 변수이름; ] 과 같이 해야한다. 
변수를 초기화해야 될 경우에는 [ 자료형 변수이름 = 초기값; ] 으로 한다
변수는 함수에 계속 사용되어야 하기때문에 제일 처음 문장 시작전에 선언문을 넣어줘야 한다. 

오버플로우란 정수형 변수가 가지는 범위를 넘어가는 연산이 될 경우 값이 반대쪽으로 넘어가는 것을 말한다
즉 32767이short 정수형이 가질수 있는 최대 범위의 최대수 인데 여기세 32767 + 1 을 할 경우 -32768 이 되버리는 현상이다.
언더플로우도 가능한데, 부동 소수점

정수 상수의 비트 바꾸기와 8,10,16진법
컴파일러는 상수값을 처리할때 가능한 작은 자료형을 선택한다. 이런 컴파일러는 무시하고 내 맘대로 설정하고 싶을경우
변화를 줘야하는데 

int 123 은 단지 16비트 
int 123L 은 32비트의 long
int 123u 는 unsigned int (음수값을 나타내지 않기 때문에 범위가 int 의 2배가 된다) (형식 지정자는 %u)

8진법으로 표기는 숫자앞에 0
16진법으로 표기는 숫자앞에 0x 를 쓰면 된다. 16진법은 0~9는 숫자, 10~15 는 a~f(대소문자 구분x) 이 된다. 
16진법이 하드웨어 관련 비트 조작시에 10진법보다 편리한데, 그 이유는 16진수 하나의 자리수는 4비트이다.
따라서 32,64 등 이진수 데이터를 16으로 표기하면 알아보기가 쉽다. 

기호상수 는 변수처럼 상수 값에 기호, 즉 이름을 부여해주는 것이다. 이때 장점이란 무엇이냐,
상수값만 나열되 있는 것보다 기호상수를 사용한 코드가 읽기 편하다는 점이다. 
또, 상수 값을 한꺼번에 바꿀수 있다는 것이다. 미리미리 설정해줘야 하기 때문에
전처리기를 이용하요 컴파일러 작동 전에 넣어줄 수 있다 #define 기호 상수
또한 변수를 설정하는데 const 자료형 변수이름 = 초기값 ; 으로 도 가능하다.
여기서 주의할점은 변수 설정이므로 세미콜론을 빼먹지 말고 써야한다. 
그렇다면 const 와 #define의 차이는 무엇일까?
const 를 사용시 자료형 설정이 가능하며, 문법검사 가능, 상수의 정의 범위 제한이 가능하다.

소수점 나타내기
일반적으로 32비트로 실수, 소수점을 나타내면 16비트는 소수점 이상, 16비트는 소수점 이하를 나타낸다.
그렇다면 긴 수는 어떻게 표현할까? 만약 소수점 이상이 16비트를 넘어가면? 이하가 16비트를 넘어가면?
이를 표현하기 소수점을 옮기는 부동 소수점 방식을 사용한다. 
부호 비트로 1비트가 사용되고 나머지 가수와 지수 부분을 나눠서 표현 할 수 있다.
부동 소수점의 단점이 있는데 이는, 부동소수점 방식이 고정 소수점 방식 보다 계산 속도가 느리다는 것이다.
실수 자료형은 
float < double < long double 로 표현된다. float(8/23 - 유효숫자 6자리), double(11/53 - 유효숫자 16자리)
float에서 실수가 유효숫자인 6자리 수를 넘어가면 반올림 된다. 소수점 이하 자리수를 제한하려면 
%전체자리수.표현하는자리수f 로 나타내어야 한다. 즉 %10.3f 란 전체 10자리중 소수점이하는 3자리 라는 것이다.
지수 표기법으로 실수를 나타내고 싶을 경우 형식 지정자를 %e, %E 로 사용해야 한다. 지수 표기법이란
14530000 = 1.453 * 10^8 = 1.453e8 처럼 표기하는 것을 말한다.

  


로그램 가능 최초  기계 - 찰스 배비지의 해석기기

최초의 프로그래머 - 에이다 러브레이스 (SUBROUTINE,LOOP,JUMP,if)
+ 미국국방부 개발 언어 (ADA- Ada lovelace)

기계어 (01001001)
어셈블리어( MOV AX, MIDSCORE)
고급언어(Total score = Midscore + Final score)

 -FORTRAN (수치 계산, 과학 기술 계산)
 -COBOL (비즈니스 사무 처리)
 -PASCAL (교육용 언어)
 -C (유닉스 연구하던 AT&T의 벨연구소 데니스 리치)
 -C ++ (벨연구소 스트로 스트럽 C언어에 객체지향적인 특징추가)
 -Java (선 마이크로시스템 제임스 고슬링-인터넷 웹페이즈상에서 실행가능)

C언어의 'C' 는 그 전 언어 이름이 'B'였기 때문에..그럼 처음에는 'A' 였나?
Ken Thomson 과 Dennis Ritchie 가 유닉스와 C언어를 개발한 이유는 'Space Travel' 이라는 게임을 하기 위해서였다.
C언어 개발 후 컴퓨터 노벨상인 Turing 수상했다

소스파일 test.c
컴파일러(compiler)
오브젝트 파일 test.obj
링커(linker)
실행파일 test.exe

디버깅(debugging) 유래
마크2 가 날아들어온 나방때문에 고장을 일으킴
이것을 Computer bug라 불렀고 호퍼라는 사람이 나방채집후 기록에 남겨 debugging 이라 씀

printf("") : 화면에 가로 안의 내용을 표시한다.

#로 시작하는 문장은 전처리기 지시자인데 이는 
#include 는 특정 파일을 현재 위치에 포함 시키려고 지시한다. 

int main(void) 에서 main 은 프로그램에서 가장 먼저 실행되는 부분으로 무조건 하나 이상의 메인 함수가 있어야 한다.
int 의 의미는 함수 출력값이 정수 라는 의미이다. void는 비어있다의 뜻인데 int 와 void 같은 특별한 뜻을 가지는 단어들은 
예약어 또는 키워드 라고 한다.

return 0; 는 함수의 작업을 끝내는 것으로. 외부, 즉 프로그램을 실행시킨 운영체제에 0 값을 반환한다. 
보통 0은 프로그램이 정상적으로 종료됬다는 뜻이다. 

\(역 슬레쉬)n 즉 \n : 은 화면 상에 출력되지 않으면서 줄바꿈을 뜻하는 용어이다. 

만약 두줄의 다른 문장을 작성하려고 할때 

printf("asdad");                         printf("asdad\n");
printf("zslkskjaj");  이 아닌         printf("asdasdasfd\n");  이런식이 되야 한다는 것이다. 

논리 오류시 유용하게 사용되는 디버거(debugger) 
한 줄 한 줄씩 확인할 수도 있다. (F10)

주석: /* 블라블라 */ 로 쓰며 *와 / 사이를 띄우지 않는다. 프로그램이 하는 일을 설명하는것으로 많이 사용된다.
이 외에도 //블라블라 로도 쓸 수 있으며, 이것은 //가 시작되는 처음부터 끝까지가 주석임을 의미한다.

들여쓰기를 생활화 하자. 

헤더파일중 자주 사용할 stdio.h 는 standard input output 의 약자인데, 표준 출력과 표준 입력을 뜻한다. 
결국 헤더파일인 stdio.h 에 표준 입력과 표준 출력에 관한 함수들의 정의가 들어있고
헤더파일을 넣고 시작해야 
그 안에 있는 라이브러리 함수(많이 사용되는 함수를 미리 구현한 것들) 들을 사용 할 수 있게 되는 것이다. 

함수는  { } 안에 세부 단계인 statement(문장)을 가지고 있다. 

함수 헤더라고 불리는 첫번째 행 ex) int main(void) 
함수 헤더에는 출력 형태, 함수 이름, 함수의 입력 형태가 차례대로 나타난다. 

variable(변수)는 일시적인 메모리 공간이라고 알아 두자. 책에서는 그릇이라고 표현하였는데
딱 맞는것 같다. 요리? 결과값을 얻기 위해 데이터를 일단 담아두는 공간이라는것 같다. 
변수를 사용하기 위해서는 이런 변수를 사용할거다라는 변수 선언 이라는 작업을 해야되는데

data type(자료형) 변수이름 형식으로 나타낸다 ex) int x; 
data type 에는 정수형 실수형 문자형이 있는데.

정수형에는 범위에 따라 short, int, long 
실수형또한 범위에 따라 float, double, long double
문자형은 char 

같은 자료형의 변수를 선언할때는 같은줄에 콤마, 로 구분하여 한줄에 써도 된다. 

scanf("%d",&x) 는 입력된 데이터를 지정된 형식으로 변환하여 변수에 저장하는 함수이다.
"%d" 는 형식 지정자로서 정수형의 데이터를 받는다는 것을 뜻하고, 그 뒤는 값을 저장할 변수이다. 
&는 변수의 주소이다. printf 와의 차이점은 printf 는 변수 값을 받는것이지만 scanf 는 변수의 주소를 받는 다는 점이다. 
형식 지정자 종류로는 %d, %f, %1f, %c 가 있다. 순서대로 정수 float double 문자











덧글

  • 커부 2014/10/20 21:59 # 답글

    아 씨발 정리하다 날렸다 ㅎㅎㅎ
댓글 입력 영역


Google Analytics