전반적으로 발생하는 문제
- 오버플로우 문제
- 배열을 몰라서 발생하는 문제
1. 난수 함수
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h> // 난수 함수의 헤더 파일
#include <time.h>
int main()
{
int i;
srand((unsigned)time(NULL)); // 현재의 시각을 시드로 사용하는 방식
for (i = 0; i < 6; i++)
printf("%d ", rand()%45); // 0부터 44까지 45개의 수 중 랜덤하게 선택
return 0;
}
당연하지만 같은 수가 중복돼서 나타날 수 있다.
2. 랜덤하게 점 찍기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h> // 난수 헤더 파일
#include <time.h>
#include <windows.h> // 그림을 그릴 때 쓰는 헤더 파일
int main()
{
int i, x, y, r, g, b;
HDC hdc;
hdc = GetWindowDC(GetForegroundWindow()); // 그림을 그릴 때 넣는 변수
srand((unsigned)time(NULL));
for (i = 0; i < 10000; i++)
{
x = rand() % 300; // 가로 300픽셀
y = rand() % 300; // 세로 300픽셀
r = rand() % 256;
g = rand() % 256;
b = rand() % 256;
SetPixel(hdc, x, y, RGB(r, g, b)); // 점 찍는 함수
}
getchar();
return 0;
}
다음과 같은 화면이 출력된다.
3. floor(), ceil(), fabs(), pow(), sqrt()
/* #include <math.h>를 필요로 한다. */
double result;
double value = 1.6;
result = floor(value);
printf("%lf", result); // 1.000000이 출력다. 소숫점 이하를 버린다.
result = ceil(value);
printf("%lf", result); // 2.000000이 출력다. 소숫점 이하에서 올린다.
value = -3;
printf("%f", fabs(value)); // 3.000000이 출력된다. 절댓값을 의미한다.
printf("%.0f\n", pow(10.0, 3.0)); //10의 3승이 출력된다.
printf("%.0f\n", sqrt(16)); // 16의 양의 제곱근이 출력된다.
4. 나무의 높이 측정
시선의 각도, 측정자의 키, 나무까지의 거리를 입력하여 나무의 높이를 측정하는 프로그램
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
double height, distance, tree_height, degrees, radians;
printf("나무의 길이(m): ");
scanf("%lf", &distance);
printf("측정자의 키(m): ");
scanf("%lf", &height);
printf("각도(도): ");
scanf("%lf", °rees);
radians = degrees * (3.141592 / 180.0);
tree_height = tan(radians) * distance + height;
printf("\n나무의 높이(m): %lf\n", tree_height);
return 0;
}
5. 삼각함수 그리기
#include <windows.h>
#include <stdio.h>
#include <math.h>
#define PI 3.141592
double rad(double degree)
{
return PI * degree / 180.0;
}
int main()
{
int degree, x, y;
double radian, result;
HWND hwnd = GetForegroundWindow();
HDC hdc = GetWindowDC(hwnd);
MoveToEx(hdc, 30, 200, 0);
LineTo(hdc, 500, 200);
MoveToEx(hdc, 30, 200, 0);
LineTo(hdc, 30, 0);
for (degree = 0; degree <= 360; degree++)
{
result = sin(rad((double)degree));
x = degree + 30;
y = 200 - (int)(100.0 * result);
SetPixel(hdc, x, y, RGB(255, 0, 0));
}
return 0;
}
모르는 함수가 많이 나와 코드가 잘 와닿지는 않는다.
6. 전역 변수 사용 예제
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int A;
int B;
int add()
{
return A + B;
}
int main()
{
int answer;
A = 5;
B = 7;
answer = add();
printf("%d + %d = %d\n", A, B, answer);
return 0;
}
변수를 과감하게 사용할 수 있으나 그만큼 코드가 꼬일 가능성도 크다.