본문 바로가기

C 언어

(26)
고정 소수점과 부동 소수점 방식으로 소수 저장하기 정수와 같은 방법으로 실수를 한번 저장한다고 가정해보자. 자 그러면 일단은 첫 번째 비트는 부호를 저장하는데 이때 양수면 0으로 음수면 1로 저장을 하게 된다.그리고 실수라는 건 정수부와 소수부로 나누어지는 수를 말한다.  그럼 정수부는 정수부대로 저장을 하고 소수부는 소수부대로 저장을 하게 되면 정확하게 10.31이라는 값을 저장할 수 있다. 그런데 예를 들어 10.000031 이런 실수를 저장한다고 한번 해 보자.  그러면 10은 정수를 저장하는 데는 전혀 무리가 없다. 그런데 소수부를 저장한다고 생각을 했을 때 소수부는 31을 저장하려고 봤더니 .000031이랑은 다르다. 즉 소수부는 각 소수부 한자리 씩 따로따로 값을 저장을 해 줘야 된다는 결론이 나오게 된다.  그러면 소수부 한자리에 들어갈 수..
C 언어에서 문자열은 문자 배열로 취급된다. C 언어에서 문자열은 문자 배열로 취급된다. 문자열을 처리할 때 문자열 리터럴(예: "banana")은 기본적으로 문자열의 시작 주소를 가리키는 포인터로 사용된다. 포인터와 배열의 차이1. 포인터 사용:여기서 my_string은 "banana" 문자열의 시작 주소를 가리키는 포인터이다. 문자열 리터럴은 읽기 전용 메모리에 저장되며, my_string은 그 메모리 위치를 가리킨다. const char* my_string = "banana";  2. 배열 사용:여기서 my_string은 문자열 "banana"의 복사본을 배열로 가지고 있다. 이 경우 문자열은 읽기 전용 메모리에 저장된 것이 아니라, 배열 my_string에 복사된다. const char my_string[] = "banana";왜 포인터를 ..
2차원 배열 동적 할당하기 2차원 배열 동적 할당  1차원 배열이 여러개 있으면 2차원 배열이다.  4개짜리 1차원 배열이 3개가 있다고 해보자. 1차원 배열이 3개가 있으니까 2차원 배열이 된다. 이렇듯 1차원 배열을 여러개 할당하면 2차원 배열이 되는데 1차원 배열을 할당하려고 하면 포인터가 필요하다. 왜냐하면 동적 메모리의 주소를 포인터에 저장해야하기 때문이다. 1차원 배열이 3개가 있는거니까 포인터로 3개가 필요하다. 그런데 이렇게 포인터 변수를 각각 선언하는 순간 이름이 다 다르기 때문에 이 포인터들을 배열처럼 쓰는게 불가능해지게 된다. 그래서 2차원 배열을 동적할당하고 싶을 때 그 포인터는 모두 같은 이름을 사용해서 선언해주어야 한다. #include#include int main(void) { int* p[3]; in..
순열 알고리즘: C 프로그래밍에서의 구현 참고: https://swlock.blogspot.com/2016/03/permutation-algorithm.html#google_vignette 순열 (Permutation) 알고리즘 생성 방법 algorithm순열 : 서로 다른 n개 중 r 뽑아 나열하는 것(순서 있음) n개중 n개를 뽑아 나열하는것은 n!이 된다. {1,2,3} 와 같은 숫자들이 있다. 중복하지 않고 순서를 모두 끌어내는 방법을 생각해보자 1-2-3 1-3-2swlock.blogspot.com순열과 조합은 모두 집합의 원소들을 사용해 나열하거나 선택하는 방법을 설명하는 수학적 개념이지만 명확한 차이가 있다. https://minusi.tistory.com/entry/%EC%88%9C%EC%97%B4-%EC%95%8C%EA%B3%A..
2차원 배열 동적 할당 시 해제 2차원 배열을 메모리로 할당 받아보자. 더블포인터를 이용해서 한번 할당받고 다시 각각의 2차원배열 요소들을 할당 받아야 한다.아래예제를 보자. 처음보면 상당히 복잡하고 난해할 수 있다. 특히 이중포인터를 사용했기 때문에 쉽게 이해가 가지 않을 수 있다. 이해가 가지 않는다면 우선 해당 코드를 복사해서 사용하고 차차 이해해도 된다.출처: https://hijuworld.tistory.com/59int** createArray(int rows, int cols) { int** array = malloc(rows * sizeof(int*)); // 행 포인터 배열 할당 for (int i = 0; i 할당된 2차원 배열의 각 요소를 초기화할 필요가 있다.이는 각 요소를 특정 값으로 설정함으로써 이루..
공백 문자열과 빈 공간 문자열의 차이 C 언어에서 "공백 문자열"은 일반적으로 길이가 0인 문자열을 의미한다. 공백 문자열은 문자 '\0' 하나만을 포함하며, 이 문자는 문자열의 끝을 나타내는 널 종료 문자(null terminator)이다. 1. 표현 방식 공백 문자열은 "" 로 표현된다. char emptyString[] = ""; || const char* emptyStringPtr = ""; 2. 메모리 크기 공백 문자열은 메모리에 하나의 바이트를 차지하며, 이는 널 종료 문자('\0')임 3. 용도 공백 문자열은 종종 문자열을 초기화할 때 사용되거나, 함수의 리턴 값으로 문자열이 비어 있음을 나타낼 때 사용된다. 4. 공백 문자열과 관련된 함수 strlen : 문자열의 길이를 계산하는 함수. 공백 문자열의 길이는 0임 char em..
문자를 숫자로 변환하기 프로그래밍을 하다 보면 문자열 형태의 숫자를 실제 숫자로 변환하거나, 반대로 숫자를 문자 형태로 변환해야 할 때가 있다. C 언어에서 이러한 변환은 아주 간단하게, 그리고 직관적으로 이루어진다. 문자를 숫자로 변환하기 문자 '0'부터 '9'까지의 문자는 ASCII 코드에서 연속적인 값을 가지므로, 이들 각각의 문자에서 '0'의 ASCII 코드값(48)을 빼면 그 결과는 0부터 9까지의 정수가 된다. int num = 5; // 숫자 5 char ch = num + '0'; // 숫자 5에 '0'을 더하면 문자 '5'가 됨 숫자를 문자로 변환하기 반대로, 정수 0부터 9까지를 그에 해당하는 ASCII 문자로 변환하려면, '0'의 ASCII 코드값을 더하면 된다. int num = 5; // 숫자 5 cha..
토큰(token): 문자열이나 코드를 구성하는 작은 단위 토큰(token)은 프로그래밍에서 문자열이나 코드를 구성하는 더 작은 단위를 의미한다. 토큰은 일반적으로 데이터 처리 과정에서 문자열을 더 관리하기 쉽고 의미 있는 부분으로 나누기 위해 사용된다. 예를 들어, 텍스트 데이터를 처리할 때, 문자열을 공백이나 특정 구분자로 나누어 각각의 단어나 요소를 별도로 처리할 수 있는데 이렇게 나누어진 각각의 부분을 "토큰"이라고 부른다. C 언어에서 strtok 함수를 사용하여 문자열을 토큰으로 나누는 예시를 들어볼 수 있다. strtok 함수는 문자열에서 지정된 구분자를 기준으로 토큰을 추출한다. 예를 들어, 다음과 같은 문자열이 있을 때 char str[] = "Hello, world! Welcome to C programming."; 이 문자열을 공백(' ')을..