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

[4下] 쉽게 풀어쓴 C언어 EXPRESS 개정 4판 4장 PROGRAMMING (7~12번)

by EATSTAR 2023. 6. 3.
반응형

[ 1 ~ 6번 ]

 

쉽게 풀어쓴 C언어 EXPRESS 4장 PROGRAMMING (上)

이 페이지는 4장 1~6번 문제에 대해 서술하므로 7~12번의 문제는 아래의 링크를 참조하세요. (준비중) * 본문은 Microsoft Visual Studio 2022 버전 17.6.2를 사용하였으므로 다른 버전의 비쥬얼 스튜디오나

eatstar.tistory.com

 

* 본문은 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

반응형