KIàU DĀ LIàU CÓ CÂU TRÚC

Một phần của tài liệu Bài giảng kỹ thuật lập trình c (Trang 50 - 55)

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

Một phần của tài liệu Bài giảng kỹ thuật lập trình c (Trang 50 - 55)