Mảng là gì? Cách sử dụng mảng trong lập trình C

Trong bài này tất cả chúng ta sẽ học cách sử dụng mảng 1 chiều và mảng 2 chiều trong lập trình c. Một mảng được sử dụng để tàng trữ tập hợp tài liệu, nhưng nó rất hữu dụng nếu bạn nghĩ về một mảng những biến với cùng một kiểu .
Bài 12 Trong Học lập trình C từ A tới Z

Mảng là gì ?

Mảng ( Array ) là một tập hợp tuần tự những thành phần có cùng kiểu tài liệu và những thành phần được tàng trữ trong một dãy những ô nhớ liên tục trên bộ nhớ. Các thành phần của mảng được truy vấn bằng cách sử dụng “ chỉ số ”. Mảng có kích cỡ N sẽ có chỉ số từ 0 tới N – 1 .

Thay vì khai báo biến một cách rời rạc, như biến number0, number1,… và number99, bạn có thể khai báo một mảng các giá trị như numbers[0], numbers[1] và … numbers[99] để biểu diễn các giá trị riêng biệt. Một thành phần cụ thể của mảng có thể được truy cập qua index (chỉ số).

Tất cả mảng đều gồm có những vị trí nhớ liền kề nhau. Địa chỉ thấp nhất tương ứng với thành phần đầu tiền và địa chỉ cao nhất tương ứng với thành phần sau cuối của mảng .

Cú pháp khai bảo mảng 1 chiều

Array In C

Trong đó :

  • Array vriable: là tên mảng
  • index là trị số của mảng, chính là vị trí trong mảng

VD: Khai báo mảng không có giá trị int sohangban[10];

Khai báo mảng có giá trị: int sohangban[5] = {34, 56, 23, 124, 67};

Số lượng những giá trị trong dấu ngoặc kép { } không được lớn hơn số lượng thành phần khai báo trong dấu ngoặc vuông [ ] .

Nếu bạn bỏ sót kích cỡ mảng thì mảng đó đủ lớn để giữ các giá trị được khởi tạo: int sohangban[] = {34, 56, 23, 124, 67};

Truy cập những thành phần mảng 1 chiều trong C

Một mảng được truy vấn bởi cách đánh chỉ số trong tên của mảng. Dưới đây là một cách truy vấn một giá trị của mảng :

intluonghangban=sohangban[9] ;

Ngoài ra tất cả chúng ta cũng hoàn toàn có thể truy vấn mảng bằng con trỏ, sẽ học vào những phần sau
Ví dụ : Nhập và in ra hàm

#include 
 
int main ()
{
   int n[ 10 ]; /* mang n gom 10 so nguyen */
   int i,j;
 
   /* khoi tao cac phan tu trong mang ve gia tri 0 */         
   for ( i = 0; i < 10; i++ )
   {
      n[ i ] = i + 100; /* Thiet lap phan tu tai vi tri i thanh i + 100 */
   }
   
   /* hien thi gia tri cac phan tu trong mang */
   for (j = 0; j < 10; j++ )
   {
      printf("Phan tu [%d] = %d\n", j, n[j] );
   }
   return 0;
}

Kết quả

mang array

Bài tập nhập, tìm kiếm và in ra thành phần của mảng

Trong bài này, tất cả chúng ta sẽ học cách nhập thành phần vào mảng, tìm kiếm và in ra

#include 
const int MAX = 100;
 
void NhapMang(int a[], int n){
    for(int i = 0;i < n; ++i){
        printf("\nNhap phan tu a[%d] = ", i);
        scanf("%d", &a[i]);
    }
}
 
void XuatMang(int a[], int n){
    for(int i = 0;i < n; ++i){
        printf("\nPhan tu a[%d] = %d", i, a[i]);
    }
}
 
int TimKiem(int a[], int n, int v){
    for(int i = 0;i < n; ++i){
        if(a[i] == v){
            return i;
        }
    }
    return -1;
}
 
int main(){
    int arr[MAX];
    int n;
    printf("\nNhap so luong phan tu: ");
    do{
        scanf("%d", &n);
        if(n <= 0 || n > MAX){
            printf("\nNhap lai so luong phan tu: ");
        }
    }while(n <= 0 || n > MAX);
    printf("\n======NHAP MANG=====\n");
    NhapMang(arr, n);
    printf("\n======XUAT MANG=====\n");
    XuatMang(arr, n);
    printf("\n======TIM KIEM======\n");
    int v;
    printf("\nNhap vao gia tri can tim: ");
    scanf("%d", &v);
    printf("\nTim thay so %d tai chi so %d!", v, TimKiem(arr, n, v));
}

Kết quả

Nhap so luong phan tu: 6

======NHAP MANG=====

Nhap phan tu a[0] = 1

Nhap phan tu a[1] = 2

Nhap phan tu a[2] = 5

Nhap phan tu a[3] = 7

Nhap phan tu a[4] = 8

Nhap phan tu a[5] = 2

======XUAT MANG=====

Phan tu a[0] = 1
Phan tu a[1] = 2
Phan tu a[2] = 5
Phan tu a[3] = 7
Phan tu a[4] = 8
Phan tu a[5] = 2
======TIM KIEM======

Nhap vao gia tri can tim: 5

Tim thay so 5 tai chi so 2!

Khai báo mảng đa chiều trong lập trình C

Mảng đa chiều (multi-dimensional array) là một biến thể của mảng, trong đó mảng 3 chiều được sử dụng nhiều nhất, rất phù hợp để truy cập như một bảng dữ liệu. Thực chất mảng đa chiều cũng là mảng một chiều nhưng khai báo khác nhau 1 chút mà thôi

mang 2 chieu

Cú pháp khai báo: type arr[row_size][column_size];

Khi khởi tạo mảng 2 chiều có 2 chiêu thức khới tạo giá trị .
Khởi tạo kiểu mảng 1 chiều

int x[3][4] = {0, 1 ,2 ,3 ,4, 5, 6, 7, 8, 9, 10, 11}

Khởi tạo kiểu mảng đa chiều

int x[3][4] = {{0,1,2,3}, {4,5,6,7}, {8,9,10,11}};

Ví dụ : Nhập mảng 2 chiều

#include 

int main ()
{
   int a[5][2] = { {0,0}, {1,2}, {2,4}, {3,6},{4,8}};
 
   // hien thi gia tri cua cac phan tu trong mang                      
   for ( int i = 0; i < 5; i++ )
      for ( int j = 0; j < 2; j++ )
      {
         printf("Gia tri cua a[%d][%d] = %d\n",i,j,a[i][j]);
      }
 
   return 0;
}

Kết quả

mang 2 chieu 1

Bài tập nhập, tìm kiếm và xuất giá trị mảng 2 chiều

Trong bài này, tất cả chúng ta sẽ học cách nhập thành phần vào mảng, tìm kiếm và in ra

#include 
#include 
 
void NhapMaTran(int a[][100], int m, int n)
{
   for(int i = 0; i < m; i++)
      for(int j = 0; j < n; j++)
      {
         printf("A[%d][%d] = ", i, j);
         scanf("%d", &a[i][j]);
      }
}
 
void XuatMaTran(int a[][100], int m, int n)
{
   for(int i = 0; i < m; i++)
   {
      for(int j = 0; j < n; j++)
         printf("%d\t", a[i][j]);
      printf("\n");
   }
}
 
std::pair TimKiem(int a[][100], int m, int n, int v){
    for(int i = 0; i < m; i++)
       {
          for(int j = 0; j < n; j++)
             if(a[i][j] == v) return {i, j};
       }
    return {-1, -1};
}
 
int main(){
    int a[100][100];
    int m,n;
    printf("nhap so hang n = "); scanf("%d",&n);
    printf("nhap so cot m = "); scanf("%d",&m);
    printf("nhap vao ma tran:\n");
    NhapMaTran(a, m, n);
    XuatMaTran(a, m, n);
    
    int v;
    printf("\nNhap vao gia tri can tim: ");
    scanf("%d", &v);
    std::pair rs = TimKiem(a, m, n, v);
    printf("\nTim thay so %d tai hang %d, cot %d!", v, rs.first, rs.second);
}

Kết quả

nhap so hang n = 4
nhap so cot m = 3
nhap vao ma tran:
A[0][0] = 1
A[0][1] = 2
A[0][2] = 3
A[0][3] = 4
A[1][0] = 5
A[1][1] = 6
A[1][2] = 7
A[1][3] = 8
A[2][0] = 1
A[2][1] = 21
A[2][2] = 4
A[2][3] = 44
1       2       3       4
5       6       7       8
1       21      4       44

Nhap vao gia tri can tim: 6

Tim thay so 6 tai hang 1, cot 1!

Kết

Mảng 1 chiều và mảng 2 chiều được sử dụng rất nhiều khi tàng trữ tài liệu, đây cũng là một kiểu tài liệu trong cấu trúc tài liệu mà những bạn sẽ học ở những phần sau .
Nếu thấy có ích hãy san sẻ bài viết và tham gia nhóm Nghiện Lập Trình để giao lưu và học hỏi nhé

Rate this post