도메인(Domain) 분석
함수명 결정
함수 원형 결정
테스트 로직 작성
구현
이번에는 함수 원형을 결정해 보세요.
함수 원형은 함수 이름과 입력 매개 변수 리스트와 반환 형식을 말하죠.
앞에서 함수 이름은 결정했으니 입력 매개변수 리스트와 반환 형식을 결정하세요.
입력 매개변수 리스트를 결정할 때는 기능 수행에 영향을 미치는 인자를 판단해야죠.
이를 위해 구체적인 사용 예를 생각하시고 전달할 구체적인 값을 생각하세요.
특히 기능을 수행하기 위해서 호출하는 곳의 지역 변수의 값을 변경해야 한다면 포인터 형식으로 받아야겠죠.
그리고 입력 인자가 필요가 없거나 결과를 반환할 필요가 없는 함수도 있어요.
만얀 인자가 필요 없거나 결과를 반환할 필요가 없을 때는 void로 명시해요.
이제 여러분께서 각 함수의 원형을 결정하세요.
그리고 책의 내용을 살펴보세요.
a. 범위 내의 정수 합계를 구하는 함수
범위 내의 정수 합계를 구하기 위해서는 호출하는 곳에서 범위의 시작 값과 끝 값을 전달해야 되겠죠.
그리고 계산한 합계를 반환해 주어야겠네요.
int GetSumInBoundary(int start, int end);
b. 특정 수가 소수(Prime Number)인지 판단하는 함수
특정 수가 소수인지 판단하려면 호출하는 곳에서 확인하고자 하는 수를 전달해야겠죠.
그리고 소수인지 여부를 반환해 주어야겠죠.
여기에서는 소수일 때 1을 반환하고 소수가 아닐 때는 0을 반환하기로 할게요.
int IsPrime(int num);
c. 범위 내의 정수중에 소수(Prime Number)의 개수를 구하는 함수
범위 내의 정수중에서 소수의 개수를 구하려면 호출하는 곳에서 범위의 시작 값과 끝 값을 전달해야겠죠.
그리고 계산한 소수의 개수를 반환해 주어야겠죠.
int GetCountIsPrime(int start, int end);
d. n 개의 정수의 합계를 구하는 함수
n 개의 정수의 합계를 구하려면 호출하는 곳에서 계산해야 할 정수들과 정수의 개수를 전달해야겠네요.
그런데 계산해야 할 정수의 개수에 관계없이 계산하기 위해 계산할 정수들이 있는 시작 메모리 주소와 개수를 전달하기로 해요.
그리고 합계를 반환하면 되겠죠.
int GetSum(int *base, int n);
e. 두 수를 바꾸는 함수
두 수를 바꾸는 함수는 호출하는 함수에서 변수의 주소를 전달해야 피호출 함수에서 접근할 수 있겠죠.
그리고 함수 내부에서 무엇을 구하는 것이 아니므로 반환 형식은 필요없겠네요.
void Swap(int *a, int *b);
f. n 개의 정수에서 제일 큰 정수가 있는 메모리 주소를 구하는 함수
마찬가지로 n 개의 정수를 전달하기 위해 정수들이 있는 시작 메모리 주소와 개수를 전달하기로 해요.
그리고 함수 내에서 찾은 제일 큰 정수가 있는 원소의 메모리 주소를 반환해야겠죠.
int *GetMaxPos(int *base, int n);
g. n 개의 정수를 크기 순으로 정렬하는 함수(내림차순, 선택 정렬 알고리즘으로 정렬)
void SelectionSort(int *base, int n);
여기에서도 n 개의 정수를 전달하기 위해 정수들이 있는 시작 메모리 주소와 개수를 전달하기로 해요.
그리고 함수 내에서 무엇을 구하는 것이 아니므로 반환 형식은 필요없겠죠.
'언어 자료구조 알고리즘 > 디딤돌 C언어' 카테고리의 다른 글
[C언어] 69. 문자열 사용 기초 (0) | 2016.04.17 |
---|---|
[C언어] 68. 문자열 (0) | 2016.04.17 |
67. 정리하기 (0) | 2016.01.01 |
66. 구현 (0) | 2016.01.01 |
65. 테스트 코드 작성하기 (0) | 2016.01.01 |
63. 함수명 결정 (0) | 2016.01.01 |
62. 도메인 분석 (0) | 2016.01.01 |
61. 함수 만들기 실습 시나리오 (0) | 2016.01.01 |
60. 상수화 변수 (0) | 2016.01.01 |
59. 정적 변수 (0) | 2016.01.01 |