SLIDE1

Tuesday, September 23, 2014

mảng nhiều chiều, đa chiều trong c


Mảng nhiều chiều có thể được coi như mảng của mảng, ví dụ, một mảng hai chiều có thể được tưởng tược như là một bảng hai chiều gồm các phần tử có kiểu dữ liệu cụ thể và giống nhau
0 1 2 3 4
0 1 2 3
4
Mảng nhiều chiều không bị giới hạn bởi hai chỉ số (hai chiều), Chúng có thể chứa bao nhiều chỉ số tùy thích mặc dù ít khí cần phải dùng đến mảng lớn hơn 3 chiều. Hãy thử xem xét lượng bộ nhớ mà một mảng có nhiều chỉ số cần đến.
char century [100][365][24][60][60]; 
Mảng nhiều chiều thực ra là một khái niệm trừu tượng vì chúng ta có thể có kết quả tương tự với mảng một chiều bằng một thao tác đơn giản giữa các chỉ số của nó: 
int jimmy [3][5];   tương đương với int jimmy [15];   (3 * 5 = 15)
ví dụ sau đây khai báo, nhập giá trị vào mảng và in ra màn hình mảng vừa nhập;
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
#include<stdio.h>
#include<conio.h>
int mang[5][5];
void main()
{

int i, j;
for (i = 0; i <= 4; i++)
for (j = 0; j <= 4; j++)
{
printf("mang[%d][%d]=", i, j);
scanf_s("%d", &mang[i][j]);
printf("\n");
}
printf("mang ban da nhap la:\n");
for (i = 0; i <= 4; i++)
{
for (j = 0; j <= 4; j++)
{
printf("%4d", mang[i][j]);
}
printf("\n");
}
_getch();
}
*dùng mảng làm tham số
Vào một lúc nào đó có thể chúng ta cần phải truyền một mảng tới một hàm như là một tham số. Trong C, việc truyền theo tham số giá trị một khối nhớ là không hợp lệ, ngay cả khi nó được tổ chức thành một mảng. Tuy nhiên chúng ta lại được phép truyền địa chỉ của nó, việc này cũng tạo ra kết quả thực tế giống thao tác ở trên nhưng lại nhanh hơn nhiều và hiệu quả hơn
Để có thể nhận mảng là tham số thì điều duy nhất chúng ta phải làm khi khai báo hàm là chỉ định trong phần tham số kiểu dữ liệu cơ bản của mảng, tên mảng và cặp ngoặc vuông trống. Ví dụ, hàm sau
void procedure (int arg[]) 
nhận vào một tham số có kiểu "mảng của char" và có tên arg. Để truyền tham số cho hàm này một mảng được khai báo
int myarray [40]; 
chỉ cần gọi hàm như sau: 
procedure (myarray); 
Dưới đây là một ví dụ cụ thể 
#include<stdio.h>
#include<conio.h>
void in_mang(int arg[])
{
for (int n = 0; n <= 4; n++)
{
printf("%3d", arg[n]);
}
}
int mang[5];
void main()
{
int i;
for (i = 0; i <= 4; i++)
{
printf("mang[%d]=",i);
scanf_s("%d", &mang[i]);
printf("\n");
}
in_mang(mang);
_getch();
}
Như bạn có thể thấy, tham số đầu tiên (int arg[]) chấp nhận mọi mảng có kiểu cơ bản là int
Trong phần khai báo hàm chúng ta cũng có thể dùng tham số là các mảng nhiều chiều
ví dụ, một hàm với tham số là mảng nhiều chiều có thể như sau:
void procedure (int myarray[][3][4]) 
chú ý rằng cặp ngoặc vuông đầu tiên để trống nhưng các cặp ngoặc sau thì không. Bạn luôn luôn phải làm vậy vì trình biên dịch C phải có khả năng xác định độ lớn của các chiều thêm vào của mảng.
Dưới đây là một ví dụ cụ thể
#include<stdio.h>
#include<conio.h>
void in_mang(int a[][5],int h)
{
for (int i = 0; i <= h-1; i++)
{
for (int j = 0; j <= 4;j++)
{
printf("%4d", a[i][j]);
}
printf("\n");
}
}
int mang1[3][5];
int mang2[4][5];
void main()
{
for (int i = 0; i <= 3; i++)
{
for (int j = 0; j <= 4; j++)
{
printf("mang1[%d][%d]=", i, j);
scanf_s("%d", &mang1[i][j]);
printf("\n");
}
}
for (int a = 0; a <= 3; a++)
{
for (int b = 0; b <= 4; b++)
{
printf("mang2[%d][%d]=", a, b);
scanf_s("%d", &mang2[a][b]);
printf("\n");
}
}
printf("mang 1 la:\n");
in_mang(mang1, 3);
printf("mang 2 la:\n");
in_mang(mang2, 4);
_getch();

}

Related Posts:

  • các toán tử trong lập trình ctoán tử gán:dùng để gán 1 giá trị nào đó cho biến.ví dụ: a = 5;gán giá trij5 cho biến a. vế trái là biến, còn vế phải có thể là hằng bất kì hây biến hay biểu thức.toán tử gán luôn luôn được hiện từ trái sang phải và không bao… Read More
  • đề thi và code giải Olympia IT tuần 1 CPTTRƯỜNG ĐH CÔNG NGHỆ THÔNG TINCÂU LẠC BỘ LẬP TRÌNH CPTCỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAMĐộc lập – Tự do – Hạnh phúc TPHCM, ngày  20 tháng 03 năm 2015Cuộc Thi Lập Trình Olympia ITĐề Chính Thức Tuần 1Câu 1. (6đ) Trong kho h… Read More
  • [C++] điều khiển robot trong bản đồ Oxy U-D-L-R-T-BRobot đang đứng ở vị trí 0 0 trong bản đồ. Robot có thể nhận các lệnh L: về phía bên trái, R: về bên phải, U: tiến về phía trước, D: lùi ra sau, B: quay lại vị trí trước đó (lưu ý, nếu robot đã thực hiện lênh U, R, sau đó nhậ… Read More
  • đề thi lập trình olympia IT tuần 2TRƯỜNG ĐH CÔNG NGHỆ THÔNG TINCÂU LẠC BỘ LẬP TRÌNH CPTCỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAMĐộc lập – Tự do – Hạnh phúc TPHCM, ngày  28 tháng 03 năm 2015Cuộc Thi Lập Trình Olympia ITĐề Chính Thức Tuần 2Câu 1. (6đ) Xâu biểu th… Read More
  • lập trình c tìm phần tử nhỏ nhất và phần tử lớn nhất có trong mảngviết chương trình c tìm phần tử nhỏ nhất "min" và phần tử lớn nhất có trong mảng "max", in ra màn hình các giá trị đó#include<stdio.h>#include<conio.h>int a[100];void main(){ int i, n, max, min; printf("nhap so ph… Read More