*헤더파일

 

- 헤더파일 만드는 방법 C언어에서 제공하는 라이브러리를 포함 < .h >

  사용자 헤더파일 " .h "

 

 

 

 

 

 

 

 

 

 

 

 

 

#헤더파일에 선언한 함수를 소스파일에서 실행

 

 

 

 

 

 

 

 

 

 

#이중 포인터

 

- 이중 포인터(double pointer) : 포인터를 가리키는 포인터

 

 

 

 

 

 

 

#이중 포인터 프로그램

 

 

 

 

 

 

 

 

 

 

#순환(recursion)

 

- 알고리즘이나 함수가 수행 도중에 자기 자신을 다시 호출하여 문제를 해결하는 기법

 

- 팩토리얼의 정의

 

 

 

 

 

 

 

 

 

#재귀 함수

 

- 자기 자신을 재호출 하는 형태로 정의된 함수를 가리켜서 재귀함수라 한다.

 

- 함수의 복사본을 cpu가 읽을 수 있도록 명령문에 추가된다.

 

- 재귀함수는 어떤 조건으로 멈추지않으면 계속 함수가 무한반복 되기 때문에 멈추는 조건이 필요하다.

 

 

 

 

 

 

 

 

 

#탈출 조건이 없다면?

 

 

 

 

 

 

 

 

 

 

 

#재귀 함수의 이해

 

 

 

 

 

 

 

 

 

 

 

#팩토리얼 구하기

 

- 팩토리얼 프로그래밍 #2 : (n - 1)! 팩토리얼을 현재 작성중인 함수를 다시 호출하여 계산(순환 호출)

 

 

 

 

 

 

 

 

 

 

 

#팩토리얼 호출 순서

 

 

 

 

 

 

 

 

 

 

 

 

 

#팩토리얼 구하기 예제

 

 

 

 

 

 

 

*정렬

 

- 정렬은 물건을 크기순으로 오름차순이나 내림차순으로 나열하는 것

 

- 정렬은 컴퓨터 공학분야에서 가장 기본적이고 중요한 알고리즘 중의 하나이다.

 

 

 

#선택 정렬

 

- 선택 정렬(selection sort) : 정렬이 안된 숫자들 중 최소값을 선택하여 배열의 첫 번째 요소와 교환하는 것

 

 

 

 

 

 

 

#순차 탐색

 

- 순차 탐색(sequential search) : 배열의 원소를 순서대로 하나씩 꺼내서 탐색키와 비교하여 원하는 값을 찾아가는 방법이다.

 

 

 

 

 

 

 

 

 

 

#이진 탐색

 

- 이진 탐색(binary search) : 정렬된 배열의 중앙에 위치한 원소와 비교를 되풀이

 

 

 

 

 

 

 

 

 

 

 

 

#문자 검색 : strchr()

 

 

 

 

 

 

 

 

 

 

 

 

#전처리기(Preprocessor) : 컴파일하기 앞서서 소스파일을 처리 하는 컴파일러의 한 부분

 

 

 

 

 

 

 

 

 

 

 

#전처리기 요약

 

 

 

 

 

 

 

 

 

 

#매크로 개념

 

 

 

 

 

 

 

 

 

 

 

 

 

#매크로 종류

 

*단순 매크로

 

- 단순 매크로(macro) : 숫자 상수를 기호 상수로 만든 것

 

 

 

 

 

 

 

 

 

 

 

 

*함수 매크로

 

- 함수 매크로(function-like macro) : 매크로가 함수처럼 매개변수를 가지는 것

 

Ex) #define Square(x) ((x) * (x))

 

 

 

 

 

 

 

 

 

#함수 매크로의 장단점

 

- 함수 호출 단계가 필요없어 실행 속도가 빠르다.

 

- 소스 코드의 길이가 길어진다.

 

 

*간단한 기능은 매크로를 사용

 

- #define MIN(x,y)   ((x)) < (y) ? (x) : ((y))

- #define ABS(x)      ((x)) > 0 ? (x) : -((x))

 

 

*매크로를 한줄 이상 연장하는 방법

 

- #define PRINT(x) if(debug==1 && \

mode ==1)\

printf("%d",x);

 

 

 

 

 

#ifdef

 

- 어떤 조건이 만족되었을 경우에만 컴파일하는 조건부 컴파일 지시

 

- 조건부 컴파일을 위한 매크로

 

#if 조건이 참일 경우에는

 ... 실행

#endif

 ...여기까지

 

 

 

 

 

 

 

 

 

 

 

#if

 

- 기호가 참으로 계산되면 컴파일

 

- 조건은 상수여야 하고 논리 , 관계 연산자 사용 가능

 

 

사용 형식

 

#if 조건

    문장들 

#endif

 

- 매크로의 값이 참이면 #if와 #endif 있는 모든 문장들을 컴파일

 

 

 

 

*메모리 할당

 

- 코드영역  : 실행할 프로그램의 코드가 저장되는 메모리 공간

   CPU는 코드 영역에 저장된 명령문을 하나씩 가져다가 실행한다.

 

 

- 데이터 영역 : 전역변수와 static 변수가 할당되는 영역

                    프로그램 시작과 동시에 할당되어 종료시 까지 남아있는 특징의 변수가 저장되는 영역

 

 

- 힙 영역 : 프로그래머가 원하는 시점에 메모리 공간에 할당 및 소멸을 하기위한 영역

              동적 메모리가 할당되는 부분

 

 

- 스택 영역 : 지역변수와 매개변수가 할당되는 영역

                 함수를 빠져나가면 소멸되는 변수를 저장하는 영역 

 

 

 

 

 

 

 

 

 

 

#동적 할당 메모리의 개념

 

- 프로그램이 메모리를 할당받는 방법

 

1. 정적(static)

2. 동적(dynamic)

 

 

 

#동적 메모리 할당

 

- 실행 도중에 동적으로 메모리를 할당받는 것

 

- 사용이 끝나면 시스템에 메모리를 반납

 

- score = (int *)

  malloc(100*sizeof(int));

 

- 필요한 만큼만 할당을 받고 메모리를 매우 효율적으로 사용

 

- malloc() 계열의 라이브러리 함수를 사용

 

 

 

#void *malloc(size_t size)

 

- size는 byte의 수

 

- malloc()함수는 메모리 블럭의 첫 번째 byte에 대한 주소를 반환

 

- 만약 요청한 메모리 공간을 할당할 수 없는 경우에만 NULL값을 반환

 

 

 

#정적,동적 메모리 할당과 해제

 

 

 

 

 

 

 

 

 

#malloc() 함수

 

- 함수 안에서 이름을 입력받아 메인에 출력

 

- malloc() - 헤더파일 : stdlib.h (malloc+사촌)

                            : malloc.h (malloc만 사용)

 

- 힙 영역의 메모리 공간 할당과 해제

 

- 할당 void* malloc(size);

 

/*

malloc함수는 인자로 숫자만 전달받을 뿐이니

할당 되는 메모리의 용도를 알지 못한다.

따라서 메모리의 포인터 형을 결정 못한다.

형변환의 과정을 거쳐서 할당된 메모리의

주소값을 저장!

*/

 

 

 

#free() 함수 : malloc()함수로 사용한 메모리 해제

 

- void free(포인터 변수명);

 

- 메모리 해제를 하지 않으면 메모리 부족과 같은 문제를 일으킬 수 있으니 꼭 해제하는 습관을 들이자.

 

 

 

 

#malloc() 함수 사용 예

 

 

 

*정수

 

 

 

 

 

 

 

 

 

*문자

 

 

 

 

 

 

 

 

 

 

*학생 점수를 입력 받아보기

 

 

 

 

 

 

 

 

 

#malloc() 함수에 의한 배열 공간 할당

 

 

 

 

 

 

 

 

 

 

 

#calloc()함수

 

 

 

 

 

 

 

 

 

 

 

 

 

#realloc() 함수

 

 

 

 

 

 

 

 

 

 

#자기 참조 구조체 정의

 

*자기 참조 구조체(self reference struct)

 

- 구조체의 멤버중의 하나가 자기 자신의 구조체 포인터 변수를 갖는 구조체

 

 

*구조체 selfref

 

- 멤버로 int형 n과 struct selfref *형 next로 구성

 

- 즉 멤버 next의 자료형은 지금 정의하고있는 구조체의 포인터형

 

- 구조체 selfref는 자기 참조 구조체

 

- 구조체의 멤버중의 하나가 자기 자신의 구조체 포인터 변수

 

- 구조체는 자기 자신 포인터를 멤버로 사용할 수 있으나 자기 자신은 사용 불가능

 

 

 

 

 

#구조체를 이용한 동적 할당

 

 

 

 

 

 

 

 

#두대의 자동차를 입력받아서 메모리 공간을 할당받고 정보를 출력받는 프로그램

 

 

 

 

 

*자료형의 분류

 

- 기본 자료형 : char , int , float , double

 

- 파생 자료형 : 배열 , 열거형 , 구조체 , 공용체

 

 

 

#구조체란 ?

 

- 여러 자료형 변수를 묶어놓은 공간이다.

 

- 구조체는 사용자가 만들어 사용하는 자료형이다.

  (사용자 정의 자료형)

 

- 구조체 선언과 구조체 변수 선언은 다르므로 주의

 

- 구조체 선언이 있어야 구조체 변수 선언이 가능하다.

 

 

 

#구조체의 필요성

 

- 변수들을 하나로 묶을 수 있다.

 

 

 

 

 

 

 

 

 

#구조체와 배열

 

 

 

 

 

 

 

 

 

 

 

 

#구조체 선언

 

- 여러 자료형 변수를 묶어놓은 공간을 설계해놓은 설계도

 

- 변수 선언과 모양이 비슷하지만 , 저장 공간이 생기지 않는다.

 

- 여러개의 구조체를 선언 할때는 이름이 중복되면 안된다.

 

선언 형식

 

struct 구조체 이름{

제목

주연배우

개봉날짜

};

 

 

 

 

 

 

 

 

 

#구조체 변수

 

- 구조체 선언(설계도)의 구조로 실제 데이터를 저장하는 전체 공간(집)이다.

 

- 구조체 정의와 구조체 변수 선언은 다르다.

 

 

 

 

 

 

 

 

 

 

#구조체 초기화

 

- 중괄호를 이용하여 초기값을 나열

 

 

 

 

 

 

 

 

#구조체 멤버 참조

 

- 구조체 멤버를 참조하려면 ( . ) 연산자를 이용하면 된다.

 

 

 

 

 

 

 

 

 

 

#구조체를 멤버로 가지는 구조체

 

 

 

 

 

 

 

 

 

 

 

#구조체 변수의 대입과 비교

 

- 같은 구조체 변수끼리 대입은 가능하지만 비교는 불가능하다.

 

 

 

 

 

 

 

 

 

#(이름 , 핸드폰번호 , 나이) 2명에 대한 정보

 

 

 

 

 

 

 

 

 

#구조체 배열

 

 

선언형식

 

struct person{
  int number;

  char name[20];

  double grade;

};

 

main (void)

{

 struct person list[100] //구조체 배열 선언

}    

 

 

#구조체 배열 초기화

 

 

 

 

 

 

 

#구조체 배열을 사용해 3명에 대한 (이름,핸드폰번호,나이) 정보 받기

 

 

 

 

 

 

 

 

#구조체 함수

 

- 구조체를 함수로 전달하는 경우 : 구조체의 복사본이 함수로 전달되게 된다.

 

 만약 구조체의 크기가 크면 그만큼 시간과 메모리가 소요된다.

 

 

 

 

 

 

 

 

 

- 구조체의 포인터를 함수의 인수로 전달하는 경우 : 시간과 공간을 절약할 수 있다.

                                                                   원본 훼손의 가능성이 있다.

 

 

 

 

 

 

 

 

 

 

#구조체를 반환하는 경우

 

- 복사본이 반환

 

 

 

 

 

 

 

 

#typedef

 

- typedef는 새로운 자료형(type)을 정의(define)하는것이다.

 

- C의 기본 자료형을 확장시키는 역할

 

 

 

 

 

 

 

 

 

 

 

#구조체로 typedef 정의

 

 

사용형식

 

typedef struct point{

 

  int x;

  int y;

 

}PP;

 

 

 

 

 

 

 

 

#출력함수로 출력해보기

 

 

 

 

 

 

 

 

 

#구조체 포인터

 

- 구조체 변수를 대상으로 가리키는 포인터변수

  포인터 -> 구조체!

 

 

 

 

 

 

 

 

# -> 연산자

 

 

 

 

 

 

 

#예제

 

 

 

 

 

 

 

 

 

#포인터를 멤버로 가지는 구조체

 

 

 

 

 

 

 

 

 

 

 

#구조체를 반환하는 경우

 

- 복사본이 반환된다.

 

 

 

 

 

 

 

#구조체 예제들

 

 

- 우유이름 , 가격표기

 

 

 

 

 

 

 

 

- 영어 사전 프로그램

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

- 두 가지 차 이름,가격을 입력받고 출력

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

- 구조체 안에 구조체 본인을 선언 , 구조체 포인터변수 선언 변수,배열

 

 

 

 

 

 

 

 

 

*포인터

 

- 메모리 주소를 이용하여 원하는 저장 공간에 접근하는 것을 얘기한다.

 

- 주소를 가지고있는 변수

 

 

 

#포인터 변수

 

- 주소값

  변수의 주소를 계산하는 연산자 : &

 

- 가리키는 대상의 정보가 포인터 안에 있어야함.

 

 

 

 

 

 

 

 

 

#포인터 변수를 사용하는 이유

 

- 함수가 리턴해야 할 값이 2개 이상인 경우 사용한다.

 

- 함수에서 배열을 매개 변수로 받아들일 때

 

- 프로그램에서 동적할당을 진행할 때 (자료구조)

 

- 이름을 모르는 변수를 이용해야 될 경우

   (외부 프로그램 및 외부 메모리에 직접 접근이 가능하다.)

 

- 메모리를 효율적으로 사용할 수 있다.

 Ex) int arr[100];

 

 

 

#포인터 변수의 크기

 

- 16bit 시스템 -> 주소값의 크기 -> 2byte

- 32bit 시스템 -> 주고값의 크기 -> 4byte

 

- 메모리의 주소는 고정적으로 정해져있다.

 

- 메모리의 주소는 음수 x

 

- %d -> +,-

- %u -> 부호없이 양수만 출력

- %p -> 16진수의 주소값

 

0~42억 -> 4byte

 

 

 

#포인터 선언

 

정보↓

     int* 포인터 변수명 = 가리키는 대상의 주소값 

 

 

 

 

 

 

 

 

 

#포인터 변수의 연결

 

 

 

 

 

 

 

#다양한 포인터 선언

 

 

 

 

 

 

 

 

#간접 참조 연산자 ( * )

 

- 포인터가 가리키는 값을 가져오는 연산자

 

- 지정된 위치에서 포인터의 타입에 따라 값을 읽어들인다.

 

- &연산자는 변수의 주소를 구하여 포인터에 대입할 때 사용 , *연산자는 포인터를 통하여 변수를 간접 참조할 때 사용

 

 

 

 

 

 

 

 

 

 

#포인터 예제

 

 

 

 

 

 

 

 

 

 

#포인터와 scanf()를 이용하여 정수 1개를 입력 받고 값이

  짝수인 경우 "짝수" 홀수면 "홀수" 출력하는 프로그램을 작성해보자

 

 

 

 

 

 

 

 

 

 

 

 

#포인터 사용시 주의점

 

 

 

 

 

 

 

 

 

 

 

#포인터 연산

 

- 가능한 연산 : 증가 , 감소 , 덧셈 , 뺄셈 연산

 

- 증가 연산의 경우 증가되는 값은 포인터가 가리키는 자료형의 크기만큼 증가

 

 

 

 

 

 

#증가 연산 예제

 

 

 

 

 

 

 

 

 

 

 

 

#간접 참조 연산자와 증감 연산자

 

 

- *p++;  = p가 가리키는 위치에서 값을 가져온 후에 p를 증가한다.

 

- (*p)++; = p가 가리키는 위치의 값을 증가한다.

 

 

 

 

 

 

 

#포인터 배열

 

- 배열과 포인터는 아주 밀접한 관계를 가지고있다.

 

- 배열 이름 = 포인터

 

- 포인터는 배열처럼 사용이 가능하다.

 

- int arr[3]; 

 

- arr -> &arr[0]주소값을 가리킨다.

 

 

#int형 변수 정보

 

- 배열을 구성하는 원소 한개의 접근하는 형식이다.

 

- 배열 전체의 시작주소만 저장한다.

 

- 배열의 이름 자체는 바꿀 수 없는 상수이며 곧 주소값을 의미하게 된다.

 

scanf("%s",name)

char name[30];

name -> name[0] - 주소값을 가리키고 문자를 저장하라 라는 정보를 가지고있다.

 

- 배열은 포인터이기 때문에 메모리에 접근하는 간접 참조 연산자( * )를 사용할 수 있다. 

 

 

 

 

#포인터 배열 주소값 비교

 

 

 

 

 

 

 

 

 

#2차원 배열에 문자열 저장

 

 

 

 

 

 

 

 

 

#문자형 포인터 배열

 

 

 

 

 

 

 

 

 

#배열3개를 선언하고 배열에 있는 값을 10진수와 주소값으로 출력

 

사용형식

 

- 정수 주소값 3개를 저장하는 배열

 

- int* arr[3];

 

 

 

 

 

 

 

 

 

#C에서의 인수 전달 방법

 

- 값에 의한 호출(call by value) : 기본적인 방법 , 함수 호출시에 변수의 값을 함수에 전달

 

- 참조에 의한 호출(call by reference) : 포인터 이용 , 함수 호출시에 변수의 주소를 함수의 매개변수로 전달

 

 

 

 

#swap() 함수

 

- 변수 2개의 값을 바꾸는 작업을 함수로 작성

 

 

 

 

 

 

 

 

#포인터를 이용한 swap() 함수

 

 

 

 

 

 

 

#scanf() 함수

 

- 변수에 값을 저장하기 위하여 변수의 주소를 받는다.

 

 

 

 

 

 

 

 

#포인터 사용의 장점

 

- 연결 리스트나 이진 트리 등의 향상된 자료 구조를 만들 수 있다.

 

- 참조에 의한 호출 : 포인터를 매개 변수로 이용하여 함수 외부의 변수의 값을 변경할 수 있다.

 

- 동적 메모리를 할당한다.

 

 

 

 

#const 포인터

 

- const를 붙이는 위치에 따라서 의미가 달라진다.

 

 

 

 

 

 

 

 

 

 

*함수 원형

 

- 함수 원형(function prototyping) : 컴파일러에게 함수에 대하여 미리 정보를 알리는 것

 

- 함수 원형의 형식 ↓

 

  반환형 함수이름 (매개 변수1 , 매개 변수2 ,~~~~);

 

Ex) int get_integer(void);                

int combination(int n ,int r);

 

 

 

#라이브러리 함수

 

- 라이브러리 함수(library function) : 컴파일러에게 제공하는 함수

 

- 표준 입출력

- 수학 연산

- 문자열 처리

- 시간 처리

- 오류 처리

- 데이터 검색과 정렬

 

 

 

#난수 함수 라이브러리

 

- 난수(random number)는 규칙성이 없이 임의로 생성되는 수이다.

 

- 난수는 암호학이나 시뮬레이션 , 게임 등에서 필수적이다.

 

 

 

 

#rand() : 난수를 생성하는 함수

            0부터 RAND_MAX 까지의 난수를 생성

 

헤더파일 : <stdlib.h> 기본 사용 : rand();

 

- 범위를 지정하여 임의의 값을 생성하는 경우 : rand() % 갯수 + 시작 수;

 

 

 

 

 

 

 

 

#srand()함수

 

- rand()함수의 초기값을 설정하는 함수

 

- srand(초기값);

 

- 매번 난수를 다르게 생성하려면 시드(seed)를 다르게 하여야 한다.

   srand((unsigned)time(NULL));

 

 

 

 

 

 

 

#time()함수


- 1970년 1월1일 0시0분0초부터 현재까지의 시간을 초단위로 제공한다.

 

- time(NULL)


- 헤더파일: time.h

 

- rand()함수의 값이 일정하지 않도록 time()을 이용하여 초기화

 

- srand(time(NULL))

 

 

 

#Sleep()함수

 

- 밀리언 초(1/1000)단위로 프로그램의 실행지연

 

- Sleep(밀리언초);  /* S는 무조건 대문자 */

 

 

system()함수
  - 콘솔창에서 사용할 수 있는 명령어를 실행시키는 함수

 

  사용형식


  system("명령어 입력");

 

  **화면을 깨끗이 지우는 명령
  system("cls");

 

  **화면을 잠깐 멈추는 명령
  system("pause");

 

  **지금위치의 폴더들을 확인명령
  system("dir");

 

 

 

 

 

 

 

 

#rand()함수를 이용하여 로또 6개 숫자 뽑아보기

 

 

 

 

 

 

 

 

 

#로또 프로그램 중복 x

 

 

 

 

 

 

 

#변수의 속성

 

- 이름 , 타입 , 크기 , 값 , + 범위 , 생존시간 , 연결

 

- 범위(scope) : 변수가 사용 가능한 범위 , 가시성

 

- 생존시간(lifetime) : 메모리에 존재하는 시간

 

- 연결(linkage) : 다른 영역에 있는 변수와의 연결 상태

 

 

 

 

#변수의 종류

 

- 지역 변수 : 함수 내에서 선언된 변수

 

  선언된 영역이 다르면 동일한 변수명을 사용할 수 있다.

 

  해당 지역을 빠져나가면 지역변수는 소멸된다.


  호출할때마다 새롭게 할당된다.

 

 

 

 

 

 

 

 

 

 

#지역변수 예제

 

 

 

 

 

 

 

 

 

- 전역 변수 : 함수 밖에서 선언된 변수

 

  프로그램이 시작하고 끝날때까지 메모리공간이 남아있는다.

 

                 자동적으로 0으로 초기화 된다.

 

                 main함수든 내가 만든 함수 안에서 자유롭게 접근이 가능하다.

 

 

 

 

 

 

 

 

 

 

#전역 변수 예제

 

 

 

 

 

 

 

 

 

#문자열 처리 라이브러리

 

 

 

 

 

 

#문자열 길이 (strlen)

 

- strlen("Hello") 는 5를 반환한다.

 

 

 

 

 

 

 

 

 

#문자열 복사 (strcpy)

 

- char dst[6];

 

- char src[6] ="Hello";

 

- strcpy(dst,src)

 

 

 

 

 

 

 

 

 

 

 

#문자열 연결 (strcat)

 

- char dst[12] = "Hello";

 

- char src[6] = "World";

 

- strcat(dst,src);

 

 

 

 

 

 

 

 

 

 

 

 

#배열 초기화 방법

 

- 1. 배열선언과 동시에 초기화


- 2. scanf()입력


- 3. strcpy() 초기화

 

 

 

 

#문자열 비교

 

 

 

 

 

 

 

 

 

#if문으로 문자열 비교

 

 

 

 

 

 

 

 

 

 

 

#strcmp로 문자열 비교

 

 

 

 

 

 

 

 

 

 

 

#수학 라이브러리 함수

 

 

 

 

 

 

- 헤더파일은 #include <math.h> 사용

 

 

 

 

#간단한 자동차 게임 만들어보기

 

 

알고리즘 : 난수 발생기를 초기화 한다.

    

for( i = 0 ; i < 주행시간 ; i++)

 

난수를 발생하여 자동차1의 주행거리에 누적한다.

 

    난수를 발생하여 자동차2의 주행거리에 누적한다.

 

    disp_car()를 호출하여 자동차1을 화면에 *표로 그린다.

 

      disp_car()를 호출하여 자동차2를 화면에 *표로 그린다.

 

 

 

 

 

 

 

 

 

#로그인 프로그램 만들어보기

 

 

 

 

 

 

 

 

 

 

#가위바위보 프로그램 만들어보기

 

 

 

 

 

 

 

 

 

 

 

#숫자 맞추는 프로그램

 

 

 

 

 

 

*배열이란?

 

- 배열(array) : 동일한 타입의 데이터가 여러 개 저장되어 있는 데이터 저장 장소이다.

 

- 배열 안에 들어있는 각각의 데이터들은 정수로 되어 있는 번호(첨자)에 의하여 접근한다.

 

- 배열을 이용하면 여러 개의 값을 하나의 이름으로 처리할 수 있다.

 

 

 

#배열 선언

 

자료형  배열이름  배열크기

int          Arr          [5]

 

 

 

 

- 자료형 : 배열 원소들이 int형이라는 것을 의미

 

- 배열 이름 : 배열을 사용할 때 사용하는 이름이 Arr이라는 것을 의미

 

- 배열 크기 : 배열 원소의 개수가 5개라는 것을 의미

 

- 인덱스(배열번호) : 항상 0부터 시작한다.

  5개의 크기를 가지지만 1 , 2 , 3 , 4 , 5의 숫자크기가 아니라 0 , 1 , 2 , 3 , 4로 크기를 가지고 있는것이다.

 

 

 

#배열 각방에 대입 해보기

 

 

 

 

 

 

 

 

#배열과 반복문

 

- 배열의 가장 큰 장점은 반복문을 사용하여 배열의 원소를 간편하게 처리할 수 있다는 점이다.

 

 

 

 

 

 

 

 

#잘못된 인덱스 문제

 

- 인덱스가 배열의 크기를 벗어나게 되면 프로그램에 치명적인 오류를 발생 시킨다.

 

- C에서는 프로그래머가 인덱스가 범위를 벗어나지 않았는지 반드시 확인해야 한다.

 

 

 

 

 

 

 

 

#배열의 초기화

 

- 배열의 크기가 주어지지 않으면 자동적으로 초기값의 개수만큼이 배열의 크기로 정해진다.

 

 

 

 

 

 

#배열의 복사와 비교

 

 

 

 

 

 

 

 

 

 

#2차원 배열

 

- 2차원 배열은 1차원적으로 구현된다.

 

 

 

 

 

 

 

 

#2차원 배열 활용

 

 

 

 

 

 

 

 

#2차원 배열의 초기화

 

 

 

 

 

 

 

 

#3차원 배열

 

 

 

 

 

 

 

 

#모듈의 개념

 

- 모듈(module) : 독립되어 있는 프로그램의 일부분

 

- 모듈러 프로그래밍 : 모듈 개념을 사용하는 프로그래밍 기법

 

- 모듈러 프로그래밍의 장점 : 각 모듈들을 독자적으로 개발 가능

                                      다른 모듈과 독립적으로 변경 가능

                                      유지 보수가 쉬워진다.

                                      모듈의 재사용이 가능하다.

 

- C에서는 모듈 == 함수이다.

 

 

 

 

#함수

 

- 표준함수,내장함수,시스템함수
- 사용자정의함수(사용자가 직접 만들어사용하는 함수)

 

 

#함수원형(prototype)
  - 함수의 생김새를 나타낸다.

 

 

 

#함수의 개념

 

- 함수(function) : 특정한 작업을 수행하는 독립적인 부분


- 함수 호출(function call) : 함수를 호출하여 사용하는 것

 

- 함수는 입력을 받으며 출력을 생성한다.

 

 

 

#함수의 장점

 

- 함수를 사용하면 코드가 중복되는 것을 막을 수 있다.

 

- 한번 작성된 함수는 여러번 재사용할 수 있다.

 

- 함수를 사용하면 전체 프로그램을 모듈로 나눌 수 있어서 개발 과정이

  쉬워지고 보다 체계적이 되면서 유지보수도 쉬워진다.

 

 

 

#함수들의 연결

 

- 프로그램은 여러 개의 함수들로 이루어진다.

 

- 함수 호출을 통하여 서로서로 연결된다.

 

- 제일 먼저 호출되는 함수는 main()함수이다.

 

 

 

#함수의 정의

 

- 반환형(return type)

 

- 함수 헤더(function header)

 

- 함수 몸체(function body)

 

 

 

#함수의 구조

 

 

 

 

 

 

 

 

#반환형

 

 

 

 

 

 

 

 

 

 

 

#매개 변수

 

 

 

 

 

 

 

 

#인수와 매개 변수

 

- 인수(argument) : 실인수 , 실매개 변수라고도 한다.

 

- 매개 변수(parameter) : 형식 인수 , 형식 매개 변수라고도 한다.

 

 

 

#함수 호출과 반환

 

- 함수호출(function call)

 

- 함수를 사용하기 위하여 함수의 이름을 적어주는 것

 

- 함수안의 문장들이 순차적으로 실행된다.

 

- 문장의 실행이 끝나면 호출한 위치로 되돌아간다.

 

- 결과값을 전달할 수 있다.

 

 

 

 

#함수 호출과정 살펴보기

 

 

 

 

 

 

 

 

#sum 함수 호출하기

 

 

 

 

 

 

 

 

#반환값

 

- 반환값(return value) : 호출된 함수가 호출한 곳으로 작업의 결과값을 전달하는 것

 

- 인수는 여러 개가 가능하나 반환값은 하나만 가능

 

 

반환값 함수이름 (매개변수)
  {
  //기능
       return ;
  }

 

 return
   - 리턴되는 값을 의미
   - 함수가 일을 하고 돌아올때 가지고 오는값

   - return문은 값을 반환하는 기능 외에도 함수를 종료하는 기등도 가지고 있다.

 

  return type(반환값)
   - 정수,실수,문자 데이터의 형태

 

  sum(전달인자)
   - 함수가 호출될때 넘겨지는 값의 형태

   - 아규먼트(argument)

 

  함수가 호출되서 넘겨질때 저장되는 공간
   파라미터 - 매개변수

 

 

 

 

 

 

 

 

 

#함수의 구분

 

 

 

 

 

 

 

 

 

#비교 함수

 

 

 

 

 

 

 

 

 

 

 

 

 

#절댓값을 구하는 함수 출력 프로그램

 

 

 

 

 

*반복문

 

- 반복문(Repetitive Statement)이란 지정한 작업을 반복해서 수행하는 문법이다.

 

- 반복문 작성 조건은 3가지가 있다.

 

1. 시작값 = 초기값; 1,2,100~

2. 조건

3. 증감식

 

- 반복문의 종류에는 while , do~while , for 등이 있다.

 

 

 

#while문

 

- 주어진 조건이 만족되는 동안 문장들을 반복 실행한다.

 

- 무한반복 while(1) 조건이 무조건 참이여야 한다.  ' 1 = 참 '

 

while(조건식)

문장;

 

 

 

#while문을 이용하여 1~10까지의 숫자 출력

 

 

 

 

 

 

 

#역순으로 출력

 

 

 

 

 

 

 

#while문을 이용하여 1~100까지의 합 , 홀수와 짝수의 합 출력해보기

 

 

 

 

 

 

 

 

 

#입력한 횟수만큼 이름 출력해보기

 

 

 

 

 

 

 

 

 

#while문 무한반복을 이용하여 가위 바위 보 게임 기본 메뉴 만들어보기

 

 

 

 

 

 

 

 

 

 

 

#do ~ while문

 

- 반복 조건을 루프의 끝에서 검사한다.

 

- 적어도 한번은 반복 문장을 실행한다.

 

 

do

문장

while(조건)

 

- while 조건이 참일 경우

 

while - 조건 -> 실행

do~while 실행 -> 조건

(부정문)

 

 

 

#do ~ while문을 이용하여 정수를 입력받고 입력받은 정수들을 더하다 0입력시 종료되는 프로그램 만들어보기

 

 

 

 

 

 

 

 

 

 

#while문 안에 if문 사용 예

 

- 정수를 입력받다가 8의 배수가 되는 수를 5번 출력하면 프로그램 종료

 

 

 

 

 

 

 

 

 

 

#for문

 

- for문의 기본 구조

 

for(초기식; 조건식; 증감식)

문장;

 

 

- 초기식: 반복을 시작하기 전에 딱한번 실행한다.


- 조건식: 매 반복의 시작앞서 실행, 결과를 기반으로 반복의 유뮤를 결정한다. (참일 때)


- 증감식: 매 반복실행 후 마지막 연산이 이뤄진다.

 

 

 

#for문을 이용해 이름 5번 출력해보기

 

 

 

 

 

 

 

 

 

 

#for문을 이용해 0~100까지 숫자의 합을 출력하는 프로그램 만들어보기

 

 

 

 

 

 

 

 

 

 

 

 

#for문을 이용하여 입력한 횟수까지의 곱을 출력해보기

 

 

 

 

 

 

 

 

 

 

#for문을 이용하여 'A' ~ 'Z'까지 출력해보기

 

 

 

 

 

 

 

#for문 무한루프

 

- for ( ; ; )

 

 

 

 

 

 

 

 

 

 

 

 

 

#중첩 for문

 

- for문안에 또 다른 for문이 있는 것

 

- 중첩for문을 이용하여 구구단 프로그램 만들어보기

 

 

 

 

 

 

 

 

 

 

 

#for문을 이용하여 별 삼각형 찍기

 

 

 

 

 

 

 

 

#역순으로 찍어보기

 

 

 

 

* 형변환

 

- 연산시에 데이터의 유형이 변환되는 것

 

 

#대입 연산시의 자동적인 형변환

 

 

 

 

#정수 연산시의 자동적인 형변환

 

- 정수 연산시 char형이나 short형의 경우 , 자동적으로 int형으로 변환하여 계산한다.

 

 

 

 

#명시적인 형변환

 

 

- 형변환(type cast) : 사용자가 데이터의 타입을 변경하는 것

  (자료형) 상수또는 변수

 

- (int) 1.23456

 

- (double) x // double형으로 변환

 

- (long) (x+y) // long형으로 변환 

 

 

 

 

 

#제어문

 

* 제어문이란 ?

 

- 프로그램의 실행흐름을 제어하는 문법이다.

 

- C언어에서는 문장을 좀 더 효과적으로 표현하기 위해서 두 가지 형태의 제어문을 제공한다

 

- 1. 조건문 2. 반복문

 

 

 

#조건문

 

- 예외 사항에 대처하기 위한 문법

 

- 특정 조건을 부여하고 해당 조건을 만족하면 지정한 문장을 수행하는 문법

 

- 조건은 수식으로 표현하며 수식의 진릿값이 참(1)이면 지정한 문장을 수행한다.

 

- if,switch문이 조건문에 해당한다.

 

 

#반복문

 

- 반복 행위를 효과적으로 표현하기 위한 문법

 

- 일정한 형태의 작업을 반복해서 수행해야 할 때 반복 조건을 부여하고 해당 조건이

  거짓이 될 때까지 지정한 문장을 계속 수행하는 문법

 

- for , while , do~while문이 반복문에 해당한다.

 

 

 

#if 조건문

 

- 조건이 참일 경우에만 실행한다.

 

 

    if(조건식)

       참인문장;

 

 

 

#일상 생활에서의 조건문의 예

 

- 만약 비가 오지 않으면 테니스를 친다.

 

 

- 만약 결석이 1/3 이상이면 F학점을 받는다.

 

- 만약 시간이 없는 경우에는 택시를 탄다.

 

- 만약 날씨가 좋고 공휴일이면 공원에 산책을 간다.

 

- 점수가 60점 이상이면 합격이고 그렇지 않으면 불합격이다.

 

 

 

 

#단일 문장을 수행하는 if문

 

 

 

 

 

 

#복합 문장을 수행하는 if문

 

- 중괄호를 사용하여 문장들을 그룹으로 묶는 것

 

- 블록(block)이라고도 한다.

 

- 단일문 대신 들어갈 수 있다.

 

 

 

 

 

 

 

#if문을 여러개 사용한 중첩 if문

 

 

 

 

 

 

 

 

 

#if ~ else ~ 조건문

 

if(조건식)

{

   참문장;

}

else

{

   거짓문장;

}

 

 

 

 

 

#if , else문을 이용한 짝수 홀수 출력 프로그램 만들어보기

 

 

 

 

 

 

 

 

#if ~ else문을 이용하여 자격증시험 합격 , 불합격 프로그램 만들어보기

 

 

 

 

 

 

 

 

#if ~ else if ~ else 문

 

if(조건식)

{

   참문장;

}

 

else if

{

   if문이 거짓이면 실행

}

else

{

   거짓문장;

}

 

 

 

 

 

 

 

 

 

#if문을 이용한 간단한 계산기 프로그램

 

 

 

 

 

 

 

 

 

 

#switch문

 

- 프로그래밍을 하다보면 정해진 상수와 조건 비교를 하는 경우가 많이 때문에 이런 경우 if ~ else if ~ else 조건문 보다

  switch 조건문이 더 효율적이다.

 

- 조건 수식을 포함한 모든 수식을 사용할 수 있으며 그 수식을 처리하여 얻은 결과 값을 각 case문에 잇는 상수 값과

  비교하여 명령문을 수행한다.

 

 

#switch문 만드는 형식

 

 switch (입력값) --> 정수,한 문자,연산의 결과값이 정수

   {

    case 나비:

       예쁘다. 날개 4개

   나비 탄생과정

case 블랙홀:

 

case 쓰레기:

   }

 

 

 

 

#switch문을 빠져나가는 break문

 

 

 

 

 

 

#switch문에서 주의할 점

 

- 변수는 사용할 수 없다.

 

- 변수가 들어간 수식은 사용할 수 없다.

 

- 실수는 사용할 수 없다.

 

- 문자열은 사용할 수 없다.

 

 

 

#switch문을 사용하여 두수의 차,합 출력 프로그램 만들어보기

 

 

 

 

 

 

#switch문을 이용하여 아침,점심,저녁 확인 프로그램 만들어보기

 

 

 

 

 

 

 

 

#switch문으로 1~5까지의 숫자에 속한지 아닌지 알아보기

 

 

 

 

 

 

 

#논리 연산자를 이용한 방법

 

 

 

 

 

'C언어 > C언어' 카테고리의 다른 글

C언어 [배열,함수]  (0) 2017.10.28
C언어 [반복문 while , do~while , for]  (0) 2017.10.24
C언어 [자료형,scanf]  (0) 2017.10.19
C언어 [변수와 상수,연산자]  (0) 2017.10.18
C언어 [특수,서식문자,아스키 코드]  (0) 2017.10.15

*데이터(정보)를 저장하는 공간,메모리 

 

- 컴퓨터는 주기억 장치로 램(Ram, Random Access Memory)을 사용하기 때문에 보통 메모리라고 하면 램을 의미한다.

 

- 메모리는 1바이트(byte)단위로 주소가 매겨져 있다.

 

- 주소가 1바이트 단위로 부여돼 있다고 해서 데이터가 꼭 1바이트 단위로 저장되어야 하는것은 아니다.

 

- 메모리의 최소 저장 단위는 비트(bit)이다.

 

- bit -> 컴퓨터가 표현하는 데이터의 최소단위

           0과1로 된 2진수

 

- 1bit -> 0,1

  2bit -> 00 01 10 11 4가지

 

- 1비트가 증가할 때마다 저장 단위가 2의 배수만큼 늘어난다.

 

- 비트가 8개 모이면 새로운 단위를 사용하는데 이것을 바이트(byte)라고 한다.

 

- 데이터를 저장할 때 메모리를 절약하기 위해서 데이터의 유효범위를 예상하고 적합한 크기를 결정하는것은

  메모리에 데이터를 저장하는데 필요한 가장 기본적인 작업이다. 

 

 

#자료형

 

* 자료형은 왜 필요할까 ?

 

- 자신이 사용할 데이터에 크기에 맞게 메모리(저장공간)를 할당해서 사용해야 한다. 그래서 메모리를 사용할 때

  몇 바이트의 메모를 사용할 것인지를 명시해야 하는데 이것을 데이터 타입(Data Type) 또는 자료형이라고 한다.

  (메모리를 사용하는 단위를 자료형이라고 한다.)

 

- C언어는 사용빈도가 높은 자료형을 예약어로 제공(Built-in Data Type)하고 , 나머지는 사용자가 만들어서 사용할 수 있는

  문법 (User-defind Data Type)을 제공한다.

 

 

#자료형의 종류

 

 

 

- 메모리공간 크기 확인 연산자(sizeof)

  메모리의 크기를 바이트(byte)단위로 계산해서 반환하는 연산자

 

sizeof(기본 자료형,내가 선언한 변수이름)

 

 

 

 

 

#int 변수 선언 및 초기화 (정수 4byte)

 

- 가장 기본이 되는 자료형

 

- C에서 가장빠르고 효율적으로 연산이 가능한 자료형이다.

 

- CPU에 따라서 크기는 달라진다. 

  16bit 2byte shrot

  32bit 4byte 

  64bit 8byte

 

- 완벽한 8byte크기를 보려면 컴파일 성능,os,하드웨어

 

 

 

#float & double 변수 선언 및 초기화 (실수 4byte,8byte)

 

- 실수 0.000000 까지 표현한다.

 

- 정수보다 실수로 표현할 수 있는 방법이 더 많다.

  int -> long int -> float -> double -> long double    

 

 

 

#char 변수 선언 및 초기화 [문자 1개]

 

- char는 ASCII CODE에 존재하는 문자

 

- 표현할 수 있는 데이터

  알파벳 , 정수 ,기호 등

 

 

 

#char[] 변수 선언 및 초기화 [공간갯수]

 

- 문자열을 입력하고 싶을 때는 char 1byte의 공간을 붙여서 사용

 

- 한글 = 2byte 영어 = 1byte를 차지한다.

 

- 문자열의 끝에는 문자가 끝났다는 null = \0이 자동적으로 붙는다.

 

Ex) "HELLO~" 문자열 메모리 공간 갯수

- 문자가 6개이므로 6바이트의 크기를 차지한다고 생각하겠지만 문자끝에 0이붙기 때문에 실제 메모리 구성은 다음과 같다. 

 

↓ 실제 메모리 구성

  

 

- 공간의 갯수를 구하고 +1하여 출력하거나 그보다 높은값으로 출력한다.

 

 

 

#scanf()

 

- 키보드로부터 입력을 받기 위한 라이브러리 함수

 

- 키보드로부터 값을 받아서 변수에 저장한다.

- 변수의 주소를 필요로 한다.

   scanf("%d",&x);  변수의 주소는 &x로 구할 수 있다. 

 

- 형식 지정자와 변수의 자료형은 일치해야 한다.

   scanf("%d %f",number, &grade); ← 형식 제어 문자열

 

 

 

#scanf 덧셈 프로그램

 

 

 

+ Recent posts