본문 바로가기
C언어/쉽게 풀어쓴 C언어 EXPRESS 개정4판

[3] 쉽게 풀어쓴 C언어 EXPRESS 개정 4판 3장 PROGRAMMING

by EATSTAR 2023. 5. 27.
반응형
* 본문은 Microsoft Visual Studio 2022 버전 17.6.2를 사용하였으므로 다른 버전의 비쥬얼 스튜디오나 다른 C언어 작동 프로그램으로 작동할 경우 오류가 생길 수 있음을 양지해주세요.

 


1. 연봉을 한 푼도 쓰지 않고 몇 년 동안 모아야 10억이 될까? 연봉을 입력하고, 10억을 연봉으로 나누어서 출력해보자. 소수점 2자리까지만 출력한다.  (실수 입출력 / MEDIUM)

연봉을 입력하시오(단위: 만원): 6000
10억을 모으는데 걸리는 시간(단위: 년): 16.67

 

#include <stdio.h>

int main(void) {
	double money, year;

	printf("연봉을 입력하시오(단위:만원): ");
	scanf_s("%lf", &money);
	year = 100000 / money;
	printf("10억을 모으는데 걸리는 시간(단위:년): %.2lf", year);

	return 0;
}
year를 어느 자료형으로 표현하는 것이 좋을까?

출력 예시를 봤을 때 year는 실수형으로 출력되어야 한다. float 형으로 작성해도 되는가?라는 질문이 들 수도 있다. 하지만 float 형이 표현 가능한 지수의 범위인 대략 10^-38 ~ 10^38에 비해 double 형은 대략 10^-308~10^308로 훨씬 큰 수를 나타낼 수 있다. 물론 각 코드 맥락에서 더 적절한 (낭비를 하지 않는) 자료형을 사용해주는 것이 좋지만, 오버플로우같은 오류가 나지 않도록 (특히 컴파일러가 오버플로우가 일어났다고 오류를 표시해주지 않으므로) 더 범위가 큰 포괄적인 자료형을 사용해주는 것이 좋다.

 

%lf는 이해하는데, %.2lf는 무엇인가?

더 진행하면 .2를 붙이는 것 말고도 다른 응용방법이 나온다. 하지만 이 장에 수준에서는, %lf는 double형이 오는 공백을 나타내고, %.2lf는 소수점 둘째 자리까지 출력하는 것을 의미한다고 알고 있으면 된다.

 

money는 왜 int가 아닌 double로 했는가?

실제로 money는 int 형으로 선언해도 별 상관 없다. 하지만 천원 단위 이하의 것도 입력할 수 있게 한다던지.. 그리고 year와의 통일성을 위해 역시 double로 설정해도 별로 상관이 없다.

그리고 어차피 int와 double 사이의 연산에서는, int형이 자동으로 double형으로 바뀌어 계산된다.

ex) 1 (int) + 2.0 (double) -> 1.0 (double) + 2.0 (double) = 3.0

 

 


2. 미국에서는 거리를 표시하는데 마일을 사용한다. 마일을 미터로 환산하는 프로그램을 만들어보자. 사용자로부터 마일단위로 거리를 입력 받아서 변수에 저장한다. 이 변수에 1609를 곱하여 미터로 변환한다. 미터로 변환된 값을 화면에 출력한다. 실수값을 사용한다.  (실수 입출력 / MEDIUM)

마일을 입력하시오: 2
2.0 마일은 3218.00미터입니다.

HINT > 실수형에는 float형과 double형이 있으며 각각 %f와 %lf 형식 지정자를 사용하여서 입력과 출력을 한다. meter = 1909.0 * mile;

 

#include <stdio.h>

int main(void) {
	double mile, meter;

	printf("마일을 입력하십시오: ");
	scanf_s("%lf", &mile);
	meter = 1609.0 * mile;
	printf("%lf 마일은 %lf미터입니다.", mile, meter);

	return 0;
}

 

 

 


3. 사용자로부터 삼각형의 높이와 밑변을 받아서 넓이를 계산하여 출력하는 프로그램을 작성하라. 단 모든 데이터는 실수로 입력되며 출력도 모두 실수로 하여야 한다.  (실수 입출력 / MEDIUM)

삼각형의 밑변: 6
삼각형의 높이: 3
삼각형의 넓이: 9.00

HINT > area = 0.5*height*base;

 

#include <stdio.h>

int main(void) {
	double bottom, height, area;

	printf("삼각형의 밑변: ");
	scanf_s("%lf", &bottom);
	printf("삼각형의 높이: ");
	scanf_s("%lf", &height);
	area = bottom * height / 2;
	printf("삼각형의 높이: %lf", area);

	return 0;
}

 

 


4. 섭씨 온도와 화씨 온도는 다음과 같은 수식을 만족한다. 사용자로부터 화씨 온도를 받아서 섭씨온도로 환산하여 출력하는 프로그램을 작성하시오. 온도는 실수형으로 처리한다.  (실수 입출력 / MEDIUM)

C = 5/9 * (F-32)

화씨값을 입력하시오: 32
섭씨값은 0.00도 입니다.

HINT > (5.0/9/0)*(f-32.0); double형의 실수값을 입력받을 때는 %lf 형식 지정자를 사용한다.

 

#include <stdio.h>

int main(void) {
	double c, f;

	printf("화씨값을 입력하시오: ");
	scanf_s("%lf", &f);
	c = (5.0 / 9.0) * (f - 32.0);
	printf("섭씨값은 %lf입니다.", c);

	return 0;
}
아무리 c가 double 형 변수라지만.. 5.0보다는 5가 더 편한데..

물론 5같은 정수형으로 입력해도 계산을 위한 형변환을 통해 (같은 형끼리만 계산이 가능하기에) 자동으로 5.0의 실수형으로 바뀌긴 한다. 하지만 해당 변수에 알맞은 형태의 숫자를 써주는 것이 정확하고 좋은 습관이다.

또한 위와 같이 괄호로 묶어서 계산하는 것이 계산 우선순위를 정확하게 해주고 직관적이다.

 

 


5. 다음 다항식의 값을 계산하는 프로그램을 작성하라. x의 값은 실수로 사용자에게 입력받는다.  (실수 연산 / HARD)

실수를 입력하시오: 2.0
다항식의 값은 37.00

HINT > 제곱은 x*x와 같이 계산한다.

 

#include <stdio.h>

int main(void) {
	double x, sum;
	
	printf("실수를 입력하시오: ");
	scanf_s("%lf", &x);
	sum = (x * x) + (7 * x) + 11;
	printf("다항식의 값은 %lf", sum);

	return 0;
}
지금은 2제곱이니까 괜찮은데 3제곱 이상부터는 3^3이나 3**3같이 나타낼 수 있는게 있는가?

안타깝게도 그런 식으로 나타내는 것은 C언어에 없다. 3제곱을 나타내기 위해서는 x*x*x와 같이 나타내야 한다.

 

 


6. 달의 중력은 지구의 약 17%라고 한다. 자신의 몸무게를 입력받아서 달에서의 몸무게를 계산하는 프로그램을 작성하여보라. double형으로 계산한다. (실수 입출력 / HARD)

몸무게를 입력하시오(단위:kg): 70
달에서의 몸무게는 11.90kg입니다.

HINT > weight_on_moon = weight_on_earth * 0.17

 

#include <stdio.h>

int main(void) {
	double weight_on_moon, weight_on_earth;

	printf("몸무게를 입력하시오(단위: kg): ");
	scanf_s("%lf", &weight_on_earth);
	weight_on_moon = weight_on_earth * 0.17;
	printf("달에서의 몸무게는 %lfkg입니다.", weight_on_moon);

	return 0;
}

 

반응형