[CS50] C 언어 - 사용자 정의 함수와 중첩루프

TIL

사용자 정의 함수

반복적으로 작성하는 코드를 함수로 만들면 코드를 간결하고 이해하기 쉽게 만들 수 있다.

 

"cough"를 세 번 출력하는 프로그램을 작성해보자.

#include <stdio.h>

int main(void)
{
    printf("cough\n");
    printf("cough\n");
    printf("cough\n");
}

 

반복문을 사용하면 더 간결해진다.

#include <stdio.h>

int main(void)
{
    for (int i = 0; i < 3; i++)
    {
        printf("cough\n");
    }
}

 

이제 함수를 만들어보자.

void cough(void)로 함수를 정의한다. main 함수에서 cough()를 호출하면 우리가 정의한 대로 동작한다.

#include <stdio.h>

void cough(void)
{
    printf("cough\n");
}

int main(void)
{
    for (int i = 0; i < 3; i++)
    {
        cough();
    }
}

 

함수 선언 위치

함수가 여러 개면 main 함수가 아래로 내려간다. 중요한 main 함수는 위에 있는 게 좋다.

그렇지만 main을 위로 올리고 cough를 아래로 내리면 오류가 발생한다. C는 아래에 함수가 있을 거라 예상하지 못하기 때문이다.

 

해결 방법은 함수 선언을 위에 추가하는 것이다.

#include <stdio.h>

void cough(void);

int main(void)
{
    for (int i = 0; i < 3; i++)
    {
        cough();
    }
}

void cough(void)
{
    printf("cough\n");
}

이렇게 void cough(void);를 위에 선언하면 컴파일러가 함수의 존재를 미리 알 수 있다.

 

매개변수 사용

원하는 횟수만큼 출력할 수 있도록 함수를 개선해보자.

#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");
    }
}

매개변수 n을 받아 n번 반복한다.

 

중첩 루프

마리오 게임처럼 #을 가로세로로 출력해보자.

#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");
    }
}
  • do { ... } while(n < 1)은 조건과 상관없이 최소 한 번은 실행된다. n이 1 이상이 될 때까지 입력을 받는다.
  • 첫 번째 for 루프는 n번 반복하며 줄을 생성한다. 내부 루프는 한 줄에 #을 n번 출력한다. 내부 루프가 끝나면 줄바꿈(\n)을 한다.
  • 결과적으로 가로 n개, 세로 n개의 #이 출력된다.

 

연습 문제

Q. 사용자 정의 함수를 사용하는 것의 장점은?

  1. 코드 재사용성: 반복되는 코드를 함수로 만들어 재사용
  2. 가독성 향상: 함수 이름으로 코드의 목적이 명확해짐
  3. 유지보수 용이: 한 곳만 수정하면 모든 곳에 적용됨
  4. 오류 감소: 코드 분리로 오류 가능성 감소
  5. 모듈화: 시스템의 확장성과 유연성 향상

'TIL' 카테고리의 다른 글

[CS50] 컴파일링  (0) 2025.11.05
[CS50] 하드웨어의 한계와 오버플로우  (0) 2025.11.05
[CS50] C 언어 - 자료형과 연산자  (0) 2025.11.05
[CS50] C 언어 - 조건문과 루프  (0) 2025.11.05
[CS50] C 언어 - 문자열  (0) 2025.11.05
'TIL' 카테고리의 다른 글
  • [CS50] 컴파일링
  • [CS50] 하드웨어의 한계와 오버플로우
  • [CS50] C 언어 - 자료형과 연산자
  • [CS50] C 언어 - 조건문과 루프
고견
고견
개발 자국 남기기
  • 고견
    개발자국
    고견
  • 전체
    오늘
    어제
    • 분류 전체보기 (157) N
      • Frontend (29)
        • Next.js (16)
        • JavaScript (7)
      • CS (19) N
        • 자료구조 (9)
        • 알고리즘 (5)
        • 운영체제 (4)
        • 네트워크 (1) N
      • TIL (93)
      • Dev Log (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Spa
    typescript
    바닐라 자바스크립트
    CS
    함수 타입
    react
    인터페이스
    알고리즘
    배열
    제네릭
    문자열
    클래스
    페이지 라우터
    algorithm
    useState
    자료구조
    App Router
    memory
    emotion diary
    앱 라우터
    generic
    Pages Router
    트러블 슈팅
    javascript
    타입 좁히기
    C
    cs50
    Next.js
    ai 감성 일기장
    Trouble Shooting
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고견
[CS50] C 언어 - 사용자 정의 함수와 중첩루프
상단으로

티스토리툴바