13주차 실습 문제(1)

#include <stdio.h>
#include <math.h>
struct POINT {
double x;
double y;
} emp1, emp2;
int main()
{
//변수 선언
double distance;
//시작점 좌표 입력
printf("시작점 좌표를 입력하세요: ");
scanf("%lf %lf", &emp1.x, &emp1.y);
//끝점 좌표 입력
printf("끝점 좌표를 입력하세요: ");
scanf("%lf %lf", &emp2.x, &emp2.y);
//거리 계산
distance = sqrt(pow(emp2.x - emp1.x, 2) + pow(emp2.y - emp1.y, 2));
// 거리 출력 (수정하지 마세요)
printf("두 점 사이의 거리: %.2lf", distance);
return 0;
}
printf("시작점 좌표를 입력하세요: ");
와 scanf("%lf %lf", &emp1.x, &emp1.y);
: 사용자에게 시작점의 좌표(x
, y
)를 입력받습니다. emp1.x
와 emp1.y
는 각각 emp1
구조체 변수의 멤버 변수로서, 시작점의 x와 y 좌표를 나타냅니다.
// 끝점 좌표 입력
printf("끝점 좌표를 입력하세요: ");
scanf("%lf %lf", &emp2.x, &emp2.y);
printf("끝점 좌표를 입력하세요: ");
와 scanf("%lf %lf", &emp2.x, &emp2.y);
: 사용자에게 끝점의 좌표(x
, y
)를 입력받습니다. emp2.x
와 emp2.y
는 각각 emp2
구조체 변수의 멤버 변수로서, 끝점의 x와 y 좌표를 나타냅니다.
// 거리 계산
distance = sqrt(pow(emp2.x - emp1.x, 2) + pow(emp2.y - emp1.y, 2));
- 두 점 사이의 거리를 계산합니다.
pow(emp2.x - emp1.x, 2)
: 끝점의 x 좌표와 시작점의 x 좌표의 차이를 제곱합니다.
pow(emp2.y - emp1.y, 2)
: 끝점의 y 좌표와 시작점의 y 좌표의 차이를 제곱합니다.
sqrt(...)
: 앞서 구한 두 제곱값의 합의 제곱근을 구합니다.
- 이는 두 점 (
(x1, y1)
과 (x2, y2)
) 사이의 거리 공식 sqrt((x2 - x1)^2 + (y2 - y1)^2)
을 사용한 것입니다.
13주차 실습 문제(2)

#include <stdio.h>
#include <string.h>
// 구조체 정의
typedef struct {
char color[20]; // 색상
int price; // 가격
int stock; // 재고
} PRODUCT;
void print_product(const PRODUCT *p)
{
printf("[%s %d원 재고:%d]", p->color, p->price, p->stock); // 구조체 멤버 출력
}
int main(void)
{
PRODUCT prd1;
// 색상 입력
printf("색상을 입력하세요: ");
scanf("%s", prd1.color); // 문자열 입력
// 가격 입력
printf("가격을 입력하세요: ");
scanf("%d", &prd1.price); // 정수 입력
// 재고 입력
printf("재고 갯수를 입력하세요: ");
scanf("%d", &prd1.stock); // 정수 입력
// 출력
print_product(&prd1); // 구조체 포인터 전달
return 0;
}
13주차 실습 문제(3)


#include <stdio.h>
#include <string.h>
#define MAX_PRODUCT 5
// PRODUCT 구조체 선언
typedef struct {
char color[20]; // 색상
int price; // 가격
int stock; // 재고
} PRODUCT;
void print_product(const PRODUCT *p)
{
printf("[%s 재고:%d]\\n", p->color, p->stock); // 구조체 멤버 출력
}
int order(PRODUCT *p, int amount)
{
if (p->stock < amount) // 재고가 부족한 경우
return 0;
p->stock -= amount; // 재고 차감
return p->price * amount; // 결제 금액 반환
}
PRODUCT *find_product(PRODUCT *arr, int cnt, const char* prd_color)
{
int i;
for (i = 0; i < cnt; i++)
if (strcmp(arr[i].color, prd_color) == 0)
return &arr[i];
return NULL;
}
int main(void)
{
PRODUCT products[MAX_PRODUCT] = {
{"white", 4000, 15}, {"yellow", 4500, 20}, {"black", 5000, 5}
};
int cnt_products = 3;
int i;
while (1)
{
char prd_color[20];
PRODUCT *p = NULL;
int amount = 0;
int payment = 0;
// 각 색상에 대한 가격과 재고 출력
for (i = 0; i < cnt_products; i++)
{
print_product(&products[i]);
}
// 색상 입력
printf("\\n주문할 제품의 색상을 입력하세요: ");
scanf("%s", prd_color);
// exit 입력하면 while문 종료
if (strcmp(prd_color, "exit") == 0)
break;
// 제품이 있는지 확인: find_product 함수 이용
p = find_product(products, cnt_products, prd_color);
if (p == NULL)
{
printf("제품을 찾을 수 없습니다.\\n");
continue;
}
// 주문 수량 입력
printf("주문 수량을 입력하세요: ");
scanf("%d", &amount);
// 잔액 계산: order 함수 이용
payment = order(p, amount);
if (payment == 0)
{
printf("재고 부족! 주문 불가!\\n");
}
else
{
printf("결제 금액: %d, ", payment);
}
printf("색상: %s, 재고: %d\\n", p->color, p->stock);
}
// 각 색상에 대한 가격과 재고 출력
for (i = 0; i < cnt_products; i++)
{
print_product(&products[i]);
}
return 0;
}