표준함수
- 기능에 따른 표준함수 분리
분류
함수
입출력 함수
printf, scanf, gets, puts, getch, putch
수학 함수
sin, cos, tan, pow, floor, ceil, hypot
문자열 함수
strcpy, strlen, strcat, strstr, strchr
시간 함수
time, asctime, clock
파일 입출력 함수
fopen, fclose, fseek, fread, fwrite
프로그램 제어
exit, abort, system
메모리 할당
malloc, free, realloc, calloc
기타
rand, dela
삼각함수
- 수학적인 계산을 하는 함수들. 원형은 math.h에 선언되어 있다.
사용을 위해선 항상 전처리문 #include <math.h> 를 추가해 주어야 한다.
이해하기 쉬운 삼각함수에 대해 알아보자. 이름만 다를 뿐 원형은 아래와 같이 동일하다.
double sin(double x);
double cos(double x);
double tan(double x);
double asin(double x);
double acos(double x);
double atan(double x);
double sinh(double x);
double cosh(double x);
double tanh(double x); - 삼각함수의 인수들인 double x는 360분법의 각도가 아닌 호도(라디안)값이다.
공식은 다음과 같다
호도 = 각도*3.1416/180
지수함수
지수함수는 거듭승, 제곱근, 로그 따위의 값을 구하는 함수.
실수계산을 하기 때문에 리턴 값은 정밀도가 높은 double 실수 형이다.함수
설명
double sqrt(double x);
x의 제곱근
double pow(double x,double y);
xy. x의 y승
double log(double x);
자연 대수
double log10(double x);
상용 대수
double exp(double x);
자연 대수 exp
double hypot(double x,double y);
직삼각형의 사변 길이
- sqrt 함수는 제곱근, 두 번 곱해서 그 값이 되는 수 <sqrt(4)의 값은 2.0>
- pow(Power의 약자) 함수는 보통 세제곱 이상의 수를 구하는 경우 사용 <pow(2,10) 2의 10승>
- log 함수는 로그값을 계산하고 log10은 밑이 10으로 고정된 상용로그 값을 구한다.
- hypot(Hypotenuse의 약자) 함수는 인수로 주어진 x,y의 제곱의 합에 대한 양의 제곱근이다.
즉 피타고라스의 정리이다. < sqrt(pow(x,2)+pow(y,2)) / sqrt(x*x,y*y) >
정수화 함수
- 실수형 데이터에서 정수부만을 취하는 즉 소수점 이하는 잘라버리는 함수며,
리턴값이 정수가 아닌 실수이다.
double floor( double x );
double ceil( double x ); - floor 함수의 경우 소수점 이하를 버리고 정수부만 취하고
반대로 ceil 함수의 경우 소수점 이하를 올림해서 정수를 1증가 시킨다. - floor : 주어진 인수보다 크지 않는 최대 정수 (마루,바닥)
ceil : 주어진 인수보다 작지 않는 최소 정수 (천장)
절대값 함수
- 인수의 부호를 강제로 양수로 바꾼다.int abs(int n);
long labs(long n);
double fabs(double x); - abs함수 : 정수형에 대한 절대값
labs함수 : long형에 대한 절대값
fabs함수 : 실수형에 대한 절대값
예전 16비트 환경에서는 int형과 long형의 길이가 달라서 다르게 되어 있지만 32비트에선 같으므로 abs와 labs는 동일한 함수라 할 수 있다.
난수 함수
- 난수(Random Number) : 무작위로 만들어 지는 알 수 없는 값.
int rand(void);
void srand(unsigned int seed); - rand 함수는 0~RAND_MAX 범위의 수중 무작위로 한 수를 생성.
RAND_MAX 는 컴파일러에 따라 다르지만 일반적으로 32767(0x7fffff) 로 정의되있다.
일정한 규칙에 따라 난수를 생성하는데 규칙이 항상 같기 때문에 난수가 생성되는 순서도
항상 동일하게 생성된다. - srand 난수를 발생시키는 시작점(seed) 를 제공하여시작점을 기준으로 난수를 발생시킨다.
시작점의 변도에 따라 생성되는 난수가 달라진다.
- time 함수를 시작점으로 이용한 난수발생 : srand((unsigned)time(NULL)); - rand() % 48 의 경우 : 0~47사이의 난수
- 보통은 사용이 불편하기에 define을 이용하여 대신 사용한다.
#define randomize() srand((unsigned)time(NULL))
#define random(n) (rand()%(n))
난수의 생성
- 0~n 사이의 난수는 random(n)으로 생성
인수 자체는 제외되며 난수 중 제일 큰 값은 n-1 - random 함수가 만드러내는 난수의 값은 0으로 고정
하지만 random 함수 뒤에 상수를 더해 시작과 끝값에 범위를 조정이 가능하다.
random(20)+10 => (0~19)+10 => 10~29 - 난수 사이의 간격은 난수를 구한 후 곱을 사용
범위를 지정하는 인수는 곱해주는 수리 미리 나누어 구해야 한다.
0~100 미만의 짝수 중 하나 구하는 공식
random(100/2)*2 => (0~49) * 2 => 0~98로 범위 확장.
2를 곱했으니 생성된 난수는 짝수 여기에 +1을 할 경우 홀수 - 실수 난수가 필요하면 먼저 충분한 크기의 정수 난수를 구하고 필요한 유효자리 만큼 10의 거듭승으로 나눈다.
random(100)/10.0 => 0~99 / 10.0 => 0.0~9.9 - 분리된 범위의 난수도 원한다면 생성가능
0~4, 14~18 사이의 범위에 있는 수를 골라준다.
(random(5)+5)*(random(2)==0? 1 : -1)+9
뒤쪽의 삼항연산자는 난수의 부호를 정하는 것 - 전혀 연관성이 없는 수들 중 하나를 난수로 선택
3,7,12,15 중 하나를 선택하고 싶다면 아래와 같이 하면 된다.
int i;
do
{
i=random(16);
} while (i!=3 && i!=7 && i!=12 && i!=15);
무한 루프로 돌리면 언젠간 나올 것이다.
시간 함수
- time 함수 : 컴퓨터 안에 내장되어 있는 시계는 항상 정확한 시간을 유지.
프로그램에서 필요한 경우 시간함수를 이용하여 조사가 가능하다.
모든 함수의 원형은 time.h 이고 time.h는 미리 인클루드 해두어야 한다.
time_t time( time_t *timer );
char *ctime( const time_t *timer ); - time_t 는 시스템에 따라 달라지며 윈도우즈에선 4바이트 정수 (typedef long time_t;)로 정의
- ctime 은 time_t형의 경과초를 출력하기 편리한 문자열 형태로 바꾸며 UTC로 된 시간을
지역 설정에 맞게 조절 해주기도 한다. - void main()
{
time_t t;
time(&t);
printf("현재 시간은 %s입니다.\n",ctime(&t));
} - 날짜와 시간을 문자열 형태로 바꾸는 함수
char *_strdate(char *datestr);
char *_strtime(char *timestr); - _strdate 의 경우 MM/DD/YY 포맷
_strtime 의 경우 HH:MM:SS 포맷이고 24시간 제이다
시간 구조체
time_t형의 값을 tm구조체로 변환
struct tm *gmtime(const time_t *timer);
struct tm *localtime(const time_t *timer);
time_t mktime(struct tm *timeptr);gmtime, locatime 함수는 둘다 time_t형 값을 tm 구조체로 변환
gmtime은 세계표준시 localtime은 지역시간으로 변환멤버
설명
tm_sec
초(0~59)
tm_min
분(0~59)
tm_hour
시간(0~23)
tm_mday
날짜(1~31)
tm_mon
월(0~11)
tm_year
1990년 이후 경과 년수
tm_wday
요일(0~6). 0이 일요일
tm_yday
년중 날짜(0~365)
tm_isdst
일광 절약 시간과의 차
mktime은 tm 구조체를 time_t형으로 변환하는 것이다.
asctime 함수는 tm구조체를 문자열로 바꾼다. time_t형에 ctime과 같은 함수
char *asctime(const struct tm *timeptr);
size_t strftime(char *strDest, size_t maxsize, const char *format,
const struct tm *timeptr);strftime(버퍼, 버퍼길이, 포맷팅방식, tm 구조체)
3번째 인자인 포맷팅 방식에 따라 다양한 형식의 문자열로 바꿀 수 있다.
기타 시간 함수
- clock 함수 : 프로그램이 실행을 시작한 후 경과된 시간 ( Process Time ) 을 조사
원형 : clock_t clock(void)
clock_t 타입은 long 형으로 정의 조사한 값을 CLOCKS_PER_SEC(윈도우즈 : 1000)으로
나누면 프로그램 실행 후 경과 초를 알 수 있다. - difftime 함수 : 두 시간 사이의 시간 차를 구해주는 함수
원형 : double difftime(time_t timer1, time_t timer0);
표준함수에는 여러가지가 있다.
수학 함수와 난수 함수 시간 함수에 대해 알아 보았다.
삼각,지수,정수화,절대값과 난수생성과 시간과 시간에 구조체에 대해 알아 보았다.
출처 : soen.kr