반응형
구조체 'car'로 자동차, 속도, 연료 상태 출력하기
조건1. Accel을 밟으면 속도는 10km/s씩 증가하고, 연료는 2%씩 감소
조건2. Break를 밟으면 속도는 10km/s씩 감소
조건3. 자동차 최대 속도는 200km/s
#include<stdio.h>
#define MAX_SPEED 200 // 최고 속도
#define STEP 2 // 연료 소모량
#define FULL 10 // 증감 속도량
struct car { // 구조체 car 선언
char name[20]; // 자동차
int speed; // 현재 속도
int gas; // 현재 연료
};
typedef struct car Car; // 모든 함수에서 사용하기 위해 전역변수로 만들어준다.
// struct car == Car
void carStatus(Car*); // 자동차의 현재상태를 출력하는 함수
void carAccel(Car*); // 악셀 패달을 밟는 동작을 구현하는 함수
void carBreak(Car*); // 브레이크 패달을 밟는 동작을 구현하는 함수
int main() {
Car c = { "my_car", 0, 100 }; // 구조체 변수 c를 선언한다.
// char name[20] = "my_car";
// int speed = 0;
// int gas = 100;
printf("초기화된 상태의 차 정보\n");
carStatus(&c); // 구조체에 저장된 정보를 출력하는 함수를 정의하기 위해 구조체의 주소값을 전달한다.
printf("악셀을 밟은 후의 차 정보\n");
carAccel(&c);
carStatus(&c);
return 0;
}
void carStatus(Car* c) { // *c.name == c->name
printf("자동차명 : %s\n", c->name); // 구조체의 포인터는 '->'로 표시한다.
printf("현재속도 : %d km/s\n", c->speed);
printf("현재연료 : %d %%\n\n", c->gas); // '%'는 서식문자에 사용되고 있다. 따라서 그 기능을 무효화해주기 위해 '%%'를 입력해준다.
}
void carAccel(Car* c) { // Accel을 밟아 speed를 증가시키는 함수이다. 그리고 동시에 gas를 소모한다.
if (c->gas >= STEP) { // gas가 연료 소모량 STEP(2)보다 크거나 같다면,
c->gas -= STEP; // gas를 2 소모한다.
if (c->speed + FULL > MAX_SPEED) // speed 값이 MAX_SPEED(200)를 초과하는지 확인한다. 만약 MAX_SPEED(200)을 초과하면,
c->speed = MAX_SPEED; // speed는 MAX_SPEED, 즉 speed의 최댓값을 저장한다.
else
c->speed += FULL; // 그렇지 않고 MAX_SPEED(200)보다 작으면, speed는 10km/s 증가한다.
}
else
printf("연료가 부족합니다\n"); // gas를 STEP(2)씩 소모하는데, gas가 STEP(2)보다 작으면 연료가 부족하다는 경고문을 출력한다.
}
void carBreak(Car* c) { // break를 밟아 speed를 감소시키는 함수이다.
if (c->speed < FULL) // speed가 FULL(10)보다 작으면,
c->speed = 0; // speed를 0으로 만들어준다.
else
c->speed -= FULL; // 그렇지 않으면 speed를 10 감소시킨다.
}
반응형
'C' 카테고리의 다른 글
[C언어] 실습: 구조체 'student'로 3명의 총점 및 평균을 계산하는 성적 처리 프로그램 구현하기 (0) | 2021.05.21 |
---|---|
[C언어] 구조체 객체 복사 (0) | 2021.05.20 |
[C언어] 실습: 구조체 'book'으로 책이름, 저자, 가격 출력하기 (0) | 2021.05.17 |
[C언어] 실습: 구조체 'people'로 이름, 나이, 신장 출력하기 (0) | 2021.05.16 |
[C언어] 구조체(Structure) (0) | 2021.05.16 |