C언어에서, 어떠한 조건문을 만족하면, 특정한 문장을 수행하게 할 수 없을까요? if, else if, else 공식으로 하실 수 있어요. 먼저, 이런 경우 먼저 생각해 봅시다. 패턴 1은 다음과 같습니다. if(조건문) 명령1; 명령2; 이 경우 조건문이 참이라면 명령1, 명령2 순서대로 실행이 되고, 그렇지 않다면 명령 1만 수행되는 패턴입니다. if(x>=0)이 하나 있어요. x가 0보다 크다면 work() 함수가 수행이 될 거에요. 그렇지 않다면, 바로 7번째 줄로 갈 겁니다. 이것을 흐름도로 그려보면 아래와 같습니다. 만약에 x>=0이라면 work를 수행합니다. 그렇지 않다면, work를 수행하지 않고, 그냥 건너 뛴다는 것을 알 수 있어요. 만약에, 조건을 만족하지 않으면, 다른 문장이나 블록..
C언어 검색 결과
저번에 부동 소수점에 대한 이야기를 했었습니다. 그러면 C언어에서 double과 float의 차이는 무엇일까요? 정밀도 차이입니다. 그리고 오차 범위도 차이가 날 수 밖에 없는데요. 저는 이 두 가지를 중점적으로 보도록 하겠습니다. 일단, 부동 소수점 같은 경우, 소수부가 2^q꼴 실수인 것들만 표현할 수 있어요. 예를 들어 0.5, 1.625와 같은 것들이 그러한 예입니다. [관련글] 왜 0.1을 저장하면 오차가 생길까요? 이번에는 오차에 대해서 간략하게 짚고 넘어가 보도록 하겠습니다. 먼저 float형, 그러니까 단정밀도를 IEEE 754 형식으로 표현하면 아래와 같습니다. 이는 실수 z가 (1.xxx)와 2^(yyy-bias)의 곱으로 표현이 될 때, 저래 들어간다는 겁니다. 단정밀도는 이 bias..
알고리즘에, 정렬 시리즈를 계속 올리고 있습니다. C언어에서도, 손쉽게 빠른 정렬을 쓸 수 있는데요. 에 빠른 정렬을 하는 qsort 함수가 있습니다. 이것의 원형은 다음과 같습니다. void qsort(void *base, size_t num, size_t size, int (*compare)(const void *,const void *)); 뭔가 원형이 복잡해 보이는데요. 특히 4번째 인자가 조금 복잡해 보입니다. 이게 무엇인지 천천히 해석해 보겠습니다. 먼저 identifier를 찾을 건데요. compare입니다. 오른쪽부터 볼 건데요. (나 )를 만날 때 까지 읽어요. compare 뒤에 바로 )가 있으니까, 왼쪽을 봅니다. 보는데 *가 있네요. 즉, compare is pointer라는 겁니다..
C언어의 strcpy는 문자열을 복사하는 함수입니다. 버퍼 오버플로우, BOF에 주의해야 하는 함수 중 하나입니다. 사용법은 다음과 같습니다. char *strcpy(char *dest,const char *ori); ori는 복사할 문자열, dest는 붙여 넣을 곳을 의미합니다. 그러면, 위치 ori부터 시작해서 널 문자를 만날 때 까지, dest부터 차례대로 복사한다는 의미가 되겠습니다. 몇 가지 예제를 보면서 이해해 보도록 하겠습니다. 먼저, src에 "aba"라는 것이 저장되어 있습니다. dest에 "aba"를 복사하려면 어떻게 쓰면 좋을까요? 복사할 문자열의 시작 위치는 src입니다. 이것을 노란색으로 표시해 보겠습니다. 그리고 복사가 시작될 위치를 초록색으로 표시해 보겠습니다. dest입니다...
두 문자열을 비교하려고 합니다. 어떻게 하면 좋을까요? 이렇게 비교하면 어떨까요? 실제로는 not equal이 뜹니다. 왜 그럴까요? 실제로 p1과 p2는 다른 위치에 메모리상에 할당되어 있기 때문입니다. 정확히는 p1은 p1 배열이 시작하는 주솟값을, p2는 p2배열이 시작하는 주솟값을 가지고 있을 겁니다. 이 둘은 다르기 때문에, p1과 p2를 비교하면 다르다고 출력이 됩니다. 내용이 같음에도 불구하고요. 이것을 손쉽게 하는 방법이 없을까요? 안에는 strcmp 함수가 있습니다. 이 함수는 다음과 같습니다. int strcmp(const char *str1,const char *str2); str1이 str2보다 사전순으로 앞서면 음수를, 같으면 0을, 뒤이면 양수를 리턴합니다. 보통, 어떠한 문자열..
최근댓글