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

2022. 8. 26. 05:53·Lang/C

들어가기 전에

프로그래밍을 하다 보면 가끔 반복적으로 작성해야 하는 코드가 있습니다. 이런 코드를 여러번 쓰지 않고 함수 형태로 저장해두면 코드를 간결하고 이해하기 쉽게 만들 수 있습니다. 사용자 정의 함수를 사용 하는 방법을 배워봅니다. 더불어서 하나의 루프로 수행하기 힘든 작업을 중첩 루프를 이용하여 해결하는 방법도 배워 보겠습니다.

학습 목표

사용자 정의 함수와 중첩 루프를 작성할 수 있습니다.

핵심 단어

  • 사용자 정의 함수
  • 중첩 루프

“cough”라고 세 번 말하는 C 프로그램을 작성

동일한 작업을 반복

#include <stdio.h>

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

For문 사용

#include <stdio.h>

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

사용자 정의 함수

#include <stdio.h>

// void를 입력하고 원하는 함수명(cough)을 적은 뒤 괄호 안에 void를 적어줌
void cough(void)
{
// printf로 cough를 출력하는 코드를 작성
    printf("cough\n")
}

int main(void)
{
    for (int i = 0; i < 3; i++)
    {
        cough();
    }
}
  • 과거의 어떤 사람들이 모두 구현해두었던 'get_int', 'get_string' 등의 함수는 우리가 직접 구현할 필요가 없었음
#include <stdio.h>

void cough(void);

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

void cough(void)
{
    printf("cough\n");
}
  • C는 위에서 아래로, 좌에서 우로 코드를 읽어내림
  • void cough(void)를 세미콜론과 함께 위로 올림
  • main 함수에 cough 함수가 나올 때까지 코드를 계속 읽도록 함
#include <stdio.h>

void cough(int n);

int main(void)
{
    cough(3);
}

// 사용자 정의 함수 cough 
void cough(int n)
{
    for (int i = 0; i < n; i++)
    {
        printf("cough\n");
    }
}
  • cough( ) 안의 int n 은 함수가 입력값을 받아서 int 형식을 갖는 n이라는 변수에 저장하겠다는 의미
  • main 함수 안에서 cough(3) 이라는 한 줄의 코드를 통해 3이라는 값을 cough 함수에 전달하고, 궁극적으로는 cough를 세 번 출력할 수 있게 됨
#include <cs50.h>
#include <stdio.h>

int get_positive_int(void);

int main(void)
{
    int i = get_positive_int();
    printf("%i\n", i);
}

// get_positive_int 함수는 CS50라이브러리(cs50.h)에 없는 함수
int get_positive_int(void)
{
    int n;

// do-while loop: 만약 n이 1보다 작다면 계속해서 질문을 반복
    do
    {
        n = get_int("Positive Integer: ");
    }
    while (n < 1);
    return n;
}
  • 출력의종류 함수이름(입력의종류) : 입출력이 없다면 void
  • int get_positive_int(void) : 값을 반환받기 위해 void가 아니고 int
  • int get_positive_int(void) : 입력이 없어서 void
  • int n; : 변수 생성, 쓰레기 값(Garbage Value)이라고 부르는 값을 가짐

do-while의 루프

  • 이 불리언 표현 while(n<1); 이 참일때 다음을 수행하라는 뜻
  • while을 단독으로 사용하면 while의 조건이 참이어야만 수행을 함
  • do-while은 do에서 무조건 한 번은 먼저 수행하게 해줌

중첩 루프

#include <cs50.h>
#include <stdio.h>

int main(void)
{
// int n; 으로 정수 값을 갖는 변수 n을 정의
    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()을 이용해서 while( )의 조건이 만족할때 까지 get_int 함수로 사용자가 입력값을 받아 n에 저장
  • do{ }while()을 사용하면 조건과 상관없이 최소한 한 번은 { }안의 내용을 실행할 수 있음
  • for 루프를 두 번 중첩해서 돌면서 “#”을 출력
    • 첫 번째 루프에서는 변수 i를 기준으로 n번 반복하고, 그 안의 내부 루프에서는 변수 j를 기준으로 n번 반복
    • 내부 루프에서는 “#”을 출력하고, 내부 루프가 끝날 때마다 줄바꿈을 수행
    • 따라서 최종적으로는 가로가 n개, 세로가 n개인 “#”이 출력

생각해보기

문제 1) 사용자 정의 함수를 사용하는 것의 장점은 무엇일까요?

가독성, 효율성

 

 

boostcourse 모두를 위한 컴퓨터 과학 (CS50 2019)을 수강하고 정리한 글입니다

저작자표시 비영리 변경금지 (새창열림)

'Lang > C' 카테고리의 다른 글

[CS50] C 언어 - 자료형, 형식 지정자, 연산자  (0) 2022.08.26
[CS50] C 언어 - 조건문과 루프  (0) 2022.08.25
[CS50] C 언어 - 문자열  (0) 2022.08.25
[CS50] C 언어 - C 기초  (0) 2022.08.25
[CS50] 컴퓨팅 사고 - Quiz 1  (0) 2022.08.24
'Lang/C' 카테고리의 다른 글
  • [CS50] C 언어 - 자료형, 형식 지정자, 연산자
  • [CS50] C 언어 - 조건문과 루프
  • [CS50] C 언어 - 문자열
  • [CS50] C 언어 - C 기초
주민1호
주민1호
개발/알고리즘 등등
  • 주민1호
    개발바라기별
    주민1호
  • 전체
    오늘
    어제
  • 블로그 메뉴

    • 🏚️
    • 🏷️
    • ✏️
    • ⚙️
    • All (40)
      • Data (0)
        • 💯DASP (0)
        • 💯SQLD (0)
        • 💯ADSP (0)
      • Java (17)
        • Java (11)
        • Spring Framework (6)
      • Python (0)
        • Python (0)
        • Flask (0)
        • TensorFlow (0)
      • JavaScript (1)
        • React (0)
        • Vue (0)
      • Lang (11)
        • C (11)
        • C++ (0)
      • Infra (0)
        • Docker (0)
        • Kubernetes (0)
        • AWS (0)
      • Algorithm (9)
      • 운영체제 (0)
        • Linux (0)
      • Etc. (1)
        • Git (1)
        • Network (0)
        • 컴퓨터과학개론 (0)
        • 멀티미디어시스템 (0)
      • AI (0)
      • Projects (0)
        • 2022 OSSCA (0)
      • Review (0)
      • 회고 (0)
  • hELLO· Designed By정상우.v4.10.3
주민1호
[CS50] C 언어 - 사용자 정의 함수, 중첩 루프
상단으로

티스토리툴바