250x250
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- 에러
- FreeBSD
- 일상
- C언어
- 템플릿
- 연습문제
- virtualmachine
- 리눅스
- VMware
- 객체지향프로그래밍
- node.js
- 티스토리챌린지
- 개발기
- ubuntu
- 잡담
- Linux
- 인프라
- 오토바이
- 가상머신
- 오블완
- 주유소
- DART
- Bloc
- K&R
- 퇴근길
- VM
- podman
- Flutter
- 개발
- 휘발류
Archives
- Today
- Total
그냥저냥
문제풀이 | The C Programming Language (K&R): Exercise 1-4 본문
개발기/The C Programming Language
문제풀이 | The C Programming Language (K&R): Exercise 1-4
sync86 2026. 5. 4. 16:09728x90
반응형

책: The C Programming Language (K&R)
본문의 연습문제는 저작권 이슈로 그 내용을 직접적으로 언급하지 않습니다. 이점 양해 바랍니다.
Exercise 1-4. 섭씨-화씨 역산과 연산 우선순위
Exercise 1-4 문제는 Exercise 1-3에서 소개한 예제를 기반으로 섭씨에서 화씨로 역산하는 문제입니다.
1. 분석
섭씨에서 화씨를 구하는 공식
F = (9/5) * 섭씨(C) + 32
2. 소스코드
#include <stdio.h>
/**
* print Celsius-Fahrenheit table
* for celsius = 0, 20, ..., 300
*/
int main(int argc, char** argv)
{
int fahr = 0;
int lower = 0;
int upper = 300;
int step = 20;
int celsius = lower;
printf("============================\n");
printf("| Celsius-Fahrenheit Table |\n");
printf("============================\n\n");
printf("----------------------------\n");
printf("| Celsius | Fahrenheit |\n");
printf("----------------------------\n");
while (celsius <= upper) {
fahr = ((9.0/5.0) * celsius) + 32.0;
printf("| %10d | %11d |\n", celsius, fahr);
celsius = celsius + step;
}
printf("----------------------------\n");
return 0;
}
3. 실행 및 검증
$ ./a.out
============================
| Celsius-Fahrenheit Table |
============================
----------------------------
| Celsius | Fahrenheit |
----------------------------
| 0 | 32 |
| 20 | 68 |
| 40 | 104 |
| 60 | 140 |
| 80 | 176 |
| 100 | 212 |
| 120 | 248 |
| 140 | 284 |
| 160 | 320 |
| 180 | 356 |
| 200 | 392 |
| 220 | 428 |
| 240 | 464 |
| 260 | 500 |
| 280 | 536 |
| 300 | 572 |
----------------------------
4. 마무리
Exercise 1-4는 기존 코드를 기반으로 바뀐 부분만 남기자면 아래와 같습니다.
int main(int argc, char** argv)
{
int fahr = 0;
/* 생략 */
int celsius = lower;
/* 생략 */
printf("| Celsius-Fahrenheit Table |\n");
/* 생략 */
printf("| Celsius | Fahrenheit |\n");
/* 생략 */
while (celsius <= upper) {
fahr = ((9.0/5.0) * celsius) + 32.0;
printf("| %10d | %11d |\n", celsius, fahr);
celsius = celsius + step;
}
/* 생략 */
}
다만, 눈치채신 분들도 계시겠지만, (9.0 / 5.0) * calsius + 32.0 수식을 보면 부동 소수점이 사용된 것을 확인할 수 있습니다.
부동 소수점과 수학에서 실수와는 표현은 비슷하나 엄연히 다른 측면이 있습니다.
이에 대해서 설명하는 것은 자신 없습니다.
현대 컴파일러는 수식에서 타입이 다른 부분이 있다면, 범위가 큰 타입으로 형변환을 자동으로 실행합니다.
수학의 분자 더하기에서 문모가 다를 때 분모를 일치 시켜서 계산하는 것과 유사합니다.
위의 코드를 기반으로 다시 작성하였습니다.
#include <stdio.h>
/**
* print Celsius-Fahrenheit table
* for fahr = 0, 20, ..., 300
*/
int main(int argc, char** argv)
{
double fahr = 0.0;
int lower = 1;
int upper = 30;
int step = 1;
int celsius = lower;
printf("============================\n");
printf("| Celsius-Fahrenheit Table |\n");
printf("============================\n\n");
printf("----------------------------\n");
printf("| Celsius | Fahrenheit |\n");
printf("----------------------------\n");
while (celsius <= upper) {
fahr = ((9.0/5.0) * celsius) + 32.0;
printf("| %10d | %11.2lf |\n", celsius, fahr);
celsius = celsius + step;
}
printf("----------------------------\n");
return 0;
}
실행 결과는 아래와 같습니다.
$ ./a.out
============================
| Celsius-Fahrenheit Table |
============================
----------------------------
| Celsius | Fahrenheit |
----------------------------
| 1 | 33.80 |
| 2 | 35.60 |
| 3 | 37.40 |
| 4 | 39.20 |
| 5 | 41.00 |
| 6 | 42.80 |
| 7 | 44.60 |
| 8 | 46.40 |
| 9 | 48.20 |
| 10 | 50.00 |
| 11 | 51.80 |
| 12 | 53.60 |
| 13 | 55.40 |
| 14 | 57.20 |
| 15 | 59.00 |
| 16 | 60.80 |
| 17 | 62.60 |
| 18 | 64.40 |
| 19 | 66.20 |
| 20 | 68.00 |
| 21 | 69.80 |
| 22 | 71.60 |
| 23 | 73.40 |
| 24 | 75.20 |
| 25 | 77.00 |
| 26 | 78.80 |
| 27 | 80.60 |
| 28 | 82.40 |
| 29 | 84.20 |
| 30 | 86.00 |
----------------------------
원래의 Celsius의 초기값이 0, Step이 20입니다.
실제 컴파일하고 실행해보니 차이가 나지 않아 조금 범위를 수정하였습니다.
참고바랍니다.
마지막으로 Celsius는 정수형을 유지하고, Fahrenheit의 값만 double 형으로 수정하였습니다.
Celsius는 통상적으로 영상/영하 몇도라는 단위로 많이 쓰입니다.
그래서 Celsius는 정수형 그대로 사용하였고, Fahrenheit만 double으로 부동 소수점으로 변환하였습니다.
다음은 Exercise 1-5 풀어보겠습니다.
728x90
반응형
'개발기 > The C Programming Language' 카테고리의 다른 글
| 문제풀이 | The C Programming Language (K&R): Exercise 1-6 (0) | 2026.05.23 |
|---|---|
| 문제풀이 | The C Programming Language (K&R): Exercise 1-5 (0) | 2026.05.04 |
| 문제풀이 | The C Programming Language (K&R): Exercise 1-3 (0) | 2026.04.28 |
| 문제풀이 | The C Programming Language (K&R): Exercise 1-2 (0) | 2026.04.28 |
| 문제풀이 | The C Programming Language (K&R): Exercise 1-1 (0) | 2026.04.25 |