Mảng

Mảng là một tập hợp nhiều phần tử có cùng một kiểu giá trị và có chung một tên. Mỗi phần tử của mảng có vai trò như 1 biến.

Mảng 1 chiều

a. Khai báo

<kiểu dữ liệu><tên_mảng>[<kích thước mảng>];

Mảng cần được khai báo rõ 3 thành phần:

  • Kiểu dữ liệu (int, float, char, …)
  • Tên mảng
  • Kích thước của mảng : phải là hằng số nguyên

Chú ý:

  • Khi khai báo mảng, kích thước của mảng phải là hằng số nguyên hệ thập phân hoặc là hằng số nguyên được khai báo đầu chương trình bằng lệnh #define
  • Chỉ số của mảng bắt đầu từ 0 đến N-1
  • Mảng có kích thước N thì lưu tối đa N giá trị.
  • Các phần tử của mảng được cấp phát các vùng nhớ liên tiếp nhau hay nói cách khác các phần tử của mảng có địa chỉ liên tiếp nhau.
  • Tên của mảng chính là địa chỉ của phần tử thứ nhất của mảng

Ví dụ 1: khai báo mảng kiểu nguyên có kích thước 20

int A[20];
  • Mảng 1 chiều A có kích thước 20, mảng A có thể lưu tối đa 20 giá trị kiểu nguyên.
  • Các phần tử của mảng là: A[0], A[1], A[2], A[3], A[4],.., A[19].
  • Cách lấy địa chỉ của mảng A: &A[0] : địa chỉ của phần tử thứ nhất, &A[1]: địa chỉ của phần tử thứ hai,…
  • A : đia chỉ phần tử thứ nhất, A+1: địa chỉ phần tử thứ hai,…

Ví dụ 2: khai báo mảng kí tự có kích thước 10

char string[10];
  • Mảng 1 chiều string có kích thước 10 phân tử kiểu char, mảng string có thể lưu tối đa 10 giá trị kiểu kí tự
  • Các phần tử của mảng là: string[0], string[1], string[2],… ,string[9]
  • Các lấy địa chỉ của mảng string: &string[0], &string[1],…
  • string: đia chỉ phần tử thứ nhất, string+1: địa chỉ phần tử thứ hai,…

b. Khởi tạo

Ví dụ 3: Nhập 1 dãy số nguyên 10 phần tử và lưu vào mảng 1 chiều

#include "stdio.h"
#include "conio.h"
#define N 3

void main()
{
    int A[N];
    int i;
    for(i = 0; i < N; i++)
    {
        printf("\nA[%d] = ", i);
        scanf("%d", A+i);
    }
    for(i = 0; i < N; i++)
        printf("\nA[%d] = %d", i, A[i]);
    getch();
}

Kết quả:

Mảng 1 chiều
Mảng 1 chiều

c. Cách duyệt mảng 1 chiều

Dùng vòng lặp for hoặc while để duyệt tuần tự các phần tử trong mảng

Mảng 2 chiều

a. Khai báo mảng 2 chiều:

<kiểu dữ liệu><tên_mảng>[<kích thước hàng>][<kích thước cột>];

Mảng cần được khai báo rõ 3 thành phần:

  • Kiểu dữ liệu (int, float, char, …)
  • Tên mảng
  • Kích thước hàng,kích thước cột của mảng : phải là hằng số nguyên

Chú ý:

  • Khi khai báo mảng, kích thước hàng và kích thước của mảng phải là hằng số nguyên hệ thập phân hoặc là hằng số nguyên được khai báo đầu chương trình bằng lệnh #define
  • Chỉ số hàng và chỉ số cột của mảng 2 chiều đều bắt đầu từ 0
  • Mảng có kích thước hàng là N, kích thước cột là M thì lưu tối đa NxM giá trị.
  • Các phần tử của mảng được cấp phát các vùng nhớ liên tiếp nhau hay nói cách khác các phần tử của mảng có địa chỉ liên tiếp nhau.
  • Tên của mảng chính là địa chỉ của phần tử thứ nhất của mảng

Ví dụ 4: 

int A[5][6]; // mang 2 chieu kich thuoc 5x6

Mảng 2 chiều A có kích thước hàng là 5 và kích thước cột là 6, mảng A có thể lưu tối đa (5×6 = 30) giá trị kiểu nguyên.

Các phần tử của mảng là:

A[0][0], A[0][1], A[0][2], A[0][3], A[0][4],A[0][5].

A[1][0], A[1][1], A[1][2], A[1][3], A[1][4],A[1][5].

A[4][0], A[4][1], A[4][2], A[4][3], A[4][4],A[4][5].

Cách lấy địa chỉ của mảng A:

&A[0][0] : địa chỉ của phần tử thứ nhất, &A[0][1] : địa chỉ của phần tử thứ hai,…

b. Khởi tạo:

Ta có 2 cách khởi tạo cho mảng 2 chiều:

b1. Gán giá trị mặc định.

Ví dụ 5: khởi tạo giá trị cho mảng 2 chiều số nguyên kích thước 4X3 và in ra giá trị các phần tử của mảng

#include "stdio.h"
#include "conio.h"

#define N 4
#define M 3

void main()
{
    int A[N][M] = {1, 2, 3,
                   4, 0, 5,
                   8, 9, 2,
                   3, 9, 3};
    int i, j;

    // in ra man hinh cac gia tri cua mang A
    for(i = 0; i < N; i++)
        for(j = 0; j < M; j++)
            printf("\nA[%d][%d] = %d", i, j, A[i][j]);

    getch();
}

Kết quả:

Mảng 2 chiều
Mảng 2 chiều

 

b2. Nhập giá trị từ bàn phím

Ví dụ 6: Nhập giá trị cho mảng 2 chiều kích thước 4×3

#include "stdio.h"
#include "conio.h"
#define N 2
#define M 2

void main()
{
    float A[N][M]; // mang 2 chieu kich thuoc NxM
    int i, j; // dung de duyet hang va cot cua mang A
    for(i = 0; i < N; i++)
        for(j = 0; j < M; j++)
        {
            printf("\nA[%d][%d] = ", i, j);
            scanf("%f", &A[i][j]);
        }
    // in ra man hinh cac gia tri cua mang A
    for(i = 0; i < N; i++)
        for(j = 0; j < M; j++)
            printf("\nA[%d][%d] = %f", i, j, A[i][j]);

    getch();
}

Kết quả:

Khởi tạo mảng 2 chiều
Khởi tạo mảng 2 chiều

c. Cách duyệt các phần tử của mảng 2 chiều

Dùng 2 vòng lặp để duyệt mảng 2 chiều theo hàng và cột

1 Comment on Mảng

Leave a Reply