RSSLập trình C - C++

Mảng hai chiều – ma trận trong C

Mảng hai chiều là một phần quan trong trong bất kỳ ngôn ngữ lập trình nào nó kế thừa và có độ phức tạp hơn hẳn mảng một chiều. Trong bài này chúng ta sẽ khai thác cơ bản cách khai báo, nhập, xuất, và duyệt mảng hai chiều như thế nào.

Mảng hai chiều là một phần quan trong trong bất kỳ ngôn ngữ lập trình nào nó kế thừa và có độ phức tạp hơn hẳn mảng một chiều. Trong bài này chúng ta sẽ khai thác cơ bản cách khai báo, nhập, xuất, và duyệt mảng hai chiều như thế nào.

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:

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

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

<!--
#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ễ.

<!--
#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.

<!--
#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 <>
  • 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.

Kết luận: OK, vậy đã trình bày xong phần mảng hai chiều trong C, mệt quá hi`. Các giải thuật mình demo ở trên có nhiều điều còn chưa đúng, các bạn góp ý nha!

100 out of 100 based on 10151 user ratings
Nếu bạn thấy bài viết hữu ích, hãy nhấn +1 và các liên kết chia sẻ để website ngày càng phát triển hơn. Xin cám ơn bạn!

Nếu là khách, bạn phải đăng ký tài khoản và kích hoạt tài khoản để bình luận được hiển thị ở đây.
Thông tin kích hoạt gửi đến mail của bạn.

Tin mới hơn

Tin cũ hơn

Lên trên đầu