Mô tả:
ĐẠI HỌC THÁI NGUYÊN
ĐỀ THI HẾT HỌC PHẦN
KHOA CÔNG NGHỆ THÔNG TIN
Môn thi: Cấu trúc dữ liệu và giải thuật; Hệ: Chính quy
………………
Thời gian chuẩn bị: 45 phút, không kể thời gian giao đề
Mã đề thi: 05
Câu 1( 2 điểm)
Trình bày các đặc điểm của giải thuật đệ quy. Giả sử a và b là những số nguyên
dương, Q là hàm số của a và b, được định nghĩa như sau:
0 nếu a=b
Hãy tính Q(2,3) và Q(14,3)
Câu 2( 3 điểm )
Giả sử cần quản lý một danh sách các số nguyên. Hãy viết dạng cài đặt danh sách
này bằng mảng, với cấu trúc danh sách đã cài đặt, viết các chương trình con thực
hiện các yêu cầu như sau:
1) Tính trung bình cộng của các số lưu trong danh sách
2) Loại bỏ ra khỏi danh sách số 3 đầu tiên tìm thấy trong danh sách
3) Hiển thị danh sách lên màn hình
Câu 3( 3 điểm )
Hãy vẽ cây nhị phân biểu diễn biểu thức toán học sau:
3*4+(12+b)/6
Từ cây biểu thức vừa dựng, anh (chị) hãy:
1) Viết dạng cài đặt cây bằng con trỏ,
2) Viết thủ tục duyệt cây theo thứ tự trước, sau
3) Viết biểu thức toán học trên dưới dạng tiền tố, hậu tố? nhận xét với kết quả
duyệt cây theo thứ tự trước, sau?
……………………Hết……………………….
Thí sinh không được sử dụng tài liệu, không ghi vào đề thi
CB coi thi không giải thích gì thêm và nộp lại đề thi cho phòng chức năng theo quy chế của bộ
Đáp án
Câu 1
+ Ba đặc điểm của giải thuật đệ quy: (1 đ)
-
Trong giải thuật đệ quy bao giờ cũng có lời gọi đến chính nó
-
Sau mỗi lời gọi đệ quy, kích thước của bài toán được thu nhỏ hơn
trước
-
Bao giờ cũng có một trường hợp suy biến (trường hợp đặc biệt để
đãm bảo tính dừng của giải thuật): bài toán được giải quyết theo một
cách khác hẳn và giải thuật cũng kết thúc
+ Tính : Q(2,3) =0; Q(14, 5) = 2
(1 đ)
Câu 2
+ Dạng cài đặt danh sách bởi mảng:
(0.5 đ)
Const n=maxlist;
Type list =
record
Ele: array[1..n]of integer;
Count: 0..n;
end;
Var L: list;
+ Các thủ tục tương ứng với các yêu cầu:
1) Tính trung bình cộng của các số lưu trong danh sách
function Trungbinh(l:list): integer;
var i, tam: integer;
Begin
for i:=1 to n do tam:= tam+L.Ele[i];
Trungbinh:=tam;
End;
2) Loại bỏ số 3 đầu tiên tìm thấy trong danh sách (1 đ)
procedure Loaibo(var L: list);
(0.5 đ)
var k,i:integer; found: boolean;
Begin
found:= false;
k:=1;
while (not found)and(k<=L.count) do
if(L.Ele[k]=3) then
begin
for
i:=k
to
L.count-1
L.Ele[i]:=L.Ele[i+1];
L.count:= L.count -1;
end;
if (not found) then writeln(‘So 3 khong co trong danh sách để loại bỏ’);
End;
3) Hiển thị danh sách lên màn hình (1 đ)
procedure Hienthi(l:list);
var i: integer;
begin
writeln(‘Danh sách cac so nguyen la:’);
for i:=1 to l.count do write(l.Ele[i]:6);
end;
Câu 3
Dựng cây:
+
(0.5 đ)
*
3
/
4
+
12
1) Dạng cài đặt:
(0.5 đ)
6
b
do
Type Tree=^nut;
Nut= record
Info: string;
Left, right: Tree;
End;
Var T: Tree;
2) Các thủ tục duyệt cây theo thứ tự trước, sau:
Giả sử xét cây gốc T, các thủ tục duyệt cây T
Thủ tục duyệt cây theo thứ tự trước:
(0.5 đ)
Procedure Preorder(T: Tree);
Begin
Write(T^.info);
Preorder(T^.left);
Preorder(T^.right);
End;
Thủ tục duyệt cây T theo thứ tự sau:
(0.5 đ)
Procedure postorder(T: Tree);
Begin
Postorder(T^.left);
Postorder(T^.right);
Write(T^.info);
End;
2) Biểu thức tiền tố , hậu tố và nhận xét:
b) + Biểu thức tiền tố:
(0.5 đ)
+*34/+12b6 => Biểu thức trùng với kết quả duyệt cây theo thứ tự
trước
+ Biểu thức hậu tố:
(0.5 đ)
34*+12b+6/ => Biểu thức trùng với kết quả duyệt cây theo thứ tự
sau
- Xem thêm -