1. overview
C 발생 과정
ALGOL60 → CPL → BCPL → B → C
①ALGOL60 : 1960년 국제위원회에서 개발한 언어로서 FORTRAN보다 세련된 과학 계산용 언어이나 추상적인 언어이어서 소프트웨어 개발용으로는 적절하지 못하다.
②CPL(Combined Programming Language) : 1963년 런던 대학과 캠브리지 대학에서 공동으로 개발한 언어이며 ALGOL60의 추상적인 부분을 보완하기 위해 개발한 언어이나 명령어가 많고 사용하기 어려운 형태로 되어있다.
③BCPL(Basic CPL): 1967년 캠브리지 대학의 마틴 라챠드 교수가 개발했으면 CPL을 좀 더 쉽게 표현하고자 나온 언어로서 명령을 간단한 형태로 구사할 수 있게 만들었는데 특정 문제 처리 가능한 제한적 언어이다.
④B : 1970년 벨 연구소의 Ken Thompson이 개발한 언어이며 하드웨어 제어 프로그램까지도 가능하나 포인터와 주소 연산을 지나치게 많이 사용하여 프로그램 작성하기 어렵다.
⑤C : 1973년 벨 연구소의 Dennis Ritchie가 개발한 언어로 프로그램 작성도 쉬우며 기능도 막강한 언어이다.
특징
고급 언어이면서 저급 언어의 특성을 모두 가지고 있다.
풍부한 연산자를 가지고 있다(약 40개)
구조화되었다.
간결하고 일관된 데이타 처리가 가능하다.
동적 처리가 가능하다.
호환성이 강하다.
컴파일러 종류
ANSI C, VAX C, TURBO C, BORLAND C, MS C,LATTICE C,INSTANT C,RUN C,UNIX C
2. basic
C언어에서 사용되는 문자
①영문자 : a~z A~Z
②숫자 : 0~9
③특수문자 : keyboard상에서 영문자와 숫자를 제외한 나머지 문자(! @ # $ * ^ + - & % > < ~ / \ ? ; " = ( ) : , { } _ | [ ]…)
예약어
어떤 의미를 지니고 있는 단어들이며 사용자 정의 명칭으로 사용할 수 없다. 예약어들은 모두 소문자이다.
(1)기억류 예약어
auto
register
static
extern
(2)제어문 예약어
goto
if ~ else
switch ~ case
for
while
do ~ while
break
continue
return
(3)자료형 예약어
char
int
short
long
unsigned
float
double
struct
union
enum
void
(4)기타 예약어
sizeof()
typedef
사용자 정의 명칭
프로그램 작성 시 사용자가 임의로 만들어서 사용하는 이름을 말하며 레이블, 변수, 매크로, 형, 배열, 구조체, 공용체, 함수 등의 이름을 정의 명칭입니다.
[규칙]
영문자와 숫자의 조합으로 만든다
첫 글자는 숫자가 올 수 없다.
특수 문자는 사용할 수 없으며, 단 under score(_)만 사용 가능하다.
문자 사이에 공백을 둘 수 없다.
예약어는 사용할 수 없다.
대문자와 소문자는 다른 문자로 취급한다.
글자 길이 제한은 컴파일러마다 차이가 있으나 일반적으로 32자까지 가능하다.
3. data type
자료형은 크게 상수(constant)와 변수(variale)가 있다.
상수
고유한 의미나 크기를 가지고 있는 변할 수 없는 값을 말하며 아래 종류가 있다.
기본형
|
산술형 |
문자형 |
하나의 글자,' '속에 기재, 2Bytes차지하며 하위 1byte에 표현됨 일반문자 : 'A' 제어문자:'n', 'r', '\a', '\f', '\b', '\t' |
char(-128~127) |
%c |
unsigned char(0~255) |
%c |
||||
문자열형 | 하나 이상의 글자, 따옴표(" ")에 기재, 문자열 상수 마지막에 NULL이어서 memory상에 문자열수 보다 1byte 더 크다. | %s | |||
정수형 | 소수점이나 지수가 없는 수 10진수(11),8진수(013),16진수(0xB) 등으로 표현 |
short |
%hd |
||
int |
%d |
||||
long |
%ld |
||||
unsigned short | %hu | ||||
unsigned int | %u | ||||
unsigned long | %lu | ||||
실수형 | 소수점이나 지수가 있는 수 (실수의 맨 뒤에 f가 붙어있다면 float, l이 붙어있다면 long double, 아무것도 붙어있지 않다면 double입니다.) 1.98f(float), 5.98283l(long double), 3.782e+12(double) | float | %f %e %g | ||
double | %f | ||||
long double | %Lf | ||||
나열형 | enum 이름{상수1, 상수2, ....} enum 이름{상수1=값1,상수2 = 값2, ...} | enum | %d | ||
무치형 | void | ||||
합성형 | array | ||||
function | |||||
pointer | |||||
struct | |||||
union |
변수
[변수 선언 형식]자료형 이름 변수이름;
자료 형변환(Data type Coversion)
[ 형식]typedef 기존형 이름 새로운 이름1, 새로운 이름2, ...;
(2)auto data type conversion
연산이나 대입시에 자료형이 자동적으로 바뀌어서 처리되는 것을 말하며 묵시적 형변환(Implicit Data Type Conversion) 이라고 한다.
자료형은 연산시 자료형의 크기가 큰 쪽으로 바뀌어서 연산 된다.
자료형의 크기 순서는 아래와 같다.
char →unsigned char → short → unsigned short → int → unsinged int → long → unsinged long → float → double
(3)User data type conversion
특정 자료의 형을 사용자가 강제적으로 바꾸어 주는 것으로 명시적 형변환(Explicit Data Type Conversion)이라고 한다.
Cast 연산자라고 주로 사용한다.
[ 형식](자료형 이름) 변환 대상체
4. operator
연산처리를 하기 위한 문자를 말하며 C언어의 연산자는 기계 코드연산 명령과 1:1 대응되도록 설계되어 있기 때문에 연산 처리속도가 상당히 빠르다.
연산자 |
연산자 종류 |
동등우선 |
| ||
최우선 연산자 |
[ ], ( ), ->, . |
→ |
먼 저 연 산 나 중 에 연 산 | ||
단항 연산자 |
!, ~, +, -, ++, --, *, &, sizeof(),(자료형) |
← |
|||
이 항 연 산 자 | 산술연산자 |
*, /, % |
→ |
||
+, - |
→ |
||||
시프트 연산자 |
<<, >> |
→ |
|||
관계 연산자 |
>, <, >=, <= |
→ |
|||
!=, == | → | ||||
논리 연산자 | 이진 논리 연산자 : & > ^ > | | → | |||
일반 논리 연산자 : && > || | → | ||||
삼항 연산자 | ?: | ← | |||
대입연산자 | =, +=, -=, *=, /=, %/, &=, ^=, |=, <<=, >>= | ← | |||
컴머 연산자 | , | → |
5. input/ouput function
입/출력 처리란 어떤 데이터를 외부 장치(키보드, 마우스, 디스크 등)로 부터 program 내부(memory)로 읽어 들이거나 memory에 있는 data를 외부 장치로 내보내 주는 작업을 말한다.
[ 입/출력 처리]입력장치((keyboard, mouse, disk etc) → 기억장소(Memory) → 출력장치(Monitor, Disk, printer)
출력함수
name |
usage |
output |
putchar() |
putchar('charatr'); 화면에 한 글자 출력, putchar('A'); |
monitor |
puts() |
puts("strings"); 화면에 문자열 출력, puts("Korea"); |
|
printf |
printf("메시지");printf("출력서식 및 메시지", 대상체1,대상체2,...); 화면에 한 글자나 문자열 출력, printf("Korea"); printf("%s", "Korea"); |
|
fputc() |
화일에 한 글자 출력, fputc('charter',화일변수 포인터); |
file |
fputs |
화일에 문자열을 출력, fputs("strings",화일변수 포인터); |
|
fprintf() |
화일에 문자나 문자열 그리고 숫자등을 출력, fprintf(화일변수 포인터, "출력서식 및 메시지", 대상체1,대상체2,...); |
입력함수
name |
usage |
output |
getchar() |
getchar('charatr'); 화면에 한 글자 출력, putchar('A'); |
from keyboard |
gets() |
gets("strings"); 화면에 문자열 출력, puts("Korea"); |
|
scanf |
scanf("메시지");scanf("출력서식 및 메시지", 대상체1,대상체2,...); 화면에 한 글자나 문자열 출력, scanf("Korea"); printf("%s", "Korea"); |
|
fgetc() |
화일에 한 글자 출력, fgetc('charter',화일변수 포인터); |
from file |
fputs |
화일에 문자열을 출력, fgets("strings",화일변수 포인터); |
|
fscanf() |
화일에 문자나 문자열 그리고 숫자등을 출력, fscanf(화일변수 포인터, "출력서식 및 메시지", 대상체1,대상체2,...); |
6. 제어문
프로그램의 실행 순서를 바꾸어 주는 문을 말한다.
|
|
|
goto |
무조건 분기문 |
goto label; |
if ... else |
조건문 |
if(조건식) 명령1 |
switch ... case |
조건문 |
switch(수식){ case value 1: command1;command2;...commandn;break; case value 2: command1;command2;...commandn;break; : case value n: command1;command2;...commandn;break; default: command1;command2;...commandn;break; } *break가 있으면 switch문 끝으로 이동하고, 없으면 다음 case를 지속 수행한다. |
for |
조건, 반복문 |
for(초기식; 조건식; 증감식) 명령1; |
while |
조건,반복문 |
while(조건식) 명령1; *while문의 조건식이 거짓이 될때까지 loop내의 명령을 반복 수행한다. 거짓이 되면 빠져나옴. |
do ... while |
반복, 조건문 |
do{ command 1; }while(조건식) *do...while문의 조건식이 거짓이 될때까지 loop내의 명령을 반복 수행한다. 거짓이 되면 빠져나옴. |
break |
탈출문 |
*while문의 조건식이 거짓이 될때까지 loop내의 명령을 반복 수행한다. 거짓이 되면 빠져나옴. |
continue | 게속문 | *for, while, do..while에서 사용되며, block의 끝 부분을 만난 것으로 인식한다. 그러므로 continue를 만나면 조건식으로 이동하여 다음 조건을 수행한다. while(조건식){ 1; continue; command 2; } |
return | 제어 반환문 |
7. function
8. 기억류(Storage class)
9.선처리부(Preprocessor part)
10. Array
11. Structured type