Không có gì bằng thực hành. Chúng ta đã bàn qua về hàm, mảng, chuỗi, vòng lặp và con trỏ. Chúng ta cũng đã viết qua rất nhiều phần của chương trình tao lao trước đây.
Chúng ta sẽ phát huy truyền thống...tào lao bằng một chương trình tào lao mới! Chương trình sẽ ôn lại tất cả những gì chúng ta đã thảo luận.
Đầu tiên là ý tưởng về chương trình...vĩ đại của chúng ta: Chúng ta sẽ tạo ra một chương trình để nhập tên sinh viên của một lớp, lưu vào một mảng, sau đó sẽ in toàn bộ tên sinh viên ra màn hình bằng một hàm. Hàm này sẽ nhận tham số là mảng tên sinh viên.
Về mảng tên sinh viên, chúng ta có thể dùng mảng 2 chiều hoặc thay vì mảng chuỗi 2 chiều, chúng ta có thể có mảng con trỏ một chiều. Ở đây con trỏ tới ký tự đầu tiên của chuỗi ký tự được lưu trữ.
Chúng ta sẽ sử dụng IDE Online để thử chạy một mảng 2 chiều và một mảng con trỏ một chiều để cho ra cùng kết quả.
Đây là code của mảng 2 chiều.
#include <stdio.h>
int main()
{
char arr[3][20] = {"Nguyen Van A",
"Tran Van B", "Le Thi C"};
printf("Ten cua sinh vien:\n");
for (int i = 0; i < 3; i++)
{
printf("%s\n", arr[i]);
}
return 0;
}
Hy vọng đoạn code không quá khó hiểu với bạn.
- Khai báo và Khởi tạo mảng char arr[3][20]: Khai báo mảng arr kiểu dữ liệu là char 2 chiều, có 3 hàng và 20 cột. 3 hàng đại diện cho 3 sinh viên, có nghĩa là nếu chúng ta có 50 sinh viên, ta cần có 50 hàng. 20 cột đại diện cho 20 ký tự trong Họ và Tên sinh viên, ví dụ Nguyen Van A có tổng cộng 12 ký tự bao gồm hai khoảng trắng.
- Vòng lặp for (int i = 0; i < 3; i++) : Chúng ta sẽ cho biến i chạy từ 0 tới 2 với giả định số sinh viên là 3, vì vậy nếu số sinh viên là 50, ta sẽ có vòng lặp for (int i = 0; i < 50; i++). Lưu ý đây là mảng 2 chiều và vòng lặp For này chỉ duyệt các hàng (rows).
- Lệnh printf("%s\n", arr[i]); Cứ mỗi i được duyệt qua, chương trình sẽ lần lượt in giá trị của phần tử mảng arr[0],arr[1],arr[2]...
Bấm Run để chạy thử, ta thấy kết quả
Còn đây là code của mảng con trỏ 1 chiều
#include <stdio.h>
int main()
{
char *arr[] = {"Nguyen Van A",
"Tran Van B", "Le Thi C"};
printf("Ten cua sinh vien:\n");
for (int i = 0; i < 3; i++)
{
printf("%s\n", arr[i]);
}
return 0;
}
Mặc dù về mặt hình thức ta sẽ thấy code chỉ khác phần trước đúng một chỗ là char *arr[]. Tuy nhiên ta cần hiểu rõ ý nghĩa.
Lệnh char *arr[] khai báo arr như là một mảng các con trỏ kiểu ký tự char. Mỗi phần tử trong arr giữ một con trỏ tới các giá trị (là các chuỗi) trong mảng.
Nếu bạn sử dụng lệnh in printf("%p\n", arr[i]); như phần trước, bạn sẽ in địa chỉ của các giá trị chuỗi trong mảng, nhưng chúng ta sử dụng lệnh printf("%s\n", arr[i]); nên chương trình đã in các giá trị chuỗi.
Để hiểu rõ về những gì chúng ta vừa thảo luận, bạn thêm lệnh in printf("%p\n", arr[i]); vào chương trình, chạy thử bạn sẽ thấy
Phần này sẽ rất dài, vì vậy chúng ta sẽ tách ra làm bốn phần.
Chúng ta sẽ dừng phần 1 ở đây.
Không có nhận xét nào:
Đăng nhận xét