소프트웨어/C

[2004년 기말 5번] 합계 평균 계산 - 인수 입력

카켈 2007. 2. 11. 05:55




1. 목적

  - 프로그램 외부에서 실행시 인수를 입력 받을 줄 안다.

2. 문제 (점수 : 25 점)
  - command line (명령줄) 에서 argument (인수/파라메터)로 main() 함수에 전달된 정수값들의
    합을 구하는 프로그램을 작성하라.
  - 실행 화면 (콘솔창/도스창)

C:\Work\2004_final_5\Debug>2004_final_5 12 34 56 -10 78 -25 90
입력된 수 : 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 를 선택합니다.

Break point 를 걸었습니다.
 
  - 빨간점()이 보이는게 Break point 입니다. 정확히 걸렸습니다.
  - 입력 인수(파라메터)를 입력하기 위해 메뉴에 보시면 Project -> Setting (Alt + F7) 있습니다.
     선택을 하시면




  - Debug 라는 탭이 있습니다. 거기서 Program arguments 란이 있습니다. 거기에 원하는 인수를 넣으시면 됩니다.

  - 다하시고 F5 을 누시거나 Build 메뉴에 Start Debug -> Run (F5) 라는 메뉴가 있습니다. 실행하시면 Break point 가 걸린 곳 까지 수행되며 정지됩니다. 이떄 메모리 내용을 확인 할수 있습니다.

 
  - Watch 항목에 원하는 인수명 또는 계산식을 넣으시면 위 화면과 같은 값들이 나옵니다.
  - 콘솔(커멘드)창에서 위의 내용을 직접 수행한 결과 입니다.



  - http://blog.naver.com/ljyhs/30009619656 : int main(int argc, char* argv[])에 대한 간략한 설명