책정리/혼자 연구하는 C,C++ 1

8장 표준 함수

GONII 2015. 2. 19. 16:59

8.1 수학 함수

8.1.1 표준 함수

분류

함수

입출력 함수

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, delay

8.1.2 삼각 함수

수학적인 계산을 하는 삼수 #include <math.h>

  • 예제 sin

#include <stdio.h>

#include <math.h>

   

void main(void)

{

int r;

   

for( r=0; r<=90; r+=10) {

printf("sin(%d도)=%f\n",r,sin(r*3.1416/180));

}

}

8.1.3 지수 함수

거듭승이나 제곱근, 로그 따위으 값을 구하는 함수들

함수

설명

double sqrt(double x);

x의 제곱근

double pow(double x, double y);

xy. x의 y승

double log(double x);

자연 대수

double log10Idouble x);

상용 대수

double exp(double x);

자연 대수 exp

double hypot(double x, double y);

직각삼각형의 사변 길이

8.1.4 정수화 함수

실수형 데이터에서 정수부만 취하는 즉 소수점 이하의 소수부를 잘라 버리는 함수

  • floor : 주어진 인수보다 크지 않은 최대 정수
  • ceil : 주어진 인수보다 작지 않은 최소 정수

       

  • 예제 floor

#include <stdio.h>

#include <math.h>

   

void main(void)

{

printf("floor(3.14)=%f\n", floor(3.14));

printf("ceil(3.14)=%f\n", ceil(3.14));

printf("floor(-3.14)=%f\n", floor(-3.14));

printf("ceil(-3.14)=%f\n", ceil(-3.14));

}

   

  • 예제 round

#include <stdio.h>

#include <math.h>

   

#define banollim(x,dig) (floor((x)*pow(10.0,dig)+0.5)/pow(10.0,dig))

   

void main(void)

{

double x=123.456789;

int i;

   

for(i=-2; i<5; i++)

{

printf("%f의 %d자리 반올림 = %f\n",x,i,banollim(x,i));

}

   

}

8.1.5 절대값 함수

인수의 부호를 강제로 양수로 바꿈

   

  • 예제 abs

#include <stdio.h>

#include <math.h>

   

void main(void)

{

int i=3, j=-3;

   

printf("%d의 절대값 = %d\n",i, abs(i));

printf("%d의 절대값 = %d\n",j, abs(j));

}

자주 사용한다면 매크로를 만들어 사용하는 것이 속도상으로나 프로그램 크기로 보나 유리하다.

#define Myabs(a) (a>0) ? (a):(-a))

8.2 난수 함수

8.2.1 표준 난수 함수

  • 난수(Random Number)

    무작위로 만들어지는 알 수 없는 값

    int rand(void);

    void srand(unsigned int seed);

  • 예제 Random

#include <stdio.h>

   

void main(void)

{

int i;

for( i=0; i<10; i++ )

{

printf("%d ", rand());

}

}

rand 함수만 썼을 경우 여러 번 실행해보면 똑같은 값이 계속 나온다.

그래서 난수 생성 루틴의 규칙에 변화를 줄 수 있는 srand 함수가 필요하다.

srand((unsigned)time(NULL));

   

rand함수는 0~32767 사이의 임의 정수값 하나를 구하는데 난수는 보통 일정한 범위에 속해 있어야 의미가 있다.

rand() % 48; // 0~47 사이의 난수

rand() % 6 // 0~5 사이의 난수

   

다음과 같이 매크로 함수로 사용 하면 편리하다.

#define radomize() srand((unsigned)time(NULL))

#define random(n) (rand() % (n))

8.2.2 난수의 생성

  1. 0 ~ n-1 사이의 난수 생성 방법

    rand() % 10 // 0~9까지의 난수

  2. n값을 조정하며 범위의 시작값 조정 방법

    rand() % 10+1 // 1~10까지의 난수

    a ~ b 사이(b제외)의 정수 난수를 구할 때 : rand()%(b-a)+a

    a ~ b 사이(b포함)의 정수 난수를 구할 때 : rand()%(b-a)+a+1

  3. 0~100 미만의 짝수 중 하나 생성

    rand() %(100/2)*2

  4. 소수점 한자리까지 유효한 0.0~9.9 사이의 난수

    rand()%100/10.0

  5. 0~4, 14~18 사이의 두 범위에 있는 수중 하나를 선택

    (rand()%(5+5)*rand()%2==1 ? 1:-1)+9

8.3 시간 함수

8.3.1 time

시간 함수 사용 #include <time.h>

  • 예제 time

#include <stdio.h>

#include <time.h>

   

void main(void)

{

time_t t;

   

time(&t);

printf("현재 시간은 %s입니다.\n",ctime(&t));

}

   

  • 예제 strdate

#include <stdio.h>

#include <time.h>

   

void main(void)

{

char date[10];

char time[10];

   

_strdate(date);

_strtime(time);

   

printf("날짜 : %s, 시간 : %s\n",date,time);

}

   

8.3.2 시간 구조체

멤버

설명

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

일괄 절약 시간과의 차

   

8.3.3 기타 시간 함수

프로그램이 실행을 시작한 후의 경과된 시간을 조사

clock_t clock(void);

   

  • 예제 clock

#include <stdio.h>

#include <time.h>

   

void main()

{

clock_t t1,t2;

int count=0;

   

t1=clock();

   

for(;;) {

printf("기다리십시요. %d\n", count++);

t2=clock();

if(t2-t1 > 3*CLOCKS_PER_SEC) {

break;

}

}

printf("끝났음.\n");

}

 

반응형

'책정리 > 혼자 연구하는 C,C++ 1' 카테고리의 다른 글

10장 포인터  (0) 2015.02.19
9장 배열  (0) 2015.02.19
7장 기억 부류  (0) 2015.02.19
6장 함수  (0) 2015.02.19
5장 연산자  (0) 2015.02.19