본문 바로가기
코스웨어/16년 스마트컨트롤러

C언어 정리1

by 알 수 없는 사용자 2016. 3. 28.
728x90
반응형

C언어의 특징

C언어는 함수로 시작해서 함수로 끝난다

C언어로 작성된 프로그램은 이식성이 좋다

(정해진 순서)에 의해서 진행되는 함수의 호출이 바로 프로그램의 흐름이 된다

(절차지향성의 특징)

 

 

 

 

<함수>

함수의 기능을 정의하고 있는 영역을 가리켜 함수의 몸체(body)라고 한다

main 함수가 가장 먼저 호출된다.

함수란 입력과 출력이 존재한다.

함수의 정의 만들어진 함수 실행 가능한 함수를 일컫음

함수의 호출 함수의 실행 명령하는 행위

인자의 전달 함수의 실행을 명령할 때 전달하는 입력 값

 

반환형(출력형태) 함수이름 입력형태

int main (void)

위에서 아래로 순차적으로 실행

 

 

함수 내에 존재하는 문장의 끝에는 세미콜론 문자;

조건문이나 반복문은 세미콜론이 없다

“ ” 문자열을 표현

(\n 개행문자) 특수문자를 이스케이프 시퀀스라 한다

문자열을 모니터에 출력하는 기능을 지닌다

기본적으로 제공되는 함수를 가리켜 표준함수라 하고 표준함수들의 모임을 가리켜 표준 라이브러리라 한다.

 

     

 

 

<헤더파일>

#include <stdio.h> 헤더파일 선언 학장자가 h로 끝나는 헤더파일을 포함하라는 의미

 

stdio.h 호출에 필요한 정보가 존재한다.

기본 함수를 사용을 위해서는 헤더파일을 선언

헤더파일의 선언은 main 함수 정의 이전에 와야 한다

 

 

 

 

<return>

return 0;

함수를 호출한 영역으로 값을 전달(반환)

현재 실행중인 함수의 종료

 

main 함수의 0을 전달하는 이유는 무엇일까?

main 함수를 호출한 영역으로 전달 호출의 주체는 운영체제이고 따라서 운영체제에 전달된다

 

정상적인 종료의 상황에서 전달하는 값이다. 비정상적인 상황으로 인해서 종료될 때에는 일반적으로 0이 아닌 값을 전달한다.

 

 

블록단위의 주석 /* */

행 단위주석 //

 

 

 

 

 

printf 문자열을 모니터에 출력하는 기능 문자열 ”, “정수데이터 출력

 

printf("hellow world") 큰 따옴표로 문자열을 표현하며 hellow world을 인자로 전달하면 printf 함수를 호출(명령을 실행)하는 문장

 

printf 함수는 첫 번째 인자(,)로 전달된 문자열을 출력한다

 

함수(인자전달장소) %d 서식문자

 

함수의 호출문에 두 번째 인자가 있을 때 함수 호출시 전달되는 (인자는, )로 구분

 

    

 

 

 

C언어를 이용해서 특정 연산을 요구할 때 사용하는 약속된 기호를 가리켜 연산자라 한다.

 

변수를 이용한 데이터 저장

값을 저장할 수 있는 메모리 공간에 붙은 이름, 혹은 메모리 공간 자체를 가리켜 변수라한다.

 

변수를 만드는 것을 선언이라고 한다. 그 변수의 이름을 통해서 값의 저장 및 참조가 가능하고 저장된 값의 변경도 가능하다

 

int iNum

변수 선언을 할 때는

int 저장 가능한 메모리 공간을 할당

Num 메모리 공간명

 

선언된 변수에 처음 값을 저장하는 것을 초기화라고 한다(Init)

초기화 이후에 저장된 값을 변경할 때에는 그냥 대입 또는 대입연산을 진행한다고 한다

 

int iNum

iNum = 12; 초기화

iNum = 24; 변수 Num24를 대입

 

둘 이상의 변수를 동시에 선언 및 초기화 하는 것도 가능하다

 

int iNum =20, int iNum = 30

 

 

변수 선언시 주의할 사항

변수를 선언만 하고 초기화 하지 않으면 쓰레기 값이 저장된다

0으로 초기화 시키고 이후에 의미 있는 값을 저장하기도 한다.

 

중괄호 내에 변수를 선언할 경우 변수 선언문은 중괄호 앞부분에 위치해야 한다.

함수내에 존재하는 문장은 세미콜론으로 끝내야 한다

{} 함수의 시작과 끝을 구분

 

 

int iNum1;

iNum1 = 0; // 값을 초기화 선언문이 아님

int iNum2; // 컴파일 에러 // 변수 선언이 값을 넣는 것보다 먼저 와야한다.

iNum2 = 0;

상당수의 컴파일러가 변수의 선언문이 중괄호의 앞부분에 위치할 것을 요구하고 있으니 순수하게 C언어로 프로그램을 작성하고자 한다면 컴파일러가 지원하는 변수 선언의 위치에 상관 없이 중괄호의 앞부분에 변수를 선언하는 것이 좋다.

1. 변수 선언의 규칙 알파벳 숫자 언더바로 구성

2. C언어는 대소문자를 구분한다.

3. 변수 이름은 숫자로 시작할 수 없고 키워드도 변수의 이름으로 사용할 수 없다

4. 이름 사이에 공백이 삽입될 수 없다.

 

변수이름을 정할 때에는 변수의 역할에 어울리는 의미 있는 이름을 지어야 한다

 

변수의 자료형

자료에 따라 정수형 변수 실수형 변수

형에 따라 변수 상수

 

 

 

 

c obj exe

소스코드는 설계도 obj 부품 exe 제품

 

전처리기란 컴파일전 기계어로 번역하기 전을 의미

 

 

C언어의 표준 키워드

default auto enum goto restrict extern switch signed continue else

 

scanf(%d %d %d, &iNum1, &iNum2, &iNum3);

scanf 함수는 공백을 기준으로 데이터를 구분

     

       

 

두 개의 피연산자를 요구하는 연산자를 이항연산자라 한다

 

이항연산자

= 대입연산자, +더하기, - 빼기, * 곱하기, / 나누기, %나머지 값 반환

 

함수 호출문(실행 명령)의 인자전달 위치 연산식이 올 수 있다.

이러한 경우 함수 호출에 앞서 연산식이 먼저 진행되며 그 연산의 결과가 인자가 되어 함수의 호출까지 이어지는 것

 

printf("%d+%d=%d\n", num1, num2, num1+num2); num1 + num2가 먼저 실행

 

복합 연산자

 

a+=b

a-=b

a*=b

a/=b

a%=b

 

a=a+b a+=b

부호연산의 의미를 갖는 +연산자 -연산자

 

++num 선 증가 후 연산

num++ 속한 문장을 먼저 진행한 후 값을 1증가

--num 값을 1 감소 후, 속한 문장의 나머지를 진행

num-- 속한 문장을 먼저 진행한 후 값을 1감소

 

++, -- 연산자는 값을 1증가 및 감소 시키는 연산자이다

삽입된 위치에 따라 그의미가 달라진다 피연산자의 왼편에 붙는 경우에는 먼저 변수에 저장된 값을 증가 및 감소 시키고 나서 문장의 부분을 실행하게 된다

피연산자의 오른쪽에 붙은 경우에는 문장 전체를 실행한 다음에 값을 증가 및 감소 시킨다.

 

             

 

후의 증가 및 후의 감소 연산 시에는 소괄호의 영향을 받지 않고, 다음 문장으로 넘어가야만 비로소 값의 증가 및 감소가 이뤄진다

 

관계 연산자 <> == != <= >= 대소 동등의 관계를 따지는 연산자

 

< n1n2보다 작은가?

> n1n2보다 큰가?

== n1 == n2와 같은가?

!= n1n2가 다른가?

<= n1n2보다 같거나 작은가?

>= n1n2보다 같거나 큰가?

 

조건을 만족하면 1을 만족 하지 않으면 0을 반환

1은 참 0은 거짓을 의미한다 C언어는 0이 아닌 모든 값을 참으로 간주한다

 

논리연산자

&& AND

|| OR

! NOT

 

 

관계 연산의 결과를 대상으로 논리연산을 진행하고 있다.

논리 연산보다 관계연산자가 먼저 진행된다

 

연산자 우선순위가 있다.

 

콘마 연산자(,) 둘 이상의 인자를 전달할 때도 인자의 구분을 목적으로 사용된다

연산의 결과가 아닌 구분을 목적으로 사용된다

 

둘 이상의 함수 호출문이나 연산문이 하나의 문장 안에 삽입되 어있다

이러한 문장구성이 가능한 이유는 콤마 연산자(구분) 사용했기 때문이다

 

 

키보드로부터의 정수입력을 위한 scanf 함수의 호출

scanf 함수를 이용하면 키보드로부터 다양한 형태의 데이터를 입력 받을 수 있는데

일단은 정수의 입력에 대해서만 이야기하겠다

scanf 함수의 사용방법은 printf 함수와 매우 유사하다(물론 의미는 정반대이다.)

 

scanf 함수를 소개

 

키보드로부터 정수입력을 위한 scanf 함수의 호출

scnaf 함수를 이용하면 키보드로부터 다양한 형태의 데이터를 입력 받을 수 있는데

일단은 정수의 입력에 대해서만 이야기하겠다. scanf 함수의 사용법은 printf 함수와 유사하다(물론 의미는 정반대이다) 다음 코드는 scnaf 함수의 기본적인 사용방법을 보여준다

 

int main(void)

{

int num;

scanf("%d", &num);

 

}

데이터 종류에 맞게 메모리공간을 미리 할당한 후에 scanf 함수호출(실행명령)에 앞서 변수 num을 선언하고 있따 scanf 함수를 호출하면서 두 번째 인자로 num를 넘겨 주고 있다. 주소값에 num을 전다 하고 있따

 

%d는 서식 문자이다 10진수 정수형태의 입력

서식문자 수를 조절하여 입력 받는 데이터 수를 조절할 수 있을 뿐만 아니라, 서식문자를 변경하여 입력 받는 데이터의 유형도 달리 할 수 있다.

 

scanf 함수는 공백을 기준으로 데이터를 구분

%d %d %d _공백을 기준으로 데이터 구분

 

C언어 표준 키워드

extern _complex restrict goto enum default auto continue else switch

 

       

연산자의 결합 방향

우선순위가 동일한 두 연산자가 하나의 수식에 조재하는 경우, 어떠한 순서대로 연산하느냐를 결정해 놓은 것이 바로 결합방향이다

 

왼쪽에서 오른쪽으로 진행

 

1순위

() 함수호출

[] 인덱스

간접지정

. 직접지정

++, -- 후의증가 및 감소

 

2순위

++ -- 전위 증가 및 감소

size of

~ 비트 NOt

! NOt

-, + 부호연산

& 주소연산

* 간접지정 연산

 

3

(casting)

 

4

*, /, % 곱셉 나누셈 관련 연사

5

+-

6

<< >>

7

<, >, <=, >=

8

==, !=

9

&

10

^

11|

12&&

 

 

 

 

 

 

728x90