Computer Science - C언어_사용자 정의 함수, 중첩 루프

Sangho Moon·2020년 7월 19일
0

Computer Science

목록 보기
9/22
post-thumbnail

1. 사용자 정의 함수


  • "cough"라고 세 번 말하는 C 프로그램 만들기

1.1. 단순히 printf 세 번 반복


1.2. 루프(for) 이용


1.3. 사용자 정의 함수 이용

1.3.1.

void를 입력하고 원하는 함수명(cough)을 적은 뒤 괄호 안에 void를 적는다.

그리고 printf로 cough를 출력하는 코드를 작성한다.

그 후 int main(void) 안에 cough(함수명)를 사용해보면 정의해둔 대로 cough가 3번 출력된다.


하지만 만약 함수를 1개가 아닌 여러개를 만들면 중요한 main 함수가 더 아래로 내려가게 된다.

그럼 main 함수를 위로 올리고 cough 함수를 내려보자.

위와 같이 에러가 발생한다.

나는 main 함수에서 cough( ) 함수를 사용했다.

그런데 cough함수는 아래에 있다.

C는 오래되었고 똑똑하지 않기 때문에 아래에 cough라는 함수가 있을 것이라 생각하지 못하는 것이다.

이 것을 해결하려면 다시 cough함수를 위로 올려야 한다.

1.3.2.

void cough(void)를 세미콜론과 함께 위로 올리는 것이다.

마치 이전에 cough를 봤던 것처럼 C를 속이는 방법이다.

cough 함수를 전부 본 적은 없어도 이름은 본적이 있으니 main 함수에 나올 때까지

코드를 계속 읽도록 하는 것이다.

1.3.3.

이번에는 cough 함수를 좀 더 다재다능하게 만들어 원하는 횟수만큼 cough를 출력할 수 있도록 해보자.

여기서 맨 아래의 void cough(int n){...} 은 cough 라는 이름의 함수를 우리가 직접 정의한 것이다.

cough( ) 안의 int n 은 함수가 입력값을 받아서 int 형식을 갖는 n이라는 변수에 저장하겠다는 의미이다.

그리고 { } 안의 내용을 보면 n번 동안 cough를 출력하는 for 루프가 있다.


다시 main 함수 안으로 돌아가보면 cough(3) 이라는 한 줄의 코드를 통해서 3이라는 값을

cough 함수에 전달하고, 궁극적으로는 cough를 세 번 출력할 수 있게 되는 것이다.


다만 여기서 main 함수를 우리가 정의한 cough 함수보다 위에 위치시키고 싶다면,

예시에서와 같이 void cough(int n);를 먼저 입력해서 cough 라는 함수가 정의되어있음을

알려줘야 한다.


1.3.4 추가 예제

여기서 get_positive_int 함수는 CS50라이브러리(cs50.h)에 없는 함수이다.

아래 int get_positive_int(void)를 보면 처음 보는 기능이 있다.

이 부분의 논리를 차근차근 확인해 보자.

여기 get_postive_int라는 함수가 있는데 입력을 받지 않았다.

괄호 안에 아무것도 넣을 필요가 없다. 아무 양의 정수나 받으면 된다.

하지만 이 전에 사용했던 get_int나 get_string 함수처럼 어떤 값을 받아와서 변수에 저장하는 것처럼 이 함수가 뭔가를 반환하게 하고 싶다.

그래서 int get_positive_int(void) 파란색 글씨는 void가 아니고 int가 된다.

함수 왼쪽에 있는 단어(파란색)출력의 종류를 의미한다.

int get_positive_int(void) 괄호 안의 빨간색 단어(void)입력의 종류를 뜻한다.

만약 입출력이 없다면 void를 적어주면 된다.


그리고 int n; 이라고 하는 처음 보는 것이 있다.

컴퓨터에게 n이라고 하는 변수를 달라는 일종의 힌트이다.

그 안에 어떤 값을 저장할지 아직 모르기 때문에 그냥 int n;만 적는 것이다.

아직은 아무것도 할당할 필요가 없다.

그럼 n은 쓰레기 값(Garbage Value)이라고 부르는 값을 가지게 된다.

n에 무엇이 들었는지는 모르지만 중요하지 않다. 나중에 제대로 넣으면 된다.


그 다음 do-while의 루프를 알아보자.

이 불리언 표현 while(n<1); 이 참일때 다음을 수행하라는 뜻이다.

만약 n이 1보다 작다면 계속해서 질문을 반복하는 것이다.

while을 단독으로 사용하면 while의 조건이 참이어야만 수행을 한다.

하지만 do-while은 do에서 무조건 한 번은 먼저 수행하게 해준다.


2. 중첩 루프

먼저 int n; 으로 정수 값을 갖는 변수 n을 정의한다.

그리고 do{ …}while( )을 이용해서 while( )의 조건이 만족할때 까지

get_int 함수로 사용자가 입력한 값을 받아 n에 저장한다.

do{ }while( )을 사용하면 조건과 상관없이 최소한 한 번은 { }안의 내용을 실행할 수 있다.


그리고 for 루프를 두 번 중첩해서 돌면서 “#”을 출력한다.

첫 번째 루프에서는 변수 i를 기준으로 n번 반복하고,

그 안의 내부 루프에서는 변수 j를 기준으로 n번 반복한다.

내부 루프에서는 “#”을 출력하고, 내부 루프가 끝날 때마다 줄바꿈을 수행한다.

따라서 최종적으로는 가로가 n개, 세로가 n개인 “#”이 출력된다.


Ref.
Edwith_boost course

profile
Front-end developer

0개의 댓글