C 언어는 덧셈, 뺄셈, 곱셈, 나눗셈을 포함한 산술 연산자를 제공하지만, 제곱을 한다든지 제곱근을 구한다든지 등 다른 수학적인 계산을 위한 연산자는 제공하지 않는다. 이렇게 산술 연산자로 제공되지 않는 수학적 계산을 위해서 관련된 수학 함수들을 미리 정의하여 제공하고 있다. 사용자들은 필요에 따라서 이러한 수학 함수들을 적절히 불러서 사용할 수 있다.

실제로, 여러분은 이미 5주차 강의 6장에서 2차 방정식의 해를 구할 때, 주어진 수의 제곱근을 구하기 위해서 sqrt() 수학 함수를 사용하였다.

가령, 한 개의 수를 읽어들여서 그 수의 제곱근을 계산하여 출력하는 프로그램을 생각해보자. 이 프로그램은 간단하므로, 분석, 설계 과정을 기술하지 않고서 직접 프로그램 9.1로 보여준다.

프로그램 9.1은 한 개의 수를 입력받고, 그 수에 대한 제곱근을 구하기 위해서 sqrt()의 수학 함수를 불러서 사용한다.

main() 함수에서 사용되고 있는 sqrt() 함수에 대해서 살펴보자. 다음은 사용자 입장에서 본 sqrt() 함수의 행동을 보여준다. 즉, sqrt()는 double 타입의 값을 입력받고, 이 값에 대한 제곱근 값을 계산하여 출력한다.

main() 함수는 sqrt() 함수를 불러서 사용하는데, 이 때 이 두 함수간의 관계를 살펴보자. main()은 sqrt() 함수를 부를 때, n의 값을 전달하고, sqrt()는 n의 제곱근 값을 계산하고, 이 계산된 값을 다시 main()에게 전달하는 것을 알 수 있다.

따라서 여러분은 sqrt()를 사용할 때, 어떤 타입의 값을 전달해야 하고, sqrt()로부터 어떤 타입의 값이 반환되고, 그리고 반환된 값의 의미가 무엇인지에 대해서 알고 있어야 한다. 그렇지 않는다면, sqrt() 함수의 올바른 사용을 기대할 수 없다.

다음은 여러분이 수학 함수를 사용하기 전에, 일반적으로 알아두어야 할 사항들이다.

    . 함수 이름
. 함수의 기능
. 함수에 전달하는 데이터의 타입
. 함수가 반환하는 값의 타입
 

 

이러한 사항들에 대해서 sqrt()를 적용하면 다음과 같다.

여러분은 sqrt() 함수가 어떻게 해서 그 결과 값을 만들어내는지에 대해서는 관심 가질 필요가 없다. 사용자가 유일하게 관심 가져야 할 사항은 sqrt() 함수에 전달할 값의 타입과 함수로부터 전달받을 결과 값의 타입이다. 그리고 sqrt() 함수의 기능이다. 이러한 정보를 종합하여 다음과 같이 표현할 수 있다.


위와 같은 함수 정보에 대한 표현을 함수의 원형(prototype)이라 한다. 그리고 함수에게 전달할 데이터를 매개변수(parameter)라 하며, 함수가 수행되어 반환되는 값을 반환 값(return value)이라 한다.

이미 5주차 강의에서 밝혔듯이, 수학 함수를 사용하기 위해서는 수학 라이브러리 헤더 파일 math.h를 반드시 포함시켜야 한다. 이 헤더 파일은 사용된 수학 함수에 대한 정보, 즉 함수 원형을 포함하고 있으며, 이러한 정보를 사용하여 컴파일러는 프로그램이 올바른지를 검사하고 번역한다. 이것은 여러분이 scanf()나 printf()를 사용하기 위해서 표준 입출력 헤더 파일 stdio.h를 포함시키는 것과 마찬가지 이유이다.

만약에, 여러분이 C가 제공하는 라이브러리의 헤더 파일을 포함시키지 않고서 라이브러리 함수를 사용한다면 "정의되지 않은 식별자(undeclared identifier)"라는 오류 메시지를 볼 수 있을 것이다.

다음 표는 수학 라이브러리 함수들 중에서 빈번히 사용되는 수학 함수들을 보여준다.

 
수학 함수
 
                         기능
          int abs(int n)
 

       n의 절대값 계산 

         double fabs(double n)
 

       n의 절대값 계산   

         double pow(double n1, double n2)
 

       n1n2 를 계산 

         double exp(double n)
         en 을 계산
         double sqrt(double n)
 

       을 계산    

         double sin(double n)
 

       sin(n)을 계산 (n은 라디안 값)

         double cos(double n)
 

       cos(n)을 계산 (n은 라디안 값)

         double tan(double n)
 

       tan(n)을 계산 (n은 라디안 값)

         double log(double n)
 

       logen을 계산

 

수학 함수 몇 가지에 대해서 그 행동을 살펴보자. 다음은 abs() 함수에 대한 행동을 보여준다.

다음은 sqrt() 함수에 대한 행동을 보여준다.



다음은 pow() 함수에 대한 행동을 보여준다.


위에서 살펴본 수학 함수의 행동들을 살펴보면, 수학 함수가 마치 2주차 강의 4장에서 다룬 연산자처럼 행동하는 것을 알 수 있다. 가령, abs()나 sqrt()는 피연산자가 한 개인 단항 연산자로서, pow()는 피연산자가 2개인 이항 연산자로서 행동한다. 그러나 이러한 연산자에 대한 피연산자는 함수의 매개변수로 전달된다는 것을 유의하라.

수학 함수는 식에서 피연산자의 위치에 올 수 있다. 이것은 수학 함수의 수행 결과가 값이기 때문이다. 다음의 식은 올바르다.

    abs(a) * sqrt(b) - pow(b, c)

 

[문장 단위 입력 실행] 여러분은 다음 실습창에서  수학 라이브러리 함수를 한 문장씩 입력하여 실행시켜  볼 수 있다.  새로운  프로그램을 한 문장씩 입력하고 오른쪽 창에서 그 실행 결과를 살펴 보시오.

사용법

1.아래의 실습창중 < C 문장 입력 > 란을 통하여 C문장 한문장씩 입력하고 Enter 키입력 버튼을 클릭하 면 해당 문장에 대한 시각화가 오른쪽에 나타나게 됩니다.
2.제어문장(while,for,if~else,do~while)은 아래의 실습창중 < 제어구조 문장 입력 >을 통하여 입력하고 제어구조 입력 버튼을 클릭하게 되면 새로운 창이 생성되어 제어구조문장 내부를 단계별로 실행할수 있습니다.
3.scanf()함수 호출시 조그만 새로운창이 생성되어 입력받게 됩니다.
4.
printf()
함수실행은 오른쪽실습창 하단 < printf 실행 창 >에 나타나게 됩니다.
5.여러분의 실습에 앞서 필히 자세한 사용법을 살핀후에 실습에 임해 주시기 바랍니다.

자세한 사용법은 여기를 클릭하여 주십시요


top으로... 다음페이지로.. 이전페이지로.. home으로..