PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2010/10/22 11:28:18
Name 꼬쟁투
Subject C언어 함수사용은 어떻게 해야하나요?
#include <stdio.h>
int main(){
        double width, height;
        double triangle_area, rectangle_area;

        printf("면적을 구할 삼각형과 사각형의 가로와 세로를 입력하세요.n");
        scanf("%lf %lf", &width, &height);

        triangle_area=width*height/2.0;
        rectangle_area=width*height;

        printf("삼각형의 면적은 %.3lf입니다.n", triangle_area);
        printf("사각형의 면적은 %.3lf입니다.n", rectangle_area);

        return 0;
}

이 프로그램에서 삼각형과 사각형의 면적 구하는 부분을 함수사용해서 동일한 결과를 얻게 해야하는데

함수를 어떻게 쓰는지 몰라서 강의실을 못빠져 나가고 있어요...도와주세요 ㅠㅜ

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
녹차트윈스
10/10/22 11:43
수정 아이콘
main 함수 밖에 새로운 함수를 만들면 되지요.
double triangle(double width, double height)

삼각형 넓이 계산
넓이값을 리턴

한 후 main함수에서 triangle_area 함수의 리턴값을 받으면 됩니다.
ARM7TDMI
10/10/22 11:34
수정 아이콘
double getTriArea(double width, double height)

return width*height/2;

double getRectArea(double width, double height)

return width*height;


히히, 빨리 나가셔서 점심 드세요.
꼬쟁투
10/10/22 11:49
수정 아이콘
녹차트윈스 님// ARM7TDMI 님// 답변 감사합니다! 근데 이렇게 함수를 짜면
메인함수 안에 수식부분 지워도 실행 되야하는거죠...?
ARM7TDMI
10/10/22 11:46
수정 아이콘
아니죠. 출력을 위해서 그부분은 남겨두시구요. 그 위에 함수 호출해서 값을 얻어오시는 부분이 필요합니다.

triangle_area = getTriArea(width, height);
rectangle_area = getRectArea(width, height);

이렇게 말이죠.
꼬쟁투
10/10/22 12:00
수정 아이콘
음 제가 멍청한가봐요 하고잇는데 잘 안되네요 잘 해볼게요!
10/10/22 12:05
수정 아이콘
혹시나 해서 적습니다.

double getTriArea(double width, double height)

return width*height/2;

double getRectArea(double width, double height)

return width*height;


이 부분을 메인밑에다 적으셨다면 메인위에

double getTriArea(double, double);
double getRectArea(double, double);

이런 프로토 타입을 적어주셔야 됩니다.
ARM7TDMI
10/10/22 11:56
수정 아이콘
#include <stdio.h>
double getTriArea(double width, double height)

return width*height/2;

double getRectArea(double width, double height)

return width*height;


int main()

double width, height;
double triangle_area, rectangle_area;

printf("면적을 구할 삼각형과 사각형의 가로와 세로를 입력하세요.n");
scanf("%lf %lf", &width, &height);

triangle_area=getTriArea(width, height);
rectangle_area=getRectArea(width, height);

printf("삼각형의 면적은 %.3lf입니다.n", triangle_area);
printf("사각형의 면적은 %.3lf입니다.n", rectangle_area);

return 0;
꼬쟁투
10/10/22 12:09
수정 아이콘
EZrock 님// ARM7TDMI 님// 감사드려요! ARM&TDMI님이 정리 해주신 부분이 위에있네여
아이온
10/10/22 15:20
수정 아이콘
쓰레드가 길어졌네요..

입력이 뭐고 출력이 뭐냐를 정의하는 게 우선입니다. 삼각형 넓이 구하는 함수니, 출력은 넓이고 입력은 밑변과 높이가 되겠죠. 또 C의 모든 데이터는 타입이 있습니다. 여기에선 높이나 밑변 길이가 실수인 double type이므로 맥락상 넓이도 double이겠죠.

그러니 프로토타입은
double getTriArea( double w, double h );
와 같은 꼴이 됩니다.

함수는 블랙박스 같은 거라서, 일단 뭐가 입력이 들어가고, 어떻게 나오는진 모르지만 출력은 뭐가 나온다는 게 분명한 상태에서 프로토타입을 정의하는 것부터 시작하시면 됩니다. 함수의 '구현'은 제일 마지막 단계에요. 입출력 관계가 분명하면 구현은 쉽습니다.

알고리즘을 생각할 때도, 처음부터 온갖 세세한 걸 다 생각하는 게 아니라, 굵직굵직한 것부터 생각하는 거죠.

1만 줄짜리 텍스트 파일에서 랜덤하게 10줄을 읽어 가나다 순으로 정렬하는 프로그램을 예로 들겠습니다. 저라면 먼저,

이 10줄을 고르기 위해 1만까지 숫자 중 랜덤하게 10개를 골라서 순서대로 정렬하겠습니다.
다음엔 한 줄 한 줄 읽으면서, 지금 내가 읽고 있는 이 줄이, 아까 골라놓은 숫자하고 일치하는지 볼 거고요.
마지막으로 10개의 골라놓은 라인을 가나다 순으로 정렬하겠습니다.

이게 큰 그림이고, 그 다음에 "어떻게" 1만까지 가운데 10개의 수를 고르는지 구체적으로 생각해야 되겠지요. 한꺼번에 모든 걸 다 생각하면, 복잡한 프로그램을 만들기 어렵습니다.

함수는 프로그래머가 이렇게 일의 단위를 나눠서 생각하도록 도와주는 역할을 한다고 봅니다. 위의 예에서도 문제를 푸는 첫 단계는, 일을 크게 나누고, 매 procedure마다, 예컨대 "어떻게"는 생략하고 무엇이 들어가서(1만까지의 자연수가 들어가서) 무엇이 나오는지(10개의 랜덤하게 선택되어 정렬된 자연수)만 확실히 했었습니다. 이게 함수의 프로토타입으로 연결되는 거고, 그러고 나면, 무엇을 구현해야 하는지도 더 분명해져요.
아이온
10/10/22 15:32
수정 아이콘
그리고 큰 프로그램은 한 사람이 다 만들지 않지요. 여러 사람이 나눠서 맡으려면, 나는 여기까지 만들테니 너는 여기를 만들어, 하는 걸 약속할 규약이 필요합니다. 가장 확실한 것 가운데 하나가 함수의 프로토타입이죠.

마지막(?)으로 mp3 플레이 하는 프로그램을 만들었다고 칩시다. DCT란 알고리즘이 들어가는데, 처음엔 아주 무겁고 좋지 못한 DCT를 써서 만들었습니다. 그런데 누가 압도적으로 좋은 DCT 알고리즘을 개발했다면, mp3 플레이어 보수할 때, 이 DCT 부분만 교체하고 싶겠죠. 그러려면, 소위 modulize가 잘 되어 있어야 합니다.

C는 기계랑 가까운 언어라서, 한 가지 일이 끝나면 다른 일을 하고, 이렇게 계속 해서 결국 전체 큰 일을 끝내는 모델을 근저에 깔고 있습니다. 이 상황에서 저러한 modularization에 유리한 방식이 함수 아니었나 생각됩니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
93550 옷좀 찾아주세요 부탁드립니다 ( _ _) [4] CtheB1611 10/10/22 1611
93549 야구공 던질 때 어깨가 안 아프게 던지는 방법 좀 알려주세요... [6] kogang20015497 10/10/22 5497
93548 링크에 있는 플짤에서 나오는 음악 제목 알 수 있을까요? [2] 호옹이1442 10/10/22 1442
93547 이제 2g 폰은 안나오나요? [2] 1658 10/10/22 1658
93546 서울에서 부산까지 차량으로 왕복하면 기름값 얼마정도 잡아야할까요?? [5] 서현3189 10/10/22 3189
93545 남자 3명 국내 여행 추천 부탁 [3] 나무나무4928 10/10/22 4928
93544 [경제 고수님들 도움이 필요합니다!] 거시경제 관련해서 질문! [1] 생각대로F1341 10/10/22 1341
93543 컴퓨터 화면이 계속 멈춥니다...컴고수님들 도와주세요... [1] 쓰고이1405 10/10/22 1405
93542 (경제관련) 영어 해석 간단한거 봐주세요~ (짧아요) 리지^^1300 10/10/22 1300
93541 피쳐폰 추천 부탁드립니다. [2] luvnpce1408 10/10/22 1408
93540 C언어 함수사용은 어떻게 해야하나요? [10] 꼬쟁투2575 10/10/22 2575
93539 찾고 있는 음악이 있어서 질문올립니다. [fOr]-FuRy1568 10/10/22 1568
93538 엔진오일은 꼭 5000km주기로 갈아줘야 하나요? [8] 고등어3마리2154 10/10/22 2154
93537 쿡티비에서 GSL방송 안하나요?? [3] 베일2124 10/10/22 2124
93536 흑형이라는 단어에 대해 [26] 늘푸른솔솔3635 10/10/22 3635
93535 인터넷창 주소표시줄 질문입니다. [2] Nyx_soul1483 10/10/22 1483
93534 턱술실의 유래가 뭔가요? [3] 딱새1944 10/10/22 1944
93533 주량 .. 양주 vs 소주 [20] gkrk12077 10/10/22 12077
93532 핵이 아닌이상 apm이 800이 넘는게 가능할까요? (경기 15분이상) [4] 별이아빠2147 10/10/22 2147
93531 쿡티비 보시는 분들 gsl 생방송 나오나요? [2] neogeese1345 10/10/22 1345
93528 윈도우7 구입에 대해서, 그리고 포맷시 자료관리 [2] 마이스타일1558 10/10/22 1558
93527 타격스탯 [2] wish burn1532 10/10/22 1532
93526 머리스타일일 반곱슬처럼 자연스럽게 넘어가는 펌은 없나요? [5] 머드3774 10/10/22 3774
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로