기본

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 36 [정렬 알고리즘(버블 정렬)]

제 36강) 정렬 알고리즘 - 버블 정렬 오늘은 정렬 알고리즘의 첫 시간으로 "버블 정렬"에 대해서 알아봅니다. 기본적으로 버블 정렬은 배열에서 사용합니다. 버블 정렬이란 (사진 출처: 위키 백과 - 거품 정렬) 버블 정렬은 구현하기가 가장 쉽지만 성능을 기대하기 어려운 정렬입니다. (실질적으로 안쓰는 정렬 중 하나) 버블 정렬은 해당 인덱스와 그 다음 인덱스와의 크기를 비교하여 바꾸는 정렬로 결과적으로 한 사이클이 지날때 마다 가장 큰 인덱스의 값은 맨 뒤로 옮겨집니다. 위의 그림에서 첫 번째 사이클에서 이미 가장 큰 수인 11이 맨 뒤로 옮겨집니다. 그렇기 때문에 두 번째 사이클에서는 11을 제외한 4개의 숫자를 가지고 다시 정렬을 합니다. 그렇기 때문에 버블 정렬의 비교 횟수는 T(n) = n(n ..

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 37 [정렬 알고리즘(선택 정렬)]

제 37강) 정렬 알고리즘 - 선택 정렬 오늘은 정렬 알고리즘의 두번째 시간으로 "선택 정렬"에 대해서 알아봅니다. 기본적으로 선택 정렬은 배열에서 사용합니다. 선택 정렬이란 (사진 출처 : 위키백과 - 선택 정렬) 선택 정렬 또한 버블 정렬과 마찬가지로 성능을 기대하기 어려운 정렬 중 하나입니다. 또한 구현하기도 어렵지 않은 정렬입니다. 매 사이클마다 배열에서 가장 큰 수를 찾습니다. 그렇게 찾은 큰 수를 맨 뒤에서 사이클의 반복횟수만큼 뺀 위치의 원소와 자리를 바꿉니다. (그 이유는 첫 사이클을 제외한 사이클에서는 맨 뒤에있는 수는 이미 정렬이 끝난 가장 큰 수이기 때문입니다.) 사실 위의 과정은 상당히 간략화 되었지만 자세히 들여다 보겠습니다. 선택 정렬은 각 사이클마다 위의 과정처럼 최대 수를 찾..

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 35 [라이브러리 함수3(날짜 및 시간, time.h)]

제 35강) 라이브러리 함수3 - 날짜 및 시간 오늘은 "강의에서 다루지 않았던"의 다섯번째 시간입니다. 이번 시간에는 라이브러리 함수3인 날짜 및 시간 라이브러리에 대해서 다뤄보려고 합니다. C언어에서 제공하는 "날짜 및 시간" 라이브러리는 time.h를 포함하면 사용이 가능합니다. 자료형 time.h​ 에는 다음과 같이 4개의 자료형을 선언하고 있습니다. 이름 자료형 원형 기능 clock_t Tick 수를 샐 수 있는 시계 전용 자료형(시스템 시간을 잴 때 사용) size_t unsigned int 부호 없는 정수 자료형으로 바이트 단위의 크기를 나타낼 때 사용 time_t 시간을 나타내기 위한 자료형 struct tm 시간을 받아서 저장하는 구조체 여기서struct tm을 좀더 자세히 봅시다. 멤버..

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 34 [라이브러리 함수2(문자, 수학)]

제 34강) 라이브러리 함수2 오늘은 "강의에서 다루지 않았던"의 네번째 시간입니다. 이번 시간에는 라이브러리 함수2에 대해서 다뤄보려고 합니다. 문자 함수(ctype.h) 문자 하나를 다루는 함수입니다. 여기서 정의되는 모든 함수는 참일 경우에는 0이 아닌 int 값을 반환하고, 거짓일 경우에는 0을 반환하는 성질을 가졌습니다. 먼저 isalnum과 isalpha를 보겠습니다. #include // 여기서 설명하는 모든 함수는 ctype.h에 정의되어 있습니다. int isalnum (int c); c가 영문자(대 + 소) 또는 숫자인지 판단 => if (isalnum(65)) // 이때 65는 대문자 A를 나타내기 때문에 참 int isalpha (int c); c가 영문자(대 + 소)인지 판단 =>..

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 33 [라이브러리 함수1(변환, 랜덤)]

제 33강) 라이브러리 함수1 오늘은 "강의에서 다루지 않았던"의 세번째 시간입니다. 이번 시간에는 라이브러리 함수에 대해서 다뤄보려고 합니다. 변환 함수(stdlib.h) 데이터를 원하는 자료형으로 변환하여 주는 함수입니다. 문자(char)를 숫자로 바꾼다던지, 반대로 숫자를 문자로 바꾼다던지 하는 변환을 수행합니다. 먼저 atoi, atof, atol, itoa(비표준함수) 입니다. #include // 아래의 모든 함수는 stdlib.h에 선언되어 있습니다. // 문자열 str을 int형 정수로 변환 // (올바른 정수로 변환을 못할 시에는 0을 반환) // (이때 문자열은 10진수로만 표현해야하며, 소수가 들어올 시 소수점 무시 및 e,E 무시) int atoi (const char* str); ..

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 32 [다루지 않았던2(Call by ~)]

제 32강) Call by ~ 오늘은 "강의에서 다루지 않았던"의 두번째 시간입니다. 이번 시간에는 어떻게 보면 민감(?)하고 잘못된 설명들이 난무(?)하기도 하는 것을 다뤄보려고 합니다. 바로 Call By ~ 에 대해서 알아봅시다. 1) Call by value 값을 직접 호출하는 방식을 "Call by value", 한국어로 "값에 의한 호출"이라고 합니다. /* Call by value */ #include void printNum(int _num) { printf("num: %d\n", _num); } int main(void) { int num = 15; printNum(num); // Call by value return 0; } 위와 같이 직접 값(주소값이 아닌!!)을 전달하여 호출하는 것..

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 31 [다루지 않았던1(포인터를 이용한 함수 통신)]

제 31강) 포인터를 이용한 함수 통신 오늘은 "강의에서 다루지 않았던"의 첫번째 시간입니다. 포인터를 이용하여 함수간의 통신을 하는 법에 대해서 알아봅시다. 번지 연산자& 포인터를 이용하여 함수간 통신(Communication)을 하기 위해서는 "번지 연산자"를 사용합니다. 이 통신을 함으로써 다른 함수에서 값을 입력받아올 수 있고 이미 있는 변수의 값을 서로 바꾸어줄 수도 있습니다. 대표적인 포인터를 이용한 함수 통신으로는 스왑(Swap)이 있습니다. #include void swap(int* _num1, int* _num2) { int tmp = *_num1; *_num1 = *_num2; *_num2 = tmp; printf("Swap!!\n"); } int main() { int num1 = 5..

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 30 [전역변수와 정적변수(static)]

제 30강) 전역변수와 정적변수(static) 오늘은 전역변수와 static변수에 대해 알려드리려합니다. 지역변수 전역변수를 보기 전에 일반적인 변수(지역변수)를 먼저 봅시다. #include void func1(int num1) { int num2 = 2; printf("%d, %d \n", num1, num2); } void func2(int num1) { int num2 = 3; int num3 = 5; printf("%d, %d, %d \n", num1, num2, num3); } int main(void) { int num = 5; func1(num); func2(num); int num2 = 7; printf("%d \n", num2); return 0; } 위의 예제를 한 번 뜯어봅시다. 이..

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 28 [전처리기(include, define, ifdef)]

제 28강) 전처리기(Pre-Processor) 오늘은 전처리기(Pre-Processor)에 관한 것을 배웁니다. 전처리기 전처리기는 컴파일이 시작되기 "전"에 작동되는 것으로, 지시자를 통하여 처리기를 작동시킵니다. (영어로는 PreCompiler, PreProcessor로 불립니다.) 전처리기 명령어(지시자)는 쉽게 육안으로 구분이 가능합니다. #include #define PI 3.141592 #ifdef __SET_ON__ ..... #endif #pragma once 이렇게 어떤 단어의 앞에 "#"이 붙으면 전처리기 명령어(지시자)가 됩니다. #include 아주 많이 써왔던 "#include" 입니다. #include 파일 예) #include #include #include "custom.h..

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 29 [소스파일의 분할(헤더파일)]

제 29강) 소스파일의 분할(헤더파일) 오늘은 소스파일을 분할하여 편집하기 편하게, 보기 편하게 만드는 법을 알려드리려합니다. (즉, 헤더파일이라는 것을 알게됩니다.) 헤더파일 소스파일을 분할시키기 전에 헤더파일에 대해서 먼저 알아봅시다. 헤더파일은 특히 C와 C++에서 컴파일러에 의해 다른 소스파일에 자동으로 포함된 소스코드의 파일을 뜻합니다. 즉, 무언가가 선언되어 있는 파일을 뜻하고 이것을 우리가 사용하기 위해 #include를 합니다. 헤더파일에는 주로 형을 알리는 것들이 들어가있습니다. 1. #define 2. enum (다음 강의에서 배웁니다.) 3. struct 선언부 4. class 선언부 (C++에 해당됩니다.) 5. 함수형 이런 것들이 선언되어 있습니다. 소스파일 분할하기 먼저 간단한 ..

Eskeptor
'기본' 태그의 글 목록