Khái niệm về mảng 2 chiều trong C và nhập xuất ma trận


Khái niệm mảng hai chiều
Mảng hai chiều là một mảng các phần tử của nó là mảng một chiều, giống như một bảng gồm có dòng và cột, được đánh dấu vị trí là các chỉ số bao gồm chỉ số dòng và chỉ số cột trong đó.Mang hai chieu trong c
Mảng hai chiều trong C
Ma trận là một mảng hai chiều mà có số dòng và số cột bằng nhau.
Khởi tạo ma trận
Khởi tạo ma trận hay mảng hai chiều tức là gán giá trị trực tiếp và ma trận đó bạn làm như sau:
1
2
3
4
<!--
     int a[2][3]={1,2,3,4,5,6};
     int b[3][3]={{2,2,2},{3,3,3},{4,4,4}};
-->
Kết quả sẽ ra được:
Khoi tao ma tran trong c
Khởi tạo ma trận trong c
Nhập xuất ma trận
Đầu tiên bạn phải khai báo ma trận bằng cách:
1
2
3
4
5
6
7
<!--
int a[chiso][chiso];
//Với chiso là một số nguyên.
//Khai báo mảng hai chiều.
int a[dong][cot];
-->
Sau khi đã khai báo bạn tiến hành vào nhập xuất ma trận, chúng ta đã timf hiểu bài hàm trong C rồi nên viết hàm lun cho đỡ nhọc nhằn. hii..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<!--
#include<stdio.h>
void NhapMaTran(int a[][100], int n)
{
    for (int i=0; i<n; i++)
        for (int j=0; j<n; j++)
        {
            printf("\nNhap a[%d][%d]: ",i,j);
            scanf("%d", &a[i][j]);
        }
}
void XuatMaTran(int a[][100], int n)
{
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<n; j++)
        {
            printf("%4d",a[i][j]);
        }
        printf("\n");
    }
}
void main()
{
    int n;
    int a[100][100];
    printf("\nNhap vao so phan tu cua mang: ");
    scanf("%d",&n);
     
    NhapMaTran(a,n);
    XuatMaTran(a,n);
}
-->
Trong mảng hai chiều hay ma trận khi khai báo phải có giá trị max của chỉ số dòng cột, nếu bạn khai báo trực tiếp như trên cũng được không thì chúng ta sẽ cho nó vào một hằng để sau này có thay đổi cũng dễ.
1
2
3
4
5
<!--
#define max=100
int a[max][max];
-->
Duyệt mảng hai chiều
Duyệt mảng là cách điểm qua từng phần tử của mảng, thật ra thì xuất mảng cũng là một công việc duyệt mảng để hiển thị.
Một bài tập nhỏ về duyệt mảng là Tìm số nguyên tố max trong mảng hai chiều.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<!--
#include<stdio.h>
int SNT(int n)
{
    if(n==1)
        return 0;
    for(int i=2;i<=n/2;i++)
    if(n % i == 0)
      return 0;
    return 1;
}
void NhapMT(int a[][10], int m, int n)
{
    for (int i=0; i<m; i++)
        for (int j=0; j<n; j++)
        {
            printf("\nNhap a[%d][%d]: ",i,j);
            scanf("%d", &a[i][j]);
        }
}
int Timmax(int a[][10], int m, int n)
{
    int i, j;
     
    int max=-1;
    for (int i=0; i<m; i++)
        for (int j=0; j<n; j++)
        {
            if (a[i][j]>max && SNT(a[i][j]))
                max=a[i][j];
        }
    return max;
}
void main()
{
    int m;
    int n;
    int a[10][10];
     
    printf("\nNhap m: ");
    scanf("%d", &m);
    printf("\nNhap n: ");
    scanf("%d", &n);
     
    NhapMT(a,m,n);
    int max=Timmax(a,m,n);
    if(max==-1)
        printf("K co so nguyen to trong mang tren.");
    else
        printf("\nMax SNT trong ma tran la: %d",Timmax(a,m,n));
}
-->
Giải thích sơ lược về bài tập trên là, đầu tiên bạn phải có hàm kiểm tra số nguyên tố, và hiển nhiên phải có mảng mới so sánh được ở đây mình sẽ nhập mảng lun.
Bạn gán giá trị max=-1 vì khi trong dãy không có số nguyên tố nó sẽ trả về -1. Sau đó duyệt mảng tìm xem có phần tử nào lớn hơn max mà là số nguyên tố hay không, nếu có sẽ gán vào biến max còn không thì cứ típ tục đến khi duyệt hết mảng.
Bạn nhìn xuống void main sẽ có phần kiểm tra nếu mà max tìm được là -1 nghĩa là trong mảng không có số nguyên tố, ngược lại sẽ xuất ra số nguyên tố lớn nhất.
Các phép tính đặt trưng của ma trận
ma tran vuong trong c
Ma trận trong C
Nhìn trên hình trên bạn sẽ thấy được một số phép tính của ma trận đó là:
  • Phần tử nằm trên đường chéo chính có chỉ số: i = j
  • Tương tự đường chéo phụ sẽ là: n-1 = i + j
  • Các phần tử thuộc tam giác trên: i < j
  • Các phần tử thuộc tam giác dưới: i > j
Ngoài ra còn có các bài tập như:
  • Tìm tổng các phần tử trong mảng
  • Max. min trong mảng.
  • Đếm số nguyên tố trong mảng.
  • Sắp xếp mảng.
  • Tìm tần số xuất hiện của một số n bất kỳ trong mảng.
  • Xóa phần tử trong mảng.

Không có nhận xét nào:

Đăng nhận xét