9장 보충 1 - 사용자 정의함수
사용자 정의 함수는 반환 값과 매개변수의 유무에 따라 4가지 유형으로 분류될 수 있다.
- 반환값 : 없음 / 매개변수 : 없음 예) void buy(void)
- 반환값 : 없음 / 매개변수 : 있음 예) void buy(int a)
- 반환값 : 있음 / 매개변수 : 없음 예) int buy(void)
- 반환값 : 있음 / 매개변수 : 있음 예) int buy(int)
9.1. 반환값이 없고 매개변수가 없는 경우
이 유형의 함수는 매개변수를 받지 않고, 어떤 값도 반환하지 않는다. 이러한 함수는 일반적으로 특정 작업을 수행하지만 그 결과를 직접 반환하지 않는다. 예를 들면, 출력을 담당하는 함수나 특정 상태를 변경하는 함수가 있다.
#include <stdio.h>
void school(void) {
printf("K대학교\n");
}
int main() {
printf("A 학생이 다니는 학교는?\n");
school();
printf("B 학생이 다니는 학교는?\n");
school();
printf("C 학생이 다니는 학교는?\n");
school();
printf("D 학생이 다니는 학교는?\n");
school();
return 0;
}A 학생이 다니는 학교는? K대학교 B 학생이 다니는 학교는? K대학교 C 학생이 다니는 학교는? K대학교 D 학생이 다니는 학교는? K대학교
#include <stdio.h>
void print_line(void);
void main() {
print_line();
printf("학번 이름 전공 학점\n");
print_line();
}
void print_line(void) {
int i;
for (i = 0; i < 50; i++) {
printf("-");
}
printf("\n");
}-------------------------------------------------- 학번 이름 전공 학점 --------------------------------------------------
9.2. 반환값이 없고 매개변수가 있는 경우
이 유형의 함수는 하나 이상의 매개변수를 받지만 반환값은 없다. 이러한 함수는 전달된 매개변수를 사용하여 작업을 수행하지만 결과를 반환하지는 않는다.
#include <stdio.h>
void buy(int x) {
printf("%d만원짜리 차를 구입했습니다. \n", x);
}
int main(void) {
buy(20);
buy(40);
return 0;
}20만원짜리 차를 구입했습니다. 40만원짜리 차를 구입했습니다.
#include <stdio.h>
void buy(float x) {
printf("%f만원짜리 차를 구입했습니다. \n", x);
}
void main() {
buy(20.2);
buy(40.5);
}20.200001만원짜리 차를 구입했습니다. 40.500000만원짜리 차를 구입했습니다.
[참고] 실행 결과로 20.200001만원으로 나온 이유는?
컴퓨터에서는 모든 수를 이진수(2진수)로 표현하게 된다. 이 과정에서 일부 실수는 정확하게 이진수로 표현할 수 없는 문제가 발생한다. 10진법에서는 간단히 표현되는 수도 2진법에서는 무한히 반복되는 소수가 될 수 있다.
예를 들어, 10진법에서 0.1을 이진수로 표현하려고 하면 0.0001100110011001100110011...와 같이 무한히 반복되게 된다. 이런 수를 컴퓨터가 유한한 비트로 표현하려고 할 때는 반올림이나 잘림 등의 방법을 사용하여 근사치를 저장하게 된다.
따라서, 20.2가 float 형식으로 표현되었을 때 발생하는 오차 때문에 20.200001이라는 결과가 출력되었을 가능성이 높다. 이러한 문제를 해결하기 위해 많은 프로그래밍 언어에서는 고정 소수점 수를 사용하는 라이브러리를 제공하고 있다. C 언어에서는 math.h 라이브러리 등이 이에 해당한다.
이는 컴퓨터의 부동소수점 표현에 대한 근본적인 문제로, 컴퓨터에서 실수를 다룰 때는 이런 문제를 항상 염두에 두어야 한다.
#include <stdio.h>
void draw_rect(int side) {
int x, y;
for (y = 0; y < side; y++) {
for (x = 0; x < side; x++)
printf("*");
printf("\n");
}
}
int main(void) {
draw_rect(5);
return 0;
}***** ***** ***** ***** *****
#include <stdio.h>
void print_char(char ch, int cnt);
int main(void) {
print_char('0', 5);
return 0;
}
void print_char(char ch, int cnt) {
int i;
for (i = 0; i < cnt; i++) {
printf("%c", ch);
}
}00000
#include <stdio.h>
void buy(int x) {
printf("%d만원 짜리 차를 구입했습니다. \n", x);
}
int main(void) {
int num;
printf("1번째는 얼마짜리 차를 구입했습니까? : ");
scanf("%d", &num);
buy(num);
printf("2번째는 얼마짜리 차를 구입했습니까? : ");
scanf("%d", &num);
buy(num);
return 0;
}1번째는 얼마짜리 차를 구입했습니까? : 50 50만원 짜리 차를 구입했습니다. 2번째는 얼마짜리 차를 구입했습니까? : 70 70만원 짜리 차를 구입했습니다.
#include <stdio.h>
void draw_rect(int side) {
int x, y;
for (y = 0; y < side; y++) {
for (x = 0; x < side; x++)
printf("*");
printf("\n");
}
}
int main(void) {
int num;
printf("숫자를 입력하시오: ");
scanf("%d", &num);
draw_rect(num);
return 0;
}숫자를 입력하시오: 4 **** **** **** ****
#include <stdio.h>
void buy(int x, int y) {
printf("%d만원 짜리 차와 %d만원 짜리 차를 구입했습니다. \n", x, y);
}
int main(void) {
int num1, num2;
printf("얼마짜리 차를 구입했습니까? : ");
scanf("%d", &num1);
printf("얼마짜리 차를 구입했습니까? : ");
scanf("%d", &num2);
buy(num1, num2);
return 0;
}얼마짜리 차를 구입했습니까? : 200 얼마짜리 차를 구입했습니까? : 300 200만원 짜리 차와 300만원 짜리 차를 구입했습니다.
9.3. 반환값이 있고 매개변수가 없는 경우
이 유형의 함수는 매개변수를 받지 않지만, 어떤 값이나 결과를 반환한다. 이러한 함수는 특정 상태를 확인하거나 값을 생성하는데 사용될 수 있다.
#include <stdio.h>
int get_pos(void) {
int pos;
printf("숫자 입력 :");
scanf("%d", &pos);
return pos;
}
int main(void) {
int res;
res = get_pos();
printf("입력값: %d\n", res);
return 0;
}숫자 입력 : 10 입력값: 10
#include <stdio.h>
int get_integer(void) {
int n;
printf("숫자 입력: ");
scanf("%d", &n);
return n;
}
int main(void) {
int a, b;
a = get_integer();
b = get_integer();
printf("첫 번째 입력: %d, 두 번째 입력: %d\n", a, b);
return 0;
}숫자 입력: 10 숫자 입력: 20 첫 번째 입력: 10, 두 번째 입력: 20
9.4. 반환값이 있고 매개변수가 있는 경우
이 유형의 함수는 하나 이상의 매개변수를 받고, 그에 따른 결과나 값을 반환한다. 대부분의 함수는 이 유형에 속하며, 가장 일반적인 형태이다.
#include <stdio.h>
int square(int n) {
return (n * n);
}
int main(void) {
int result;
result = square(5);
printf("%d\n", result);
return 0;
}25
#include <stdio.h>
int get_max(int x, int y) {
if (x > y)
return x;
else
return y;
}
int main(void) {
int max;
max = get_max(5, 10);
printf("큰 수는: %d\n", max);
return 0;
}큰 수는: 10
#include <stdio.h>
int power(int x, int y) {
int i;
long result = 1;
for (i = 0; i < y; i++)
result *= x;
return result;
}
int main(void) {
int ans;
ans = power(2, 4);
printf("%d\n", ans);
}16
#include <stdio.h>
int add(int x, int y);
int main(void) {
int a = 10, b = 20;
int res;
res = add(a, b);
printf("result: %d\n", res);
return 0;
}
int add(int x, int y) {
int temp;
temp = x + y;
return temp;
}result: 30
#include <stdio.h>
int buy(int x, int y) {
int z;
printf("%d만원과 %d만원 짜리 차를 구입했습니다.\n", x, y);
z = x + y;
return z;
}
int main(void) {
int num1, num2, sum;
printf("얼마짜리 차를 구입했습니까? : ");
scanf("%d", &num1);
printf("얼마짜리 차를 구입했습니까? : ");
scanf("%d", &num2);
sum = buy(num1, num2);
printf("합계 %d만원입니다.\n", sum);
return 0;
}얼마짜리 차를 구입했습니까? : 30 얼마짜리 차를 구입했습니까? : 40 30만원과 40만원 짜리 차를 구입했습니다. 합계 70만원입니다.
댓글 없음:
댓글 쓰기