vungtauitk33.files.wordpress.com · web viewbÀi 11 – 12 – 13 author mai chi created date...

39
HỆ THỐNG BÀI TẬP ÔN TẬP KHỐI 11 CHƯƠNG 4 BÀI 11 – 12 – 13 Đáp án trắc nghiệm là những câu được in nghiêng A. KIỂU MẢNG Mục tiêu: Cài đặt được thuật toán của một số bài toán đơn giản với KDL mảng. Thực hiện được khai báo mảng, truy cập, tính toán với các phần tử của mảng. Yêu cầu: Hiểu khái niệm mảng một chiều và hai chiều. Hiểu cách khai báo và truy cập đến các phần tử của mảng. Mức độ BT: BT căn bản 1. Trong các phát biểu sau, phát biểu nào sai? a. Kiểu mảng là KDL có cấu trúc, rất cần thiết và hữu ích. 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. c. Các ngôn ngữ lập trình thông dụng cho phép người lập trình xây dựng KDL mảng một chiều. d. Ngôn ngữ lập trình Pascal không cho phép người lập trình xây dựng KDL mảng một chiều. 2. Để khai báo mảng một chiều cần: a. Mô tả kiểu của các phần tử. b. Mô tả số lượng phần tử. c. Mô tả kiểu của các phần tử và cách đánh số của các phần tử của nó.

Upload: ngoanh

Post on 05-Jul-2018

212 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

HỆ THỐNG BÀI TẬP ÔN TẬP

KHỐI 11 CHƯƠNG 4

BÀI 11 – 12 – 13

Đáp án trắc nghiệm là những câu được in nghiêng

A. KIỂU MẢNG

Mục tiêu:

Cài đặt được thuật toán của một số bài toán đơn giản với KDL mảng.

Thực hiện được khai báo mảng, truy cập, tính toán với các phần tử của mảng.

Yêu cầu:

Hiểu khái niệm mảng một chiều và hai chiều.

Hiểu cách khai báo và truy cập đến các phần tử của mảng.

Mức độ BT: BT căn bản

1. Trong các phát biểu sau, phát biểu nào sai?

a. Kiểu mảng là KDL có cấu trúc, rất cần thiết và hữu ích.

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.

c. Các ngôn ngữ lập trình thông dụng cho phép người lập trình xây dựng KDL mảng một

chiều.

d. Ngôn ngữ lập trình Pascal không cho phép người lập trình xây dựng KDL mảng một

chiều.

2. Để khai báo mảng một chiều cần:

a. Mô tả kiểu của các phần tử.

b. Mô tả số lượng phần tử.

c. Mô tả kiểu của các phần tử và cách đánh số của các phần tử của nó.

d. Mô tả cách đánh số các phần tử của nó.

Hãy chọn phương án hợp lý nhất.

3. Số phần tử của mảng một chiều là:

a. Vô hạn.

b. Có giới hạn.

c. Có nhiều nhất 100 phần tử.

d. Có nhiều nhất 1000 phần tử.

Page 2: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

4. KDL của các phần tử trong mảng là:

a. Mỗi phần tử có 1 kiểu.

b. Có cùng 1 KDL.

c. Có cùng 1 kiểu đó là kiểu số nguyên.

d. Có cùng 1 kiểu đó là kiểu số thực.

5. Cú pháp để khai báo biến mảng một chiều trực tiếp là:

a. Var <tên biến mảng> : array [kiểu chỉ số] <kiểu phần tử>;

b. type <tên biến mảng> : array [kiểu chỉ số] <kiểu phần tử>;

c. Var <tên biến mảng> : array [kiểu chỉ số] of <kiểu phần tử>;

d. type <tên biến mảng> : array [kiểu chỉ số] of <kiểu phần tử>;

6. Cú pháp câu lệnh nào sau đây là đúng?

a. type mang : array [-100 to100] of integer;

b. type mang : array [-100 ..100] of integer;

c. type mang = array [-100 to100] of integer;

d. type mang = array [-100 ..100] of integer;

7. Cú pháp câu lệnh nào sau đây là đúng?

a. Var mang : array [1 … 100] of char;

b. Var mang : array [1-100] of char;

c. Var mang1c : array (1 .. 100) of char;

d. Var mang1c : array [1 .. 100] of char;

8. Với khai báo A: array[1..100] of integer; thì việc truy xuất đến phần tử thứ 5 như sau:

a. A(5);

b. A[5];

c. A5;

d. A 5;

9. Cú pháp để khai báo biến mảng hai chiều trực tiếp là:

a. Var <tên biến mảng> : array [kiểu chỉ số hàng; kiểu chỉ số cột] <kiểu phần tử>;

b. Var <tên biến mảng> : array [kiểu chỉ số hàng, kiểu chỉ số cột] <kiểu phần tử>;

c. Var <tên biến mảng> : array [kiểu chỉ số hàng; kiểu chỉ số cột] of <kiểu phần tử>;

d. Var <tên biến mảng> : array [kiểu chỉ số hàng, kiểu chỉ số cột] of <kiểu phần tử>;

Page 3: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

10. Cú pháp câu lệnh nào sau đây là đúng?

a. Var mang : array [1 .. 100, 1 .. 100] of char;

b. Var mang : array [1 .. 100; 1 .. 100] of char;

c. Var mang2c : array (1 .. 100 1 .. 100) of char;

d. Var mang2c : array [1 .. 100, 1 .. 100] of char;

11. Cú pháp câu lệnh nào sau đây là đúng?

a. type mang : array [-100 to 100, -100 to 100] of integer;

b. type mang : array [-100 .. 100, -100 .. 100] of integer;

c. type mang = array [-100 to 100, -100 to 100] of integer;

d. type mang = array [-100 .. 100, -100 .. 100] of integer;

12. Với khai báo A: array[1..100, 1..100] of integer; thì việc truy xuất đến các phần tử như sau:

a. A(i,j)

b. A[i,j]

c. A(i;j)

d. A[i;j]

13. Các phần tử trong mảng một chiều phải:

a. Giống hệt nhau

b. Có kiểu dữ liệu giống nhau

c. Là số nguyên

d. Là số thực

14. Viết chương trình nhập vào mảng một chiều các số nguyên, hiển thị các số đó ra màn hình.

Program BT14;

Var A: array[1..100] of integer;

i, n: byte;

Begin

Writeln(‘Nhap so phan tu cua mang: ’); Readln(n);

For i:= 1 to n do

Write(‘Nhap gia tri phan tu thu’, i);

Readln(A[i]);

Writeln(‘Gia tri cua mang sau khi nhap la: ’);

Page 4: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

For i:=1 to n do

Write(A[i], ‘ ’);

Readln;

End.

15. Viết chương trình nhập vào mảng một chiều các số nguyên sau đó thực hiện:

a. Đếm xem có bao nhiêu phần tử có giá trị bằng 100.

b. Đếm xem có bao nhiêu phần tử có giá trị lớn hơn -100 và nhỏ hơn 100.

Program BT15;

Var A: array[1..100] of integer;

i, n, dem1, dem2: byte;

Begin

Writeln(‘Nhap so phan tu cua mang: ’); Readln(n);

dem1 := 0; dem2 := 0;

For i:= 1 to n do

Begin

Write(‘Nhap gia tri phan tu thu’, i);

Readln(A[i]);

If (A[i] = 100) then dem1 := dem1 + 1;

If (A[i] > -100) and (A[i] < 100) then

dem2 := dem2 + 1;

End;

Writeln(‘Co ’, dem1, ‘phan tu bang 100’ );

Writeln(‘Co ’, dem2, ‘phan tu lon hon -100 va nho hon

100’);

Readln;

End.

16. Viết chương trình nhập vào mảng một chiều các số nguyên sau đó thực hiện:

a. Đếm xem có bao nhiêu phần tử có giá trị chia hết cho 3.

b. Đếm xem có bao nhiêu phần tử có giá trị lớn hơn -100 và nhỏ hơn 100 và chia hết cho 3.

Page 5: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

Program BT16;

Var A: array[1..100] of integer;

i, n, dem1, dem2: byte;

Begin

Writeln(‘Nhap so phan tu cua mang: ’); Readln(n);

dem1 := 0; dem2 := 0;

For i:= 1 to n do

Begin

Write(‘Nhap gia tri phan tu thu’, i);

Readln(A[i]);

If (A[i] mod 3 = 0) then

begin

dem1 := dem1 + 1;

If(A[i] > -100)and(A[i] < 100)then

dem2 := dem2 + 1;

end;

End;

Writeln(‘Co ’, dem1, ‘phan tu chia het cho 3’);

Writeln(‘Co ’, dem2, ‘phan tu lon hon -100 nho hon 100

va chia het cho 3’);

Readln;

End.

17. Viết chương trình nhập vào mảng một chiều các số nguyên rồi thực hiện các công việc sau:

a. Tính tổng các phần tử của mảng.

b. Đếm số các phần tử có giá trị dương và tính tổng của chúng.

c. Đếm số các phần tử có giá trị âm và tính tổng của chúng.

Program BT17;

Var A:array[1..100] of integer;

i, n, dem, S, Sd, Sa: integer;

Begin

Page 6: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

Writeln(‘Nhap so ptu cua mang:’); Readln(n);

S := 0; Sd := 0; Sa := 0; dem :=0;

For i:=1 to n do

Begin

Writeln(‘Nhap ptu thu’, i,‘: ’);

Readln(A[i]); S := S + A[i];

If (A[i] > 0) then

Begin

dem := dem + 1; Sd := Sd + A[i];

End;

End;

Sa := S – Sd;

Writeln(‘Tong cua day vua nhap la: ’, S);

Writeln(‘Co ’, dem, ‘phan tu co gia tri duong. Tong

cac phan tu duong la’, Sd);

Writeln(‘Co ’, n - dem, ‘phan tu co gia tri am. Tong

cac phan tu am la’, Sa);

Readln;

End.

18. Viết chương trình nhập vào mảng một chiều các số thực rồi thực hiện các công việc sau:

a. Tìm số dương đầu tiên và chỉ số của nó trong mảng.

b. Tìm số âm đầu tiên và chỉ số của nó trong mảng.

c. Tìm số dương cuối cùng và chỉ số của nó trong mảng.

d. Tìm số âm cuối cùng và chỉ số của nó trong mảng.

Program BT18;

Var A:array[1..100] of integer;

i, n: integer;

Begin

Writeln(‘Nhap so ptu cua mang:’); Readln(n);

For i:=1 to n do

Page 7: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

Begin

Writeln(‘Nhap ptu thu’, i,‘: ’);Readln(A[i]);

End;

For i:=1 to n do

Begin

If (A[i] > 0) then

Writeln(‘So duong dau tien co gia tri’,

A[i], ‘chi so’, i);

Break;

End;

For i:=1 to n do

Begin

If (A[i] < 0) then

Writeln(‘So am dau tien co gia tri’,

A[i], ‘chi so’, i);

Break;

End;

For i:=n downto 1 do

Begin

If (A[i] < 0) then

Writeln(‘So duong cuoi cung co gia tri’,

A[i], ‘chi so’, i);

Break;

End;

For i:=n downto 1 do

Begin

If (A[i] < 0) then

Writeln(‘So am cuoi cung co gia tri’,

A[i], ‘chi so’, i);

Break;

Page 8: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

End;

Readln;

End.

19. Viết chương trình nhập vào mảng một chiều các số nguyên rồi thực hiện các công việc sau:

a. Tìm giá trị lớn nhất và in ra chỉ số của nó.

b. Tìm giá trị nhỏ nhất và in ra chỉ số của nó.

c. Tìm giá trị lớn nhất mà chia hết cho 3.

Program BT19;

Var A: array[1..100] of integer;

i, n, Max, Min, k, l, Max3: byte;

Begin

Writeln(‘Nhap so phan tu cua mang: ’); Readln(n);

Max := A[1]; Min := A[n]; k := 0; l := 0;

For i:= 1 to n do

Begin

Write(‘Nhap gia tri phan tu thu’, i);

Readln(A[i]);

End;

For i:= 2 to n do

Begin

If (A[i] > Max) then

Begin

Max := A[i]; k := i;

End;

End;

Writeln(‘Gia tri lon nhat la’, Max, ‘chi so la’, k);

For i:= n-1 downto 1 do

Begin

If (A[i] < Min) then

Begin

Page 9: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

Min := A[i]; l := i;

End;

End;

Writeln(‘Gia tri nho nhat la’, Min, ‘chi so la’, l );

Max3 := Min;

For i:=1 to n do

If (A[i] mod 3 = 0) and (A[i] > Max3) then

Max3 := A[i];

Writeln(‘Gia tri lon nhat chia het cho 3 la’, Max3);

Readln;

End.

20. Viết chương trình nhập vào mảng một chiều các số nguyên rồi thực hiện các công việc sau:

a. Tìm giá trị trung bình của các phần tử.

b. Đếm số phần tử có giá trị lớn hơn giá trị trung bình.

Program BT20;

Var A:array[1..100] of integer;

i, n, dem, S, TB: integer;

Begin

Writeln(‘Nhap so phan tu cua mang: ’); Readln(n);

S:=0; dem:=0;

For i:= 1 to n do

Begin

Write(‘Nhap gia tri phan tu thu’, i);

Readln(A[i]);

S := S + A[i];

End;

TB := S / n;

For i := 1 to n do

If (A[i] > TB) then dem := dem + 1;

Writeln(‘Co’, dem, ‘phan tu co gia tri lon hon’, TB);

Page 10: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

Readln;

End.

21. Viết chương trình nhập vào mảng một chiều các số nguyên rồi thực hiện các công việc sau:

a. In ra danh sách các số chẵn và tổng của chúng.

b. In ra danh sách các số lẻ và tổng của chúng.

Program BT21;

Var A:array [1..100] of integer;

i, n, Sc, Sl: integer;

Begin

Writeln(‘Nhap so phan tu cua mang: ’); Readln(n);

Sc:=0; Sl:=0;

For i:= 1 to n do

Begin

Write(‘Nhap gia tri phan tu thu’, i);

Readln(A[i]);

End;

Writeln(‘Danh sach so chan cua mang la:’);

For i:=1 to n do

If (A[i] mod 2 = 0) then

Begin

write(A[i], ‘ ’); Sc := Sc + A[i];

End;

Writeln(‘Tong cac so chan cua mang la’, Sc);

Writeln(‘Danh sach so le cua mang la:’);

For i:=1 to n do

If (A[i] mod 2 <> 0) then

Begin

write(A[i], ‘ ’); Sl := Sl + A[i];

End;

Writeln(‘Tong cac so le cua mang la’, Sl);

Page 11: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

Readln;

End.

22. Viết chương trình tính tổng bình phương của các số âm trong một mảng gồm N phần tử.

Ý tưởng:

Duyệt tất cả các phần tử A[i] của mảng: Nếu A[i]<0 thì cộng dồn (A[i])2 vào biến S.

Program BT22;

Uses Crt;

Type Mang = ARRAY[1..50] Of Integer;

Var A:Mang;

N,i,S:Integer;

Begin

{Nhập mảng}

Write(‘Nhap N=’); Readln(N);

For i:=1 To N Do

Begin

Write(‘A[‘,i,’]=’); Readln(A[i]);

End;

{Tính tổng}

S:=0;

For i:=1 To N Do

If A[i]<0 Then S:=S+A[i]*A[i];

{In kết quả ra màn hình}

Writeln(‘S= ’, S);

Readln;

End.

23. Viết chương trình nhập vào một mảng A gồm N số nguyên và nhập thêm vào một số nguyên

X. Hãy kiểm tra xem phần tử X có trong mảng A hay không?

Ý tưởng: Dùng thuật toán tìm kiếm tuần tự. So sánh x với từng phần tử của mảng A. Thuật toán

dừng lại khi x=A[i] hoặc i>N.

Page 12: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

Nếu x=A[i] thì vị trí cần tìm là i, ngược lại thì kết quả tìm là 0 (không tìm thấy).

Program BT23;

Uses Crt;

Type Mang = ARRAY[1..50] Of Integer;

Var A:Mang;

N,i,x:Integer;

Function TimKiem(x, N: Integer; A:Mang):Integer;

Var i:Integer;

Begin

I:=1;

While (I <= N) and (X<>A[I]) do I:=I+1;

If I <= N Then Timkiem:=I Else Timkiem:=0;

End;

Begin

{Nhập mảng}

Write(‘Nhap N=’); Readln(N);

For i:=1 To N Do

Begin

Write(‘A[‘,i,’]=’); Readln(A[i]);

End;

Write(‘Nhap X=’); Readln(x);

{Kết quả tìm kiếm}

If TimKiem(X,N,A)<>0 Then

Writeln(‘Vi tri cua X trong mang la:’,

TimKiem(X,N,A))

Else Writeln(‘X khong co trong mang.’);

Readln;

End.

24. Cho một mảng 2 chiều A cấp mxn gồm các số nguyên và một số nguyên x. Viết chương

trình thực hiện các công việc sau:

Page 13: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

a/ Đếm số lần xuất hiện của x trong A và vị trí của chúng.

b/ Tính tổng các phần tử lớn nhất của mỗi dòng.

Program BT24;

Uses Crt;

Type Mang = ARRAY[1..10,1..10] Of Integer;

Var A:Mang;

m,n,i,j,x,dem,S,max:Integer;

Begin

{Nhập ma trận}

Write(‘Nhap số dòng m=’); Readln(m);

Write(‘Nhap số cột n=’); Readln(n);

For i:=1 To m Do

For j:=1 To n Do

Begin

Write(‘A[‘,i,j,’]=’); Readln(A[i,j]);

End;

{Nhập x}

Write(‘Nhap x=’); Readln(x);

{Đếm số lãn xuất hiện của x và vị trí của x}

dem:=0;

Writeln(‘Vi tri cua x trong mang A: ‘);

For i:=1 To m Do

For j:=1 To n Do

If x=A[i,j] Then

Begin

Write(i,j,’ ; ‘); dem:=dem+1;

End;

Writeln(‘So lan xuat hien cua x trong mang la: ‘,dem);

{Tính tổng các phần tử lớn nhất của mỗi dòng}

S:=0;

Page 14: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

For i:=1 To m Do {duyệt qua từng dòng}

Begin

{Tìm phần tử lớn nhất của dòng thứ i}

Max:=A[i,1];

For j:=2 To n Do

{duyệt từng phần tử của dòng thứ i}

If max<A[i,j] Then max:=A[i,j];

{Cộng max vào biến S}

S:=S+max;

End;

Writeln(‘Tong cac ptu lon nhat cua moi dong la: ‘,S);

Readln;

End.

25. Trong khai báo mảng một chiều, nếu ở kiểu chỉ số có n1=-99; n2=0. Hãy cho biết muốn

tham chiếu đến phần tử thứ 4 của mảng thì chỉ số là:

A. 4 B. 3 C. -96 D. -95

26. Các phần tử của mảng có thể có kiểu gì?

A. Real; C. Real, Integer, Char;

B. Real, Integer; D. Real ,Integer, Char, Boolean;

27. Để tham chiếu đến phần tử hàng 5 cột 4 của mảng 2 chiều B, ta viết:

a. A[5,4] b. A[4,5] c. B[5,4] d. B[4,5]

28. Giả sử mảng 1 chiều A được khai báo như sau: VAR A: array[-1..1] of Real;

Mảng A được khai báo như trên có bao nhiêu phần tử?

A. 3 B. 1 C. 0 D. 2

BT LÀM THÊM

1. Viết chương trình mảng một chiều các số nguyên sau đó sắp xếp các giá trị của mảng theo

thứ tự tăng dần rồi in ra màn hình.

2. Viết chương trình mảng một chiều các số nguyên sau đó sắp xếp các giá trị của mảng theo

thứ tự giảm dần rồi in ra màn hình.

Page 15: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

3. Viết chương trình nhập vào mảng một chiều các số nguyên, đếm số cách chọn hai phần tử

mà tổng giá trị của chúng bằng 10.

4. Viết chương trình nhập vào một mảng bao gồm n phần tử số nguyên (2<n<50). Tính tích các

giá trị là bội của 3 và tổng các phần tử là ước của 5. In KQ sau khi tính.

5. Viết chương trình nhập vào 1 mảng gồm 30 phần tử số thực. Tính tích các giá trị không phải

là bội của 3 và tổng các phần tử không phải là ước của 5. In KQ sau khi tính.

6. Viết chương trình nhập vào 1 mảng bao gồm n phần tử số nguyên (50<n<100). Tìm và in ra

màn hình các số nguyên tố.

7. Viết chương trình nhập vào 1 mảng bao gồm 10 phần tử số nguyên. Nhập k. Xóa phần tử có

giá trị bằng k đầu tiên tìm được. In mảng sau khi xóa.

8. Viết chương trình nhập vào 1 mảng bao gồm n phần tử số nguyên (2<n<50). Sắp xếp mảng

vừa nhập. In ra các phần tử ở vị trí lẻ.

9. Viết chương trình nhập vào 1 mảng số nguyên N phần tử. In ra màn hình mảng đó. Tính tổng

các số là bội của 3 và 2.

10. Viết chương trình nhập vào 1 mảng số nguyên N phần tử. In ra màn hình mảng đó. Tìm số

lớn nhất và nhỏ nhất trong mảng. Đếm xem có bao nhiêu số dương, số âm trong mảng.

11. Viết chương trình nhập vào mảng 1 chiều gồm n phần tử (n <= 100) kiểu nguyên rồi thực

hiện:

a. Đếm số lượng phần tử dương rồi in KQ ra màn hình.

b. Tính tổng các phần tử dương trong mảng.

c. Tính trung bình các phần tử trong mảng.

d. Tính trung bình các phần tử dương trong mảng.

e. Tìm vị trí đầu tiên của phần tử bằng k với k nhập từ bàn phím.

f. Tìm vị trí đầu tiên của phần tử bằng k với k nhập từ bàn phím. Nếu có nhiều phần tử

bằng k thì hiển thị ra màn hình tất cả các vị trí của phần tử bằng k đó.

g. Đếm số lượng phần tử là số nguyên tố trong mảng.

h. Kiểm tra mảng vừa nhập có phải là cấp số cộng hay không?

i. Sắp xếp mảng theo thứ tự tăng dần các phần tử và hiện ra màn hình mảng tăng đó.

Page 16: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

KIỂU XÂU

Mục tiêu:

Cài đặt được thuật toán của một số bài toán đơn giản với KDL xâu.

Thực hiện được khai báo xâu, nhập, xuất xâu, tham chiếu đến các phần tử của xâu.

Biết cách làm việc với biến xâu qua các hàm và thủ tục.

Yêu cầu:

Hiểu khái niệm mảng một chiều và hai chiều.

Hiểu cách khai báo và truy cập đến các phần tử của mảng.

Biết các hảm và thủ tục liên quan đến xâu.

Mức độ BT: BT căn bản

1. Để khai báo biến kiểu xâu trực tiếp ta sử dụng cú pháp nào?

a. var <tên biến> : <tên kiểu> ;

b. var <tên biến> : string [độ dài lớn nhất của xâu;

c. var <tên biến> = <tên kiểu> ;

d. var <tên biến> = string [độ dài lớn nhất của xâu] ;

2. Trong các khai báo sau, khai báo nào đúng?

a. var hoten : string [27];

b. var diachi : string (100);

c. var hoten = string [30];

d. var hoten = string (20);

3. Trong các phát biểu sau, phát biểu nào sai?

a. Xâu không có kí tự nào được gọi là xâu rỗng.

b. Thao tác nhập và xuất đối với dữ liệu kiểu xâu như nhập hay xuất giá trị của biến KDL

chuẩn.

c. Xâu có chiều dài không được vượt quá 255.

d. Có thể tham chiếu đến từng kí tự trong xâu.

4. Trên dữ liệu kiểu xâu có các phép toán nào?

a. Phép toán so sánh và phép gán.

b. Phép so sánh và phép nối.

c. Phép gán và phép nối.

Page 17: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

d. Phép gán, phép nối và phép so sánh.

5. Trong các phát biểu sau, phát biểu nào sai?

a. Xâu A lớn hơn xâu B nếu độ dài xâu A lớn hơn độ dài xâu B.

b. Xâu A lớn hơn xâu B nếu 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.

c. 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 nhỏ hơn B.

d. Hai xâu bằng nhau nếu chúng giống nhau hoàn toàn.

6. Xâu ‘ABBA’ lớn hơn xâu:

a. ‘ABC’

b. ‘ABABA’

c. ‘ABCBA’

d. ‘BABA’

7. Xâu A = ‘ABBA’ nhỏ hơn xâu:

a. ‘A’

b. ‘B’

c. ‘AAA’

d. ‘ABA’

8. Xâu ‘ABBA’ bằng xâu:

a. ‘A’

b. ‘B’

c. ‘abba’

d. Tất cả A,B,C đều sai.

9. Xâu ‘ABBA’ nhỏ hơn xâu:

a. ‘a’

b. ‘A’

c. ‘AB’

d. ‘ABB’

10. Xâu ‘ABBA’ nhỏ hơn xâu:

a. ‘a’

b. ‘A’

Page 18: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

c. ‘AAA’

d. ‘ABA’

11. Xâu ‘2007’ nhỏ hơn xâu:

a. ‘20007’

b. ‘207’

c. ‘1111111111’

d. ‘1010101010’

12. Cho A = ‘abc’ và B = ‘ABC’ khi đó A+B cho kết quả nào?

a. ‘aAbBcC’

b. ‘abcABC’

c. ‘AaBbCc’

d. ‘ABCabc’

13. Thủ tục delete(st, p, n) thực hiện:

a. Xóa n kí tự của biến xâu st bắt đầu từ vị trí p.

b. Xóa p kí tự của biến xâu st bắt đầu từ vị trí n.

c. Xóa các kí tự của biến xâu st bắt đầu từ vị trí n đến vị trí p.

d. Xóa các kí tự của biến xâu st bắt đầu từ vị trí p đến vị trí n.

14. Cho xâu s = ‘123456789’ sau khi thực hiện thủ tục delete(s,3,4) thì:

a. s = ‘1256789’

b. s = ‘12789’

c. s = ‘123789’

d. s = ‘’

15. Thủ tục insert (s1,s2,p) thực hiện:

a. Chèn xâu s1 vào xâu s2 bắt đầu từ vị trí p.

b. Chèn xâu s2 vào xâu s1 bắt đầu từ vị trí p.

c. Chèn p kí tự của xâu s1 vào đầu xâu s2.

d. Chèn p kí tự của xâu s2 vào đầu xâu s1.

16. Cho xâu s1 = ‘123’ và s2 = ‘abc’ sau khi thực hiện thủ tục insert (s1,s2,2) thì:

a. s1 = ‘123’ và s2 = ‘a123bc’

b. s1 = ‘1abc23’ và s2 = ‘abc’

Page 19: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

c. s1 = ‘123’ và s2 = ‘12abc’

d. s1 = ‘ab123’ và s2 = ‘abc’

17. Hàm length(s) cho giá trị là:

a. Độ dài của xâu s.

b. Kí tự đầu tiên của xâu s.

c. Kí tự cuối cùng của xâu s.

d. Kí tự có STT nhỏ nhất trong xâu s.

18. Cho s = ‘500 ki tu’, hàm length(s) cho giá trị bằng:

a. 500

b. 9

c. 5

d. ‘500’

19. Hàm pos(s1,s2) cho giá trị là:

a. Vị trí xuất hiện đầu tiên của s1 trong s2.

b. Vị trí xuất hiện đầu tiên của s2 trong s1.

c. Vị trí xuất hiện cuối cùng của s1 trong s2.

d. Vị trí xuất hiện cuối cùng của s2 trong s1.

20. Cho s1 = ‘010’ và s2 = ‘1001010’ hàm pos(s1,s2) cho giá trị bằng:

a. 3

b. 4

c. 5

d. 0

21. Hàm copy(s,p,n) cho giá trị là:

a. Một xâu gồm n kí tự liên tiếp bắt đầu từ vị trí p của xâu S.

b. Một xâu gồm p kí tự liên tiếp bắt đầu từ vị trí n của xâu S.

c. Một xâu gồm n kí tự liên tiếp bắt đầu từ vị trí p-n của xâu S.

d. Một xâu gồm p kí tự liên tiếp bắt đầu từ vị trí n-p của xâu S.

22. Cho s = ‘123456789’ hàm copy(s,2,3) cho giá trị bằng:

a. ‘234’

b. 234

Page 20: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

c. ‘34’

d. 34

23. Khai báo nào trong các khai báo sau là sai khi khai báo xâu kí tự:

a. var s_s : string;

b. var s1 : str[256];

c. var abc : string[100];

d. var cba : string[1];

24. Viết chương trình nhập vào 1 xâu bất kì và in ra màn hình xâu ngược lại.

Program BT24;

Var i,k: byte;

S: string;

Begin

Writeln(‘Nhap xau: ’); readln(S);

k := length(S);

For i := k downto 1 do write (a[i]);

Readln;

End.

25. Viết chương trình nhập vào 1 xâu. Hỏi xâu vừa nhập có phải là xâu đối xứng không?

Ví dụ: ‘ABCCBA’; ‘AAA’; ‘abcdcba’ là xâu đối xứng

‘abc’; ‘sdjgfuy’ không là xâu đối xứng

Program BT25;

Var St:string;

i,l:byte;

Begin

Write('Nhap chuoi: '); Readln(St);

l:=length(St); i:=1;

While (i < l div 2) and (St[i] = St[l-i+1]) do

begin

i:=i+1;

If i < (l div 2) then

Page 21: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

writeln('Chuoi nay doi xung');

end;

While (i < l div 2) and (St[i] <> St[l-i+1]) do

begin

i:=i+1;

If i < (l div 2) then

Writeln('Chuoi nay khong doi xung');

end;

Readln;

End.

26. Viết chương trình nhập 1 xâu bất kì, in ra màn hình xâu sau khi đã xóa tất cả các kí tự ‘A’.

Program BT26;

Var vt: byte;

st: string;

Begin

writeln(‘Nhap xau: ’); readln(st);

while pos(‘A’, st) <> 0 do

begin

vt:= pos (‘A’, st);

delete(st,vt,1);

end;

write(‘Xau sau khi da duoc xoa la: ’, st);

Readln;

end.

27. Viết chương trình nhập vào một chuỗi kí tự, sau đó nhập vào một kí tự bất kì và đếm số lần

của nó trong chuỗi đã nhập.

Program DEM_SO_KY_TU;

Uses Crt;

Var st:string[30];

Page 22: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

x:char;i,dem:integer;

Begin

Clrscr;

Writeln('DIEM SO LAN XUAT HIEN CUA 1 KY TU');

Writeln('------------------------------------------');

Write('Nhap xau ky tu la:');readln(st);

Write('Nhap ky tu x=');readln(x);

dem:=0;

For i:=1 to length(st) do

If x= st[i] then dem:=dem+1;

Writeln('so lan xuat hien cua ',x,' trong xau "', st,'"

la: ',dem);

Readln;

End.

28. Viết chương trình nhập vào 1 xâu bất kì, cho biết xâu có bao nhiêu từ, (mỗi từ là một dãy

các kí tự khác kí tự trắng liên tiếp nhau)

Program DEM_SO_KY_TU;

Uses Crt;

Var st:string[60];

i, sotu, dem:integer;

Begin

Clrscr;

Writeln('DIEM SO TU TRONG XAU');

Writeln('------------------------------------------');

Write('Nhap xau ky tu la:');readln(st);

{cộng thêm dấu cách phía trước xâu để đếm cả từ đầu tiên}

st := ' ' + st; dem := 0;

for i := 2 to length(s) do

{st[i] là vị trí bắt đầu 1 từ}

if (st[i-1]=' ') and (st[i]<>' ') then

Page 23: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

dem := dem + 1;

sotu := dem;

Readln;

End.

29. Viết chương trình nhập vào 1 xâu. Thay tất cả những ký tự ‘c’ trong xâu thành ký tự ‘k’.

Program BT33;

Var vt: byte;

st: string;

Begin

writeln(‘Nhap xau: ’); readln(st);

while pos(‘c’, st) <> 0 do

begin

vt:= pos (‘c’, st); delete(st,vt,1);

insert(‘a’,st,vt);

end;

write(‘Xau sau khi da duoc thay the la: ’, st);

Readln;

End.

30. Muốn biến h lưu trữ độ dài xâu s ta viết:

a. s:=copy(h); c. h:=copy(s);

b. s:=Length(h); d. h:=length(s);

31. Cho St:= ‘TIN HOC’; để có KQ là xâu ‘TIN’ ta thực hiện:

a. DELETE(St,4,2); b. DELETE(St,4,3)

c. DELETE(St,4,4) d. DELETE(St,2,4)

32. Cho St:= ‘NTPT - TRUONG THPT HOANG HOA THAM’; n:=POS(‘PT’,St) có giá trị là:

a. 3 b. 1 c. 0 d. 2

BT LÀM THÊM

1. Viết chương trình nhập vào 1 xâu không quá 30 kí tự. Nhập ký tự bất kỳ ch. Hỏi trong xâu

có ký tự nào bằng ký tự ch hay không?

Page 24: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

2. Viết chương trình nhập vào 1 xâu sau đó chuyển các kí tự thường của xâu thành kí tự hoa.

3. Viết chương trình nhập vào 1 xâu. In xâu theo thứ tự đảo ngược. In xâu chữ hoa ra màn hình.

4. Viết chương trình nhập vào 1 xâu. Đếm xem trong xâu có bao nhiêu phần tử là ‘a’ (không

phân biệt chữ hoa, chữ thường)

5. Nhập vào 1 xâu s khác rỗng và thực hiện chuẩn hóa xâu. Tức là :

a. Xóa các khoảng trắng thừa.

b. Chuyển những ký tự đầu thành chữ hoa, những ký tự khác thành chữ thường.

6. Viết chương trình nhập vào 1 xâu không quá 20 kí tự. Đổi xâu ra chữ hoa đầu mỗi từ. In KQ

ra màn hình.

Page 25: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

B. KIỂU BẢN GHI

Mục tiêu:

Cài đặt được thuật toán của một số bài toán đơn giản với kiểu bản ghi.

Yêu cầu:

Biết khái niệm kiểu bản ghi.

Biết cách khai báo, truy cập trường của bản ghi.

Biết cách gán giá trị của kiểu bản ghi.

Mức độ BT: BT căn bản

1. Để khai báo biến bản ghi gián tiếp, ta dùng cú pháp:

a. Type TênKiểu = record

Tên trường 1: kiểu 1;

Tên trường 2: kiểu 2;

Tên trường n : kiểu n;

End;

Var Tên biến : tên kiểu;

b. Type TênKiểu = record

Tên trường 1 = kiểu 1;

Tên trường 2 = kiểu 2;

Tên trường n = kiểu n;

End;

Var Tên biến : tên kiểu;

c. Type TênKiểu : record

Tên trường 1: kiểu 1;

Tên trường 2: kiểu 2;

Tên trường n : kiểu n;

End;

Var Tên biến : tên kiểu;

Page 26: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

d. Type TênKiểu : record

Tên trường 1 = kiểu 1;

Tên trường 2 = kiểu 2;

Tên trường n = kiểu n;

End;

Var Tên biến : tên kiểu;

2. Để khai báo biến bản ghi trực tiếp ta dùng cú pháp:

a. Var TênKiểu = record

Tên trường 1: kiểu 1;

Tên trường 2: kiểu 2;

Tên trường n : kiểu n;

End;

b. Var TênKiểu = record

Tên trường 1= kiểu 1;

Tên trường 2= kiểu 2;

Tên trường n = kiểu n;

End;

c. Var TênKiểu : record

Tên trường 1: kiểu 1;

Tên trường 2: kiểu 2;

Tên trường n : kiểu n;

End;

d. Var TênKiểu : record

Tên trường 1= kiểu 1;

Tên trường 2= kiểu 2;

Page 27: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

Tên trường n = kiểu n;

End;

3. Trong KDL bản ghi, mỗi bản ghi dùng để?

a. Mô tả hay lưu trữ thông tin về nhiều đối tượng cần quản lý.

b. Mô tả hay lưu trữ thông tin về 1 thuộc tính cần quản lý.

c. Mô tả hay lưu trữ thông tin về 1 đối tượng cần quản lý.

d. Mô tả hay lưu trữ thông tin về nhiều thuộc tính cần quản lý.

4. Trong các phát biểu sau, phát biểu nào sai?

a. Hai biến bản ghi cũng kiểu có thể gán được cho nhau.

b. Các biến cùng cấu trúc nhưng có tên kiểu khác nhau thì vẫn có thể sử dụng phép gán

cho nhau.

c. Giữa hai biến bản ghi cùng kiểu có thể so sánh bằng.

d. Giữa hai biến bản ghi cùng kiểu có thể so sánh khác.

5. Trong các phát biểu sau, phát biểu nào đúng?

a. Có thể nhập giá trị của 1 biến kiểu bản ghi như nhập giá trị của biến KDL chuẩn.

b. Có thể xuất giá trị của 1 biến kiểu bản ghi như xuất giá trị của biến KDL chuẩn.

c. Có thể nhập hay xuất giá trị của 1 biến kiểu bản ghi như nhập hay xuất giá trị của biến

KDL chuẩn.

d. Các thao tác nhập, xuất hay xử lí mỗi trường bản ghi phải tuân theo quy định của kiểu

trường này.

6. Để truy cập đến DL của 1 trường nào đó trên bản ghi ta sử dụng cú pháp:

a. Tên trường.Tên biến;

b. Tên trường:Tên biến;

c. Tên biến.Tên trường;

d. Tên biến:Tên trường;

7. Trong các khai báo sau, khai báo nào đúng?

a. Type HS = record

SBD : string[6];

Ten : string [27];

Diem : real;

Page 28: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

End;

Var hs : HS;

b. Type HS = record

SBD : string[6];

Ten : string [27];

Diem : real;

End;

Var hs1, hs2 : HS;

c. Type HS = record

SBD = string[6];

Ten = string [27];

Diem = real;

End;

Var hs : HS;

d. Type HS = record

SBD : string[6];

Ten : string [27];

Diem : real;

End;

Var hs = HS;

8. Để mô tả 1 kiểu bản ghi NgayThang gồm có ba trường: Ngay, Thang, Nam ta sử dụng khai

báo nào dưới đây?

a. Type NgayThang = Record

Ngay : byte;

Thang : byte;

Nam : word;

End;

b. Type NgayThang : Record

Ngay : byte;

Thang : byte;

Page 29: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

Nam : word;

End;

c. Var NgayThang = Record

Ngay : byte;

Thang : byte;

Nam : word;

End;

d. Var NgayThang : Record

Ngay = byte;

Thang = byte;

Nam = word;

End;

9. Một kiểu bản ghi được khai báo như sau:

Type phanso = record

tu, mau : integer;

end;

Var p, q: phanso;

Câu lệnh nào trong các câu lệnh sau là không phù hợp?

a. p := q;

b. q := p;

c. writeln (p.tu,’/’, p.mau);

d. writeln (‘p = ’, p, ‘q = ’, q);

10. Một kiểu bản ghi được khai báo như sau:

Type phanso = record

tu, mau : integer;

end;

Var p, q: phanso;

Câu lệnh nào trong các câu lệnh sau là không phù hợp?

a. p := q;

b. q := p;

Page 30: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

c. readln(p.tu,p.mau);

d. readln(q);

11. Một kiểu bản ghi được khai báo như sau:

Type phanso = record

tu, mau : integer;

end;

Var p, q: phanso;

Câu lệnh nào trong các câu lệnh sau là không phù hợp?

a. p := q;

b. q := p;

c. writeln (‘p*q=’, p.tu*q.tu, ‘/’,p.mau*q.mau);

d. writeln (p*q);

12. Khai báo mô tả kiểu bản ghi địa chỉ có ba trường số nhà, tên đường và thành phố với KDL

phù hợp.

Type Diachi = record

so_nha:integer;

duong, thanh_pho:string;

end;

13. Mỗi phân số được lưu trong 1 bản ghi gồm có hai trường: tử số và mẫu số. Hãy định nghĩa

kiểu phân số sau đó viết chương trình thực hiện công việc cộng, trừ, nhân, chia hai phân số.

Type phanso = record

Tu, mau:integer;

End;

Var p,q : phanso;

Begin

Writeln(‘Nhap phan so thu nhat: ’); read(p.tu,p.mau);

Writeln(‘Nhap phan so thu hai: ’); read(q.tu,q.mau);

Writeln(‘Tong cua 2 phan so la: ’, p.tu*q.mau+p.mau*q.tu,

‘/’,q.mau*p.mau);

Writeln(‘Hieu cua 2 phan so la: ’, p.tu*q.mau-p.mau*q.tu,

Page 31: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

‘/’,q.mau*p.mau);

Writeln(‘Tich cua 2 phan so la: ’,p.tu*q.tu,‘/’,

q.mau*p.mau);

Writeln(‘Thuong cua 2 phan so la: ’,p.tu*q.mau,‘/’,

q.tu*p.mau);

End.

14. Để quản lý HS trong lớp học, mỗi HS người ta quản lý hai thông tin sau:

Họ và tên

Điểm trung bình

Hãy định nghĩa kiểu học sinh sau đó viết chương trình thực hiện các công việc hiện danh

sách học sinh theo điểm trung bình giảm dần.

Type hocsinh = record;

ten : string;

diem : real;

end;

Var hs : array[1..50] of hocsinh;

tg : hocsinh;

i,j,n : byte;

Begin

Write(‘So hoc sinh la: ’); read(n);

For i := 1 to n do

Begin

Writeln(‘Nhap ho ten hs thu ’,i);

readln(hs[i].ten);

Writeln(‘Nhap diem hs thu ’,i);

readln(hs[i].diem);

End;

For i := 1 to n-1 do

For j := i+1 to n do

If hs[j].diem>hs[i].diem then

Page 32: vungtauitk33.files.wordpress.com · Web viewBÀI 11 – 12 – 13 Author MAI CHI Created Date 09/19/2011 09:51:00 Last modified by MAI CHI Company HOME

Begin

tg:=hs[i]; hs[i]:= hs[j]; hs[j]:=tg;

end;

For i:= 1 to n do writeln(hs[i].ten, ‘’, hs[i].diem);

Readln;

End.