" content="[C로 배우는 쉬운 자료구조] 2장 연습문제 답안: 자료구조 구현을 위한 C 프로그래밍 기법 :: IT 복수전공 일기장" />

카테고리 없음

[C로 배우는 쉬운 자료구조] 2장 연습문제 답안: 자료구조 구현을 위한 C 프로그래밍 기법

뱌재데 2024. 5. 27. 11:44
728x90

2장: 자료구조 구현을 위한 C 프로그래밍 기법

 

 

 

교재 표지

프로그램 작성 코드는 첨부 zip 파일에 있습니다
답안 및 코드 오류 수정: 2023.10.06

자료구조_02장_연습문제.zip
0.01MB

[2장 연습문제]

 

 

01. int array[2][4]의 원소 개수와 배열의 전체 용량은? (단, 시스템에 정의된 int 자료형의 크기는 4바이트이다.)

원소 개수: 2*4=8개

배열의 용량=원소개수*자료형 크기

=8*4=32

① 6개, 24바이트 ② 6개, 32바이트

③ 8개, 24바이트 ④ 8개, 32바이트

 

02. 다음 변수 선언이 있는 상태에서 수행할 명령어 중에서 틀린 명령어는?

 
사진 삭제

사진 설명을 입력하세요.

char 형 포인터 p2, int 형 변수 j

① p1 = &i; ② p2 = &j;

③ *p1 = j; ④ i = *p1;

 

03. 다음 중 포인터에 주소를 지정하는 방법으로 틀린 것은?

 

① 주소 연산자를 사용해 변수 주소를 지정하는 방법 ptr=&a;

② 문자형 포인터에 문자열의 시작 주소를 지정하는 방법 ptr=str[0];

③ 동적 메모리를 할당하고 그 시작 주소를 포인터값으로 지정하는 방법 ptr=(char*)malloc(10*sizeof(char));

④ 변수 이름을 변수의 시작 주소로 사용하는 방법 변수 이름은 주소로 사용할 수 없음 //배열 이름은 사용 가능

int A[100]={ 0, } ;

int *ptr=A ;

 

04. if 문장에서 포인터 pt1과 pt2에 대한 설명으로 옳지 않은 것은?

 

① if (&pt1==&pt2)의 경우에 서로 다른 포인터가 동일한 주소에 있을 수 있다. 하나의 주소에는 하나의 값

② if (pt1==pt2)는 같은 대상을 가리키는지 검증한다.

③ if (*pt1==*pt2)의 경우에 가리키는 대상이 다르더라도 변수값은 같을 수 있다.

④ if (pt1==pt2)는 가리키는 대상의 주소가 동일한 것인지 검증한다.

 

05. 다음은 C 언어로 작성된 1차원 배열의 예제 프로그램이다. ㉠에 들어갈 수 있는 문장과 프로그램을 출력한 결과를 바르게 짝지은 것은?

 
사진 삭제

사진 설명을 입력하세요.

A[ ] = { 0, 1, 2, 3, ... , 99 }

㉠ 출력

① A[j] 100 j = 98

② &A[0]+j 99 주소값에 j를 더할 수 없음

③ *(A+j) 99 .A[99]의 값

④ *A+j 100 A[0] + j = 0+99

 

 

06. 다음 프로그램의 실행 결과로 옳은 것은?

 
사진 삭제

사진 설명을 입력하세요.

*ptr = 100, *(ptr+1) = 200, *(ptr+2)=300, ....

=> (ptr+3)+100 = 400 + 100 = 500

① 200 ② 300

③ 400 ④ 500

 

 

07. 구조체 변수에 대한 명령 중 바른 것은?

 
사진 삭제

사진 설명을 입력하세요.

 

① sp = Kim; ② sp = Lee; &Lee

③ Lee = Kim; Kim은 구조체 배열 ④ Kim[0] = Kim[3];

⑤ sp = Kim[1]; Kim[0]; 포인터는 배열의 시작을 가리켜야 한다.

 

08. 재귀호출 방법이 적당하지 않은 것은?

 

① 팩토리얼 ② 피보나치 수열

③ 구조체 변수 복사 ④ 1부터 n까지 누적 합계 구하기

구조체 변수 복사는 for() 반복문을 사용하거나 구조체 배열을 사용한다.

 

09. 재귀호출 프로그램에 해당하는 것은?

 

① 한 루틴이 반복될 때

② 한 루틴이 자기를 다시 호출할 때

③ 다른 루틴을 호출할 때

④ 한 루틴에서 다른 루틴으로 갈 때

 

10. 다음 함수를 이용해 f1(4)를 수행한 결괏값은?

 
사진 삭제

사진 설명을 입력하세요.

 

① 3 ② 4

③ 5 ④ 6

 

11. 다음 함수를 이용해 recursive(4)를 수행한 결괏값은?

 
사진 삭제

사진 설명을 입력하세요.

※오타: 마지막 줄의 22는 2*2, 즉 4가 되어야 한다.

① 149 ② 265

③ 373 ④ 597

 

12. 함수 호출 xxx(5)에서 반환되는 결괏값은?

 
사진 삭제

사진 설명을 입력하세요.

 

① 0 ② 4

③ 5 ④ 9

 

 

 

13. 순환 함수 f()에 대한 첫 번째 호출이 f(7)일 때, f(7)을 포함하여 함수 f()가 호출되는 총 횟수는?

 
사진 삭제

사진 설명을 입력하세요.

 

① 25 ② 35

③ 41 ④ 51

 

14. C 언어를 사용해 100행 50열로 이루어진 행렬을 2차원 배열 A[100][50]에 저장하려고 한다. 10행 5열에 정수값 15를 저장하는 방법으로 옳지 않은 것은?

 

① A[9][4] = 15 ② *(A[0] + 454) = 15

③ *(&A[9][0] + 4) = 15 ④ *(&A[0][0]+904) = 15 904가 아니라 454

 

15. 다음 ‘하노이 탑’ 프로그램을 수행한 결과에서 8행에 출력되는 문장으로 옳은 것은?

 
사진 삭제

사진 설명을 입력하세요.

 

① 원판 1을 C에서 B로 옮긴다. ② 원판 4을 A에서 C로 옮긴다.

③ 원판 3을 A에서 B로 옮긴다. ④ 원판 2을 B에서 C로 옮긴다.

 

16. 배열과 변수를 비교하여 설명하시오.

변수는 단일 값 저장에 사용되고 배열은 여러 값을 저장한다.

배열은 인덱스 형식으로 접근하지만 변수는 변수명을 통해 접근한다.

 

 

 

17~26번

자료구조_02장_연습문제.zip
0.01MB

 

각각 2_문제번호_요약.c 파일에 답안을 작성하였다.

2_17_성적처리.c

2_18_최대최소.c

2_19_문자열5개.c

2_20_문자열일치.c

2_21_포인터교환.c

2_22_대소문자.c 코드 수정(23.10.06)

2_23_역순출력.c

2_24_주소록.c

2_25_가우스.c

2_26_피보나치.c

 

27. [예제 2-3]에서 getchar( ); 명령어의 역할을 설명하시오. (힌트 : scanf()와 입력 버퍼 비우기)

 

getchar()는 입력 버퍼를 직접적으로 조작하지 않는다. 입력 버퍼에서 문자를 읽어오지 않고, 사용자가 키보드로 입력한 문자를 즉시 읽어온다.

 

scanf()는 입력 버퍼를 사용한다. 버퍼에 남아 있는 데이터를 읽어와 정해진 형식으로 변환한 후 변수에 저장한다. 입력 버퍼에 남아 있는 데이터가 다음 scanf()에 영향을 줄 수 있다.