Nhập/Xuất dữ liệu cho mảng 2 chiều

Một phần của tài liệu Giáo trình kỹ thuật lập trình cđ kinh tế kỹ thuật TP HCM (Trang 103)

KHOA CƠNG NGHỆ THƠNG TIN Trang 103 Thứ tự nhập mảng 2 chiều như sau: Thứ tự từng dịng từ trái sang phải.

Xuất dữ liệu cho mảng 2 chiều

for (i = 0; i < 5; i++) //i chạy từ 0 đến 4 cho từng dịng {

for (j = 0; j < 10; j++) //j chạy từ 0 đến 9 cho cột cout<<a[i][j]<<”\t”;

cout<<”\n”; //xuống dịng để in dịng kế tiếp }

Ví dụ 10: Viết chương trình nhập vào 1 ma trận số nguyên n x m. In ra ma trận vừa nhập.

KHOA CƠNG NGHỆ THƠNG TIN Trang 104

Hình 87: Màn hình giải ví dụ 10 mục 5.2.1.5

KHOA CƠNG NGHỆ THƠNG TIN Trang 105

Hình 88: Kết quả chương trình chạy ví dụ 10mục 5.2.1.5

Ví dụ 11: Viết chương trình nhập vào 1 ma trận số nguyên n x m. In ra ma trận vừa nhập và liệt kê các số lẻ trong mảng cho người dùng xem.

KHOA CƠNG NGHỆ THƠNG TIN Trang 106

Hình 89: Màn hình giải ví dụ 11 mục 5.2.1.5

KHOA CƠNG NGHỆ THƠNG TIN Trang 107

Hình 90: Kết quả chương trình chạy ví dụ 11mục 5.2.1.5

Ví dụ 12: Nhập vào 2 ma trận vuơng cấp n số thập phân.Cộng 2 ma trận này lưu vào ma trận thứ 3 và tìm số lớn nhất trên ma trận thứ 3.

KHOA CƠNG NGHỆ THƠNG TIN Trang 108

Hình 91: Màn hình giải ví dụ 12 mục 5.2.1.5

KHOA CƠNG NGHỆ THƠNG TIN Trang 109

Hình 92: Kết quả chương trình chạy ví dụ 12mục 5.2.1.5 5.2.2 Chuỗi

5.2.2.1 Cách khai báo chuỗi

Chuỗi ký tự là một dãy gồm các ký tự hoặc một mảng các ký tự được kết thúc bằng ký tự ‘\0’ (cịn được gọi là ký tự NULL trong bảng mã Ascii)

Ví dụ: chuỗi "caodangkinhte" được lưu trữ như sau:

Bảng 15: Bảng biểu diễn chuỗi lưu trong mảng

c a o d a n g k i n h t e \0

Cú pháp: char <Biến> [Chiều dài tối đa] Ví dụ 13: Trong chương trình, ta cĩ khai báo:

char hoten[20];

Trong khai báo này, bộ nhớ sẽ cung cấp 20+1 bytes để lưu trữ nội dung của chuỗi ký tự hoten; byte cuối cùng lưu trữ ký tự ‘\0’ để chấm dứt chuỗi.

Ghi chú:

- Chiều dài tối đa của biến chuỗi là một hằng nguyên nằm trong khoảng từ 1 đến 255 bytes.

- Chiều dài tối đa khơng nên khai báo thừa để tránh lãng phí bộ nhớ, nhưng cũng khơng nên khai báo thiếu.

Ví dụ 14: Nhập vào họ tên và in ra họ tên bạn vừa nhập

KHOA CƠNG NGHỆ THƠNG TIN Trang 110

Hình 93: Màn hình giải ví dụ 14 mục 5.2.2.1

Kết quả in ra màn hình

Hình 94: Kết quả chương trình chạy ví dụ 14 mục 5.2.2.1

Khi bạn thử lại chương trình trên với dữ liệu nhập vào là Nguyen Dang, nhưng khi in ra bạn chỉ nhận được Nguyen. Vì hàm cin nhận vào dữ liệu đến khi gặp khoảng trắng thì kết thúc.

5.2.2.2 Hàm nhập (gets), xuất (puts) chuỗi

Hàm nhập chuỗi (gets): Để nhập một chuỗi ký tự từ bàn phím, ta sử dụng hàm gets()

Cú pháp: gets(<Biến chuỗi>)

Ta cũng cĩ thể sử dụng hàm scanf() để nhập dữ liệu cho biến chuỗi, tuy nhiên ta chỉ cĩ thể nhập được một chuỗi khơng cĩ dấu khoảng trắng.

Ngồi ra, hàm cgets() (trong conio.h) cũng được sử dụng để nhập chuỗi.

Hàm xuất chuỗi (puts): Để xuất một chuỗi (biểu thức chuỗi) lên màn hình, ta sử dụng hàm puts()

KHOA CƠNG NGHỆ THƠNG TIN Trang 111

Hình 95: Màn hình giải ví dụ 15 mục 5.2.2.2

Kết quả in ra màn hình

Hình 96: Kết quả chương trình chạy ví dụ 15 mục 5.2.2.2 Khởi tạo chuỗi

Ví dụ 16: Hãy viết chương trình gán chuỗi “xin chào” vào biến mảng chao, sau đĩ nhập họ tên lưu vào mảng với tên là hoten. Xuất chuỗi gán và họ tên vừa nhập.

KHOA CƠNG NGHỆ THƠNG TIN Trang 112

Hình 97: Màn hình giải ví dụ 16 mục 5.2.2.2

Kết quả in ra màn hình

Hình 98: Kết quả chương trình chạy ví dụ 16 mục 5.2.2.2 Mảng chuỗi

Ví dụ 17: Viết chương trình xuất chuỗi trong mảng sau:

KHOA CƠNG NGHỆ THƠNG TIN Trang 113

5.2.2.3 Các hàm chuỗi thường sử dụng

STT Hàm Ý nghĩa

1 strcpy(s1, s2); Sao chép chuỗi s2 cho chuỗi s1. 2 strcat(s1, s2); Nối chuỗi s2 vào cuối chuỗi s1. 3 strlen(s1); Trả về độ dài của chuỗi s1.

4 strcmp(s1, s2); Trả về 0 nếu s1 và s2 là như nhau; nhỏ hơn 0 nếu s1<s2; lớn hơn 0 nếu s1>s2.

5 strchr(s1, ch); Trả về con trỏ tới vị trí đầu tiên của ch trong s1.

6 strstr(s1, s2); Trả về con trỏ tới vị trí đầu tiên của chuỗi s2 trong chuỗi s1.

KHOA CƠNG NGHỆ THƠNG TIN Trang 114

Hình 101: Màn hình giải ví dụ 18 mục 5.2.2.3

Kết quả in ra màn hình

Hình 102: Kết quả chương trình chạy ví dụ 18 mục 5.2.2.3

5.3 Bài tập

1. Viết hàm tìm số lớn nhất, nhỏ nhất trong một mảng n số nguyên. 2. Viết chương trình nhập xuất mảng một chiều các số thực.

3. Viết chương trình khởi tạo giá trị các phần tử là 0 cho mảng một chiều các số nguyên gồm n phần tử.

KHOA CƠNG NGHỆ THƠNG TIN Trang 115 phần tử là số nguyên tố.

10. Viết chương trình nhập vào mảng một chiều các số nguyên và xuất ra màn hình các phần tử là số chính phương nằm tại những vị trí lẻ trong mảng.

11. Viết phương thức tìm vị trí phần tử cĩ giá trị x xuất hiện cuối cùng trong mảng. 12. Viết phương thức tìm vị trí của phần tử nhỏ nhất trong mảng các số nguyên. 13. Viết phương thức tìm vị trí của phần tử lớn nhất trong mảng các số nguyên. 14. Viết phương thức in vị trí các phần tử nguyên tố trong mảng các số nguyên. 15. Viết phương thức in vị trí các phần tử nguyên tố lớn hơn 23.

16. Viết phương thức tìm vị trí phần tử âm đầu tiên trong mảng. Nếu khơng cĩ phần tử âm trả về –1.

17. Viết phương thức tìm vị trí phần tử âm lớn nhất trong mảng.

18. Viết phương thức tìm vị trí phần tử dương đầu tiên trong mảng. Nếu khơng cĩ phần tử dương trả về –1

19. Viết phương thức tìm vị trí phần tử dương bé nhất trong mảng. 20. Viết phương thức in các phần tử là bội của 3 hoặc 5.

21. Viết phương thức tìm số chẵn cuối cùng cĩ trong mảng, nếu khơng tồn tại số chẵn phương thức trả về -1.

22. Viết phương thức tìm số lẻ lớn nhất cĩ trong mảng, nếu khơng tồn tại số lẻ phương thức trả về -1.

23. Viết phương thức tìm và đổi chỗ phần tử lớn nhất với phần tử nhỏ nhất trong mảng. 24. Nhập vào X, viết phương thức in ra màn hình những phần tử cĩ giá trị từ 1 đến X cĩ trong mảng.

25. Viết phương thức tính tổng các phần tử chẵn trong mảng.

26. Viết phương thức tính tổng các phần tử lẻ trong mảng các số nguyên. 27. Viết phương thức tính tổng các phần tử là nguyên tố trong mảng.

KHOA CƠNG NGHỆ THƠNG TIN Trang 116 28. Viết phương thức tính tổng các phần tử nằm ở vị trí chẵn trong mảng các số nguyên.

29. Viết phương thức tính tổng các phần tử chia hết cho 5 cĩ trong mảng 30. Viết phương thức xố phần tử tại vị trí lẻ trong mảng.

31. Viết phương thức xố phần tử cĩ giá trị lớn nhất trong mảng.

32. Cho giá trị X, viết phương thức xố tất cả các phần tử cĩ giá trị nhỏ hơn X. 33. Cho giá trị X, viết phương thức xố phần tử cĩ giá trị gần X nhất.

34. Viết phương thức sắp xếp mảng theo thứ tự giảm dần.

35. Viết phương thức sắp xếp mảng theo thứ tự tăng dần của các phần tử là số nguyên tố.

36. Viết phương thức sắp xếp các phần tử lẻ tăng dần. 37. Viết phương thức sắp xếp các phần tử chẵn giảm dần.

38. Viết phương thức sắp xếp các phần tử chẵn nằm bên trái theo thứ tự tăng dần cịn các phần tử lẻ bên phải theo thứ tự giảm dần.

39. Viết phương thức sắp xếp các phần tử âm giảm dần từ trái sang phải, phần tử dương tăng dần từ phải sang trái.

40. Viết chương trình nhập xuất mảng 2 chiều vuơng gồm cĩ n phần tử kiểu số nguyên. Tính tích 2 mảng

41. Viết hàm sắp xếp tăng dần, giảm dần của một dãy số cho trước. 42. Viết hàm tách tên và họ lĩt từ một chuỗi cho trước.

43. Viết hàm cắt bỏ khoảng trắng thừa ở giữa, hai đầu.

44. Viết hàm chuyển đổi 1 chuỗi sang chữ thường và 1 hàm chuyển đổi sang chữ HOA. 45. Viết hàm chuyển đổi 1 chuỗi sang dạng Title Case (kí tự đầu của mỗi từ là chữ HOA, các kí tự cịn lại chữ thường)

46. Viết chương trình nhập vào 1 chuỗi và in ra chuỗi đảo ngược. Ví dụ: Nhập vào chuỗi "Lap trinh C can ban"

In ra "nab nac C hnirt paL"

47. Viết chương trình nhập vào một chuỗi ký tự rồi đếm xem trong chuỗi đĩ cĩ bao nhiêu chữ 'th'.

48. Biết rằng năm 0 là năm Canh thân (năm kỵ nhau cĩ chu kì là 3, năm hợp nhau cĩ chu kì là 4). Hãy viết chương trình cho phép gõ vào năm dương lịch (ví dụ 1997), xuất ra năm âm lịch (Đinh sửu) và các năm kỵ và hợp.

KHOA CƠNG NGHỆ THƠNG TIN Trang 117 C

51. Viết chương trình nhập vào một chuỗi các kí tự, ký số, khoảng trắng và dấu chấm câu. Cho biết chuỗi trên gồm bao nhiêu từ.

52. Viết chương trình nhập vào một chuỗi ký tự. Kiểm tra xem chuỗi đĩ cĩ đối xứng khơng?

53. Viết chương trình nhập vào một chuỗi gồm các chữ cái (a -> z, A -> Z). Hãy đếm xem cĩ bao nhiêu nguyên âm a, i, e, o, u.

54. Giả sử số phịng trong một khách sạn được cho bởi hằng số NUM_ROOM. Viết: a. Một khai báo dãy thích hợp để theo dõi phịng nào cịn trống.

b. Một hàm tìm phịng nào cịn trống.

c. Viết chương trình đơn giản để quản lý phịng khách sạn theo dạng một trình đơn chọn cơng việc gồm cĩ 4 mục như sau:

- Tìm phịng trống. - Trả phịng.

- Liệt kê những phịng cịn trống. - Liệt kê những phịng đã thuê. - Kết thúc.

55. Viết chương trình mơ tả văn bản của một bức điện tín. Nhập liệu bao gồm 1 hay nhiều dịng chứa một số từ, mỗi từ cách nhau khoảng trắng. In ra hĩa đơn tính tiền với mỗi từ giá 100 đồng, phí trả thêm 50 đồng cho từ dài quá 8 kí tự. Hĩa đơn cĩ dạng sau:

So tu : 10

So tu co kich thuoc binh thuong : 8 x 100 = 800 dong So tu co kích thuoc > 8 ki tu : 2 x 150 = 300 dong

Tong cong : 1100 dong

56. Viết chương thống kê xem cĩ bao nhiêu người họ "Ly", "Tran"… trong 1 danh sách cho trước. Nếu khơng cĩ thơng báo "Khơng cĩ nguoi nao thuoc ho ….".

KHOA CƠNG NGHỆ THƠNG TIN Trang 118 57. Viết chương trình nhập vào 1 chuỗi, sau đĩ chép sang chuỗi khác một chuỗi con từ chuỗi ban đầu cĩ số kí tự chỉ định.

Ví dụ: Chuỗi ban đầu "Le Thuy Doan Trang". Nếu số kí tự chỉ định là 2 thì chuỗi đích sẽ là "Le"

58. Viết chương trình nhập vào 1 chuỗi, sau đĩ chép sang chuỗi khác một chuỗi con từ chuỗi ban đầu với vị trí bắt đầu và số kí tự chỉ định.

Ví dụ: Chuỗi ban đầu "Le Thuy Doan Trang". Nếu vị trí ban đầu là 14 và số kí tự chỉ định là 5 thì chuỗi đích sẽ là "Trang"

59. Viết chương trình nhập vào 1 chuỗi nguồn, ví dụ "Nguyen Quang Dang", sau đĩ nhập vào 1 chuỗi con, ví dụ "Quang", chương trình sẽ xác định vị trí bắt đầu của chuỗi con ở vị trí nào trong chuỗi nguồn. Kết quả in ra màn hình như sau:

- Chuoi nguon la : Nguyen Quang Dang - Chuoi con la : Quang

- Vi tri bat dau cua chuoi con la : 8 60. Viết chương thực hiện các yêu cầu sau:

- Nhập vào 1 chuỗi bất kỳ, ví dụ : "Nguyen Quang Dang - Muốn xĩa từ vị trí nào, ví dụ : 8

- Muốn xĩa bao nhieu kí tự, ví dụ : 6 Kết quả in ra man hinh:

- Chuoi nguon la : Nguyen Quang Dang - Chuoi sau khi xoa : Nguyen Dang

KHOA CƠNG NGHỆ THƠNG TIN Trang 119 - Truyền mảng và chuỗi giữa các hàm qua con trỏ

- Xử lý mảng dễ dàng qua con trỏ

6.2 Nội dung

6.2.1 Khái quát về con trỏ?

6.2.1.1 Khái niệm

Con trỏ là một biến dùng để chứa địa chỉ. Vì cĩ nhiều loại địa chỉ nên cũng cĩ nhiều kiểu con trỏ tương ứng. Kiểu con trỏ int dùng để chứa địa chỉ biến kiểu int. Tương tự ta cĩ con trỏ kiểu float, kiểu double,…

Cũng như với 1 biến bất kỳ nào khác, con trỏ cần được khai báo trước khi sử dụng.

6.2.1.2 Lý do để dùng con trỏ

 Con trỏ giúp cấp phát vùng nhớ động, dùng tới đâu cấp phát tới đĩ, dùng xong thì cĩ thể giải phĩng vùng nhớ, tiết kiệm được bộ nhớ.

 Cĩ khả năng trỏ đến nhiều vùng nhớ khác nhau.

 Khi muốn tương tác với 1 vùng dữ liệu nào đĩ thay vì phải khai báo 1 vùng dữ liệu tương đương thì ta cĩ thể trỏ trực tiếp đến vùng dữ liệu đĩ và thao tác trên đĩ vì C/C++ cĩ thể tác động trực tiếp đến vùng nhớ nên các chương trình chạy bằng C/C++ thường chạy và xử lý rất nhanh.

6.2.1.3 Các tốn tử

Tốn tử lấy địa chỉ (&)

Địa chỉ: Khi khai báo biến, máy sẽ cấp phát cho biến một vùng nhớ. Địa chỉ của biến là số thứ tự của byte đầu tiên trong một dãy các byte liên tiếp mà máy dành cho biến (các byte được đánh số từ 0).

KHOA CƠNG NGHỆ THƠNG TIN Trang 120

Giải thích: Gán cho biến x địa chỉ của biến y vì khi đặt trước tên biến y dấu & ta khơng nĩi đến nội dung của biến nữa mà chỉ nĩi đến địa chỉ của nĩ trong bộ nhớ.

Tốn tử tham chiếu (*)

Bằng cách sử dụng con trỏ chúng ta cĩ thể truy xuất trực tiếp đến giá trị được lưu trữ trong biến được trỏ bởi nĩ bằng cách đặt trước tên biến con trỏ một dấu (*).

Ví dụ: Giả sử biến y được đặt trong ơ nhớ cĩ địa chỉ là 1202 và cĩ các câu lệnh như sau:

y = 30; z = y; x = &y; t = *y;

Kết quả: biến t sẽ mang giá trị là 30.

6.2.1.4 Khái báo biến con trỏ

Vì con trỏ cĩ khả năng tham chiếu trực tiếp đến giá trị mà chúng trỏ tới nên cần thiết phải chỉ rõ kiểu dữ liệu nào mà một biến con trỏ trỏ tới khi khai báo.

Cú pháp khai báo:

Kiểu_dữ_liệu *Tên_con_trỏ;

Chú ý: kiểu dữ liệu ở đây là kiểu dữ liệu được trỏ tới, khơng phải là kiểu của bản thân con trỏ.

Ví dụ:

int *x; //Khai báo con trỏ x kiểu int

float *k; //Khai báo con trỏ k kiểu float

Phép gán con trỏ: Hai con trỏ cùng kiểu cĩ thể gán cho nhau.

Xem ví dụ sau:

int a, *p, *a ; float *f;

a = 5 ; p = &a ; q = p ; /* đúng */ f = p ; /* sai do khác kiểu */

Ta cũng cĩ thể ép kiểu con trỏ theo cú pháp: (<Kiểu kết quả>*)<Tên con trỏ>

Chẳng hạn, ví dụ trên được viết lại: int a, *p, *a ; float *f;

KHOA CƠNG NGHỆ THƠNG TIN Trang 121 int *x;

x = (int*) malloc(20); /* Cấp phát vùng nhớ 20 byte=10 số nguyên*/ int *y, *z;

y = x + 7; z = y - 3;

Con trỏ NULL: là con trỏ khơng chứa địa chỉ nào cả. Ta cĩ thể gán giá trị NULL cho 1 con trỏ cĩ kiểu bất kỳ.

Lưu ý:

- Ta khơng thể cộng 2 con trỏ với nhau.

- Phép trừ 2 con trỏ cùng kiểu sẽ trả về 1 giá trị nguyên (int). Đây chính là khoảng cách (số phần tử) giữa 2 con trỏ đĩ. Chẳng hạn, trong ví dụ trên z-x=4.

Ví dụ 1: Khai báo, sử dụng tốn tử tham chiếu, tốn tử lấy địa chỉ:

Một phần của tài liệu Giáo trình kỹ thuật lập trình cđ kinh tế kỹ thuật TP HCM (Trang 103)