[ 7 ~ 12번 ]
* 본문은 Microsoft Visual Studio 2022 버전 17.6.2를 사용하였으므로 다른 버전의 비쥬얼 스튜디오나 다른 C언어 작동 프로그램으로 작동할 경우 오류가 생길 수 있음을 양지해주세요.
1. 사용자로부터 하나의 실수를 입력받아서 소수점 표기 방법과 지수 표기 방법으로 동시에 출력하는 프로그램을 작성하라. (실수 입출력 / MEDIUM)
실수를 입력하시오: 123.567
실수형식으로는 123.567000입니다
지수형식으로는 1.235670e+02입니다
HINT > 실수 형식은 %f를 사용하고 지수 형식은 %e를 사용하여 출력한다.
메인 개념 page > 144p (소수점 표기와 지수 표기 방식)
#include <stdio.h>
int main(void) {
double f;
printf("실수를 입력하시오: ");
scanf_s("%lf", &f);
printf("실수형식으로는 %f입니다.\n", f);
printf("지수형식으로는 %e입니다.", f);
return 0;
}
이상한 것을 눈치챘는가? 분명 double 형으로 f 변수를 정의했는데 실수형식으로 출력할 때는 %f를 쓰고 있다! WHAT?
double 형의 실수를 출력할 때는 %f와 %lf 모두 사용 가능하다 (물론 맞게 써주는게 안헷갈리지만..)
하지만 double 형을 입력할 때(scanf 함수에서의 %)는 %lf만 가능함을 양지하자.
%g 사용을 통한 생각 확장
%g를 사용할 수도 있다. %g는 소수점 이하 6자리 안에서 표현이 가능하면 %f를 사용하고 아니면 %e를 자동으로 사용하는 편리한 도구이니 이것도 알아두자.
#include <stdio.h>
int main(void) {
double f;
printf("실수를 입력하시오: ");
scanf_s("%lf", &f);
printf("[실수/지수]형식으로는 %g입니다.", f);
return 0;
}
소수점 아래 6자리가 넘었지만 %f로 출력된다. 결과적으로 반올림을 통해 소수점 아래 6자리로 표현이 가능하면 되는거다.
소수점 부분을 없애더라도 어쨋든 반올림을 통해 6자리로 만들었다. 이쯤 되면 소수점이 없어지더라도 반올림을 하고 6자리임을 깨달을 수 있다.
소수점을 제거하고 반올림을 하더라도 1234567으로 되므로 드디어 7자리로 표현할 수 밖에 없어졌다! 이러면 %e로 출력되는 것이다.
2. 사용자로부터 정수를 16진수로 입력받아서 8진수, 10진수, 16진수 형태로 출력하는 프로그램을 작성하시오. (다양한 진법 입출력 / MEDIUM)
16진수 정수를 입력하시오: ff
8진수로는 0337입니다
10진수로는 255입니다
16진수로는 0xff입니다
HINT > 16진수 정수로 입력받으려면 scanf("%x", &data);와 같이 한다. 16진수를 0x를 붙여서 출력하려면 printf("%#x", data)와 같이 한다.
메인 개념 page > 134p (n진수[진법]의 입출력 방식)
#include <stdio.h>
int main(void) {
int num;
printf("16진수 정수를 입력하시오: ");
scanf_s("%x", &num);
printf("8진수로는 %o입니다\n", num);
printf("10진수로는 %d입니다\n", num);
printf("8진수로는 %#x입니다", num);
return 0;
}
슬슬 교재의 내용이 좀 기억이 안나서 땀이 나기 시작할거다.
하긴, 왼쪽 날개 참고사항에 있는걸 누가 주의깊게 읽겠는가?
아무튼, 8진수는 %o로 나타내고, 10진수는 정수형 그대로 %d를 사용한다.
16진수는 %x로 입력하는데, 앞에 0x가 붙은 형태는 %#x로 해주면 된다.
정수를 입력받는 것이므로 num 변수는 int 형으로 정의한다.
3. int형의 변수 x와 y의 값을 서로 교환하는 프로그램을 작성하여보자. 별도의 변수가 필요하면 정의하여서 사용한다. (다양한 진법 입출력 / MEDIUM)
x=10 y=20
x=20 y=10
HINT > 또 하나의 변수 tmp가 필요하다. 우유와 주스가 든 컵의 내용물을 서로 교환하려면 제 3의 컵이 필요한 것과 마찬가지이다.
#include <stdio.h>
int main(void) {
int x = 10;
int y = 20;
int tmp = 0;
printf("x=%d y=%d\n", x, y);
tmp = x;
x = y;
y = tmp;
printf("x=%d y=%d", x, y);
return 0;
}
드디어 지식 퀴즈가 아니라 논리적 사고를 요하는 문제가 나왔다! (간단한 변수 선언만 알면 3장 수준에서도 풀 수 있다.)
물 컵 2개가 있을 때 서로 바꿀 수 없으므로, 한 개의 물 컵이 더 필요하다. 그것이 바로 tmp다.
tmp는 오류를 대비해 일단 0으로 초기화시켜주자.
그리고 tmp는 x의 값을 받으므로 tmp = 10 / x = 10 / y = 20
x는 y의 값을 받으므로 tmp = 10 / x = 20 / y = 20
마지막으로 y는 tmp의 값을 받으므로 tmp = 10 / x = 20 / y = 10
이렇게 해서 x와 y값은 바뀌게 된다.
4. 상자의 부피를 구하는 프로그램을 작성하여보자. 부피는 길이*너비*높이로 계산된다. 길이, 너비, 높이는 모두 double형의 실수로 입력받아보자. (실수 입출력, 실수 계산 / MEDIUM)
상자의 가로 세로 높이를 한번에 입력: 30 30 30
상자의 부피는 27000.000000입니다.
HINT > scanf_s("%lf %lf %lf", &w, &h, %d);와 같이 하면 3개의 값을 한 문장으로 받을 수 있다.
#include <stdio.h>
int main(void) {
double length, width, height, volume;
printf("상자의 가로 세로 높이를 한번에 입력: ");
scanf_s("%lf %lf %lf", &length, &width, &height);
volume = length * width * height;
printf("상자의 부피는 %lf입니다.", volume);
return 0;
}
여러가지 변수를 정의하고, 한 번에 입력받을 수 있는지 테스트하는 문제다. 또 약간 복잡한 실수 계산도 포함되어 있다.
5. 우리나라에서 많이 사용되는 면적 단위인 평을 제곱미터로 환산하는 프로그램을 작성하시오. 여기서 1평은 3.3㎡이다. 변수들의 자료형은 어떤 것을 선택하는 것이 좋은가? 기호 상수를 이용하여 1평당 제곱미터를 나타내어라. (실수 입출력, 실수 계산 / MEDIUM)
평을 입력하세요: 31
102.479800평방미터입니다.
HINT > 기호 상수는 const double SQMETER_PER_PYEONG=3.3058;와 같이 정의할 수 있다. #define SQMETER_PER_PYEONG 3.3058을 사용하여도 된다.
메인 개념 page > 136~137p (기호 상수 정의법)
#include <stdio.h>
#define SQMETER_PER_PYEONG 3.3058
int main(void) {
double PYEONG, SQMETER;
printf("평을 입력하세요: ");
scanf_s("%lf", &PYEONG);
SQMETER = PYEONG * SQMETER_PER_PYEONG;
printf("%lf평방미터입니다.", SQMETER);
return 0;
}
#define을 이용하여 기호상수를 정의했다. 하지만 아래와 같이 const int로 정의할 수도 있다.
#include <stdio.h>
int main(void) {
double PYEONG, SQMETER;
const double SQMETER_PER_PYEONG = 3.3058;
printf("평을 입력하세요: ");
scanf_s("%lf", &PYEONG);
SQMETER = PYEONG * SQMETER_PER_PYEONG;
printf("%lf평방미터입니다.", SQMETER);
return 0;
}
6. 다음과 같은 수식의 값을 계산하여 화면에 출력하는 프로그램을 작성하시오. 지수 표기법을 사용하여 변수들을 초기화한다. (실수 입출력, 실수 계산 / MEDIUM)
3.32 X 10^-3 + 9.76 X 10^-8
0.003320
HINT > 3.32 X 10^-3은 3.32e-3으로 표기하면 된다.
#include <stdio.h>
int main(void) {
printf("%lf", 3.32e-3 + 9.76e-8);
return 0;
}
이 정도 문제는 변수 선언을 하지 않고도 이렇게 printf 함수만으로 간단하게 출력이 가능하다.
이 문제에서 알 것은 지수를 코드상에서 어떻게 표기하느냐 정도다.
#include <stdio.h>
int main(void) {
double sum = 3.32e-3 + 9.76e-8;
printf("%lf", sum);
return 0;
}
물론 이렇게 sum 변수를 선언하여 출력할 수도 있다.
'C언어 > 쉽게 풀어쓴 C언어 EXPRESS 개정4판' 카테고리의 다른 글
[5下] 쉽게 풀어쓴 C언어 EXPRESS 개정 4판 5장 PROGRAMMING (7~12번) (0) | 2023.06.18 |
---|---|
[5上] 쉽게 풀어쓴 C언어 EXPRESS 개정 4판 5장 PROGRAMMING (1~6번) (1) | 2023.06.03 |
[4下] 쉽게 풀어쓴 C언어 EXPRESS 개정 4판 4장 PROGRAMMING (7~12번) (1) | 2023.06.03 |
[3] 쉽게 풀어쓴 C언어 EXPRESS 개정 4판 3장 PROGRAMMING (1) | 2023.05.27 |
[2] 쉽게 풀어쓴 C언어 EXPRESS 개정 4판 2장 PROGRAMMING (0) | 2023.05.26 |