기타/C언어: 34개의 글
[C] memcpy()를 사용한 swap swap 함수를 작성할 때는, 포인터로 인자를 넘겨야 한다. 값을 인자로 넘길 경우 원본을 복사한 사본이 넘어오므로, 원본에는 값이 변경되지 않기 때문이다. 보통 swap 함수는 아래와 같이 작성된다. void swap(int *a, int *b){ int t; t = *a; *a = *b; *b = t; } 위와 같은 방법으로 int 형의 데이터 a 와 b의 데이터를 swap 할 수 있다. 하지만 int 형 외에 다른 타입의 swap을 하기 위해 타입별로 swap 함수를 만드는 것은 비효율적이다.이러한 경우에 인자를 void* 형으로 받고, 넘어오는 인자의 size 를 같이 넘겨준 후 memcpy()를 사용하여 swap을 하면 여러형의 변수에 사용할 수 있다. ..
[C] 소수 출력하기 (에라토스테네스의 체) '주어진 N보다 작은 소수를 모두 구하여라' 이것은 2부터 주어진 N까지의 숫자를 탐색하면서, 소수가 아닌 숫자와 그 배수들을 지워나가고 최종적으로 남은 숫자만 출력하는 방법이다. 소수가 아닌 숫자들을 체크하여 지워나가기 위하여 배열을 사용한다. 1. 정수 N을 입력받는다 (N까지의 소수를 구한다)2. 정수 N만큼의 배열 array[N]을 확보한다.3. array[N]을 초기화시킨다. (모든 요소를 0으로)4. for(i=2; i
[C] 소수 인지 확인하기 소수의 정의 1과 자기자신 외에는 나누어 떨어지는 정수가 없는 양의 정수 입력받은 N을 2부터 N-1까지의 정수로 나누어서 나누어 떨어지는 수가 있으면 소수가 아니고, 나누어 떨어지는 수가 없으면 N은 소수가 된다. 1. 정수 N을 입력받는다.2. 정수 i에 2를 대입한다.2.1 N이 i로 나누어 떨어지는가?2.1.1 나누어 떨어지면 소수가 아니다 끝.2.2 i를 하나 증가시킨다.2.3 i가 N보다 작은가?2.3.1 작으면 2.1로 돌아간다.3. 정수 N은 소수이다. 끝. #define TRUE 1 int is_prime(int n){ int i; for (i = 2; i
[C] 최대공약수 구하기 (유클리드 알고리즘) 최대공약수(GCD : Greatest Common divisor)는 주어진 두 정수의 약수 중에서 가장 큰 공통되는 약수이다. 유클리드의 알고리즘은 최대공약수의 성질을 이용하여 뺄셈과 두 값의 교환이라는 기본적인 동작으로만 최대공약수를 구할 수 있다. 유클리드의 알고리즘으로 최대공약수를 구하는 방법은 다음과 같다. 1. 임의의 두 정수 u와 v를 입력 받는다.2. v가 u보다 크다면 v와 u의 값을 교환한다.3. u 에다 u-v의 값을 저장한다.4. u가 0인가? 0이 아니면 2로 돌아간다. 0이면 v가 최대공약수이다. // 뺄셈을 이용하는 방법 int gcd_minus(int u, int v){ int t; while (u){ if (u