- 1 -
데이터 구조 실습 (5주차)
2021. 3. 31
학번: 성명:
1. 다항식을 표현할 때, 계수가 0이 아닌 항만을 고려하고자 한다. 다음 다항식에 대해서 답하시오:
8x^3 + 7x + 1
a. 위의 다항식을 다음과 같이 표현하는 poly 타입을 정의하라: 이 타입은 배열 terms와 정수 변수 num를 포함한다. 여기서 terms는 다항식의 각 항의 계수(coef)와 차수(expo)의 쌍을 고차항부터 순서대로 저장하 는 배열이고, num은 다항식의 항의 개수를 포함한다. 단, terms의 원소 타입을 term_type으로 정의하라.
b. 변수 p를 poly 타입으로 선언하면서, 위의 다항식으로 초기화하는 C 문장을 작성하라.
c. 다항식 p에서 두 번째 항의 계수를 참조하는 C 문장을 작성하라.
d. 변수 q를 poly 타입으로 선언하면서, 다음 다항식으로 초기화하는 C 문장을 작성하라: 10x^5 + 2x^3 + 3x^2 + 6x
e. b), d)의 두 다항식 p, q를 더한 결과 다항식을 r로 표현하고자 한다. r을 poly 타입으로 선언하라. r의 값을 예상하고서 작성해보라.
f. b), d)의 다항식 p, q를 매개변수로 전달받아서 이 두 다항식을 더하여 그 결과 다항식을 반환하는 poly_add()를 작성하라.
f. 다음과 같이 main() 함수를 작성하여 위의 과정을 테스트하라.
// term_type 타입 정의 // poly 타입 정의 int main() {
// poly 타입 변수 p, q의 선언 및 초기화 // poly 타입 변수 r 선언
r = poly_add(p, q);
print(r); // 매개변수로 전달된 다항식을 8x^3 + 7x + 1와 같이 출력:
return 0;
}
- 2 -
2. 다음 각 문장을 실행하면서 아래 테이블을 완성하라. 각 문장의 의미를 작성하고, 확인하라.
int a = 10, b = 20;
int *p1, *p2;
p1 = &a; // 1) p2 = &b; // 2) b = *p1; // 3)
*p2 = 20; // 4)
*p1 = *p2; // 5) p2 = p1; // 6)
*p2 = 10; // 7)
3. 다음의 구조체에 대해서 아래 문항에 대한 C 문장을 작성하고 실행시켜서 확인하라.
typedef struct linkedNum { int val;
struct linkedNum *next;
} numlist;
a. list를 numlist 타입의 변수로 선언하고, val 필드에 10을 할당하고, next에 NULL을 할당하라.
b. numlist 타입의 구조체를 가리키는데 사용되는 포인터 p, q를 선언하라.
c. numlist 타입의 구조체를 동적으로 생성하여 p가 가리키게 하고, 이 구조체의 val 필드에 20을 할당하고, next에 NULL을 할당하라.
d. numlist 타입의 또 다른 구조체를 동적으로 생성하여 q가 가리키게 하고, 이 구조체의 val 필드에 30을 할 당하고, next에 NULL을 할당하라.
e. p가 가리키는 구조체의 next 필드가 q가 가리키는 구조체를 가리키게 하라.
f. q가 가리키는 구조체의 next 필드가 a)의 list 구조체를 가리키게 하라.
g. p로부터 접근 가능한 모든 구조체의 val 필드를 출력하라.
변
수 주소 해당 메모리 위치 내용
1) 2) 3) 4) 5) 6) 7)
a b p1 p2