오늘은 C의 표준 함수 몇 개를 사용해보려고 한다. :-)
함수의 대한 기본 설명은 다음 글을 참고하면 된다.
수학 함수
수학 함수의 몇몇 사용법을 익혀보자.
수학 함수를 사용할 때는 반드시 #include <math.h>를 적어주어야 한다.
전달하는 값의 형태는 소수형이다.
- sqrt 함수
- 삼각함수: sin, cos, tan
- exp함수
- log함수
- pow함수
- fabs 함수
- ceil 함수
- floor 함수
- sqrt 함수 : 제곱근 함수, 전달하는 값의 형태는 소수형이다.
#include <stdio.h>
#include <math.h>
int main(void) {
printf("%lf\n", sqrt(25.0));
return 0;
}
- 삼각함수: sin, cos, tan <- 이때, 각도는 라디안으로 처리
전달하는 값의 형태는 소수형이다.
참고( π=180° <-> 1 라디안 = π/180° )
#include <stdio.h>
#include <math.h>
int main(void) {
double PI = 3.141592;
printf("sin(PI) = %.lf\n", sin(PI)); // 정수값만 출력되기 위해서 %.lf사용
printf("cos(PI) = %.lf\n", cos(PI)); // 정수값만 출력되기 위해서 %.lf사용
printf("tan(PI) = %.lf\n", tan(PI)); // 정수값만 출력되기 위해서 %.lf사용
return 0;
}
- exp함수 : 자연상수 e를 밑으로 하는 지수값 계산 (ex. e^(1)=2.718282...)
전달하는 값의 형태는 소수형이다.
#include <stdio.h>
#include <math.h>
int main(void) {
printf("exp(1.0)=%lf\n", exp(1.0)); // e^(1.0)
printf("exp(2.0)=%lf\n", exp(2.0)); // e^(2.0)
printf("exp(3.0)=%lf\n", exp(3.0)); // e^(3.0)
return 0;
}
- log함수 : 자연상수 e를 밑으로 하는 자연로그 값을 계산
- log10 함수: 10을 밑으로 하는 상용로그 값을 계산
- log_함수: _을 밑으로 하는 로그 값을 계산
전달하는 값의 형태는 소수형이다.
#include <stdio.h>
#include <math.h>
int main(void) {
printf("log(2.0)=%f\n", log(2.0)); // 밑이 e <- 자연로그
printf("log10(2.0)=%f\n", log10(2.0)); // 밑이 10 <- 상용로그
printf("log2(2.0)=%f\n", log2(2.0)); // 밑이 2 <- 로그
return 0;
}
- pow함수 : 제곱을 계산해주는 함수이다.
전달하는 두 값의 형태는 소수형이다.
#include <stdio.h>
#include <math.h>
int main(void) {
printf("pow(2.0,3.0)=%f\n", pow(2.0, 3.0));
return 0;
}
- fabs 함수: 절댓값을 반환하는 함수
전달하는 값의 형태는 소수형이다.
#include <stdio.h>
#include <math.h>
int main(void) {
printf("fabs(-3.0)=%f", fabs(-3.0)); // |-3.0|=3.0
return 0;
}
- ceil : 소수점 올림 함수
- floor : 소수점 내림 함수
전달하는 값의 형태는 소수형이다.
#include <stdio.h>
#include <math.h>
int main(void) {
// ceil 올림
printf("ceil(0.7)=%f\n", ceil(0.7));
printf("ceil(0.5)=%f\n", ceil(0.5));
printf("ceil(0.2)=%f\n", ceil(0.2));
// floor 내림
printf("floor(0.7)=%f\n", floor(0.7));
printf("floor(0.5)=%f\n", floor(0.5));
printf("floor(0.2)=%f\n", floor(0.2));
return 0;
}
난수(random number) 만들기
C standard General Utilities Library(stdlib.h) 이용한다.
그러려면 #include <stdlib.h>를 반드시 적어주어야 한다.
rand() : 의사 난수(pseudo random number)를 생성한다. stdlib.h에 정의되어 있다. 0부터 RAND_MAX까지의 정수를 생성한다.
의사 난수(pseudo random number)는 다음에 뭐가 나올지 모르는 진짜 난수가 아니라 초기값에 따라서 나오는 순서가 어느 정도 결정되어 있는 난수를 말한다.
RAND_MAX는 rand()가 생성할 수 있는 최대 난수로 visual C++에서는 0x7fff(32767)으로 정의되어 있다.
#include <stdio.h>
#include <stdlib.h> // rand()의 원형 정의
int main(void) {
int r = 0;
for (int i = 0; i < 10; i++) {
r = rand();
printf("r=%d\n", r);
}
return 0;
}
따라서 이 코드를 몇 번을 실행해도 다음과 같이 정해진 난수(의사 난수)들이 나온다.
그렇다면 프로그램을 실행할 때마다 다른 난수가 생성되게 하려면 어떻게 해야 할까? 매번 난수를 다르게 생성하려면 시드(seed)의 개념을 사용한다.
시드(seed)는 난수 생성 시 씨앗값이 된다. 시드 값이 달라지면 이후 생성되는 모든 난수값이 달라진다. 어떠한 값도 시드값이 될 수 있으나 많은 사람들이 사용하는 값은 현재 시각이다. 이렇게 하면 프로그램이 실행되는 시간에 따라 난수 값들도 달라지기 때문이다.
time() : 표준 라이브러리에 있다. 1970년 1월 1일로부터 현재까지 경과된 시간을 초 단위로 반환한다.
이것을 srand()라는 함수를 이용하여 시드 값으로 설정하면 된다.
srand(time(NULL))
time()은 time.h에 정의되어 있고 srand()는 stdlib.h에 정의되어 있다.
#include <stdio.h>
#include <stdlib.h> // rand()의 원형 정의
#include <time.h> // time()의 원형 정의
int main(void) {
int r = 0, i = 0;
srand(time(NULL));
for (i = 0; i < 10; i++) {
r = rand();
printf("r=%d\n", r);
}
return 0;
}
이렇게 실행할 때마다 다른 난수를 생성한다.
만약, 임의의 실수가 필요하다면 RAND_MAX를 소수형으로 형변환 하여 이용하면 된다.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
double r = 0;
srand(time(NULL));
r = rand() / (double)RAND_MAX; // RAND_MAX를 정수에서 소수형으로 형변환
printf("r=%f\n", r);
return 0;
}
만약, [a, b] 구간의 난수를 발생하려면 다음과 같이 하면 된다.
a + (rand() % (b - a + 1));
난수 만드는 것을 이용해서 주사위 프로그램, Up-Down 게임을 만들어보자. 이것은 다음을 참고하면 된다.
외부 프로그램 실행
system() : 외부 프로그램을 실행하는 함수
#include <stdio.h>
#include <stdlib.h> // system() 원형의 정의
int main(void) {
system("mspaint"); // 그림판 실행
system("calc"); // 계산기 실행
return 0;
}
'C언어_VisualStudio_실습' 카테고리의 다른 글
369게임 박수치기; while문, if문 (0) | 2021.06.11 |
---|---|
주문한 카페 메뉴 총 금액 출력하기; while문, switch문 (0) | 2021.06.10 |
[C언어] 조건문 예제: 절대값 출력, 학점 프로그램 (0) | 2021.05.31 |
[C언어] 사용자 정의 함수의 예제 : 큰 값 출력 함수, 구구단 출력 함수, 양수 입력 받는 함수, 아스키코드 출력 함수 (0) | 2021.05.27 |
달력 프로그램 만들기 완전정복! (0) | 2021.05.23 |