https://dojang.io/mod/page/view.php?id=799
C 언어 코딩 도장: 핵심 정리
typedef로 자료형의 별칭 정의하기 typedef를 사용하면 구조체를 포함하여 모든 자료형의 별칭을 정의할 수 있습니다. typedef 자료형 별칭; // 자료형의 별칭 정의 typedef 자료형* 별칭; // 자료형 포인
dojang.io
50.1 두 점 사이의 거리 구하기
구조체를 활용하여 2차원 평면에서 위치를 표현한 뒤 두점 사이의 거리를 구하기.
2차원 평면에서 위치를 표현하려면 x와 y값이 필요.
struct Point2D{
int x;
int y;
};
이제 구조체로 변수 두개를 선언하여 점 두 개를 표현
#include <stdio.h>
struct Point2D {
int x;
int y;
};
int main()
{
struct Point2D p1; //점1
struct Point2D p2; //점2
//점1 위치
p1.x = 30;
p1.y = 20;
//점 2 위치
p2.x = 60;
p2.y = 50;
printf("p1 : %d %d\n", p1.x, p1.y); //30 20
printf("p2 : %d %d\n", p2.x, p2.y); //60 50
return 0;
}
int a = p2.x - p1.x; //선 a의 길이
int b = p2.y - p1.y; //선 b의 길이
루트는 C언어에서 제공하는 sqrt 함수를 사용하면 됨. sqrt는 제곱근을 뜻하는 square root에서 따왔으며, math.h 헤더 파일에 선언되어 있음.
sqrt(값);
#include <stdio.h>
#include <math.h> //sqrt가 선언된 헤더파일
struct Point2D {
int x;
int y;
};
int main()
{
struct Point2D p1; //점1
struct Point2D p2; //점2
//점1 위치
p1.x = 30;
p1.y = 20;
//점 2 위치
p2.x = 60;
p2.y = 50;
int a = p2.x - p1.x; //선 a의 길이
int b = p2.y - p1.y; //선 b의 길이
double c = sqrt((a * a) + (b * b));
//제곱근은 소수로 나오므로 double형 변수에 저장
printf("%f\n", c); //42.426407
return 0;
}
거듭제곱(power)을 구하는 pow함수를 사용해도 됨. (math.h).
pow(값, 지수);
double c = sqrt(pow(a,2) + pow(b,2));
선의 위치를 구할 때 p1에서 p2를 빼도 괜찮음.
int a = p1.x - p2.x; //선 a의 길이
int b = p1.y - p2.y; //선 b의 길이
제곱을 할 것이기에 부호는 상관없기 때문.
참고) 절댓값 함수
abs, fabs, fabsf 함수를 사용하면 양수 또는 음수를 절댓값(absolute value)으로 만들 수 있습니다. 이 함수도 math.h 헤더 파일에 선언되어 있습니다.
- abs(정수);
- fabs(double형 실수);
- fabsf(float형 실수);
'C > C언어 코딩도장' 카테고리의 다른 글
UNIT 52 구조체와 메모리 활용하기 (0) | 2022.03.11 |
---|---|
UNIT 51 구조체 멤버 정렬 사용하기 (0) | 2022.03.11 |
UNIT 49 구조체 포인터 사용하기 (0) | 2022.03.09 |
UNIT 48 구조체 사용하기 (0) | 2022.03.07 |
UNIT 47 회문 판별과 N-gram 만들기(문자열 응용) + 핵심정리 (0) | 2022.02.27 |