1. 피보나치 수열의 n 항을 구하는 함수를 구현하시오.
//피보나치 수열의 n 항을 구하는 함수를 구현하시오. #include <stdio.h> int Fibonacci(int n); int main(void) { int i; for (i = 1; i <= 10; i++) { printf("%d ", Fibonacci(i)); } printf("\n"); return 0; } int Fibonacci(int n) { if (n < 1) { return 0; } if ((n == 1) || (n == 2)) { return 1; } return Fibonacci(n - 1) + Fibonacci(n - 2); }
2. 특정 구간 내에 n의 배수의 개수를 구하는 함수를 구현하시오.
답:
//특정 구간 내에 n의 배수의 개수를 구하는 함수 #include <stdio.h> int CountMultiple(int n, int s, int e); int main(void) { printf("1~100사이에 6의 배수의 개수:%d\n", CountMultiple(6, 1, 100)); return 0; } int CountMultiple(int n, int s, int e) { int count = 0; for (; s <= e; s++) { if (s%n == 0) { count++; } } return count; }
3. 1에서 n 사이의 수 중에서 랜덤한 수를 m개 발급하는 함수를 구현하시오.
답:
//1에서 n 사이의 수 중에서 랜덤한 수를 m개 발급하는 함수 #include <stdio.h> #include <stdlib.h> #include <time.h> #define MAX_RANDS 1000 int MakeRandom(int s, int n, int *base, int m); int main(void) { int arr[6]; int i; srand((unsigned)time(0));//랜덤 Seed 값 설정 if (MakeRandom(1, 45, arr, sizeof(arr) / sizeof(arr[0])) == 0) { printf("생성 실패\n"); } else { int asize = sizeof(arr) / sizeof(arr[0]); for (i = 0; i < asize; i++) { printf("%d ", arr[i]); } printf("\n"); } return 0; } int MakeRandom(int s, int n, int *base, int m) { int check[32768] = { 0 };//발급 여부 int count = 0; int rval; int boundary; boundary = (n - s + 1);//s~n 사이의 수의 개수 if (m > MAX_RANDS)//m이 최대 발급할 수 있는 개수보다 크면 { return 0;//발급 실패 반환 } if (m > boundary)//m인 범위의 수의 개수보다 크면 { return 0;//발급 실패 반환 } for (count = 0; count < m;count++) { do { rval = rand() % boundary + s; } while (check[rval]); //이미 발급한 수이면 반복 check[rval] = 1; base[count] = rval; } return 1; }
4. 두 수의 최대 공약수를 구하는 함수를 구현하시오.
답:
//최대 공약수를 구하는 함수 작성 #include <stdio.h> int FindGCD(int a, int b); int main(void) { int a, b; int lcm; printf("두 개의 정수 입력:"); scanf_s("%d%d", &a, &b); lcm = FindGCD(a, b); if (lcm == -1) { printf("최대 공약수를 구할 수 없습니다.\n"); } else { printf("%d와 %d의 최대 공약수는 %d\n", a, b, lcm); } return 0; } int FindGCD(int a, int b) { int gcd; if (a > b)//a가 b보다 크면 { //두 수를 교환 int temp = a; a = b; b = temp; } for (gcd = a; ; gcd--) { if ((a%gcd==0)&&(b%gcd == 0)) { return gcd; } } return -1; }
5. 두 수의 최소 공배수를 구하는 함수를 구현하시오.
답:
//최소 공배수를 구하는 함수 작성 #include <stdio.h> int FindLCM(int a, int b); int main(void) { int a, b; int lcm; printf("두 개의 정수 입력:"); scanf_s("%d%d", &a, &b); lcm = FindLCM(a, b); if (lcm == -1) { printf("int 형식 표현 범위에서 최소 공배수를 구할 수 없습니다.\n"); } else { printf("%d와 %d의 최소 공배수는 %d\n", a, b, lcm); } return 0; } int FindLCM(int a, int b) { int lcm; if (a > b)//a가 b보다 크면 { //두 수를 교환 int temp = a; a = b; b = temp; } for (lcm = b; ; lcm += b) { if (lcm%a == 0) { return lcm; } } return -1; }
6. 두 수의 공약수의 개수를 구하는 함수를 구현하시오.
답:
//두 수의 공약수의 개수를 구하는 함수 #include <stdio.h> int CountCD(int a, int b); int main(void) { int a, b; printf("두 개의 정수 입력:"); scanf_s("%d%d", &a, &b); if (a > b)//a가 b보다 크면 { //두 수를 교환 int temp = a; a = b; b = temp; } printf("%d와 %d의 공약수 개수:%d\n", a, b, CountCD(a, b)); return 0; } int CountCD(int a, int b) { int n; int count=0; for (n = 1; n <= a ; n++) { if ((a%n == 0) && (b%n == 0))//n이 a와 b의 약수일 때 { count++; } } return count; }
7. 1부터 n 사이에 두 수의 공배수의 개수를 구하는 함수를 구현하시오.
답:
//1에서 n사이에 두 수의 공배수의 개수를 구하는 함수 #include <stdio.h> int CountCM(int a, int b,int n); int FindLCM(int a, int b); int main(void) { int a, b; printf("두 개의 정수 입력:"); scanf_s("%d%d", &a, &b); if (a > b)//a가 b보다 크면 { //두 수를 교환 int temp = a; a = b; b = temp; } printf("%d와 %d의 공배수 개수:%d\n", a, b, CountCM(a, b,1000)); return 0; } int CountCM(int a, int b,int n) { int i; int count = 0; int lcm; lcm = FindLCM(a, b); for (i = lcm; i < n; i += lcm) { count++; } return count; } int FindLCM(int a, int b) { int lcm; if (a > b)//a가 b보다 크면 { //두 수를 교환 int temp = a; a = b; b = temp; } for (lcm = b; ; lcm += b) { if (lcm%a == 0) { return lcm; } } return -1; }
8. 버블 정렬 알고리즘을 학습하여 n 개의 정수를 정렬하는 함수를 구현하시오.
답:
//버블 정렬 #include <stdio.h> #define SWAP(x,y) {int temp; temp=x; x=y; y=temp;} void bubbl_sort(int *base, int n); int main(void) { int arr[10] = { 34,23,66,89,22,12,90,26,37,68 }; int i; bubbl_sort(arr, 10); for (i = 0; i < 10; i++) { printf("%d ", arr[i]); } printf("\n"); return 0; } void bubbl_sort(int *base, int n) { int i, j; for (i = n; i > 1; i--)//정렬 범위를 좁히면서 { for (j = 1; j < i; j++)//1에서 정렬 범위 i까지 { if (base[j - 1]>base[j])//앞에 원소가 더 크면 { SWAP(base[j - 1], base[j]);//교환 } } } }