본문 바로가기

C, C++

(48)
랜덤 함수 랜덤 함수를 사용하기 위해선 random 헤더를 포함해야 합니다.(srand, rand 함수만 사용하려면 stdlib.h를 포함) 랜덤한 수를 가져오기 위해서는 rand 함수를 사용합니다. rand 함수는 0부터 RAND_MAX(32767)까지의 랜덤 한 값을 출력합니다. int rand(); 그런데 이 랜덤 함수가 겉으론 랜덤이지만 실제로는 함수가 호출될 때마다 일정한 패턴으로 바뀌어 호출되므로 프로그램을 실행할 때마다 같은 숫자가 출력됩니다. 이를 방지하기 위해서는 시작 수를 정해주어야 하는데 다음 함수를 사용합니다. void srand(unsigned int seed); seed에 처음 시작 수를 넣어주면 되는데 이 수는 프로그램 실행마다 달라야 됩니다. 실행마다 달라질 수 있는 대표적인 수로는 시..
시간 함수 time 함수를 이용해서 현재 시간을 반환할 수 있습니다. #include #include //이 헤더가 포함되야 합니다. int main() { time_t now = time(nullptr);//time(&now);도 가능합니다. 인수와 반환이 제공하는 값이 똑같습니다. __time32_t now32 = _time32(nullptr);//time의 32비트 버전 __time64_t now64 = _time64(nullptr);//time의 64비트 버전 clock_t cl = clock(); printf("프로그램 시작 후 경과 시간(초) : %f\n", (double)cl / CLOCKS_PER_SEC); time_t now2 = time(nullptr); __time32_t now2_32 = _t..
수학 함수 수학 함수를 사용하려면 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 atan2(double y, double x); 여기서 앞에 a가 붙은 함수들은 역삼각 함수이며, 뒤에 h가 붙은 함수들은 쌍곡선 삼각 함수입니다. 함수의 인수는 각도(degree)가 아니라 라디안(radian) 값을 받는데 이를 변환하기 위..
nullptr(NULL) 원래 포인터에서 없는 값을 0으로 나타냈습니다. C언어에서는 주로 이 0값을 NULL 이름의 매크로로 만들어서 사용했지만 C++ 11에서 nullptr이 추가되었습니다. #define NULL 0 int* ar; ar = NULL; ar = nullptr; int i = nullptr;//오류 nullptr은 숫자가 아닙니다. nullptr은 내부적으로 0값과 같지만 숫자로 취급되지 않고 없는 값으로 취급됩니다. 이로써 숫자 0과 없는 값의 구분이 명확해졌습니다. ​ 구분이 명확해지면 좋은 점은 다음과 같이 함수 오버 로딩이 가능합니다. #include void Func(int* i) { } void Func(int i) { } int main() { Func(nullptr);//위의 함수가 호출 Fun..
동적 할당 #include int main() { unsigned num; printf("사람 수 입력 :"); scanf_s("%u", &num); float weightAr[num];//오류 return 0;}여기서 weightAr의 크기에 변수가 들어가면 안 됩니다. weightAr은 정적 할당, 즉, 프로그램이 실행되기 전에 메모리 크기가 정해지기 때문에 실행 시마다 바뀔 수 있는 num을 넣을 수 없습니다. 실행 중에 값이 정해지지 않는 상수만 넣을 수 있습니다.​그래서 다음과 같이 동적 할당을 사용해야 합니다.#include #include int main() { unsigned num; printf("사람 수 입력 :"); scanf_..
goto goto문은 지정한 곳으로 코드 실행 위치를 이동시킵니다. 레이블 이름: 이 형식으로 이동할 곳에 레이블을 만들고 goto 레이블 이름; 이렇게 써서 이동시킵니다. int main() { int i = 0; back: if(i < 10) { i++; goto back;//back:으로 이동 } return 0; }
typedef typedef를 사용하여 사용자 지정 타입명을 만들 수 있습니다. typedef int Number; typedef int *PInt; typedef int ArInt[5]; Number num = 1; Pint ptr = &num; ArInt ar = {1, 2, 3, 4, 5}; 또 typedef에 함수 포인터를 사용할 수 있습니다. int ADD(int a, int b) { return a + b; } typedef int (*Calc)(int, int); Calc add = ADD;
함수 포인터 함수 포인터는 말 그대로 함수를 가리키는 포인터입니다. 함수 포인터는 다음과 같이 정의합니다. 리턴 타입 (*함수 포인터 명)(인수); int (*add)(int a, int b); 보다시피 일반 함수 형식에 (*)이 추가된 모습입니다. int ADD(int a, int b) { return a + b; } int main() { int (*add)(int a, int b); add = ADD;//int (*add)(int a, int b) = ADD;로 정의와 동시에 초기화가능합니다. printf("%d\n", add(1, 2)); return 0; } add는 함수가 아니라 함수 포인터라서 정의되자마자 바로 사용할 수 없고 같은 리턴 타입과 인수를 가진 함수 ADD를 대입시켜야 사용할 수 있습니다. ..