들어가기 전에
프로그래밍을 하다 보면 가끔 반복적으로 작성해야 하는 코드가 있습니다. 이런 코드를 여러번 쓰지 않고 함수 형태로 저장해두면 코드를 간결하고 이해하기 쉽게 만들 수 있습니다. 사용자 정의 함수를 사용 하는 방법을 배워봅니다. 더불어서 하나의 루프로 수행하기 힘든 작업을 중첩 루프를 이용하여 해결하는 방법도 배워 보겠습니다.
학습 목표
사용자 정의 함수와 중첩 루프를 작성할 수 있습니다.
핵심 단어
- 사용자 정의 함수
- 중첩 루프
“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 |