# C언어 예제, 과제 5 (정답)
① 함수의 개요
다음과 같이 기능A를 3번 수행하는 프로그램에 대해 생각해보자.
똑같은 일을 3번 반복하고 있는데, 이런 경우 기능A를 수행하는 일을 담당하는 별도의 단위를 만들고 이 단위가 수행되도록 명령하면 프로그램이 간결해지고 이해하기가 쉬워질 것이다.
이와 같이 하나의 단위로 만들어진 기능을 함수라 한다. 위 그림을 일반적인 용어로 나타내면 다음과 같은데, 만들어진 함수A를 ‘함수 정의’라 하고 함수A가 실행되도록 명령하는 문장인 ‘함수A 호출’을 ‘함수 호출’이라 한다.
①.①
함수를 호출하면 함수가 실행되고, 실행이 끝나면 호출한 부분으로 되돌아 와 호출 다음 부분을 실행한다.
그리고 이에 대한 C 프로그램과 실행 결과는 다음과 같다.
①.②
함수를 호출할 때 값을 전달할 수 있는데 이런 값을 ‘매개변수’라 한다.
name이라는 매개변수를 갖는 hello 함수를 정의하고 호출하는 순서도는 다음과 같은데, 호출할 때 “홍길동”이 hello 함수로 전달되어 name에 저장된다.
다음은 이 내용을 C 언어로 나타낸 것으로, char name[]은 문자열을 저장하는 배열 name을 선언한 것이고 %s는 문자열을 출력할 때 사용한다.
①.③
함수가 실행을 종료하면서 값을 반환할 수 있는데, 값을 반환하기 위해서는 return 오른쪽에 반환할 값을 위치시키면 된다.
다음은 전달 받은 두 개의 값에 대한 거듭제곱 값을 반환하는 power 함수 정의와 호출하는 순서도이다. power(3, 4) 호출하면 3과 4가 전달되어 a에 3이, b에 4가 저장되어 3의 4제곱인 81이 c에 저장되고 return에 의해 c 값인 81이 반환한다. 그러면 호출 문장인 power(3, 4)의 값이 81이 되어, 이 값이 a에 저장되어 결국 81이 출력된다.
다음은 이 내용을 C 언어로 나타낸 것이다.
예제
예제53
함수 이용해서 두 수 중 큰 수 찾기
두 수를 입력받고, 입력받은 두 수를 매개변수로 입력받아 큰 수를 찾아 반환하는 max 함수를 이용해서 두 수 중 큰 수를 찾는 소스코드를 완성하세요.
#include <stdio.h>
int max(int a, int b) // a, b 중 큰 수를 반환하는 max 함수를 정의한다.
{
if (a>b)
return a; // a 값을 반환한다.
else
return b; // b 값을 반환한다.
}
int main()
{
int a, b, r;
printf("정수(2개): ");
scanf("%d %d", &a, &b);
r = max(a, b); // max 함수를 호출하고, max 함수에서 반환된 값을 r에 저장한다.
printf("큰 수: %d", r);
return 0;
}
예제54
함수 이용해서 세 수 중 큰 수 찾기
세 수를 입력받고, 입력받은 세 수를 매개변수로 입력받아 가장 큰 수를 찾아 반환하는 max 함수를 이용해서 세 수 중 큰 수를 찾는 소스코드를 완성하세
#include <stdio.h>
int max(int a, int b, int c) // a, b, c 중 가장 큰 수를 반환하는 max 함수를 정의한다.
{
if (a>b) {
if (a>c)
return a;
else
return c;
}
else {
if (b>c)
return b;
else
return c;
}
}
int main()
{
int a, b, c, r;
printf("정수(3개): ");
scanf("%d %d %d", &a, &b, &c);
r = max(a, b, c); // max 함수를 호출하고, max 함수에서 반환된 값을 r에 저장한다.
printf("가장 큰 수: %d", r);
return 0;
}
예제55
함수 이용해서 1부터 10까지의 약수 구하기
임의의 수에 대한 약수 구하는 aliquot 함수를 이용해서 1부터 10까지의 수에 대한 약수를 구한다.
#include <stdio.h>
void aliquot(int a) // a의 약수를 구하는 aliquot 함수를 정의한다.
{
int i;
for (i = 1; i <= a; i++) {
if (a % i == 0)
printf("%d ", i);
}
}
int main()
{
int i;
for (i = 1; i < < >= 10; i++) {
printf("%d: ", i);
aliquot(i); // aliquot 함수를 호출한다. 이 때 i 값을 전달한다.
printf("\n");
}
return 0;
}
과제
과제47
두 수를 입력받고, 입력받은 두 수를 매개변수로 입력받아 큰 수를 찾아 반환하는 min 함수를 이용해서 두 수 중 작은 수를 찾는 소스코드를 완성하세요.
과제48
소수 판별하는 함수를 이용해서 2부터 10까지의 수에 대해 소수인지 아닌지를 출력하는 순서도와 C 프로그램을 작성하세요.
도전
도전4 (p.249)
필자가좋아하는 것 중 하냐가금요일 저녁 퇴근길에 DVD나 만화책을잔뜩 빌리고, 동네 슈퍼에 들려서 군것질거리를 사가지고 집에 들어가는 것이다. 오늘은 금요일이다. 현재 필자의 주머니에 는 5천원이 있다. DVD 한편을 빌리면 3,500원이 남는다. 슈퍼에 들려서 크림빵(500원), 새우깡(700원), 콜라(400원)를 사려한다. 잔돈을 하나도 남기지 않고 이 세가지 물건을 하나 이상 반 드시 구매하려면 어떻게 구매를 진행해야 하겠는가? 물론 여기에는 여러 가지 경우의 수가 있을 것이다. 필자가 어떠한 선택을 할 수 있는지 여러분이 제시해 주기 바란다.
@실행의 예
현재 당신이 소유하고 있는 금액 : 3500
크림빵 1개, 새우깡 2개, 콜 라 4개
크림빵2개, 새우깡3개, 콜라 1개
크림빵 4개, 새우깡 1개, 콜 라 2개
어떻게 구입하시겠습니까?
도전5 (p.249)
시용자로부터 초(second)를 입력 받은 후에, 이를 [시, 분, 초]의 형태로 출력하는 프로그램을작성해보자.
@실행의 예
초(second) 입력 : 3615
[h:1, m:0, s:15]
댓글
이 글 공유하기
다른 글
-
# C언어 예제, 과제 6 (정답)
# C언어 예제, 과제 6 (정답)
2023.07.06 -
# C언어 예제, 과제 4
# C언어 예제, 과제 4
2023.07.04 -
# C언어 예제, 과제 3 (정답)
# C언어 예제, 과제 3 (정답)
2023.06.29 -
# C언어 예제, 과제 2 (정답)
# C언어 예제, 과제 2 (정답)
2023.06.29