Mảng một chiều trong C / C++
Trong bài viết này, codehow sẽ giới thiệu đến các bạn một khái niệm mới đó là mảng một chiều trong C / C++. Cách khai báo nó như thế nào và sử dụng nó trong các trường hợp nào.
Để trả lời cho câu hỏi mảng một chiều được sử dụng trong trường hợp nào thì mình có một ví dụ dưới đây.
Giả sử mình muốn lưu giá trị của 100 số nguyên tố đầu tiên. Nếu như thông thường ta sẽ tạo 100 biến là lưu một 100 giá trị này, điều này thật là kinh khủng. Nếu sử dụng mảng, ta chỉ cần khai báo một mảng và gán kích thước cho nó là có thể lưu 100 giá trị đó rồi.
Vậy làm sao để khai báo một mảng một chiều trong C / C++, hay bắt đầu cùng mình thôi nào.
Mảng một chiều trong C / C++ là gì?
Mỗi phần tử trong mảng một chiều, được truy xuất bởi tên mảng và vị trí lưu trữ trong mảng (gọi là index) được đặt trong dấu ngoặc vuông [].
Vị trí index của mảng bắt đầu từ 0 đến kích thước của mảng trừ đi 1. Giải sử mình có kích thước mảng size = 10, thì vị trí index sẽ bắt đầu từ 0 đến 9.
Ví dụ: Mình có một mảng arr kiểu int, có 5 phần từ là {1, 2, 3, 4, 5}. Vậy khi lưu vào mảng thì sẽ như thế nào, các bạn xem hình dưới đây.
Như các bạn thấy thì có hai phần chúng ta cần quan tâm đó là index và value. Đối với index = 0 (vị trí 0) thì value = 1, index = 1 thì value = 2, ... . Như vậy cứ mỗi vị trí index sẽ được lưu một phần tử cụ thể.
Cách khai báo mảng một chiều trong C / C++
Để khai báo mảng một chiều trong C / C++, ta cần lưu ý đến ba yếu tố là kiểu dữ liệu của mảng, tên mảng và số lượng phần tử của mảng (hay còn gọi là kích thước mảng).
Cú pháp:
KieuDuLieu TenMang[KichThuoc];
Trong đó:
- KieuDuLieu: Đây là kiểu dữ liệu của mảng, khi lưu các phần tử vào mảng phải cùng kiểu dữ liệu này.
- TenMang: Đây là tên của mảng, chúng ta có thể đặt tên mảng tùy ý, tuy nhiên nên đặt sao cho chúng ta dễ nhớ và dễ phân biệt.
- KichThuoc: Đây là kích thước của mảng, giả sử chúng ta cần lưu 100 phần tử thì khi khai báo kích thước sẽ là 100.
*Lưu ý: Khi khai báo thì kích thước của mảng phải là một số nguyên dương lớn hơn 0.
Ví dụ: Mình muốn lưu 2000 giá trị là một số nguyên vào mảng array thì sẽ khai báo như sau.
int array[2000];
Khởi tạo giá trị cho mảng một chiều trong C / C++
Khi khai báo mảng một chiều trong C / C++, chúng ta có thể khởi tạo giá trị cho mảng ngay lúc đó luôn.
Có hai cách để khởi tạo giá trị cho mảng đó là khởi tạo giá trị cho các phần tử trong mảng và khởi tạo giá trị cho một phần tử trong mảng.
Khởi tạo giá trị cho các phần tử trong mảng một chiều:
Ví dụ: Mình muốn khai báo một mảng diem[] với kích thước là 5 để lưu điểm. Khi khai báo sẽ khởi tạo điểm cho các phần tử là 10, 7, 8, 4, 2.
int diem[5] = {10, 7, 8, 4, 2}
*Lưu ý: Khi khởi tạo giá trị cho mảng, các bạn chú ý đến kích thước của mảng. Số phần tử trong mảng khi khởi tạo không được lớn hơn kích thước của mảng.
Khởi tạo giá trị cho một phần tử trong mảng một chiều:
Thay vì khởi tạo cho tất cả các phần tử trong mảng, chúng ta cũng có thể khởi tạo giá trị cho một phần tử bất kỳ nào đó trong mảng. Để làm được điều này, ta cần biết được vị trí index của phần tử đó.
Giả sử với mảng diem[5] ở ví dụ trên, bây giờ mình muốn khởi tạo giá trị cho phần tử thứ 2 là 10.
int diem[5]; diem[1] = 10;
Như đề bài thì khởi tạo giá trị cho phần tử thứ 2, nhưng tại sao mình lại gọi diem[1]. Là bởi vì vị trí lưu giá trị của phần tử bắt đầu từ 0, vậy nên chúng ta phải trừ đi 1.
Ví dụ muốn gán giá trị cho phần tử thứ 10, chúng ta phải truyền vào giá trị index là 9.
Truy xuất các phần tử mảng một chiều trong C / C++
Tương tự như việc khởi tạo giá trị cho một phần tử trong mảng, chúng ta cũng có thể truy xuất bất kỳ phần tử nào trong mảng. Chỉ cần biết được vị trí index của nó.
Cú pháp:
TenMang[index]
Trong đó:
- TenMang: Đây là tên mảng mà chúng ta muốn truy xuất các phần tử.
- index: Đây là vị trí lưu trữ của phần tử trong dãy ô nhớ (lưu ý rằng chỉ số index này bắt đầu từ 0).
Ví dụ: Khai báo và khởi tạo các phần tử trong mảng diem[7] = {5, 6, 8, 2, 10, 9, 3}. Sau đó truy xuất các phần tử thứ 1, 5, 6 và hiển thị ra màn hình.
Chương trình C:
#include <stdio.h> int main(void) { //khai báo và khởi tạo các phần tử trong mảng int Diem[7] = {5, 6, 8, 2, 10, 9, 3}; //xuất phần tử thứ 1, index = 0 printf("Phần tử thứ 1 là: %d\n", Diem[0]); //xuất phần tư thứ 5, index = 4 printf("Phần tử thứ 5 là: %d\n", Diem[4]); //xuất phần tử thứ 6, index = 5 printf("Phần tử thứ 6 là: %d\n", Diem[5]); printf("\n--------------------------------\n"); printf("Chương trình này được đăng tại codehow.net"); return 0; }
Chương trình C++:
#include <iostream> using namespace std; int main() { //khai báo và khởi tạo các phần tử trong mảng int Diem[7] = {5, 6, 8, 2, 10, 9, 3}; //xuất phần tử thứ 1, index = 0 cout << "Phần tử thứ 1 là: " << Diem[0] << endl; //xuất phần tư thứ 5, index = 4 cout << "Phần tử thứ 5 là: " << Diem[4] << endl; //xuất phần tử thứ 6, index = 5 cout << "Phần tử thứ 6 là: " << Diem[5] << endl; cout<<"\n--------------------------------\n"; cout<<"Chương trình này được đăng tại codehow.net"; return 0; }
Kết quả:
Ưu và nhược điểm khi sử dụng mảng một chiều trong C / C++
Vì mảng một chiều lưu các phần tử có cùng kiểu dữ liệu theo dạng một dãy các ô nhớ. Kích thước của mảng cũng bị cố định vậy nên nó có các ưu điểm và nhược điểm dưới đây.
Ưu điểm mảng một chiều trong C / C++
- Lưu được nhiều phần tử cùng kiểu dữ liệu.
- Tối ưu chương trình.
- Dễ dàng thao tác với các phần tử trong mảng.
- Lưu trữ và truy xuất phần tử ngẫu nhiên một cách dễ dàng.
- Dễ dàng sắp xếp dữ liệu.
Nhược điểm mảng một chiều trong C / C++
- Mảng có độ dài cố định.
- Chỉ lưu được một kiểu dữ liệu duy nhất.
Ví dụ mảng một chiều trong C / C++
Trong phần này mình sẽ thực hiện một vài ví dụ sử dụng mảng một chiều trong C / C++. Ở mỗi ví dụ mình sẽ viết bằng hai ngôn ngữ khác nhau là C và C++ để các bạn có thể lựa chọn nhé.
Ví dụ 1: Viết chương trình yêu cầu người dùng nhập vào độ dài của mảng, điều kiện phải lớn hơn 0. Sau đó nhập vào giá trị cho các phần tử trong mảng rồi hiển thị ra màn hình.
Chương trình C:
#include <stdio.h> int main(void) { int n; do{ printf("Nhập vào độ dài của mảng: "); scanf("%d", &n); if(n <= 0) printf("Vui lòng nhập độ dài của mảng lớn hơn 0!!\n"); }while(n <= 0); int arr[n]; //nhập phần tử for(int i = 0; i <= n - 1; i++){ printf("Nhập phần tử thứ [%d]: ",i); scanf("%d",&arr[i]); } //xuất phần tử printf("Các phần tử trong mảng: "); for(int i = 0; i <= n - 1; i++){ printf("%d ",arr[i]); } printf("\n--------------------------------\n"); printf("Chương trình này được đăng tại codehow.net"); return 0; }
Kết quả:
Chương trình C++:
#include <iostream> using namespace std; int main() { int n; do{ cout<<"Nhập vào độ dài của mảng: "; cin>>n; if(n <= 0) cout<<"Vui lòng nhập độ dài của mảng lớn hơn 0!!\n"; }while(n <= 0); int arr[n]; //nhập phần tử for(int i = 0; i <= n - 1; i++){ cout<<"Nhập phần tử thứ "<<"[" <<i<<"]: "; cin>>arr[i]; } //xuất phần tử cout<<"Các phần tử trong mảng: "; for(int i = 0; i <= n - 1; i++){ cout<<arr[i]<<" "; } cout<<"\n--------------------------------\n"; cout<<"Chương trình này được đăng tại codehow.net"; return 0; }
Kết quả:
Ví dụ 2: Yêu cầu người dùng nhập vào độ dài của mảng (lớn hơn 0) và các phần tử trong mảng. Hiển thị các phần tử là số chẵn trong mảng ra màn hình.
Chương trình C:
#include <stdio.h> int main(void) { int n; do{ printf("Nhập vào độ dài của mảng: "); scanf("%d", &n); if(n <= 0) printf("Vui lòng nhập độ dài của mảng lớn hơn 0!!\n"); }while(n <= 0); int arr[n]; //nhập phần tử for(int i = 0; i <= n - 1; i++){ printf("Nhập phần tử thứ [%d]: ",i); scanf("%d",&arr[i]); } //xuất phần tử printf("Các phần tử là số chẵn trong mảng: "); for(int i = 0; i <= n - 1; i++){ if(arr[i] % 2 == 0) printf("%d ", arr[i]); } printf("\n--------------------------------\n"); printf("Chương trình này được đăng tại codehow.net"); return 0; }
Chương trình C++:
#include <iostream> using namespace std; int main() { int n; do{ cout<<"Nhập vào độ dài của mảng: "; cin>>n; if(n <= 0) cout<<"Vui lòng nhập độ dài của mảng lớn hơn 0!!\n"; }while(n <= 0); int arr[n]; //nhập phần tử for(int i = 0; i <= n - 1; i++){ cout<<"Nhập phần tử thứ "<<"[" <<i<<"]: "; cin>>arr[i]; } //xuất phần tử cout<<"Các phần tử là số chẵn trong mảng: "; for(int i = 0; i <= n - 1; i++){ if(arr[i] % 2 == 0) cout<<arr[i]<<" "; } cout<<"\n--------------------------------\n"; cout<<"Chương trình này được đăng tại codehow.net"; return 0; }
Kết quả:
Lời kết
Như vậy là chúng ta đã cùng nhau tìm hiểu về mảng một chiều trong C / C++. Đây là một kiến thức rất quan trọng, vì vậy các bạn hãy luyện tập thật nhiều để có thể sử dụng nó một cách thành thạo nhé. Ở bài tiếp theo mình sẽ giới thiệu đến các bạn mảng hai chiều trong C / C++.