4.1. MÁng
Là tập hÿp của các biến cùng kiáu-gái là kiáu phÅn tÿ, cùng tên đ°ÿc xếp liên tiếp nhau
trong bá nhã trong. Kiáu phÅn tÿ có thá là có các kiáu bÃt kỳ: ký tự, số, bÁn ghi, &;
a) Cách khai báo mảng
Kiáu_phÅn_tÿ Tên_mÁng [N1] [N2].. [Nk]
æ đây, Ni là mát biáu thức xác đßnh số phÅn tÿ trong mÁng và phÁi đßnh ra mát trß
nguyờn dÂng.
k l s chiòu ca mng, k >=1. Khi k=1 ta có mÁng 1 chißu, k=2 ta có mÁng 2 chißu, &
Ví dā 1: int a[100], b[10][20]; float x[24], y[5][10][17]; Ví dā 2: Các khai báo : int a[10], b[4][2]; float x[5], y[3][3];
sẽ xác đßnh 4 mÁng và ý nghĩa của chúng nh° sau :
Thứ
tự mÁngTên mÁngKiáu Sá chißu th°ácKích Các phần tÿ
1 a int 1 10 a[0], a[1], a[2]...a[9]
2 b int 2 4x2 b[0][0], b[0][1]
b[1][0], b[1][1] b[2][0], b[2][1] b[3][0], b[3][1]
3 x float 1 5 x[0], x[1], x[2]...x[4]
4 y float 2 3x3 y[0][0], y[0][1], y[0][2]
y[1][0], y[1][1], y[1][2] y[2][0], y[2][1], y[2][2]
BÁng 4.1. Ví dā mát số mÁng
Chú ý: Các phÅn tÿ của mÁng đ°ÿc cÃp phát các khoÁng nhã liên tiếp nhau trong bá nhã. Nói cách khác, các phÅn tÿ của mÁng có đßa chỉ liên tiếp nhau.
b) Chỉ số mảng:
Mát phÅn tÿ cā thá của mÁng đ°ÿc xác đßnh nhå các chỉ số của nó. Chỉ số của mÁng phÁi có giá trß int khơng v°ÿt q kích th°ãc t°¢ng ứng và bắt đÅu từ 0. Số chỉ số phÁi bằng số chißu của mÁng. GiÁ sÿ a, b, x, y đã đ°ÿc khai báo nh° trên, và giÁ sÿ i, j là các biến nguyên trong đó i=2, j=1. Khi đó :
a[j+i-1] là a[2] b[j+i][2-i] là b[3][0] y[i][j] là y[2][1] Chú ý :
- MÁng có bao nhiêu chißu thì ta phÁi viết nó có bÃy nhiêu chỉ số. Vì thế nếu ta viết nh°
sau sẽ là sai : y[i] (Vì y là mÁng 2 chißu) v.v &
- Biáu thức dùng làm chỉ số có thá thực. Khi đó phÅn nguyên của biáu thức thực sẽ là chỉ số mÁng.
Ví dā :
a[2.5] là a[2] b[1.9] là a[1]
Khi chỉ số v°ÿt ra ngồi kích th°ãc mÁng, máy sẽ vẫn khơng báo lßi, nh°ng nó sẽ truy cập đến mát vùng nhã bên ngoài mÁng và có thá làm rối lo¿n ch°¢ng trình.
Bài tập 1: Xây dựng ct nhập và xt mÁng 1 chißu có n phÅn tÿ, n <100;
Cách 1:
#include<stdio.h> int main()
{
int a[100]; int n, i;
printf("Nhap n= "); scanf("%d", &n); for(i=0; i<n; i++)
{
printf("Nhap phan tu thu %d= ", i+1); scanf("%d", &a[i]);
}
printf("\nMang vua nhap\n"); for(i=0; i<n; i++)
printf("%6d; ", a[i]); }
Cách 2: (sÿ dāng hàm nhập, xuÃt)
#include<stdio.h> void nhap(int a[], int *n) {
int i;
for(i=0; i<*n; i++) {
printf("Nhap phan tu thu %d= ", i+1); scanf("%d", &a[i]);
} }
void hthi(int a[], int n) {
int i;
for(i=0; i<n; i++)
printf("%d; ", a[i]); } int main() { int a[100]; int n; nhap(a, &n);
printf("\nMang vua nhap\n"); hthi(a, n); return 0;
}
c) Khởi đầu cho mảng.
Các phÅn tÿ trong mng cú thỏ c khỗi to giỏ trò ban đÅu theo quy tắc sau:
- S dng phộp gỏn ỏ khỗi u
- Nu khụng c khỗi u mỏy sẽ gán cho chúng giá trß 0. - Có thá khơng cÅn chỉ ra kích th°ãc (số phÅn tÿ) của mÁng
- Đối vãi mÁng hai chißu, cú thỏ khỗi u vói s giỏ trị khỗi u của mßi hàng có thá
khác nhau.
float m[6]={0, 5.1, 23, 0}; int z[6][3]={ {25, 31, 3}, {12, 13}, {45, 15, 11} };
d) MÁng nhißuchißu(2 chißu, 3 chißu, &)
Chúng ta đã biết thế nào là mÁng mát chißu. Đißu này có nghĩa là các mÁng chỉ có mát chỉ số. Các mÁng cú thỏ cú nhiịu hÂn mỏt chiịu. Cỏc mng a chißu giúp dß dàng trình bày các đối t°ÿng đa chißu, chẳng h¿n mát đồ thß vãi các dịng và cát hay táa đá màn hình của máy tính. Các mÁng đa chißu đ°ÿc khai báo giống nh° các mÁng mát chißu, ngo¿i trừ có thêm mát cặp dÃu ngoặc vng [ ] trong tr°ång hÿp mÁng hai chißu. Mát mÁng ba chißu sẽ cÅn ba cặp ngoặc vng...
Bài tập 2. Nhập, xuÃt mÁng 2 chißu các số nguyên
#include<stdio.h> #include<stdlib.h>
void nhap(float a[100][100], int *n, int *m) {
int i, j;
printf("Nhap so hang: "); scanf("%d", n); printf("Nhap so cot: "); scanf("%d", m); for(i=0; i<*n; i++)
for(j=0; j<*m; j++) { printf(<Nhp phn t ỗ hng %d, cát %d: =, i, j); scanf("%d", &a[i][j]); } }
void hthi(float a[100][100], int n, int m) {
int i, j;
for(i=0; i<n; i++) { for(j=0; j<m; j++) printf(" %6.2f, ", a[i][j]); printf("\n"); } } int main() {
float a[100][100]; int h, c; nhap(a, &h, &c);
printf("\nMa tran vua nhap\n=); hthi(a, h, c); return 0;
}
4.2. Xâu ký tự
Xâu ký tự trong C là mát mÁng các ký tự. Khai báo: char ten_xau[đá dài];
Ví dā: char str[30], name[30], d_chi[100];
C cung cÃp mát số hàm làm viác vãi xâu ký tự, các hàm này nằm trong th° vián
string.h.
Hàm Cú pháp Tác dāng
Nhập xâu từ bàn phím gets(str); Nhập giá trß cho biến xâu ký tự name từ bàn phím, chÃp nhận cÁ dÃu cách, tab
Sao chép xâu strcpy(st1, st2); Sao chép nái dung xâu st2 vào xâu st1
So sánh 2 xâu strcmp(st1, st2) So sánh 2 xâu st1, st2. Giá trß trÁ vß là 0, 1, -1
LÃy đá dài xâu strlen(st1); Cho giá trß là đá dài xâu st1
Tìm kiếm strstr(st1, st2) Tìm vß trí đÅu tiên của st2 trong st1