C언어의 화룡점정. 포인터! 아무튼 C언어에 대해 한번이라도 공부를 해보았다면 다들 포인터가 어렵다고 말한다. (필자 또한 마찬가지) 그래도 전공 수업들을 진행해나가다보면 포인터에 대해 어렴풋이 알 수 있었다. 이번에는 아예 확실히 포스팅해서 잡아보도록 하겠다! 포인터란 무엇일까? 포인터(Pointer)는 말 그대로 어떤 것을 가리키는 것을 의미한다. 즉, 포인터는 "주소"를 가리킨다. 이름만 포인터라고 말할 뿐이지 포인터도 int, char와 같이 다를 바 없는 변수이다. 그래서 포인터 변수라고 부른다. 포인터는 주소를 가리키기에 주소 값을 저장한다. 아래 예시 코드를 한번 보자. #include int main(){ int *p = NULL; int num = 15; p = # printf("..
문자 처리 함수 문자의 종류에 대한 검사를 하거나 문자의 대소문자 변환을 하는 라이브러리 함수가 아래 표와 같이 제공되고 있다. 이 함수들을 사용하려면 헤더파일 를 포함해야 한다. 1 #include cs 함수 기능 int isalpha(int c) c가 알파벳 문자이면 참 int isalnum(int c) c가 숫자나 알파벳 문자이면 참 int isascii(int c) c가 ASCII 코드이면 참 int iscntrl(int c) c가 제어 문자이면 참 int isdigit(int c) c가 숫자이면 참 int isgraph(int c) c가 출력 가능한 문자이면 참 ( ' ' 제외) int islower(int c) c가 소문자이면 참 int isprint(int c) c가 출력 가능한 문자이면 참..
ASCII To ~ 함수들 scanf() 함수로 정수 또는 실수를 입력받을 때 사용자는 "12", "3.14"와 같은 문자열을 입력하는 것이다. 이러한 문자열들은 scanf()함수에서 12, 3.14와 같은 숫자로 변형되어 저장된다. 프로그램에서 다음 함수들을 사용하여 문자열을 숫자로 변환할 수 있다. 1 2 3 a = atoi(s); //정수 문자열 s를 정수(int 형)로 변환한다. b = atol(s); //정수 문자열 s를 정수(long 형)로 변환한다. c = atof(s); //정수 문자열 s를 실수(float 형)로 변환한다. cs 이 함수들을 사용하려면 다음과 같이 헤더파일 를 삽입해야 한다. 1 #include cs 아래는 문자열을 숫자로 변환하는 프로그램이다. 1 2 3 4 5 6 7 ..
단어 quit이 입력될 때 까지의 단어들을 입력받아서 각 단어들을 역순으로 출력하는 프로그램이다. 단어 quit이 입력되었는지 확인하기 위해서 strcmp()함수를 사용하였다. 함수 reverse()는 인수로 전달된 문자열의 순서를 반대로 재배치한다. 문자열의 마지막 첨자는 배열의 마지막 첨자가 아니라 문자열의 마지막 문자의 첨자이다. 문자열의 마지막 첨자 위치는 문자열 길이에서 1을 빼서 얻을 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 #include #include void reverse(char s[]); int main() { char buf[80]; printf("단어들을 ..
strlen과 strcpy는 헤더파일 에 포함되어 있지만 이번에는 한번 직접 만들어 보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 int strlen(char s[]) { int i = 0; while (s[i] != '\0') i++; return i; } void strcpy(char s1[], char s2[]) { int i; for (i = 0; s2[i] != '\0'; i++) s1[i] = s2[i]; s1[i] = '\0'; } Colored by Color Scripter cs 함수 strlen()은 인수로 전달된 문자 배열에 저장된 문자열의 길이를 구하여 반환한다. 문자열의 길이에 널 문자는 포함되지 않으며 문자열의 길이는 널 문자가 저장된 배열 원소의 ..
스택 (Stack) 자료를 저장하는 구조중에는 스택(stack)이라고 하는 것이 있다. 스택은 입구가 하나인 통과 같은 구조로, 가장 나중에 삽입되어 저장된 자료가 가장 먼저 삭제되어 나온다. 스택에 자료를 삽입하는 동작을 push라고 하며, 스택에서 자료를 삭제하여 얻는 것을 pop 동작이라고한다. 스택은 배열을 사용하여 구현할 수 있다. 배열의 크기는 저장할 수 있는 자료의 최대 개수로 선언을 한다. 스택의 top은 가장 최근에 저장된자료의 배열 첨자를 나타낸다. 처음에는 저장된 원소가 없으므로 top은 -1로 초기화한다. push 동작은 top을 증가시킨다음, top 위치의 배열 원소에 자료를 저장한다. pop 동작은 top 위치의 자료를 반환한 다음, top을 감소시킨다. 아래는 문자를 저장하는 ..
버블 정렬이란? 버블 정렬(bubble sort)은 인접한 원소와 비교하여 순서가 바뀌었으면 서로 교환하여 정렬하는 방법이다. 첫 번째 원소부터 비교를 시작하면 가장 큰 값이 마지막에 위치하게 되고, 그 다음에 나머지 n-1개의 원소에 대해서 이 과정을 실시하면 두번째로 큰 원소가 n-1번째에 위치하게 된다. 기존의 버블 정렬 코드는 아래와 같다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 void bubble_sort(int data[], int n) { int temp; int max; for (int i = n-1; i >= 1; i--) { for (int j = 0; j data[j + 1]) { temp = data[j]; data[j] = data[j + 1]; data[j ..
Binary Search 이진탐색이란? 데이터가 정렬되어 있는 배열에서 특정한 값을 찾아내는 알고리즘. 배열의 중간에 있는 임의의 값을 선택하여 찾고자 하는 값 x와 비교한다. x가 중간값보다 작으면 중간 값을 기준으로 좌측의 데이터들을, x가 중간값보다 크면 배열의 우측을 대상으로 다시 탐색한다. 순차 탐색 : 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 하나씩 확인 이진 탐색 : 정렬되어있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색 예시 이미 정렬되어있는 10개의 데이터 중에서 4인 원소를 찾는다고 해보자. 이진 탐색의 시간 복잡도 단계마다 탐색 범위를 2로 나누는 것과 동일하므로 연산 횟수는 O(log2N)�(log2�) 탐색 범위를 절반씩 줄여나가므로 시간 복잡도는 O(\..
이번에는 콘솔창의 크기를 조절하고 출력되는 폰트와 배경의 색상을 조절하는 법을 소개하겠습니다. 시작하기에 앞서, 소스 파일에 다음과 같은 헤더를 입력해주세요. 1 2 #include cs 여기에서 헤더파일 window.h에 삽입되어있는 SetConsoleTextAttrbute 함수를 사용할 것입니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include #include void textcolor(int foreground, int background); int main(){ for (int i=0; i