Microsoft PowerPoint IP 08 Array of Array and Struct in C MảngMảng nhiềunhiều chiềuchiều KiểuKiểu cấucấu trúctrúc GV GV NguyễnNguyễn Minh Minh HuyHuy KiểuKiểu cấucấu trúctrúc 1Nhập môn lập trình GV Ng[.]
Trang 2Mảng Mảng nhiều nhiều chiều chiều
Kiểu Kiểu cấu cấu trúc trúc
Trang 3Mảng Mảng nhiều nhiều chiều chiều
Kiểu Kiểu cấu cấu trúc trúc
Trang 4Xét Xét chương chương trình trình sau sau::
Trang 5Giải Giải pháp pháp 1: 1:
Dùng Dùng mảng mảng một một chiều chiều!! !!
Biểu Biểu diễn diễn ma ma trận trận M x N: M x N:
KhaiKhai báobáo mảngmảng mộtmột chiềuchiều M x N M x N phầnphần tửtử
ĐểĐể truytruy xuấtxuất dòngdòng ii cộtcột jj
Trang 6Giải Giải pháp pháp 2: 2:
Dùng Dùng mảng mảng của của mảng mảng
Từ Từ khóa khóa typedef typedef::
ĐặtĐặt têntên kháckhác chocho kiểukiểu dữdữ liệuliệu
Cú phápCú pháp::
typedef typedef <<KiểuKiểu dữdữ liệuliệu> > < <Tên Tên khác khác> >;;
typedef typedef <<KiểuKiểu dữdữ liệuliệu> > < <Tên Tên khác khác> >;;
typedef
typedef intint SoNguyen SoNguyen;;
typedef typedef float float MangThuc MangThuc[ 10 ];[ 10 ];
SoNguyen
SoNguyen a, b, c;a, b, c;
MangThuc MangThuc m;m;
printf
printf(“%d %d %d”, a, b, c);(“%d %d %d”, a, b, c);
mm[ 5 ] [ 5 ] = 123;= 123;
Trang 7Giải Giải pháp pháp 2: 2:
Biểu Biểu diễn diễn ma ma trận trận M x N: M x N:
ĐặtĐặt têntên chocho mảngmảng mộtmột chiềuchiều N N phầnphần tửtử
KhaiKhai báobáo mảngmảng mộtmột chiềuchiều M M phầnphần tửtử kiểukiểu đãđã đặtđặt têntên
ĐểĐể truytruy xuấtxuất dòngdòng ii cộtcột jj
Trang 8Giải Giải pháp pháp 3: 3:
Dùng Dùng mảng mảng nhiều nhiều chiều chiều
Khai Khai báo báo::
<
<KiểuKiểu dữdữ liệuliệu> > < <Tên Tên mảng mảng>[ >[<<SốSố dòngdòng>>] [ ] [<<SốSố cộtcột>>]];;
<
<SốSố dòngdòng>, <>, <SốSố cộtcột> > phảiphải làlà mộtmột hằnghằng sốsố
int m1 m1[ 5 ][ 10 ] [ 5 ][ 10 ];; // Ma // Ma trận trận 5 x 10 5 x 10 số số nguyên nguyên
int m1 m1[ 5 ][ 10 ] [ 5 ][ 10 ];; // Ma // Ma trận trận 5 x 10 5 x 10 số số nguyên nguyên
int m2 m2[ M ][ N ] [ M ][ N ];; // // Sai Sai
Truy Truy xuất xuất phần phần tử tử::
Trang 9Giải Giải pháp pháp 3: 3:
Dùng Dùng mảng mảng nhiều nhiều chiều chiều
Khởi Khởi tạo tạo::
{ 1, 1 }, { 1, 2, 3 }, { 0 }
};
//
// Tự Tự động động biết biết số số dòng dòng int
int m1[ m1[ ][ 5 ] ][ 5 ] = = {{
{ 1, 1 }, { 1, 2, 3 }, { 0 }
};
Trang 10Giải Giải pháp pháp 3: 3:
Dùng Dùng mảng mảng nhiều nhiều chiều chiều
Truyền Truyền tham tham số số mảng mảng::
KhaiKhai báobáo thamtham sốsố mảngmảng giốnggiống biếnbiến mảngmảng
void void foofoo( ( int int a[5][10] a[5][10] ););
KhaiKhai báobáo thamtham sốsố mảngmảng cócó thểthể bỏbỏ sốsố dòngdòng
KhaiKhai báobáo thamtham sốsố mảngmảng cócó thểthể bỏbỏ sốsố dòngdòng
void void foofoo( ( int int a[ ][10] a[ ][10] ););
PhầnPhần tửtử mảngmảng cócó thểthể bịbị thaythay đổiđổi sausau khikhi rara khỏikhỏi hàmhàm
int int a[5][10] = { { 0 } }; a[5][10] = { { 0 } };
Trang 11Mảng Mảng nhiều nhiều chiều chiều
Kiểu Kiểu cấu cấu trúc trúc
Trang 12Xét Xét chương chương trình trình sau sau::
Thông Thông tin tin một một học học sinh sinh gồm gồm::
HọHọ têntên
NgàyNgày sinhsinh
GiớiGiới tínhtính
ĐiểmĐiểm vănvăn, , toántoán, , ngoạingoại ngữngữ
ĐiểmĐiểm vănvăn, , toántoán, , ngoạingoại ngữngữ
Viết Viết chương chương trình trình::
NhậpNhập vàovào 1 1 họchọc sinhsinh
XuấtXuất thôngthông tin tin họchọc sinhsinh vừavừa nhậpnhập
Trang 13Kiểu Kiểu cấu cấu trúc trúc trong trong C: C:
Kiểu Kiểu dữ dữ liệu liệu phức phức hợp hợp
Gom Gom nhóm nhóm dữ dữ liệu liệu với với nhau nhau
Khai Khai báo báo kiểu kiểu cấu cấu trúc trúc::
struct
struct <<TênTên cấucấu trúctrúc>>
{{
struct struct HocSinhHocSinh {{
char char hoten hoten[50]; [50];
Khai Khai báo báo biến biến cấu cấu trúc trúc::
< <Tên Tên cấu cấu trúc trúc> > <<TênTên biếnbiến>;>;
char char hoten hoten[50]; [50];
float
float diemtoan diemtoan;;
};
void main() {{
HocSinh HocSinh hs1, hs2;hs1, hs2; }}
Trang 14Kiểu Kiểu cấu cấu trúc trúc trong trong C: C:
Khởi Khởi tạo tạo biến biến cấu cấu trúc trúc::
void main() {{
HocSinh
HocSinh hshs = = {{
“Nguyen Van A”,
f};
Truy Truy xuất xuất thành thành phần phần::
<
<TênTên biếnbiến> > < <Tên Tên thành thành phần phần> >
“Nguyen Van A”,
“01/01/1997”, 1,
7, 8, 9 };
hs
hs.diemvan diemvan = 5;= 5;
hs
hs.diemToan diemToan = 9;= 9; }}
Trang 15Kiểu Kiểu cấu cấu trúc trúc trong trong C: C:
Truyền Truyền tham tham số số::
GiốngGiống cáccác kiểukiểu bìnhbình thườngthường
TruyềnTruyền thamtham trịtrị
GiáGiá trịtrị thànhthành phầnphần khôngkhông đổiđổi
TruyềnTruyền thamtham chiếuchiếu
void
void cong1 cong1((HocSinh HocSinh hs hs))
{{
hs.diemvan hs.diemvan++; ++;
Trang 16Mảng Mảng nhiều nhiều chiều chiều::
Giải Giải pháp pháp 1: 1: mảng mảng một một chiều chiều
Giải Giải pháp pháp 2: 2: mảng mảng của của mảng mảng
Giải Giải pháp pháp 3: 3: mảng mảng nhiều nhiều chiều chiều thật thật sự sự
Kiểu Kiểu cấu cấu trúc trúc::
Kiểu Kiểu cấu cấu trúc trúc::
Kiểu Kiểu dữ dữ liệu liệu phức phức hợp hợp
Gom Gom nhóm nhóm dữ dữ liệu liệu với với nhau nhau
Khai Khai báo báo: : từ từ khóa khóa “ “struct struct” ”
Truy Truy xuất xuất phần phần tử tử: : dấu dấu “.” “.”
Trang 17Bài Bài tập tập 8.1: 8.1:
Viết
Viết chươngchương trìnhtrình C C thaothao táctác ma ma trậntrận nhưnhư sausau::
NhậpNhập vàovào ma ma trậntrận vuôngvuông N x N N x N chứachứa sốsố nguyênnguyên
HãyHãy chocho biếtbiết::
a) a) TổngTổng phầnphần tửtử nằmnằm trêntrên đườngđường chéochéo chínhchính//phụphụ
b) b) DòngDòng cócó tổngtổng lớnlớn nhấtnhất, , nhỏnhỏ nhấtnhất
b) b) DòngDòng cócó tổngtổng lớnlớn nhấtnhất, , nhỏnhỏ nhấtnhất
c) Ma c) Ma trậntrận cócó làlà mộtmột ma ma phươngphương hay hay khôngkhông
Trang 18Bài Bài tập tập 8.2: 8.2:
Viết
Viết chươngchương trìnhtrình C C thaothao táctác ma ma trậntrận nhưnhư sausau::
NhậpNhập vàovào 2 ma 2 ma trậntrận M x N M x N vàvà N x K N x K chứachứa sốsố nguyênnguyên
HãyHãy::
a) a) TínhTính tíchtích 2 ma 2 ma trậntrận vừavừa nhậpnhập
b) b) TríchTrích rara danhdanh sáchsách cáccác sốsố xuấtxuất hiệnhiện ở ở cảcả 2 ma 2 ma trậntrận
b) b) TríchTrích rara danhdanh sáchsách cáccác sốsố xuấtxuất hiệnhiện ở ở cảcả 2 ma 2 ma trậntrận
Trang 19Bài Bài tập tập 8.3: 8.3:
Viết
Viết chươngchương trìnhtrình C C thaothao táctác phânphân sốsố nhưnhư sausau::
KhaiKhai báobáo kiểukiểu cấucấu trúctrúc phânphân sốsố
NhậpNhập vàovào 2 2 phânphân sốsố
TínhTính vàvà xuấtxuất kếtkết quảquả tổngtổng, , hiệuhiệu, , tíchtích, , thươngthương, , nghịchnghịch đảođảo, , rútrút gọngọncủa
của 2 2 phânphân sốsố vừavừa nhậpnhập
củacủa 2 2 phânphân sốsố vừavừa nhậpnhập
Trang 20Bài Bài tập tập 8.4: 8.4:
Viết
Viết chươngchương trìnhtrình C C thaothao táctác đơnđơn thứcthức nhưnhư sausau::
KhaiKhai báobáo kiểukiểu cấucấu trúctrúc đơnđơn thứcthức
NhậpNhập vàovào 2 2 đơnđơn thứcthức ((cócó dạngdạng axaxN)
TínhTính vàvà xuấtxuất kếtkết quảquả tíchtích, , thươngthương, , đạođạo hàmhàm, , nguyênnguyên hàmhàm củacủa haihaiđơn
đơn thứcthức vừavừa nhậpnhập
đơnđơn thứcthức vừavừa nhậpnhập
Trang 21Bài Bài tập tập 8.5: 8.5:
Viết
Viết chươngchương trìnhtrình C C thaothao táctác họchọc sinhsinh nhưnhư sausau::
KhaiKhai báobáo kiểukiểu cấucấu trúctrúc họchọc sinhsinh ((nhưnhư bàibài họchọc).)
NhậpNhập vàovào danhdanh sáchsách N N họchọc sinhsinh
XuấtXuất danhdanh sáchsách họchọc sinhsinh kèmkèm điểmđiểm trungtrung bìnhbình
XuấtXuất danhdanh sáchsách họchọc sinhsinh giỏigiỏi ((điểmđiểm trungtrung bìnhbình >= 8) >= 8) theotheo thứthứ tựtự
XuấtXuất danhdanh sáchsách họchọc sinhsinh giỏigiỏi ((điểmđiểm trungtrung bìnhbình >= 8) >= 8) theotheo thứthứ tựtựđiểm
điểm trungtrung bìnhbình giảmgiảm dầndần