Nhập/Xuất dữ liệu cho mảng một 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 98)

Nhập mảng một chiều

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

cout<<”Phan tu thu “<<i+1<<”: ”; cin>>arr[i];

}

Xuất/ Đọc mảng một chiều

for(int i=0;i<5;i++) //i chạy từ 0 đến 4

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

Ví dụ 3: Viết chương trình nhập vào một mảng A một chiều kiểu số nguyên, cĩ n phần tử với n<=20, n được nhập từ bàn phím. In các phần tử của mảng cho người dùng xem.

Hình 81: Màn hình giải ví dụ 3 mục 5.2.1.3

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

Hình 82: Kết quả chương trình chạy ví dụ 3 mục 5.2.1.3

Ví dụ 4: Viết chương trình nhập vào một mảng A một chiều kiểu số nguyên, cĩ n phần tử với n<=20, n được nhập từ bàn phím, kiểm tra chi cho phép nhập n từ 1 đến 20. Tính tổng các phần tử vừa nhập.

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

Hình 83: Màn hình giải ví dụ 4 mục 5.2.1.3

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

Hình 84: Kết quả chương trình chạy ví dụ 4 mục 5.2.1.3

 Ngồi kiểu int, bạn cĩ thể khai báo mảng kiểu char, float, double…

Ví dụ 5: Viết chương trình nhập vào một mảng A một chiều kiểu số nguyên dương, nhập số âm sẽ kết thúc việc nhập và tính tổng các phần tử vừa nhập trên.

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

Hình 85: Màn hình giải ví dụ 5 mục 5.2.1.3

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

Hình 86: Kết quả chương trình chạy ví dụ 5 mục 5.2.1.3 5.2.1.4 Mảng nhiều chiều

Định nghĩa mảng 2 chiều

Mảng hai chiều cĩ thể xem như bảng gồm các dịng các cột, các phần tử thuộc cùng một kiểu dữ liệu nào đĩ.

KHOA CƠNG NGHỆ THƠNG TIN Trang 101 dịng và số cột mảng, số phần tử của mảng sẽ là dịng*cột.

Ví dụ 6:

int a[2][5]; // a là mảng số nguyên cĩ 2 dịng, 5 cột (cĩ 10 phần tử). float a[3][10]; // a là mảng số thực cĩ 3 dịng, 10 cột (cĩ 30 phần tử). char a[5][30]; // a là mảng kí tự cĩ 5 dịng, 30 cột

Tham chiếu đến từng phần tử trong mảng 2 chiều

Sau khi được khai báo, mỗi phần tử trong mảng 2 chiều đều cĩ 2 chỉ số để tham chiếu, chỉ số dịng và chỉ số cột.

Với dịng là số nguyên xác định chỉ số dịng và cột là số hiệu cột cũng như trong mảng 1 chiều các chỉ số được tính từ 0. Tức là 0 ≤dịng ≤số_dịng -1 và 0≤cột≤số_cột -1

Bảng 14: Bảng biểu diễn mảng 2 chiều

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4

a[2][1] a[3][4] a[0][6] a[2][8]

 a[2][1] là phần tử tại dịng 2 cột 1 trong mảng 2 chiều.  a[3][4] là phần tử tại dịng 3 cột 4 trong mảng 2 chiều.  a[0][6] là phần tử tại dịng 0 cột 6 trong mảng 2 chiều.  a[2][8] là phần tử tại dịng 2 cột 8 trong mảng 2 chiều.

Khởi tạomảng 2 chiều

Các phần tử mảng hai chiều cũng cĩ thể được khởi đầu giá trị theo cú pháp (4 dạng sau):

KHOA CƠNG NGHỆ THƠNG TIN Trang 102  Kiểu_mảng tên_mảng[dịng][cột]={{kđ_dịng_1},{ kđ_dịng_2},..,{

kđ_dịng_k}};

Cĩ k bộ giá trị sẽ được gán cho k dịng đầu tiên của mảng (k ≤

số_dịng), với mỗi dịng (được coi như mảng một chiều) được khởi tạo giá trị như mảng một chiều:

- Dịng thứ nhất được khởi đầu bởi {kđ_dịng_1}, dịng thứ hai được khởi đầu bởi {kđ_dịng_1},.., dịng thứ k được khởi đầu bởi {kđ_dịng_k}. Yêu cầu k ≤ sd, ngược lại chương trình sẽ báo lỗi.

- Các dịng cuối của mảng nếu khơng cĩ bộ khởi đầu tương ứng thì sẽ được tự động gán giá trị 0 (hoặc NULL nếu là con trỏ)

Kiểu_mảng tên_mảng[][cột] = {{kđ_dịng_1},{ kđ_dịng_2},..,{ kđ_dịng_k}};

(khơng xác định số dịng) chương trình dịch sẽ tự động ấn định số dịng của mảng bằng số bộ khởi đầu ( = k), sau đĩ thực hiện khởi đầu như dạng 1.  Kiểu_mảng tên_mảng[dịng][cột] = { gt_1, gt_2,...,gt_n };

n giá trị trong bộ khởi đầu được gán cho các phần tử mảng theo cách: sc giá trị đầu tiên trong các giá trị khởi đầu (gt_1,..,gt_sc) được gán tuần tự cho các phần tử của dịng thứ nhất trong mảng, sc phần tử kế tiếp sẽ gán cho các phần tử ở dịng thứ 2,... nếu phần tử nào của mảng khơng cĩ giá trị khởi đầu sẽ được gán 0 (con trỏ là NULL) - với điều kiện n ≤ dịng*cột, ngược lại là báo lỗi.

Kiểu_mảng tên_mảng[][cột] = { gt_1, gt_2,...,gt_n };

Số dịng của mảng sẽ được chương trình tự tính theo số giá trị trong bộ khởi đầu theo cơng thức sd = (n/sc) +1, và khởi đầu như dạng 3.

Ví dụ 7: int a[3][2] = {{1,2},{3},{4,5}}; thì các phần tử của a như sau: a[0][0]=1, a[0][1]=2, a[1][0]=3, a[1][1]= 0, a[2][0]=4,a[2][1]=5;

Ví dụ 8: int b[ ][2] = {{1,2},{3},{4,5}}; thì là mảng 3 dịng, 2 cột các phần tử của b như sau:

b[0][0]=1, b[0][1]=2, b[1][0]=3,b[1][1]= 0, b[2][0]=4,b[2][1]=5;

Ví dụ 9: int c[ ][2] = {1,2,3,4,5}; thì số dịng của c là mảng 5/2 +1 =3 dịng, các phần tử của a như sau:

c[0][0]=1, c[0][1]=2, c[1][0]=3,c[1][1]= 4, b[2][0]=5,b[2][1]=0;

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

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

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 98)