본문 바로가기

Programming Language

(11)
컴퓨터가 변수를 처리하는 방법 컴퓨터에서 프로그램이 실행되기 위해서는 프로그램이 메모리 공간에 적재되어야 합니다. 메모리에 적재된 이후에는 CPU가 한 줄 한 줄 읽어 내려가며 프로그램을 실행합니다. 또한 프로그램을 실행하기 위해서는 프로그램의 크기를 충당할 수 있을 만큼의 메모리 공간을 확보해야 합니다. 흔히 우리가 사용하는 컴퓨터의 메모리는 8gb 또는 16gb로 구성되어 있는데 특정한 프로그램을 실행하면 그 프로그램이 메모리에 적재가 되어 실행이 되는 것입니다. 기본적으로 컴퓨터의 운영체제는 메모리 공간을 아래 그림과 같이 네 가지로 구분하여 관리합니다. 네 가지로 구분되는 각각의 메모리 속 영역은 서로 다른 기능들을 가지고 있습니다. 코드 영역은 그 이름과 같이 한 줄씩 실행할 수 있는 소스코드입니다. 데이터 영역은 변수 중에..
문자열 1. 문자열의 개념 문자열은 문자들의 배열을 뜻합니다. 문자열이 문자들의 배열이라고 했으니 Hello World라는 문자열은 Hello와 World 사이의 띄어쓰기를 포함하여 11개의 공간을 가진 배열일까요? 그렇지 않습니다. 문자열은 컴퓨터 메모리 구조상에서 마지막에 Null값을 포함합니다. Null값은 컴퓨터 상에서 존재하지 않는다는 뜻을 가지고 있고, Hello World 다음에 들어간 null 값은 아무런 의미가 없습니다. 그림으로 Hello World 문자열을 표현한다면 다음과 같습니다. 참고로, null 값은 \0과 같은 형태로 표현되기도 합니다. 이러한 null값은 문자열의 끝을 알리기 위한 목적으로 항상 문자열의 마지막에 삽입됩니다. 따라서 printf() 함수를 실행할 때 컴퓨터는 nul..
문자 1. 아스키 코드 기본적으로 C 프로그램의 문자는 아스키 코드(Ascii Code)를 따릅니다. 아스키 코드는 1바이트로 구성되는 것으로 0부터 127까지 각각의 번호에 따라 서로 다른 문자를 가지고 있습니다. 0부터 9까지의 숫자는 48부터 57까지의 아스키코드에 해당이 됩니다. 즉, 아스키코드의 48번은 문자 0이 되는 것입니다. 마찬가지로 영문 A는 아스키코드의 65번에 해당하고 영문 소문자 a는 아스키코드의 97번에 해당합니다. 캐릭터형 자체에 아스키코드를 넣어서 아스키코드에 해당하는 문자를 출력하는 예제를 작성해보겠습니다. #include int main(void) { char a = 65; printf("%c\n", a); system("pause"); } 결과: A 계속하려면 아무 키나 누르..
포인터 1. 포인터의 개념 포인터를 제외한 변수를 생각했을 때, 변수는 그 자체로 자신의 자료형에 맞는 값을 저장합니다. 그 예로 int형 변수, double형 변수 등이 있습니다. 포인터 변수는 기존의 변수와는 다르게 메모리에 주소 값을 저장합니다. 또한 단순히 주소 값만 저장하는 것이 아니라 어떤 자료형의 주소 값인지도 함께 저장합니다. 수업시간에 교수님께서 사용하시는 레이저 포인터는 칠판의 어딘가를 가리킬 때 사용합니다. 마찬가지로 컴퓨터의 포인터도 메모리의 주소를 가리키고 해당 메모리에 직접 접근할 수 있게 도와줍니다. int a = 5; 다음과 같이 a라는 변수가 초기화 되었다고 가정해보겠습니다. 이와 같이 정의하는 방식은 위 코드 다음에 다른 코드를 작성했을 때 단순히 a를 사용해서 5라는 값을 찾을..
배열 1. 배열을 사용하는 이유 3개의 정수가 있을 때 가장 큰 정수를 구하는 프로그램을 작성한다고 가정해보겠습니다. 3개의 정수를 변수 3개에 각각 넣어 비교하는 구문을 작성할 것입니다. 그렇다면 정수가 100개가 있을 때는 또 다시 100개의 변수를 만들어야 할까요? 사실 100개 정도 만드는 것 쯤이야 크게 문제될 것은 없습니다만, 솔직히 굉장히 비효율적인 방식이라 부담이 되는 것은 사실입니다. 만약 100,000,000개의 정수가 있다면 사람이 하나하나 변수를 지정하는 것은 불가능한 일입니다. 이러한 경우들에는 동일한 자료형을 여러 개 담는 기술이 필요할 텐데요, 이때 도움이 되는 것이 바로 배열입니다. 다음과 같이 인덱스가 0부터 7까지 있는 배열이 있다고 가정해보겠습니다. 우리가 일반적으로 숫자를 ..
함수 1. 함수 처음 학교에서 함수를 배웠을 때를 떠올려 보면 아래와 같은 그림을 자주 접했을 것입니다. 위 그림과 같이 함수는 함수 내부에서 해당 함수만의 연산과정에 따라서 입력 받은 값을 처리한 뒤에 출력하는 구조를 가집니다. 또한 함수는 특정한 기능에 대한 소스코드가 반복이 되는 것을 줄여줍니다. 애초에 다양한 프로그래밍 기법들은 프로그래밍을 얼마나 효과적으로 할 수 있는지, 얼마나 생산성을 높게 만들 수 있는지에 초점을 맞추고 있습니다. 따라서 함수 또한 특정한 소스코드가 반복되는 것을 줄이기 위한 목적으로 가장 많이 사용이 됩니다. 1.1. 형태 함수의 형태는 아래와 같습니다. 우리가 자주 사용해 왔던 main함수 또한 아래와 같은 형태를 따르고 있습니다. 반환자료형 함수명(매개변수) { // 수행될..
반복문 1. for문 for문은 내부의 조건에 부합하면 계속해서 특정한 구문을 실행하는 특성을 가지고 있습니다. 반복문에서 탈출하려면, 반복문을 탈출하고자 하는 위치에 break구문을 삽입하면 됩니다. for문의 형식은 아래와 같습니다. for (초기식; 조건식; 증감식) { // 반복할 코드 } 초기식이 가장 먼저 실행됩니다. 그 뒤 조건식으로 가서 해당 조건을 만족하면 반복할 코드를 실행합니다. 조건을 만족하지 못한다면 for문을 종료시킵니다. 조건식을 만족해서 코드가 실행되었다면 이후 증감식을 실행시킨 뒤 다시 조건식을 판별합니다. 1부터 100까지의 정수를 출력하는 예제를 작성해보면서 상세히 다루어 보겠습니다. 1.1. 예제1: 0부터 100까지의 정수를 출력하기 #include int main(void..
조건문 1. if문 if문은 내부의 조건을 검사해서 프로그램의 진행 경로를 결정합니다. 또한 조건의 개수가 많지 않을 때 사용하는 것이 적합합니다. if문은 아래와 같은 형식으로 작성됩니다. if (조건1) { // 조건1에 부합할 때 } else if (조건2) { // 조건1에 부합하지 않지만 조건2에 부합할 때 } else { // 위 조건들에 모두 부합하지 않을 때 } 예제를 통해서 if문이 어떻게 돌아가는지 알아보겠습니다. 1.1. 예제 1 가게에 손님이 왔을 때 2명 이하는 2인석으로, 3명 또는 4명일 때는 4인석으로, 5명 이상은 대형석으로 안내해주는 프로그램을 만들어 보겠습니다. #define _CRT_SECURE_NO_WARNINGS #include int main(void) { printf(..