[ 1 ~ 6번 ]
* 본문은 Microsoft Visual Studio 2022 버전 17.6.2를 사용하였으므로 다른 버전의 비쥬얼 스튜디오나 다른 C언어 작동 프로그램으로 작동할 경우 오류가 생길 수 있음을 양지해주세요.
7. 물리학에서 운동에너지는 E = mv^2 / 2.0으로 계산된다. 사용자로부터 질량(m)과 속도(v)를 받아서 운동에너지(E)를 계산하는 프로그램을 작성하여보자. 모든 변수는 double형을 사용하라. (실수 계산 / MEDIUM)
질량 (kg): 100
속도(m/s): 200
운동에너지(J): 2000000.000000
HINT > kenergy = 0.5*mass*speed*speed;와 같이 계산한다.
#include <stdio.h>
int main(void) {
double mass, speed, kenergy;
printf("질량(kg): ");
scanf_s("%lf", &mass);
printf("속도(m/s): ");
scanf_s("%lf", &speed);
kenergy = 0.5 * mass * speed * speed;
printf("운동에너지(J): %lf", kenergy);
return 0;
}
8. 사용자가 아스키 코드값을 입력하면 그 아스키 코드값에 해당하는 문자를 출력하는 프로그램을 작성하라. (실수 계산 / MEDIUM)
아스키 코드값을 입력하시오: 80
문자: P입니다.
HINT > 문자를 출력하려면 형식 지정자 %c를 사용한다. 정수를 받아서 (char)로 형변환하여 %c로 출력한다.
메인 개념 page > 150~151p (아스키코드)
#include <stdio.h>
int main(void) {
char code;
printf("아스키 코드값을 입력하시오: ");
scanf_s("%c", &code);
printf("문자:%c입니다.", code);
return 0;
}
char으로 선언해주고! 나머지도 %c로 도배해주고! 이런 코드로 하면 잘 작동될 것만 같다. 하지만 실행시켜 보면..
어라.. 8이 출력된다. 중간 code 값을 확인해보자.
#include <stdio.h>
int main(void) {
char code;
printf("아스키 코드값을 입력하시오: ");
scanf_s("%c", &code);
printf("%d", (int)code);
printf("문자:%c입니다.", code);
return 0;
}
중간 code 값을 (int) 형변환을 통해 정수로 받아보자.
우리가 하고 싶은 것은, 최종적으로 printf 함수에 있는 %c에게 Dec 80 값을 전달하는 것인데, Dec 56 값이 전달되어 문자는 8이 출력되었다! 이것을 통해서, 우리가 입력한 80은 정수 80이 아닌, 문자 '80'으로 인식되었고, 그게 또 '8'로 최종적으로 인식되어 code 변수에 저장된 값은 Dec 56이 된 것을 알 수 있다.
여러가지 테스트를 해보니, 가장 앞자리 숫자의 Dec값이 저장된다. 800도, 8000도 Dec 값은 56이다.
그러므로, 우리가 원하는대로 하기 위해서는 정수로 입력해야 하므로 아래와 같은 방법을 따를 수 있다.
#include <stdio.h>
int main(void) {
int code;
printf("아스키 코드값을 입력하시오: ");
scanf_s("%d", &code);
printf("문자:%c입니다.", (char)code);
return 0;
}
int로 code 함수값을 받고, 그걸 바로 (char)를 통해 형변환을 한 뒤, %c에 넣어주어 printf 함수로 출력하는 것이다.
물론 scanf 함수 없이 함수 선언과 printf 함수만 존재한다면, 아래와 같이 적어도 P가 나온다. (151p 예제)
char code = 80;
printf("%c", code);
9. 'a'+1, 'a'+2, 'a'+3을 문자 형식(%c)으로 출력하는 프로그램을 작성하시오. 이 프로그램에서 알 수 있는 것은 무엇인가? (아스키 코드 / MEDIUM)
b c d
HINT > 아스키 코드는 문자순서대로 나열되어 있다.
메인 개념 page > 150p (아스키 코드표)
#include <stdio.h>
int main(void) {
printf("%c ", 'a' + 1);
printf("%c ", 'a' + 2);
printf("%c", 'a' + 3);
return 0;
}
간단한 아스키코드 문제다. 이 문제가 말하고 싶은 것은 왜 'a' + n 일 때 b c d e f ... 가 출력되는가 인데,
아스키 코드 Dec 순서상 그렇게 되는 것이다. 이 때 'a'가 아닌 a로 입력하면 변수 a로 인식하니 주의.
'a'는 아스키 코드상 97번 Dec 코드를 가지고 있는 것이다. 'b'는 98번, 'c'는 99번. (150p 아스키코드 표 참조)
10. 경보음이 울린 후에 다음과 같은 메시지를 출력하고 다시 경보음이 울리는 프로그램을 작성하여보자. (특수 문자열 사용 / MEDIUM)
화재가 발생하였습니다.
HINT > 경보음은 특수 문자열 '\a'로 발생할 수 있다.
메인 개념 page > 153p (제어문자)
#include <stdio.h>
int main(void) {
printf("\a화재가 발생하였습니다.");
return 0;
}
\a를 추가하면 경보음을 낼 수 있다. (153p 참조)
11. 다음과 같이 화면에 출력하는 프로그램을 작성하시오. (특수 문자열 사용 / HARD)
"ASCII code", 'A', 'B', 'C'
\t \a \n
HINT > 화면에 따옴표 "를 출력하려면 \"와 같이 한다. \을 출력하려면 \\와 같이 한다. 한글 글꼴에서는 "\"가 "₩"로 표시된다.
메인 개념 page > 153p (제어문자)
#include <stdio.h>
int main(void) {
printf("\"ASCII\", \'A\', \'B\', \'C\'\n");
printf("\\t \\a \\n");
return 0;
}
HINT에 나와있듯, "와 '를 입력하려면 \", \'로 입력해야 하고, \를 입력하려면 \\를 입력해야 한다.
12. 정수형 변수에 대하여 실습하여보자. (8진수, 16진수 / MEDIUM)
int i = 255;
printf("%d \n", i);
메인 개념 page > 134p (n진수[진법]의 입출력 방식), 141p (2의 보수)
(1) i의 값을 형식 지정자 %o, %x를 사용하여 8진수, 16진수로도 출력하여 보라.
#include <stdio.h>
int main(void) {
int i = 255;
printf("%d \n",i);
printf("%o \n", i);
printf("%x", i);
return 0;
}
(2) i를 -1로 초기화한 후에 %x를 사용하여 출력해보자. 어떤 값이 출력되는가? 2의 보수인지를 확인하자. -2, -3도 확인해보자
#include <stdio.h>
int main(void) {
int i = -1;
printf("%x", i);
return 0;
}
음수이므로 아래와 같이 2의 보수로 출력된다. (141p 참조)
i) i = -1
ii) i = -2
iii) i = -3
'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 (1~6번) (0) | 2023.06.03 |
[3] 쉽게 풀어쓴 C언어 EXPRESS 개정 4판 3장 PROGRAMMING (1) | 2023.05.27 |
[2] 쉽게 풀어쓴 C언어 EXPRESS 개정 4판 2장 PROGRAMMING (0) | 2023.05.26 |