[정답] 67. 정리하기(함수)
52. 함수 개요
53. 프로그램 생명 주기
54. 프로세스 메모리 구조
55. 프로그램 동작 원리
56. 매개변수 전달 원리
57. 전역 변수
58. 지역변수
59. 정적 변수
60. 상수화 변수
61. 함수 만들기 실습 시나리오
62. 도메인 분석
63. 함수명 결정
64. 함수 원형 결정
65. 테스트 코드 작성하기
66. 구현
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]);//교환
}
}
}
}
'언어 자료구조 알고리즘 > 디딤돌 C언어' 카테고리의 다른 글
[정답] 디딤돌 C언어 73. 문자열 정리하기 (0) | 2016.05.01 |
---|---|
[정답] 디딤돌 C언어 52. 함수 개요 (0) | 2016.05.01 |
[정답] 디딤돌 C언어 50. 인덱스 연산자 (0) | 2016.05.01 |
[정답] 디딤돌 C언어 49. 간접 연산자 (0) | 2016.05.01 |
[정답] 디딤돌 C언어 47. 포인터 + 정수 (0) | 2016.05.01 |
[정답] 디딤돌 C언어 46. 배열 선언문 (0) | 2016.05.01 |
[정답] 디딤돌 C언어 44.정리하기(제어문) (0) | 2016.05.01 |
[정답] 디딤돌 C언어 43. 제어문 연습 - 별출력 (0) | 2016.04.30 |
[정답] 41. 반복문(while, do while, for) (0) | 2016.04.30 |
[정답] 디딤돌 C언어 40. 선택문(switch case) (0) | 2016.04.30 |