본문 바로가기

프로그래밍/코딩 첫 걸음

21-05-06

전반적으로 발생하는 문제

  • 오버플로우 문제
  • 배열을 몰라서 발생하는 문제

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", &degrees);

	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;
}

변수를 과감하게 사용할 수 있으나 그만큼 코드가 꼬일 가능성도 크다.

'프로그래밍 > 코딩 첫 걸음' 카테고리의 다른 글

21-05-18  (0) 2021.05.18
21-05-17  (0) 2021.05.17
21-05-15  (0) 2021.05.15
21-05-07  (0) 2021.05.07
21-05-05  (0) 2021.05.05