티스토리 뷰
주어진 학습목표를 이루기 위해서 이해를 우선으로 두고 공부할 것이다.
들어가기 전에 학습목표, 핵심 단어는 강의 자료를 가져올 것이고 그 이후로는 내가 이해하고 공부한 부분을 직접 적고, 마지막에는 배운 점이나 느낀 점을 적도록 하겠다.
들어가기 전에
프로그래밍을 하다 보면 가끔 반복적으로 작성해야 하는 코드가 있습니다. 이런 코드를 여러 번 쓰지 않고 함수 형태로 저장해두면 코드를 간결하고 이해하기 쉽게 만들 수 있습니다. 사용자 정의 함수를 사용하는 방법을 배워봅니다. 더불어서 하나의 루프로 수행하기 힘든 작업을 중첩 루프를 이용하여 해결하는 방법도 배워 보겠습니다.
학습 목표
사용자 정의 함수와 중첩 루프를 작성할 수 있습니다.
핵심 단어
- 사용자 정의 함수
- 중첩 루프
사용자 정의 함수
"cough"를 세 번 말하는 코드를 작성하고 싶으면 아래와 같이 할 수 있다. 우리가 "get_int"와 같은 함수를 우리가 직접 구현하지 않고 사용했듯이 기침을 세 번 하는 cough라는 함수를 만들면 계속적으로 쓸 수 있으며 간편해지고, 더 편리해진다.
보통 main함수를 가장 위에 올리는데 C는 오래되고, 똑똑하지 않은 언어라 위에서부터 아래의 순서대로 실행하게 된다. 이렇게 되면 있지도 않은 cough();라는 함수를 실행하게 되므로 맨 위에 void cough(void);와 같이 함수를 올려줘서 문제를 해결할 수 있다.
#include <stdio.h>
void cough(void);
int main(void)
{
for (int i = 0; i < 3; i++)
{
cough();
}
}
void cough(void)
{
printf("cough\n");
}
아래는 cough함수를 원하는 횟수만큼 출력할 수 있게 한 코드이다. 맨 아래의 void cough(int n){...} 에서 cough( ) 안의 int n 은 함수가 입력값을 받아서 int 형식을 갖는 n이라는 변수에 저장하겠다는 의미이다. 이 함수를 통해 n번동 안 cough를 출력하는 for 루프가 만들어진다.
#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");
}
}
아래 코드를 보자. get_positive_int 함수를 만들었다. 그래서 int get_positive_int(void) 에서int 부분은 void가 아니고 int 가 된다.
이렇듯 함수 왼쪽에 있는 단어는 출력의 종류를 의미하게 된다. int get_positive_int(void) 괄호 안의 (void)는 입력의 종류를 뜻한다. 만약 입출력이 없다면 void를 적어주면 된다.
get_positive_int 함수 내에서 int n; 은 컴퓨터에게 n이라는 변수를 달라는 일종의 힌트이다. 그 안에 어떤 값을 저장할지는 아직 모르는 상태이다. 그럼 은 쓰레기 값(Garbage Value)이라고 부르는 값을 가지게 된다.
get_positive_int 함수 내의 do-while루프를 보자. 이 불리언 표현 while(n <1); 이 참일 때 다음을 수행하라는 뜻이다. 만약 n이 1보다 작다면 계속해서 질문을 반복하게 된다. while을 단독으로 사용하면 while의 조건이 참이어야만 수행을 하지만, do-while은 do에서 무조건 한 번은 먼저 수행하게 해 준다.
#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;
}
중첩 루프
마리오 게임에서 흔히 보는 것처럼 화면에 여러 개의 이미지를 가로나 세로로 여러 개 이어서 출력하고 싶으면 어떻게 해야 할까? for 루프를 사용할 수 있다. 이때 for 루프를 두 번 돌면서 "#"를 출력한다. 내부 루프에서는 "#"를 출력하고 내부 루프가 끝날 때마다 줄 바꿈을 수행한다. 따라서 최종적으로 가로가 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");
}
}
생각해보기
사용자 정의 함수를 사용하는 것의 장점은 무엇일까요?
단순히 함수만 실행 그 함수의 역할이 실행되므로 재사용을 하더라도 코드가 길어지지 않아 가독성이 좋아진다.
또한 오류가 생길 가능성이 줄어들게 된다.
함수를 정의할 때도 앞에 void대신 다른 타입을 적을 수 있다는 것을 알았다. 그리고 호이 스팅이 되는 자바스크립트와 달리 C에서는 한 줄 한줄 순서대로 입력해야 하는 부분에서 참 까다롭고 어려울 수 있는 언어라는 생각이 들었다.
Reference : CS50
'CS (Computer science)' 카테고리의 다른 글
[CS50 | 모두를 위한 컴퓨터 과학] C - 하드웨어의 한계 (0) | 2022.04.09 |
---|---|
[CS50 | 모두를 위한 컴퓨터 과학] C - 자료형, 형식 지정자, 연산자 (0) | 2022.04.07 |
[CS50 | 모두를 위한 컴퓨터 과학] C - 조건문과 루프 (0) | 2022.04.06 |
[CS50 | 모두를 위한 컴퓨터 과학] C - 문자열 (0) | 2022.04.05 |
[CS50 | 모두를 위한 컴퓨터 과학] C - C기초 (0) | 2022.04.02 |
- Total
- Today
- Yesterday
- React Query
- 타입스크립트
- github
- network
- 네트워크
- javascript
- 백준
- 항해99
- 프로그래머스
- cs50
- 자바스크립트
- 프로그래머스 베스트앨범 자바스크립트
- 실전프로젝트
- 리액트
- 클로저
- python
- 자바스크립트알고리즘
- 자바스크립트 클로저
- 모두를위한컴퓨터과학
- reactquery
- 알고리즘자바스크립트
- 프로그래머스 자바스크립트
- 자바스크립트 비동기 처리
- 무한스크롤
- css
- 리액트네이티브
- GIT
- html
- 모두를 위한 컴퓨터 과학
- React
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |