연재 완료/C Lang 예제코드 모음

C언어 연습문제 풀이 CH2 (6~10번)

라이피 (Lypi) 2018. 4. 25. 11:34
반응형

문제 출처 : YES C (정보공학연구소/생능출판사)


6. 16진수 ABC + BBC를 계산하는 프로그램을 작성하라.

#include <stdio.h>

void main()
{
	int a = 0xABC, b = 0xBBC;

	printf("%x + %x = %x",a, b, a+b );
}


7. 두 8진수 x,y를 키보드로 입력받아 사칙연산을 하는 프로그램을 작성하라.

#include <stdio.h> void main() { int x, y; printf("첫번째 8진수를 입력하세요. :"); scanf_s("%o", &x); printf("두번째 8진수를 입력하세요.(0제외) :"); scanf_s("%o", &y); //8진수와 16진수는 일반적으로 부호를 갖는 형태로 쓰지 않기 때문에 음수값이 나올경우 쓰레기값이 나온다. //그래서 10진수로 변경해서 계산했다. printf("\n입력받은 값을 10진수로 변경하면 x = %d, y = %d입니다. \n", x, y);

printf("%d + %d = %d \n", x, y, x + y); printf("%d - %d = %d \n", x, y, x - y); printf("%d * %d = %d \n", x, y, x * y); //y값이 0이면 런타임 에러가 난다. printf("%d / %d = %d \n", x, y, x / y); }


8. 두 정수 a, b를 입력받아 더한 결과를 8, 10, 16진수로 출력하는 프로그램을 작성하라.

#include <stdio.h>

void main()
{
	int a, b;

	printf("첫번째 정수를 입력하세요 : "); scanf_s("%d", &a);
	printf("두번째 정수를 입력하세요 : "); scanf_s("%d", &b);

	printf("\n");
	printf("두 정수의 합은 \n");
	printf("8진수로 %o, 10진수로 %d, 16진수로 %x 입니다. \n", a + b, a + b, a + b); 
}


9. scanf_s(), printf()를 이용하여 삼각형, 사각형의 넓이를 구하는 프로그램을 작성하라.  이 때 결과값을 화면 가운데에 출력할 수 있도록 하라.

//출력을 화면 가운데로 하라는 말이 이해가 안되서 그냥 자리수를 조정했다.
//콘솔창에서 커서를 이동시키는 함수도 있지만 굳이 사용하지 않았다.

#include <stdio.h>

void main()
{
	int a, b;

	printf("계산할 삼각형의 밑변을 입력해주세요 : "); scanf_s("%d", &a);
	printf("계산할 삼각형의 높이를 입력해주세요 : "); scanf_s("%d", &b);
	printf("\n 입력하신 삼각형의 넓이는 \n %40d \n 입니다. \n", a*b/2);

	printf("계산할 사각형의 가로를 입력해주세요 : "); scanf_s("%d", &a);
	printf("계산할 사각형의 세로를 입력해주세요 : "); scanf_s("%d", &b);
	printf("\n 입력하시는 사각형의 넓이는 \n %40d \n 입니다. \n", a*b);
}


10. -10을 unsigned integer와 16진수로 나타내면 그 값은 얼마인가?

#include <stdio.h>

void main()
{
	int a = -10;
	printf("-10을 부호없는 정수형으로 출력했을 때의 값 : %u \n", a);
	printf("-10을 16진수로 출력했을 떄의 값 : %x \n", a);

	//결과값으로 이상한 값이 나오는데 이는 제대로 된 값이 아닌 쓰레기값이다.
	//이에 대해 제대로 이해하려면 -10이 메모리에 어떤식으로 저장되는지와
	//저장된 값을 부호없는 정수형이나 16진수로 출력할 때 그 메모리를 어떤식으로 해석하는지에 대한 이해가 필요하다.
	//이 부분은 콘솔 환경을 넘어가서도 중요한 내용이니 기회가 될 떄 따로 정리를 해보도록 하겠다.
}


10번 추가 설명 (19.06.16)

  음수는 컴퓨터에 2의 보수 방식으로 저장된다. 즉, 8비트 환경에서 -10을 저장하면 1111 0110 으로 저장될 것이다.  

  (실제로는 32비트거나 64비트일 것이다.) 

  이를 부호없는 정수형으로 출력하면 앞의 128+64+32+16+4+2 = 이니 246이 된다. 

  (실제로는 더 큰 값이 나온다.) 

  이 값이 항상 일정하다는 보장이 있으면 어떤식으로든 쓸 수는 있겠지만 이 값은 컴퓨터 환경에 따라 다르게 될테니 쓸 수가 없다.

  또한 16진수 표현은 음수표현은 고려되어 있지 않기 때문에 부호없는 정수형의 값인 246을 16진수로 표현한 값이 나온다.


프로그래밍할 때 중요한 내용은 아니고 그냥 메모리 저장에 대한 내용에 대한 이해가 중요한 부분.

반응형