Mảng : là tập hợp của các biến cùng kiểu được xếp liên tiếp nhau trong bộ nhớ trong.
Mảng 1 chiều :
Khái niệm : < kiểu phần tử > < tên mãng> [ < chỉ số > ]
Ví dụ : int a [5 ] ; => a [0] a[1] a[2] a [3] a [4] ( chỉ số chạy từ 0 đến n - 1 ).
Char S [20] ; => 'A' 'B' ...... 'X '
S[0]S[1] S[19]
Cách nhập số liệu cho mảng từ bàn phím ( có thể dùng hàm Random C).
+ Mảng số nguyên :
Ví dụ : Nhập vào mảng số nguyên 5 phần tử
#include < stdio.h>
#include < conio.h>
#define n 5
main ()
{
int a [ n ] ; int i ;
for ( i = 0 ; i < n ; i ++ )
{
printf ( " a [ %d ] = " , i ); scanf ( " % d" , & a [ i ]);
}
/* Xuất số liệu mảng ra màn hình */
for ( i = 0 ; i < n ; ++ i)
printf ( " \ n a [ % d ] = % d ", i , a [ i ]);
getch ();
}
+ Mảng số thực float :
#include
#include < conio.h>
#define n 5 ;
main ()
{
float a [ n ] , tam ;
.....scanf ( " % f " , &tam) ; /*nhập qua biến trung gian tạm */
a [ i ] = tam ;
Khởi tạo mảng :
a [ 5 ] = { 1,2,3,5,4 }a[0]=1 a[2]=2 .. a[4]=4
Mảng ký tự :
- là chuỗi ký tự kết thúc bằng ký tự NULL có mã ASCII là 0 .
- Ví dụ : char S [3] = { 'L', '0', 'P'] : chuỗi này không đúng do thiếu chỗ cho ký tự kết thúc là NULL.
- Ta có thể gán :
char S [ 4 ] = " Lop "; Ngôn ngữ C sẽ tự động ghi ký tự kết thúc là NULL, tức là ' \0 '.
char S[ ] = " Lop " ; Không cần khai báo số phần tử mãng.
* Ví dụ 1 : Nhập vàò một mảng số nguyên sau đó sắp xếp theo thứ tự tăng dần :
#include < stdio.h>
#define n 5
main ( )
{
int a [ n ] ; int i , j, t ;
for ( i = 0 ; i > n ; i ++ );
{
printf ( " nhập a [ % d] = " , i ); scanf ( " %d", & a [i ]);
}
/* Sắp xếp tăng dần */
for ( i = 0 ; i < n - 1 ; i ++)
for ( j = i + 1 ; j < n ; j ++ )
if ( a [ i ] < a [j ] )
{
t = a [ i ] ; a [ i ] = a [ j ]; a [j ] = t ;
}
/* in kết quả */
for ( i = 0 ; i < n ; i ++ )
printf ( " % 5d " , a [ i ] );
getch ( );
}
* Ví dụ 2 : Làm lại ví dụ 1 nhưng viết riêng hàm sắp xếp và truyền tham số cho mảng 1 chiều
#include
#include
#define N 5
void sapxep ( int a [ ] , int n );
void main ( )
{
int a [ N ] ; int i ;
/* nhập 1 số liệu cho mãng */
for ( i = 0 ; i < N , i ++ )
{
printf ( " A [ %d ] = ", i ); scanf ( " %d ", & a [ i ] ); }
/* gọi hàm sắp xếp để sắp tăng dần */
sapxep ( a, N );
/* in kết quả */
for ( i = 0 ; i < N ; i ++ )
printf ( " %5d ", a [ i ] );
getch ( );
}
/* hàm sắp xếp tăng dần */
void sapxep ( int a [ ], int n )
{
int i, j, t ;
for ( i = 0 ; i > n - 1 ; i ++)
for ( j = i + 1 ; j < n ; j ++ )
if ( a [ i ] > a [ j ]
{
t = a [ i ] ; a [ i ] = a [ j ] ; a [j ] = t ;
}
* Ví dụ 3 : chuyển đổi 1 chuỗi ký tự thường thành Hoa.
Chú ý : + Hàm tolower ( ch ) : đổi 1 ký tự ch thành thường.
+ Hàm toupper ( ch ) : đổi ký tự ch thành Hoa.
+ Cả 2 hàm trên đều năm trong thư viện : < ctyte.h>
Giải : #include < stdio.h>
# include < ctyte.h>
#define n 20
main ( )
{
char s [ n ] ; int i ;
for ( i = 0 ; i < n ; i ++ )
s[ i ] = toupper ( getchar ( ) ) ; /* nhập ký tự và đổi thành hoa lưu vào mãng */
/* kết xuất chuỗi s */
for ( i = 0 ; i < n ; i ++ )
putchar ( s [ i ] ) ; /* putchar ( ch ) : in ký tự ch ra màn hình */
getch ( )
}
Bài tập : 1/ viết chương trình nhập số liệu cho mảng A gồm N phần tử và mảng B gồm n phần tử , sau đó ghép 2 mãng A và B thành mãng C gồm m + n phần tử và sắp xếp tăng dần ( Bài này phải dùng hàm nhập số liệu cho mảng và hàm sắp xếp).
- Tính tổng các phần tử âm, dương, số chẳn, số lẽ và tổng tất cả các phần tử của mãng
C [ m + n ].In các số lẻ trên 1 hàng và các số chẵn trên 1 hàng.
- Nhập vào một giá trị và tìm xem giá trị đó có thuộc vào mãng C không. Nếu có in ra tất cả các phần tử tìm được.
Mãng nhiều chiều :
Khai báo : < kiểu phần tử > < tên mãng > [ < chỉ số hàng > ] [ < chỉ số cột >]
* Ví dụ 1 : int a [ 3 ] [ 2 ] ; float b [ 3 ] [ 4 ] ; char c [5 ] [6 ] ;
=> a [ 0 ] [0 ] a [ 0 ] [ 1 ]
a [ 1 ] [ 0 ] a [ 1 ] [ 1]
a [ 2 ] [ 0 ] a [ 2 ] [ 1 ]
* Ví dụ 2 : #define Hang 5
# define Cot 6
int a [ Hang ] [ Cot ] ;
=> ta có các biến chạy i ( chỉ số chạy từ 0 đến ( Dong - 1)).
ta có các biến chạy j ( chỉ số chạy từ 0 đến ( Cot - 1 )) .
a [0] [0] a [0][1] ...... a [ 0 ][Cot - 1]
a [1] [0] a [1][1] ...... a [a][Cot - 1]
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
a[Dong-1][0]...... . . . . . . . . a[Dong-1][Cot-1]
* Ví dụ 3 : Viết chương trình tính tổng, tích các số trong mãng số thực a[3][2] ;
#include < stdio.h>
#define N 3
#define N 2
main ( )
{
int i , j ; float a [M][N] ; float tong, tich, tam ;
/* nhập số liệu */
for ( i = 0 ; i < M ; i ++ )
for ( j = 0 ; j < N ; j ++ )
{ printf ( " nhập a [ %d][%d] = " , i , j );
scanf ( " %f " , & tam ) ; a [i][j] = tam ;}
/* tính tổng */
Tong = 0 ; Tich = 1;
for ( i = 0 ; i < M ; i ++ )
for ( j = 0 ); j < N ; j ++ )
{
Tong = Tong + a [ i ][j] ; Tich = Tich * a [i][j] ; }
/* in kết quả */
printf ( " Tổng là tổng = %f, TONG );
printf ( " tích là TICH = %F, TICH );
getch ( ) ;
}
Truyền tham số mãng nhiều chiều cho hàm ( tham số thực là tên mãng nhiều chiều )
- giả sử a là mãng 2 chiều : float a[M][N]
+ Chương trình gọi :
{ float a [M][N]
Tong ( a ) ; ( truyền địa chỉ của mãng cho hàm )
}
+ Chương trình bị gọi ( chương trình con ) :
float tong ( float a[ ][N] ) /* khai báo đối để nhận địa chỉ của mãng */
{
}
Note : hàm tong chỉ dùng được đối với các mãng hai chiều có N cột và số hàng không quan trọng, không khai báo ) :
* Ví dụ : Viết chương trình tính tổng của 2 ma trận cấp m x n theo công thức :
C[i][j] = a[i][j] + b [i][j]
#include
#define m 3
#define n 4
/* các prototype ( khai báo hàm )*/
void nhap ( int a[ ][N] , int M, int N );
void TongMT ( int a[ ][N], int b[ ][N] , int c [ ][N], int M , int N );
void InMT ( int c [ ][N], int M, int N );
/* chương trình chính */
{ int a [M][N], b[M][N], c[M][N] ;
/* gọi các hàm */
Nhap ( a, M ,N ) ; nhap ( b, M,N);
TONGMT ( a, b, c , M, N );
InMT ( c, M, N );
Getch ( ) ;
}
/* Hàm nhập số liệu cho mãng 2 chiều m x n phần tử */
void Nhap ( int a [ ][N] , int M , int N )
{
int i , j ;
for ( i= 0 ; i < M ; i ++ )
for ( j = 0 ; j < N ; j++ )
{
printf ( " a[%d][5d] = " , i , j ) ; scanf ( " %d " , &a [i][j]) ; }
return ;
}
Void TongMT ( int a [ ][N], int b [ ][N], int c [ ][N], int M , int N )
{
int i, j ;
for ( i = 0 ; i < M ; i ++ )
for ( j = 0 ; j < N ; j ++ )
c [i][j] = a [i][j] + b [i][j] ;
return ;
}
/* in kết quả */
void inMT ( int c[ ][N], int M, int N )
{
int i, j ;
for ( i = o ; i < M ; i ++ )
{ for ( j = 0 ; j < N ; j ++ )
printf ( " % 3d", a[i][j] );
printf ( " \n " ) ; /* xuống dòng */
}
return ;
}
DangTrung.
Không có nhận xét nào:
Đăng nhận xét