목적
  - 프로그램 인수를 활용한다.
  - 함수 호출을 이해한다.

문제
사용자 삽입 이미지

코드

#include <iostream>
#include <cstdlib>
#include <cstring>

float add(float aA, float aB)
{ return aA + aB; }

float min(float aA, float aB)
{ return aA - aB; }

float mul(float aA, float aB)
{ return aA * aB; }

float div(double aA, double aB)
{ return aA / aB; }

using namespace std;

int main(int argc, char* argv[])
{
 if(argc < 4 || argc > 4)
 {
  cerr << "ERROR : 인수 부족" << endl;
  return 0;

 }

  if ( !(strcmp(argv[1], "+")) )
  {
   cout << argv[2] << " " << argv[1] << " " << argv[3] << " = " << add( atof(argv[2]), atof(argv[3]) ) << endl; }
 
  else
   {
   
   if ( !(strcmp("-", argv[1])) )
    { cout << argv[2] << " " << argv[1] << " " << argv[3] << " = " << min( atof(argv[2]), atof(argv[3]) ) << endl; }
   
   else
   {
    if ( !(strcmp("*", argv[1])) )
     { cout << argv[2] << " " << argv[1] << " " << argv[3] << " = " << mul( atof(argv[2]), atof(argv[3]) ) << endl; }

    else
    {
     if ( !(strcmp("/",argv[1])) )
      { cout << argv[2] << " " << argv[1] << " " << argv[3] << " = " << div( atof(argv[2]), atof(argv[3]) ) << endl; }

     else
     {
      cerr << "잘못된 연산자 입니다." << endl;

     }

    }

   }

  }
 
 return 0;
}


해설
  - argv 문자열 변수는 if(argv[1] == "+") 이런식으로 문자열 비교를 할수 없었습니다. strcmp 함수를 받아 NOT 연산자를 통해 비교 하시면 됩니다.
  - 커맨드 라인(실행줄) 파라매터(인수)는 이전 문제에 많이 언급되어 있습니다. 검색 하여 보시기 바랍니다.
  - cerr 객체는 cout 과 유사한 역할을 하나 오류 메시지를 출력하는 목적으로 만들어 졌습니다.

참고
  - 유사 문제
  - 실행 화면

사용자 삽입 이미지

Posted by 카켈



1. 목적

  - 함수 호출을 하고 원하는 값을 얻는다.

2. 문제 (점수 : 30 점)
  - 키보드로 원의 반지름(실수) 값을 입력 받아 넓이를 출력한다.
  - 넓이를 계산하는 area 라 불리는 함수를 만들어 쓴다.
  - 0을 입력하면 프로그램이 종료 된다.
  - do-while 제어문을 써서 반복한다.
  - 출력 화면

원의 반지름을 입력하세요 : 10
원의 면적 : 314.159

원의 반지름을 입력하세요 : 12.34
원의 면적 : 478.388

원의 반지름을 입력하세요 : 89.90
원의 면적 : 25390.379

원의 반지름을 입력하세요 : 0
Press any key to continue

3. 이해
  - 원하는 값을 얻을수 있는 함수를 만들수 있는가?
  - 반복을 원하는 범위내에 할수 있는가?

4. 코드

#include <stdio.h>

double area(float rad)
{
 return 3.141592 * rad * rad;

}

int main()
{
 float in = 0;
 
 do
 {
  printf("원의 반지름을 입력하세요 : ");
  scanf("%f", &in);
  if(in != 0)printf("원의 면적 : %0.3f\n\n",(float)area(in));
 
 }while(in);

 return 0;

}

5. 해설
  - 이전 문제에 유사한 문제가 있습니다.
  - float 형으로 출력해야 하므로 double(배정도 실수형) 리턴형 함수에 float(단정도 실수형) 형으로 형변환(casting) 했습니다.
  - area 함수가 원의 넓이를 구하는데 사용되었습니다.

6. 참고
  - 유사 문제
Posted by 카켈



1. 목적

  - 함수를 만들줄 안다.

2. 문제 (점수 : 20 점)
  - 실수 두개를 입력 받아서 사칙연산을 한 각각의 결과를 출력하라.
  - 함수를 이용한 (add, sub, mul, div) 계산 결과를 활용하라.
  - 출력 화면

두개의 실수를 입력하세요 : 987.654 321.098
987.654 + 321.098 = 1308.752
987.654 - 321.098 = 666.556
987.654 * 321.098 = 317133.713
987.654 / 321.098 = 3.076
Press any key to continue

3. 이해
  - 함수 출력을 활용할 수 있는가?

4. 코드

#include <stdio.h>

float add(float a, float b)
{
 return a + b;
}

float sub(float a, float b)
{
 return a - b;
}

float mul(float a, float b)
{
 return a * b;
}

float div(float a, float b)
{
 return (b = 0 ? 0 : a / b);
}

int main()
{
 float a, b;
 a = b = 0.0;

 printf("두개의 실수를 입력하세요 : ");
 scanf("%f %f", &a, &b);
 printf("%0.3f + %0.3f = %0.3f\n", a, b, add(a,b));
 printf("%0.3f - %0.3f = %0.3f\n", a, b, sub(a,b));
 printf("%0.3f * %0.3f = %0.3f\n", a, b, mul(a,b));
 printf("%0.3f / %0.3f = %0.3f\n", a, b, div(a,b));
 return 0;
}

5. 해설
  - 함수 호출은 선언시 [리턴 자료형] [함수이름]([인수 변수형] [임의 변수명], [인수 변수명] [임의 변수명] ...) 이런 식으로 합니다.
  - main 내 add , sub, mul, div 넣을때 인수를 a, b 넣는거와 함수 호출시에 쓰는 a,b 는 다름니다. 인수를 복사해서 쓰기 때문에 변수 이름이 달라도 무방합니다.
  - return 을 써서 [리턴 자료형]에 맞게 값을 되돌려 받습니다.

6. 참고
  - 유사 문제
Posted by 카켈



1. 목적
  - 삼각형 넓이를 계산할줄 안다.
  - 함수를 만들줄 안다.

2. 문제 (점수 : 20 점)
  - 삼격형의 밑변과 높이를 입력 받아서 면적을 계산하는 프로그램을 만든다.
  - 면적을 구하는 함수를 작성하여 계속 반복하여 면적을 계산한다.
  - 출력 화면

밑변과 높이를 입력 하세요 : 1 3
삼각형의 면적 : 1.500

밑변과 높이를 입력 하세요 : 123.456 789.56
삼각형의 면적 : 48737.960

밑변과 높이를 입력 하세요 : 456.1 346.78
삼각형의 면적 : 79083.180

밑변과 높이를 입력 하세요 : (반복 ... )

3. 이해
  - 함수를 작성할 줄 아는가?
  - 삼각형의 넓이를 이해하는가?

4. 코드

#include <stdio.h>

float area(float a, float b)
{ return a * b / 2; }

int main()
{
 float a,b;
 a = b = 0;
 
 while(1)
 {
  printf("밑변과 높이를 입력 하세요 : ");
  scanf("%f %f", &a, &b);

  printf("삼각형의 면적 : %0.3f\n\n", area(a,b));
 
 }

 return 0;
}


5. 해설
  - 부동 소숫점 자료형인 float 로 변수들을 입력 받습니다.
  - area 함수는 주어진 입력값에 대한 삼각형의 넓이를 리턴 하는 함수 입니다.

6. 참고
  - http://www.winapi.co.kr/clec/cpp1/12-3-1.htm : 함수 호출/정의

Posted by 카켈
이전페이지 1 다음페이지