[2004년 기말 5번] 합계 평균 계산 - 인수 입력
1. 목적
- 프로그램 외부에서 실행시 인수를 입력 받을 줄 안다.
2. 문제 (점수 : 25 점)
- command line (명령줄) 에서 argument (인수/파라메터)로 main() 함수에 전달된 정수값들의
합을 구하는 프로그램을 작성하라.
- 실행 화면 (콘솔창/도스창)
입력된 수 : 12 34 56 -10 78 -25 90
총합 : 235
평균 : 33.571429
3. 이해
- 명령줄 인수를 받을수 있는가?
- 합계/평균을 구할수 있는가?
4. 코드
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
int i, sum;
i = sum = 0;
i = 1;
printf("입력된 수 : ");
while(i<argc)
{
printf("%s ",argv[i]);
sum += atoi(argv[i]);
i++;
}
printf("\n총합 : %d\n",sum);
printf("평균 : %f ", (float)sum / --i);
return 0;
}
5. 해설
- int main(int argc, char* argv[]) 이 핵심 구문입니다. 인수(파라메터)를 입력 받았을때 인수의 갯수를 argc 에 받고, 인수의 순서대로 argv 에 저장됩니다. 첫번째 배열에는 파일이름의 전체경로가 문자열로 저장되며 띄워 쓰기 단위로 다음 문자열의 주소를 받아 저장합니다. 마지막 배열엔 NULL 값이 저장이 됩니다. 아래 디버그창을 보시면 이해가 되실겁니다.
- 동적으로 부여된 문자열의 주소를 가져 오는 것이므로 만약 이 문장을 변경하고 싶으면 따로 변수를 생성하여 저장 하시면 됩니다. 주소는 변경할수 없는 형식(l-value) 이기 때문입니다. 동적 할당 부분은 malloc 함수가 있지만 C++ 에서는 new 라는 명령어가 있습니다. (아직 참고만 하세요.)
- atoi 는 문자열을 정수형 문자로 형 변환 하는 함수 입니다.
- 평균을 낼때 받는 sum 이 정수형이기 때문에 소숫점을 얻기 위해서 float 형으로 형변환 했습니다.
6. 참고
- 디버그시 인수를 받는 방법과 인수가 직접 저장된 모습을 보여 드리겠습니다.
- 우선 실행 화면입니다.(OS : WinXP SP2 / IDE, 컴파일러 : Microsoft Visual C++ 6.0)
- return 0 구문에 Break point (디버그시 잠시 실행을 쉬어 가는 장소, 이 점 이전까지 실행을 합니다.)을 걸어 둡니다. F9 키나 오른쪽 버튼을 눌러 Insert/Remove Breakpoint 를 선택합니다.
- 입력 인수(파라메터)를 입력하기 위해 메뉴에 보시면 Project -> Setting (Alt + F7) 있습니다.
선택을 하시면
- 다하시고 F5 을 누시거나 Build 메뉴에 Start Debug -> Run (F5) 라는 메뉴가 있습니다. 실행하시면 Break point 가 걸린 곳 까지 수행되며 정지됩니다. 이떄 메모리 내용을 확인 할수 있습니다.
- 콘솔(커멘드)창에서 위의 내용을 직접 수행한 결과 입니다.
- http://blog.naver.com/ljyhs/30009619656 : int main(int argc, char* argv[])에 대한 간략한 설명