목록전체 글 (149)
Taking baby-developer steps
자료구조의 필요성 데이터를 효과적으로 저장하고, 처리하는 방법에 대해서 바르게 이해할 필요가 있다. 자료구조를 제대로 이해하지 못하면 불필요하게 메모리와 성능을 낭비할 여지가 있기 때문이다. 자료구조를 배우고 나면, 특정 상황에서 원하는 데이터를 가장 빠르게 찾도록 해주는 자료구조를 택해 프로그램을 설계할 수 있다. 기본적인 자료구조들 선형구조 배열 연결 리스트 스택 큐 비선형구조 트리(Tree) 그래프(Graph) 자료구조와 알고리즘 효율적인 자료구조 설계를 위해 알고리즘 지식이 필요하다. 효율적인 알고리즘을 작성하기 위해서는 문제 상황에 맞는 적절한 자료구조가 사용되어야 한다. 따라서 자료구조론과 알고리즘 이론은 모두 동일선상에 놓을 수 있다. 프로그램의 성능 측정 방법론 시간 복잡도(Time Com..
전처리기 전처리기는 프로그램을 이식성 높게 생산성 높게 안정적으로 개발하기 위해서 많이 사용한다. 전처리기 구문은 다른 프로그램 영역과 독립적으로 처리된다. 전처리기 구문은 소스코드 파일 단위로 효력이 존재한다. 소스코드를 빌드해서 실행파일이 만들어질 때 까지의 과정에서, 소스코드를 전처리기가 향상된 소스코드로 만드는데, 이 전처리 과정에서 사용되는 특별한 문법들에 대해서 학습한다. 파일 포함 전처리기 #include는 전처리기에서 가장 많이 사용되는 문법이다. 특정한 파일을 라이브러리로서 포함시키기 위해 사용한다. #include 구문으로 가져 올 수 있는 파일에는 제약이 없다. #include "파일 이름" #include #include 이 구문 자체가 가져오는 파일의 소스코드로 완전히 대체된다는 ..
파일 입출력 소프트웨어에서 파일 입출력이 필요한 이유에 대해 이해하고, C언어를 이용해 파일 입출력 하는 방법을 학습한다. 파일 입출력의 필요성 프로그램이 꺼진 이후에도 데이터를 저장하기 위해서는 파일 입출력이 필요하다.ex> 게임을 껐다 킬 때마다 다시 처음부터 캐릭터를 키워야 한다면 고객이 이용하지 않을 것. 파일이 실질적으로 저장되는 위치 파일이 실질적으로 저장되는 위치는 SSD와 같은 보조기억장치라고 할 수 있다. Ram이나 CPU는 일반적으로, 특정한 데이터를 영구적으로 가지고 있지는 않는다.(이를 휘발성 있게 저장 된다고 말한다.) 보조 기억장치에 저장된 파일을 실행하면, 해당 프로그램이 프로세스로 변환되며 Ram에 들어가서 구동된다. 그 후 CPU가 Ram에서 구동된 코드를 하나하나 읽어서 ..
구조체 구조체를 활용해 자료형을 만드는 방법을 공부하고, 구조체를 활용한 다양한 예제를 다룬다. 여러개의 변수를 묶어 하나의 객체를 표현하고자 할 때 구조체를 사용할 수 있다. 캐릭터, 몬스터, 학생, 좌표 등 다양한 객체를 모두 프로그래밍 언어를 이용해 표현할 수 있다. 구조체의 정의와 선언 struct 구조체명 { 자료형1 변수명1; 자료형2 변수명2; ... }; 위와 같은 방법으로 구조체를 정의 및 선언한다. 프로그램에서 요구하는 특성에 맞게 하나의 객체를 정의 할수 있다. ex) 한 명의 학생에 대한 정보를 담고 있는 구조체 struct Student{ char studentId[10]; //학번, 최대 9자리까지인 문자열 char name[10]; //이름, 최대 9자리인 문자열 int gra..
함수 포인터 C언어에서는 함수의 이름을 이용해 특정한 함수를 호출한다. 함수의 이름은 메모리 주소를 반환한다. 이는 배열의 이름이 메모리 주소 값을 반환(첫 번째 원소의 주소값과 같음)하는 것과 같은 맥락이다. ex)함수의 이름이 메모리 주소를 반환하는 것을 확인 #include void function(){ printf("Thsi is my function"); } int main(void){ printf("%d\n", function); function(); system('pause'); return 0; } 1136043621 Thsi is my function 함수 포인터는 특정한 함수의 반환 자료형을 지정하는 방식으로 선언 할 수 있다. 함수 포인터를 이용하면 형태가 같은 서로 다른 기능의 함수..
문제 : 단어를 1개 입력받는다. 입력받은 단어(영어)의 각 문자를 한줄에 한 문자씩 분리해 출력한다. 입력 단어(영어) 하나를 입력받는다. (단, 단어의 길이는 20자 이하이다.) 출력 단어의 문자(영어)를 하나씩 나누어 한 줄에 한 개씩 ' '로 묶어서 출력한다. #include #include int main(void){ char aWord[21]; scanf("%s", aWord); for(int i =0; i
동적 메모리 할당을 이용해 2차원 배열을 만들면, 정확히 필요한 만큼만 그때 그때 효율적으로 만들어서 사용가능하다. #include #include int main(void){ int** p = (int**)malloc(sizeof(int)*3); for (int i=0; i
동적 메모리 할당 동적 메모리 할당의 원리를 학습하고, 동적 메모리 할당을 이용해 프로그램 실행 도중에 메모리가 할당 되도록 한다. 동적메모리 할당의 개념 일반적으로 C언어에서 배열의 경우, 사전에 적절한 크기만큼 할당해야 한다. 원하는 만큼만 메모리를 할당해서 사용하고자 하면, 동적 메모리 할당을 사용해야 한다. '동적'이라는 말의 의미는 '프로그램 실행 도중에'라는 의미이다. 동적 메모리 할당 함수 C언어에서는 malloc()함수를 이용해, 원하는 만큼의 메모리 공간을 확보할 수 있다. malloc()함수는 메모리 할당에 성공하면 주소를 반환하고, 그렇지 않으면 NULL을 반환한다. malloc()함수는 라이브러리에 정의되어 있다. malloc(할당할 바이트 크기); malloc()함수가 램(메인 메..
다차원 배열과 포인터 배열 다양한 차원의 배열을 표현하는 방법을 이해한다. 포인터를 이용해 2차원 배열을 다루는 방법을 학습한다. 2차원 배열 필요성 2차원 배열은 굉장히 많은 목적으로 사용된다. 행렬 데이터를 표현 할 때, 그래프 알고리즘을 처리할 때, 다수의 실생활 데이터를 처리 할 때 등인데, 흔히 우리가 보는 표 구조가 2차원 배열과 흡사하다. 즉, 각각의 사용자에 대한 이름 정보가 있고, 어떠한 수치 데이터가 2차원 형태로 존재할 때, 2차원 배열로 모델링 하기 수월하다. 초기화 2차원 배열은 1차원 배열이 중첩되었다는 의매로, [](대괄호)를 두번 연속하여 쓴다. 자료형 배열이름[행][열] = {{값, 값, 값, ...}, {값, 값, 값, ...}, ...} 예를 들어, 10X10 의 행렬 ..
컴퓨터가 변수를 처리하는 방법 C언어에서 다양한 변수를 처리하는 방법을 학습한다. 지역변수, 전역변수, 레지스터 변수등을 학습하며, 특정한 함수에 값을 전달하거나 주소를 전달하는 방법을 이해한다. 프로그램 메모리 주소 컴퓨터에서 프로그램이 실행되기 위해서는 프로그램이 메모리에 적재(Load)되야 한다. 당연히 프로그램의 크기를 충당할 수 있을 만큼의 메모리 공간이 있어야 한다. 일반적인 컴퓨터의 운영체제는 메모리 공간을 네 가지로 구분하여 관리하며, 각각의 영역들은 서로 다른 기능들을 가진다. 코드 영역 데이터 영역 힙 영역 스택 영역 소스코드 전역 변수 정적 변수 동적 할당 변수 지역 변수 매개 변수 먼저 코드 영역에는 한줄 한줄 씩 실행 시킬 수 있는 소스코드가 적재 된다. 데이터 영역엔 전역 변수와..