Tài liệu ôn tập môn Tin học Lớp 11 - Chương IV: Kiểu dữ liệu có cấu trúc
Bạn đang xem tài liệu "Tài liệu ôn tập môn Tin học Lớp 11 - Chương IV: Kiểu dữ liệu có cấu trúc", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- tai_lieu_on_tap_mon_tin_hoc_lop_11_chuong_iv_kieu_du_lieu_co.doc
Nội dung text: Tài liệu ôn tập môn Tin học Lớp 11 - Chương IV: Kiểu dữ liệu có cấu trúc
- Chương IV : KIỂU DỮ LIỆU CÓ CẤU TRÚC A. Tóm tắt lý thuyết: BÀI 11. KIỂU MẢNG 1. Kiểu mảng một chiều a. Khái niệm - Mảng một chiều là một dãy hữu hạn các phần tử có cùng kiểu. Mảng được đặt tên và mỗi phần tử mang một chỉ số. Để mô tả mảng một chiều cần xác định kiểu của các phần tử và cách đánh chỉ số các phần tử. - Với mảng một chiều ta quan tâm đến: Tên kiểu mảng một chiều. Số lượng phần tử trong mảng. Kiểu dữ liệu của phần tử. Cách khai báo biến mảng. Cách tham chiếu đến phần tử. b. Khai báo mảng một chiều - Cách 1: Khai báo trực tiếp: VAR : ARRAY [kiểu chỉ số] OF ; - Cách 2: Khai báo gián tiếp TYPE = ARRAY [kiểu chỉ số] OF ; VAR : ; - Trong đó: Kiểu chỉ số thường là một đoạn số nguyên liên tục có dạng n1 n2 (n1<n2; n1, n2 là các hằng hoặc biểu thức) Kiểu phần tử là kiểu dl của các phần tử của mảng. - Ví dụ 1: Var Nhietdo: array [1 Max] Of real; - Ví dụ 2: Khai báo mảng tối đa 100 số nguyên (chỉ số đầu tiên là 1) 1
- => Ta có các cách sau: Cách 1: Var a: Array[1 100] Of Integer; Cách 2: Const Nmax = 100; Var a: Array[1 Nmax] Of integer; c. Tham chiếu tới phần tử của mảng - Để tham chiếu tới phần tử của mảng ta gọi theo cấu trúc: Tên_biến[chỉ số] VD: Tham chiếu đến phần tử thứ 20 trong mảng A ta viết A[20]. Câu 1 : _ Phát biểu nào dưới đây về kiểu mảng là phù hợp ? A. Là một tập hợp các số nguyên; B. Độ dài tối đa của mảng là 255; C. Là một dãy hữu hạn các phần tử cùng kiểu; (*) D. Mảng không thể chứa kí tự; Câu 2 : _ Hãy chọn phương án ghép đúng nhất. Để khai báo số phần tử của mảng trong PASCAL, người lập trình cần A. khai báo một hằng số là số phần tử của mảng; B. khai báo chỉ số bắt đầu và kết thúc của mảng; (*) C. khai báo chỉ số kết thúc của mảng; D. không cần khai báo gì, hệ thống sẽ tự xác định; Câu 3 : _ Phát biểu nào dưới đây về chỉ số của mảng là phù hợp nhất ? A. Dùng để truy cập đến một phần tử bất kì trong mảng; (*) B. Dùng để quản lí kích thước của mảng; C. Dùng trong vòng lặp với mảng; D. Dùng trong vòng lặp với mảng để quản lí kích thước của mảng; Câu 4 : _ Phát biểu nào sau đây về mảng là không chính xác ? A. Chỉ số của mảng không nhất thiết bắt đầu từ 1; B. Có thể xây dựng mảng nhiều chiều; C. Xâu kí tự cũng có thể xem như là một loại mảng; D. Độ dài tối đa của mảng là 255; (*) Câu 5 : _ Thế nào là khai báo biến mảng gián tiếp ? A. Khai báo mảng của các bản ghi; B. Khai báo mảng xâu kí tự; C. Khai báo mảng hai chiều; D. Khai báo thông qua kiểu mảng đã có; (*) Câu 6 : _ Phương án nào dưới đây là khai báo mảng hợp lệ ? 2
- A. mang : ARRAY[0 10] OF INTEGER; (*) B. mang : ARRAY[0 10] : INTEGER; C. mang : INTEGER OF ARRAY[0 10]; D. mang : ARRAY(0 10) : INTEGER; Câu 7 : _ Cho khai báo sau : a : array[0 16] of integer ; Câu lệnh nào dưới đây sẽ in ra tất cả các phần tử của mảng trên ? A. for k := 1 to 16 do write(a[k]); B. for k := 16 downto 0 do write(a[k]); (*) C. for k:= 0 to 15 do write(a[k]); D. for k := 16 down to 0 write(a[k]); Câu 8 : _ Cho khai báo mảng và đoạn chương trình như sau : Var a : array[0 50] of real ; k := 0 ; for i := 1 to 50 do if a[i] > a[k] then k := i ; Đoạn chương trình trên thực hiện công việc gì dưới đây ? A. Tìm phần tử nhỏ nhất trong mảng; B. Tìm phần tử lớn nhất trong mảng; C. Tìm chỉ số của phần tử lớn nhất trong mảng; (*) D. Tìm chỉ số của phần tử nhỏ nhất trong mảng; Câu 9 : _ Cho khai báo mảng như sau : Var m : array[0 10] of integer ; Phương án nào dưới đây chỉ phần tử thứ 10 của mảng ? A. a[10]; C. a[9]; (*) B. a(10); D. a(9); Câu 10 : _ Hãy chọn phương án ghép đúng nhất. Mảng là kiểu dữ liệu biểu diễn một dãy các phần tử thuận tiện cho A. chèn thêm phần tử; B. truy cập đến phần tử bất kì; (*) C. xóa một phần tử D. chèn thêm phần tử và xóa phần tử; Câu 11 : _ Phát biểu nào sau đây là đúng ? 3
- A. Mảng một chiều là một dãy hữu hạn các số nguyên. B. Mảng một chiều là một dãy hữu hạn các phần tử cùng kiểu dữ liệu. (*) C. Có thể dùng bất cứ một kiểu dữ liệu chuẩn nào để đánh chỉ số cho các phần tử của mảng một chiều. D. Khi xây dựng kiểu mảng một chiều, người lập trình không cần khai báo kiểu dữ liệu của phần tử của mảng. Câu 12 : _ Phát biểu nào sau đây là sai ? A. Mỗi phần tử của mảng một chiều đều được đánh chỉ số, được chỉ định nhờ chỉ số tương ứng của nó. B. Với khai báo xây dựng kiểu mảng một chiều, không thể biết được mảng chứa tối đa bao nhiêu phần tử. (*) C. Trong khai báo xây dựng kiểu mảng một chiều, có thể biết được cách đánh chỉ số cho các phần tử của mảng. D. Chỉ số được đánh tuần tự, liên tiếp cho các phần tử kề nhau của mảng một chiều, từ phần tử đầu tiên cho đến phần tử cuối. Câu 13 : _ Hãy chọn phương án hợp lý nhất. Trong ngôn ngữ lập trình Pascal A. Các phần tử của mảng một chiều được sắp thứ tự theo chỉ số; (*) B. Các phần tử của mảng một chiều được sắp thứ tự theo giá trị giảm dần; C. Các phần tử của mảng một chiều được sắp thứ tự theo giá trị tăng dần; D. Các phần tử của mảng một chiều không sắp thứ tự . Câu 14 : _ Trong ngôn ngữ lập trình Pascal, để đổi giá trị hai phần tử mảng một chiều A tại hai vị trí i và j , ta viết mã lệnh như sau : A. A[i] := Tag; A[i] := A[j]; A[j] := Tag; B. Tag := A[i]; A[i] := A[j]; A[j] := Tag; (*) C. Tag := A[i]; A[j] := A[i]; A[j] := Tag; D. Tag := A[i]; A[i] := A[j]; Tag := A[j]; Câu 15 : _ Trong ngôn ngữ lập trình Pascal, đoạn chương trình sau thực hiện việc nào trong các việc sau (A là mảng số có N phần tử) ? S := 0 ; For i := 1 to N do S := S + A[i] ; A. Tính tổng các phần tử của mảng A; (*) B. In ra màn hình mảng A; C. Đếm số phần tử của mảng A; 4
- D. Không thực hiện việc nào trong 3 việc trên. Câu 16 : _ Trong ngôn ngữ lập trình Pascal, với khai báo như sau : Type mang = ARRAY[1 100] of integer ; Var a, b : mang ; c : array[1 100] of integer ; Câu lệnh nào dưới đây là hợp lệ ? A. a := b ; (*) B. b := c ; C. c := b ; D. a := c ; BÀI 12: KIỂU XÂU 1. Khái niệm - Xâu là một dãy kí tự trong bảng mã ASCII. Mỗi kí tự được gọi là một phần tử của xâu. - Số lượng kí tự trong xâu được gọi là độ dài của xâu . - Xâu có độ dài bằng 0 gọi là xâu rỗng. - Tham chiếu tới phần tử trong xâu được xác định thông qua chỉ số của phần tử trong xâu. [chỉ số] - Cách khai báo biến xâu: var : string [độ dài lớn nhất của xâu] ; - Ví dụ: Ten : String[10] ; Ho_dem : String[50] ; Que : String ; * Chú ý: 5
- Nếu không khai báo độ dài tối đa cho biến xâu kí tự thì độ dài ngầm định của xâu là 255 . Hằng xâu kí tự được đặt trong cặp nháy đơn ‘ ’. 2. Các thao tác xử lí xâu - Phép ghép xâu: Kí hiệu là dấu cộng (+) Ví dụ: ‘Ha’ + ‘ Noi’ + ‘ – ’ + ‘Viet Nam’ => cho kết quả là ‘Ha Noi – Viet Nam’ - Phép so sánh: , >=, = , <>. Xâu A là lớn hơn xâu B nếu như kí tự đầu tiên khác nhau giữa chúng kể từ trái sang trong xâu A có mã ASCII lớn hơn Nếu A và B là các xâu có độ dài khác nhau và A là đoạn đầu của B thì A là nhỏ hơn B. Hai xâu được coi là bằng nhau nếu chúng hoàn toàn giống nhau. Ví dụ: o (‘ABC’=’ABC’). o (‘ABCDEF’<’ABCFGH’). o (‘ABC’<’ABCDEF’). - Một số thủ tục chuẩn dùng để xử lí xâu: Hàm Delete(St,vt,n) Xoá n kí tự của xâu st bắt đầu từ vị trí vt. Hàm Insert(S1,S2,vt): Chèn xâu S1 vào xâu S2 bắt đầu từ vị trí vt của S2. Hàm Copy(S, vt, n): Tạo xâu gồm n kí tự liên tiếp bắt đầu từ vị trí vt của xâu S Hàm Length(S): Cho giá trị là độ dài xâu s. Hàm Pos(Obj, St): Cho kết quả là một vị trí đầu tiên của Obj trong chuỗi St. Nếu không tìm thấy thì hàm trả về kết quả là 0. Ví dụ: Hàm Pos(S1, S2): Cho vị trí xuất hiện đầu tiên của xâu S1 trong xâu S2. Hàm Upcase(ch): Cho chữ cái viết hoa tưng ứng với chữ thường trong ch. 6
- B. Bài tập: Câu 17 : _ Hãy chọn phương án ghép đúng. Độ dài tối đa của xâu kí tự trong PASCAL là A. 256; C. 65535; B. 255; (*) D. Tùy ý; Câu 18 : _ Hãy chọn phương án ghép đúng. Cho xâu S là ‘Hanoi-Vietnam’. Kết quả của hàm Length(S) là A. 12; C. 14 B. 13 (*) D. 15 Câu 19 : _ Hãy chọn phương án ghép đúng. Cho xâu S là ‘Hanoi-Vietnam’. Kết quả của hàm Pos(‘Vietnam’,S) là A. 5; C. 7; (*) B. 6; D. 8; Câu 20 : _ Cho khai báo sau : Var hoten : String; Phát biểu nào dưới đây là đúng ? A. Câu lệnh sai vì thiếu độ dài tối đa của xâu; B. Xâu có độ dài lớn nhất là 0; C. Xâu có độ dài lớn nhất là 255; (*) D. Cần phải khai báo kích thước của xâu sau đó; Câu 21 : _ Hãy chọn phương án ghép đúng nhất. Thủ tục chuẩn Insert(S1,S2,vt) thực hiện A. chèn xâu S1 vào S2 bắt đầu từ vị trí vt ; (*) B. chèn xâu S2 vào S1 bắt đầu từ vị trí vt ; C. nối xâu S2 vào S1; D. sao chép vào cuối S1 một phần của S2 từ vị trí vt ; Câu 22 : _ Đoạn chương trình sau in ra kết quả nào ? Program Welcome ; Var a : string[10]; Begin a := ‘tinhoc ’; writeln(length(a)); End. A. 6; B. 7; (*) 7
- C. 10; D. Chương trình có lỗi; Câu 23 : _ Cho str là một xâu kí tự, đoạn chương trình sau thực hiện công việc gì ? for i := length(str) downto 1 do write(str[i]) ; A. In xâu ra màn hình; B. In từng kí tự xâu ra màn hình; C. In từng kí tự ra màn hình theo thứ tự ngược, trừ kí tự đầu tiên; D. In từng kí tự ra màn hình theo thứ tự ngược; (*) Câu 24 : _ Cho str là một xâu kí tự, đoạn chương trình sau thực hiện công việc gì for i := 1 to length(str) – 1 do str[i+1] := str[i] ; A. Dịch chuyển các kí tự của xâu về sau 1 vị trí; B. Dịch chuyển các kí tự của sâu lên trước một vị trí; C. Khởi tạo lại mọi kí tự của xâu bằng kí tự đầu tiên; (*) D. Khởi tạo lại mọi kí tự của xâu bằng kí tự cuối cùng; Câu 25 : _ Hãy chọn phương án ghép đúng nhất. Kiểu dữ liệu có cấu trúc A. là kiểu dữ liệu chuẩn do mỗi ngôn ngữ lập trình cho sẵn, người lập trình chỉ cần khai báo nhờ các tên chuẩn; B. là kiểu dữ liệu do người lập trình xây dựng từ những kiểu dữ liệu đã có; (*) C. trong mỗi ngôn ngữ lập trình đều có cách thức xây dựng giống nhau; D. trong ngôn ngữ lập trình bậc cao chỉ là kiểu mảng, bản ghi và xâu; Câu 26 : _ Trong ngôn ngữ lập trình Pascal, xâu kí tự là ? A. Mảng các ký tự; B. Dãy các kí tự trong bảng mã ASCII; (*) C. Tập hợp các chữ cái trong bảng chữ cái tiếng Anh; D. Tập hợp các chữ cái và các chữ số trong bảng chữ cái tiếng Anh; Câu 27 : _ Trong ngôn ngữ lập trình Pascal, cách khai báo xâu kí tự nào sau đây là đúng ? A. S := file of string ; B. S : file of char ; C. S : string; (*) 8
- D. Cả 3 câu đều đúng ; Câu 28 : _ Trong ngôn ngữ lập trình Pascal, xâu kí tự có tối đa ? A. 8 kí tự; B. 256 kí tự; C. 16 kí tự; D. 255 kí tự; (*) Câu 29 : _ Trong ngôn ngữ lập trình Pascal, xâu kí tự không có kí tự nào gọi là ? A. Xâu không; B. Xâu rỗng; (*) C. Xâu trắng; D. Không phải là xâu kí tự; Câu 30 : _ Trong ngôn ngữ lập trình Pascal, phần tử đầu tiên của xâu ký tự mang chỉ số là ? A.0 B. Do người lập trình khai báo C. 1 (*) D. Không có chỉ số Câu 31 : _ Trong ngôn ngữ lập trình Pascal, khai báo nào trong các khai báo sau là sai khi khai báo xâu kí tự ? A. S : string; B. X1 : string[100]; C. S : string[256]; (*) D. X1 : string[1]; Câu 32 : _ Trong ngôn ngữ lập trình Pascal, thủ tục Delete(c, a, b) thực hiện công việc gì trong các việc sau? A. Xóa trong xâu kí tự c a kí tự bắt đầu từ vị trí b; (*) B. Xóa trong xâu a b kí tự từ vị trí c; C. Xóa trong xâu c b kí tự bắt đầu từ vị trí a; D. Xóa trong xâu b c kí tự bắt đầu từ vị trí a; Câu 33 : _ Trong ngôn ngữ lập trình Pascal, hàm Length(S) cho kết quả gì ? A. Độ dài xâu S khi khai báo; B. Số ký tự hiện có của xâu S không tính các dấu cách; C. Số ký tự của xâu không tính dấu cách cuối cùng D. Số ký tự hiện có của xâu S. (*) Câu 34 : _ Trong ngôn ngữ lập trình Pascal, sau khi chương trình thực hiện xong đoạn chương trình sau, giá trị của biến S là ? S := ‘Ha Noi Mua thu’; Delete(S,7,8); Insert(‘Mua thu’, S, 1); A. Ha Noi Mua thu; B. Mua thu Ha Noi mua thu; 9
- C. Mua thu Ha Noi; (*) D. Ha Noi; Câu 35 : _ Trong ngôn ngữ lập trình Pascal, đoạn chương trình sau thực hiện việc gì? If (ch >= ‘A’) and (ch 0 then dem := + 1 ; A. Đếm số lượng ký tự khác dấu cách của xâu S B. Đếm số lượng ký tự là chữ cái in hoa của xâu S C. Đếm số lượng ký tự là chữ cái thường trong xâu S 10
- D. Đếm số lượng chữ cái thường khác nhau có trong xâu S (*) Câu 42 : _ Trong ngôn ngữ lập trình Pascal, đoạn chương trình sau thực hiện công việc gì ? X := length(S) ; For i := X downto 1 do If S[i] = ‘ ’ then Delete(S, i, 1) ; { ‘ ’ là một dấu cách } A. Xóa dấu cách đầu tiên trong xâu ký tự S B. Xóa dấu cách thừa trong xâu ký tự S C. Xóa dấu cách tại vị trí cuối cùng của xâu S D. Xóa mọi dấu cách của xâu S (*) Câu 43 : _ Trong ngôn ngữ lập trình Pascal, đoạn chương trình sau thực hiện công việc gì ? S1 := ‘anh’ ; S2 := ‘em’ ; i := pos(S2, S) ; While i S[x – i + 1] then Found := 1 ; A. Found bằng 0 nếu S là xâu đối xứng; (*) B. Found bằng 0 nếu S là xâu không đối xứng; C. Found bằng 1 nếu S là xâu đối xứng; D. Found không có giá trị gì; Câu 45 : _ Trong ngôn ngữ lập trình Pascal, để xóa đi ký tự đầu tiên của xâu ký tự S ta viết : A. Delete(S, 1, 1); (*) B. Delete(S, i, 1); { i là biến có giá trị bất kỳ } C. Delete(S, length(S), 1); D. Delete(S, 1, i); { i là biến có giá trị bất kỳ } 11
- Câu 46 : _ Trong ngôn ngữ lập trình Pascal, để tìm vị trí xuất hiện đầu tiên của xâu ‘hoa’ trong xâu S ta có thể viết bằng cách nào trong các cách sau ? A. S1 := ‘hoa’ ; i := pos(S1, ‘hoa’) ; B. i := pos(‘hoa’, S) ; (*) C. i := pos(S, ’hoa’) ; D. i := pos(‘hoa’, ‘hoa’) ; Câu 47 : _ Trong ngôn ngữ lập trình Pascal, đoạn chương trình thực hiện công việc nào trong các công việc sau : i := pos(‘ ’, S); { ‘ ’ là 2 dấu cách } while i 0 do Begin Delete(X, i, 1) ; i := pos(‘ ’, X) ; End; A. Xóa tất cả các dấu cách trong xâu X ; (*) B. Xóa tất cả các dấu cách phía bên trái trong xâu X ; C. Xóa tất cả các dấu cách phía bên phải trong xâu X ; D. Xóa tất cả các dấu cách ở hai đầu của xâu X ; Câu 49 : _ Trong ngôn ngữ lập trình Pascal, sau khi thực hiện đoạn chương trình sau, biến X có giá trị là gì? S := ‘Hoang Anh Tuan’ ; X := ‘ ’ ; i := length(S) ; while S[i] <> ‘ ’ do Begin X := X + S[i] ; i := i + 1 ; 12 End ;
- A. Xâu rỗng B. ‘Hoang’ C. ‘Anh’ D. ‘Tuan’(*) Câu 50 : _ Trong ngôn ngữ lập trình Pascal, để in một xâu kí tự ra màn hình theo thứ tự ngược lại của các ký tự trong xâu (vd : abcd thi in ra là dcba), đoạn chương nào sau đây thực hiện việc gì ? A. For i := 1 to length(S) do write(S[i]) B. For i := length(S) downto 1 do write(S[i]) (*) C. For i := length(S) downto 1 do write(S) D. For i := 1 to length(S) div 2 do write(S[i]) Câu 51 : _ Trong ngôn ngữ lập trình Pascal, đoạn chương trình sau thực hiện công việc gì? d := 0 ; For i := 1 to length(S) do if S[i] = ‘ ’ then d := d + 1 ; A. Xóa đi các dấu cách trong xâu; B. Đếm số ký tự có trong xâu; C. Đếm số dấu cách có trong xâu; (*) D. Xóa đi các ký tự số; Câu 52 : _ Trong ngôn ngữ lập trình Pascal, đoạn chương trình sau thực hiện công việc gì? d := 0 ; For i := 1 to length(S) do if ( S[i] >= ‘ 0 ’ ) AND ( S[i] <= ‘ 9 ’ ) then d := d + 1 ; A. Đếm số ký tự là ký tự số trong xâu S; (*) B. Đếm xem có bao nhiêu ký tự số trong xâu S; C. Xóa đi các chữ số có trong S; D. Xóa đi ký tự đầu tiên trong S; 13