Post

C언어 사용자 정의 함수 알아보기

#C #functions #user-define

프로그래밍 언어를 사용하다 보면, 내가 직접 함수를 정의해서 사용할 일이 정말 많다. 내장되어있는 함수로도 표현이 가능하지만, 코드가 불필요하게 길어지고 비효율적인 문제가 발생하기 때문이다. 내가 C언어를 배우는 이유도 내가 원하는 함수를 만들어서 MATLAB에서 호출하기 위함이므로, 이 부분을 잘 배워둬야 할 필요가 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
int sumover(int n)
{
	int  i, sum = 0;
	for (i = 1; i<=n; i++)
	{
		sum += i;
	}
	return  printf("sum = %d\n", sum);
}

int main() {
	int  n;
	printf("Enter n: ");
	scanf("%d", &n);
	sumover(n);

	return  0;
}

위의 예제와 같은 코드를 만들어 볼 수 있다. 혹시 연산자가 헷갈린다면, 여기를 참고하면 된다.

1. user define function

C언어에서 함수를 정의할 때는 function_name()을 활용하면 된다. function_name에는 원하는 함수명을 적어주면 되고, 괄호 안에는 들어갈 parameter를 입력해줘야 하는데, 여기에서도 intdouble처럼 그 형태까지 함께 적어줘야 함을 잊지 말아야한다. 내 예제의 경우에는 sumover이라는 함수를 만들었고, 파라미터로는 int n을 받는다. 이 함수는 1부터 n까지 합을 구하는 함수임을 파악할 수 있다.

실행하면 Enter n: 하고 입력하는 창이 뜨는데, 예를들어 100을 입력하면 내가 정의한 sumover함수에서 합을 구해 sum = 5050이라고 값까지 띄워주게 된다.

내가 정의한 함수의 아웃풋은 꼭 return과 함께 내가 원하는 출력값을 적어줘야 한다.

2. GPA 계산기 만들기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include  <stdio.h>
#include  <string.h>

// Define the conversion table for letter grades to numerical grades
float  convert_grade(char* letter_grade) {
	if (strcmp(letter_grade, "A") == 0) return  4.0;
	if (strcmp(letter_grade, "A-") == 0) return  3.7;
	if (strcmp(letter_grade, "B+") == 0) return  3.3;
	if (strcmp(letter_grade, "B") == 0) return  3.0;
	if (strcmp(letter_grade, "B-") == 0) return  2.7;
	if (strcmp(letter_grade, "C+") == 0) return  2.3;
	if (strcmp(letter_grade, "C") == 0) return  2.0;
	if (strcmp(letter_grade, "C-") == 0) return  1.7;
	if (strcmp(letter_grade, "D+") == 0) return  1.3;
	if (strcmp(letter_grade, "D") == 0) return  1.0;
	if (strcmp(letter_grade, "F") == 0) return  0.0;

	return -1.0; // Invalid grade
}

float  cal_gpa(char  grade1[], char  grade2[], char  grade3[]) {
	float  total_grade, gpa;
// Convert input grades to numerical grades and calculate total grade
	float  num_grade1 = convert_grade(grade1);
	float  num_grade2 = convert_grade(grade2);
	float  num_grade3 = convert_grade(grade3);

	total_grade = num_grade1 + num_grade2 + num_grade3;

// Calculate GPA
	gpa = total_grade / 3;
	return  gpa;
}

int  main() {
	char  grade1[3], grade2[3], grade3[3];
	float  Val;
// Get input grades from user
	printf("Enter grade 1: ");
	scanf("%s", grade1);
	printf("Enter grade 2: ");
	scanf("%s", grade2);
	printf("Enter grade 3: ");
	scanf("%s", grade3);

	Val = cal_gpa(grade1, grade2, grade3);
	printf("Your GPA is: %.2f\n", Val);

	return  0;
}

다소 복잡하다. 하지만 chatCPT와 Github Copilot과 함께라면 금방 만든다.

내 생각에 사용자 정의 함수의 핵심은 파라미터를 잘 지정하는 것과 return을 잘 뽑는데에 있다. 이 것만 주의하면 큰 에러는 발생하지 않을 것이다.

This post is licensed under CC BY 4.0 by the author.