![[CS50] C언어 - 사용자 정의 함수, 중첩 루프](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxOPxL%2FbtsHVHEBoPu%2FEXGeICu8toTTNyD2MCrQd0%2Fimg.jpg)
사용자 정의 함수
C 프로그램에서 특정 작업을 반복하려면 사용자 정의 함수를 이용해 코드를 단순화할 수 있다.
"cough"라는 단어를 세 번 출력하는 프로그램을 작성해보자.
가장 간단한 방법은 아래와 같이 작성하는 것이다.
#include <stdio.h>
int main(void)
{
printf("cough\n");
printf("cough\n");
printf("cough\n");
}
이 방법은 printf
를 세 번 반복하여 출력하는 것이다.
그러나 동일한 작업을 반복할 때 같은 코드를 여러 번 작성하는 것은 횟수 등을 수정해야 할 때 번거로워질 수 있으므로 이를 해결하기 위해 루프를 사용할 수 있다.
여기서는 for
루프를 사용해보자.
#include <stdio.h>
int main(void)
{
for (int i = 0; i < 3; i++)
{
printf("cough\n");
}
}
이제 "cough"를 3번 출력하는 작업이 루프를 통해 간단히 구현되었다.
사용자 정의 함수 만들기
좀 더 효율적인 방법으로 사용자 정의 함수를 만들어보자.
#include <stdio.h>
void cough(void)
{
printf("cough\n");
}
int main(void)
{
for (int i = 0; i < 3; i++)
{
cough();
}
}
여기서 void
키워드를 사용하여 cough
라는 이름의 함수를 정의하고 printf
로 "cough"를 출력하는 코드를 작성했다.
main
함수에서는 cough()
함수를 호출하여 "cough"를 3번 출력한다.
함수 선언과 정의
함수를 여러 개 정의하면 main
함수가 아래로 내려가는 문제가 발생할 수 있다.
중요한 함수가 아래에 있으면 코드의 가독성이 떨어질 수 있다.
이를 해결하기 위해 함수 선언(prototype)을 사용한다.
#include <stdio.h>
void cough(void);
int main(void)
{
for (int i = 0; i < 3; i++)
{
cough();
}
}
void cough(void)
{
printf("cough\n");
}
함수 선언은 함수의 이름과 매개변수, 반환형을 미리 알려주는 것이다.
이렇게 하면 main
함수에서 cough
함수를 사용할 수 있으며 이 때 함수가 실행하는 부분 밑에 정의해도 괜찮다.
매개변수를 사용하는 함수
cough
함수를 조금 더 다재다능하게 만들어 원하는 횟수만큼 "cough"를 출력할 수 있도록 해보자.
#include <stdio.h>
void cough(int n);
int main(void)
{
cough(3);
}
void cough(int n)
{
for (int i = 0; i < n; i++)
{
printf("cough\n");
}
}
여기서 void cough(int n)
은 int
형 매개변수 n
을 받아서 n
번 "cough"를 출력한다.
main
함수에서는 cough(3)
을 호출하여 "cough"를 3번 출력하도록 한다.
입력값을 검증하는 함수
입력값을 검증하는 함수를 정의해보자.
#include <cs50.h>
#include <stdio.h>
int get_positive_int(void);
int main(void)
{
int i = get_positive_int();
printf("%i\n", i);
}
int get_positive_int(void)
{
int n;
do
{
n = get_int("Positive Integer: ");
}
while (n < 1);
return n;
}
이 코드는 get_positive_int
라는 함수로 양수를 입력받아 반환하는 예제이다.
함수 선언 int get_positive_int(void);
를 통해 main
함수에서 get_positive_int
를 호출할 수 있도록 한다.
함수 내부에서는 do-while
루프를 사용하여 양수가 입력될 때까지 반복한다.
중첩 루프
마리오 게임처럼 화면에 여러 개의 이미지를 가로나 세로로 여러 개 출력하려면 중첩 루프를 사용한다.
#include <cs50.h>
#include <stdio.h>
int main(void)
{
int n;
do
{
n = get_int("Size: ");
}
while (n < 1);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
printf("#");
}
printf("\n");
}
}
이 코드는 사용자가 입력한 크기 n
만큼의 사각형을 "#" 문자로 출력한다.
do-while
루프를 사용하여 양수 n
을 입력받고 두 개의 for
루프를 중첩하여 n x n
크기의 "#"을 출력한다.
먼저 int n;
으로 정수 값을 갖는 변수 n
을 정의한다.
do-while
루프를 이용해 n
이 양수가 될 때까지 get_int
함수로 입력값을 받아 n
에 저장한다.
내부 루프에서는 "###"를 출력하고 내부 루프가 끝날 때마다 줄바꿈을 수행해 최종적으로 n x n
크기의 "#" 패턴을 출력한다.
References
모두를 위한 컴퓨터 과학 (CS50 2019)
부스트코스 무료 강의
www.boostcourse.org
'CSE > CS 기초' 카테고리의 다른 글
[CS50] 배열 - 컴파일링 (1) | 2024.06.12 |
---|---|
[CS50] C언어 - 하드웨어의 한계 (0) | 2024.06.12 |
[CS50] C언어 - 자료형, 형식 지정자, 연산자 (1) | 2024.06.12 |
[CS50] C언어 - 문자열 (1) | 2024.06.12 |
[CS50] C언어 - C 기초, 컴파일러 (1) | 2024.06.10 |
컴퓨터 전공 관련, 프론트엔드 개발 지식들을 공유합니다. React, Javascript를 다룰 줄 알며 요즘에는 Typescript에도 관심이 생겨 공부하고 있습니다. 서로 소통하면서 프로젝트 하는 것을 즐기며 많은 대외활동으로 개발 능력과 소프트 스킬을 다듬어나가고 있습니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!