A BOOK ON C - 프로그래밍기초와실습 (프기실) 6장 연습문제 풀이 보고서
- 최초 등록일
- 2014.03.19
- 최종 저작일
- 2005.05
- 13페이지/ 한컴오피스
- 가격 2,000원
목차
1. 다음 코드를 실행시키면 4개의 값이 출력된다. 이것들 중 같은 값들은 몇 개인가? 답에 대해 설명하여라.
4. i와 j는 int 형이고, p와 q는 int 형 포인터라면, 다음의 배정 수식 중 잘못된 것은 어느 것인가?
5. 변수가 선언되면, 그 변수들이 연속적인 메모리에 위치하는가? 다음과 같은 선언을 갖는 프로그램을 작성하여라.
6. 다음 프로그램은 /p 형식을 사용하여 어떤 주소들을 출력한다.
7. 만일 주소를 16진수 대신 10진수로 출력하여 보기 원한다면, 주소를 unsigned long으로 캐스트하고 /lu 형식을 사용하는 것이 안전한 방법이다. 연습 문제 6번의 printf() 문을 다음과 같이 수정하여 실행하여 보아라.
8. 다음 프로그램은 어떤 값을 출력하는가? 설명하여라.
11. 다음 프로그램은 무엇이 잘못되었는가? 프로그램을 올바르게 수정하고, 출력 값의 의미를 설명하여라.
17. p가 포인터라면, *p++와 (*p)++은 다르다. 다음 코드의 출력 결과는 무엇이겠는가? 설명하여라.
23. 3장에서 long int에 저장할 수 있는 가장 큰 수는 약 20억임을 보았다. 많은 응용 프로그램에서, 이 수의 크기는 충분치 않다. 예를 들어, 미연방정부는 수조의 숫자를 다룬다. (또는 천조?) 이 연습 문제에서는 원시적인 방법으로 어떻게 두 개의 커다란 정수를 더할 수 있는지 살펴본다. 프로그램은 다음과 같다. 숫자는 배열의 원소 0부터 N - 1까지 저장되지만, 출력은 반대로 된다는 것에 주의하여라. 이 프로그램을 이해하기 위해서는 초등학교에서 더하기를 어떻게 하라고 배웠는지 생각해 볼 필요가 있다. 2개의 정수의 곱을 계산하는 프로그램을 작성하여라.
본문내용
char *format = "%p %d %d %d\n";
int i = 3;
int *p = &i;
printf(format, p, *p + 7, 3 * **&p + 1, 5 * (p - (p - 2)));
? 같은값은 3개이다.(*p + 7, 3 * **&p + 1, 5 * (p - (p - 2)))
① *p=&i; : int형 포인터 p에 i의 주소를 입력한다.
② printf(format) : "%p %d %d %d\n" printf문의 형지정자를 출력한다.
③ p는 %p에 의해 찍히므로, p의 주소값이 그대로 찍혀 나온다.
④ *p +7 : p가 가리키는 값(i=3) + 7 = 10
⑤ 3* **&p +1 : (3 * (*(*(&p))) +1 , p에서 *와 & 연산자는 상쇄, 3 * *p 가 되므로, 9이고, 9+1=10 이 출력된다.
⑥ 5 * (p - (p - 2)) : p에서 2만큼의 offset을 뺀다음 그 주소값을 p에서 다시 빼주므로, 남는 값은 2가 된다. ∴ 5*2=10 이 출력된다.
참고 자료
없음