LATEST

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ảng một chiều trong C / C++ là tập hợp tuần tự các phần tử có cùng một kiểu dữ liệu và được lưu trữ trong một dãy các ô nhớ liên tục trên bộ nhớ.

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.

bai24 01 png

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ả:

bai24 02 png

Ư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ả:

bai24 03 png

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ả:

bai24 04 png

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ả:

bai24 05 png

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++.

Cùng chuyên mục:

Danh sách liên kết (Linked List) là gì? Các loại danh sách liên kết

Danh sách liên kết (Linked List) là gì? Các loại danh sách liên kết

Sử dụng đệ quy để giải bài toán tháp Hà Nội

Sử dụng đệ quy để giải bài toán tháp Hà Nội

Đệ quy tương hỗ (Mutual Recursion) trong C / C++

Đệ quy tương hỗ (Mutual Recursion) trong C / C++

Đệ quy lồng (Nested Recursion) trong C / C++

Đệ quy lồng (Nested Recursion) trong C / C++

Đệ quy đa tuyến (Exponential Recursion) trong C / C++

Đệ quy đa tuyến (Exponential Recursion) trong C / C++

Đệ quy nhị phân (Binary Recursion) trong C / C++

Đệ quy nhị phân (Binary Recursion) trong C / C++

Đệ quy đuôi (Tail Recursion) trong C / C++

Đệ quy đuôi (Tail Recursion) trong C / C++

Đệ quy tuyến tính (Linear Recursion) trong C / C++

Đệ quy tuyến tính (Linear Recursion) trong C / C++

Hàm đệ quy là gì? Các loại hàm đệ quy trong C / C++

Hàm đệ quy là gì? Các loại hàm đệ quy trong C / C++

Thuật toán sắp xếp Quick Sort trong C / C++

Thuật toán sắp xếp Quick Sort trong C / C++

Thuật toán sắp xếp trộn (Merge Sort) trong C / C++

Thuật toán sắp xếp trộn (Merge Sort) trong C / C++

Thuật toán sắp xếp chọn (Selection Sort) trong C / C++

Thuật toán sắp xếp chọn (Selection Sort) trong C / C++

Thuật toán sắp xếp chèn (Insertion Sort) trong C / C++

Thuật toán sắp xếp chèn (Insertion Sort) trong C / C++

Thuật toán sắp xếp nổi bọt (Bubble Sort) trong C / C++

Thuật toán sắp xếp nổi bọt (Bubble Sort) trong C / C++

Thuật toán tìm kiếm nội suy (Interpolation Search) trong C / C++

Thuật toán tìm kiếm nội suy (Interpolation Search) trong C / C++

Thuật toán tìm kiếm nhị phần (Binary Search) trong C / C++

Thuật toán tìm kiếm nhị phần (Binary Search) trong C / C++

Thuật toán tìm kiếm tuyến tính (Linear Search) trong C / C++

Thuật toán tìm kiếm tuyến tính (Linear Search) trong C / C++

Thuật toán kiểm tra năm nhuận trong C / C++

Thuật toán kiểm tra năm nhuận trong C / C++

Thuật toán kiểm tra số chẵn lẻ trong C / C++

Thuật toán kiểm tra số chẵn lẻ trong C / C++

Thuật toán tính lũy thừa trong C / C++

Thuật toán tính lũy thừa trong C / C++

Top