아하 로고
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
사려깊은꽃새100
사려깊은꽃새10021.11.08

C프로그래밍 빈칸채우는 문제 질문 입니다?

함수원형이 어떤건지 모르겠습닏다!그리고 print 들어갈 빈칸이 뭔지 모른다고 해야할지 헷갈린다고해야 할지 책에 디져보아도 비슷한 문제가 없네요 참고 할 내용이 없어서 올려봅니다

55글자 더 채워주세요.
답변의 개수4개의 답변이 있어요!
  • 1번: int getsum(int n);

    2번: max, getsum(max)

    이렇게 괄호에 넣어 주시면 됩니다.

    1번의 경우는 C언어는 main()함수가 끝나면 프로그램이 종료 됩니다. 순차적으로 프로그램라인이 수행되기 때문에 앞에 서브 함수를 선언해주지 않으면 안됩니다. 즉, main함수 안에서 서브함수를 호출하는데 그 호출 함수를 찾지 못하는 것이죠. 선언이라는 것은 컴파일시 그 함수를 불러다 붙여놓은 거라고 표현하는게 맞나 암튼 쉽게 그냥 main() 이전에 서브함수를 선언하지 않으면 호출 할 수 없다고 생각 하시면 될 듯요.

    2번의 print문의 괄호 넣기는 말 그대로 첫번째 %d값은 인자 max이니 그대로 표현학 두번째는 변수가 아니 서브함수로 리턴값을 받아 %d에 출력하는 것이기 때문에 getsum(max)라고 다이렉트로 표현해도 됩니다.

    그러면 getsum(max)의 리턴된 반환값이 sum 값이 두번째 인다로 가져오고 그 값은 두번째 %d에 출력됩니다.


  • 우선 함수 원형이란

    변수로 따지면 변수 선언의 부분에 해당하는데요.

    함수를 사용하기 전에 미리 선언해서 메인 함수에 알려주는 역할을 합니다.

    이런 함수가 있으니까 오류 내지 말고 그대로 진행하라고 말해주는 거죠.

    int getsum(int n); // 이 부분이 함수 원형

    원형을 적을 때는 반환형, 이름, 매개변수만 적어줍니다.

    이후 메인 함수가 나오고

    void main()

    {

    }

    getsum 함수가 등장합니다. 위의 함수 원형과 동일하죠? 여기서 이 함수를 정의해줍니다.

    int getsum(int n)

    {

    //

    }

    그런데 어째서 이런 식으로 미리 선언을 해줘야 할까요?

    그 이유는 c언어가 절차지향이기 때문인데요.

    위에서 아래로 코드가 진행된다는 의미입니다.

    책의 코드처럼 main함수에서 getsum함수를 불러왔는데

    메인 함수가 그게 어딨는지 어떻게 알겠어요? 위에서 미리 알려주질 않았는데.

    그래서 함수 원형을 사용합니다. 말씀드렸다시피 미리 알려줘서 이런게 있으니 사용해도 된다고 말이죠.

    여기서 만약 main함수 위에 int getsum함수를 선언하면 어떻게 될까요?

    int getsum(int n)

    {

    }

    void main()

    {

    }

    잘 진행됩니다. 왜냐면 이미 위에서 getsum 함수를 알려줬기 때문이죠.

    즉, 함수 원형이 필요한 경우는 메인 함수보다 아래에 함수가 존재할 경우에 한합니다.

    두 번째로

    printf에 들어갈 코드인데요.

    getsum(n);

    이렇게 적어주시면 됩니다.

    설명해드릴게요.

    %d에 들어갈 값을 적어야 하는데요.

    1부터 n까지의 값이 들어가야겠죠? 그러려면 getsum 함수를 한 번 호출해야 하구요.

    그런데 메인 함수 어디에도 getsum 호출 코드는 보이지 않습니다.

    즉, 함수 호출을 printf에서 시켜주고 동시에 반환받은 값을 %d에 넣어주는거죠.

    그러려면 저 빈 칸에 getsum(n);가 들어가야하는 겁니다.

    도움이 되셨길 바래요~


  • C언어에서 함수를 사용하기 위해서 3가지 개념이 있습니다.

    1. 함수의 원형

    2. 함수의 정의

    3. 함수의 호출

    함수의 원형이 의미하는건 C언어에게 "getsum이란건 함수란다. int 값 1개를 받아들여서 int 값을 반환하는 함수란다" 라고 알려주는 역할을 합니다. int max; 라던가 int sum; 이 "max랑 sum은 int 형 변수란다" 라고 C언어에게 max와 sum이 변수라는걸 알려주는 변수의 선언인 것처럼 함수의 원형은 변수의 선언과 비슷한 개념이라고 보시면 됩니다. 따라서 제일 윗 줄 함수의 원형에 들어갈 구문은

    int getsum(int);

    입니다.

    main 함수에 printf 문의 경우는 함수를 가져다 사용하는 호출 구문입니다.

    printf("1에서 %d까지의 합: %d\n", max, getsum(max));

    가 답입니다. getsum 이란 함수에 scanf로 입력받은 n값인 max 변수를 입력으로 집어넣은 결과를 출력하는거지요.

    세번째 빈칸은 getsum 함수의 정의를 완성하는 겁니다.

    for 반복문 안에서 숫자를 다 더해야하니

    sum = sum+i;

    가 됩니다.

    이해가 되셨을런지 모르겠네요.


  • 안녕하세요. 꾸준한하마55입니다.

    소스코드 파일 다운로드 : https://github.com/sigmak/exercise4_01/tree/2021-11-09-c-getsum

    1. 소스코드

    2. 컴파일 후 실행결과 캡쳐