Thứ Ba, 28 tháng 9, 2021

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

Mảng là gì?

Mảng (Array) là một tập hợp tuần tự các phần tử có cùng kiểu dữ liệu và các phần tử được lưu trữ trong một dãy các ô nhớ liên tục trên bộ nhớ. Các phần tử của mảng được truy cập bằng cách sử dụng “chỉ số”. Mảng có kích thướ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 bao gồm các 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 cuối cùng của mảng.


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





Trong đó:

  • Array variable: 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 các giá trị trong dấu ngoặc kép {} không được lớn hơn số lượng phần tử 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 các phần tử mảng 1 chiều trong C

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


int luonghangban = sohangban[9];


Ngoài ra chúng ta cũng có thể truy cập 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 <stdio.h>

 

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;

}



Tìm kiếm và in ra phần tử của mảng


#include <stdio.h>

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

}

 


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





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


Khi khởi tạo mảng 2 chiều có 2 phương pháp 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 <stdio.h>


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;

}



Tìm kiếm và xuất giá trị mảng 2 chiều


#include <stdio.h>

#include <utility>

 

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<int, int> 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<int, int> rs = TimKiem(a, m, n, v);

    printf("\nTim thay so %d tai hang %d, cot %d!", v, rs.first, rs.second);

}

0 bình luận:

Đăng nhận xét