Tải bản đầy đủ (.pdf) (16 trang)

index of cnpmpth02001slidepdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (100.14 KB, 16 trang )

<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>

Lập trình nâng cao - Chương 05 - Ngô Công Thắng 1


<b>Ch</b>

<b>ươ</b>

<b>ng 5. Ki</b>

<b>ể</b>

<b>u m</b>

<b>ả</b>

<b>ng và xâu ký t</b>

<b>ự</b>



I. M

ng



II. Xâu ký t



III. Bài t

p ch

ươ

ng 5



I. M

ng



1. Khái ni

m v

ki

u m

ng



2. Khai báo bi

ế

n m

ng m

t chi

u



3. Truy nh

p các ph

n t

c

a m

ng m

t chi

u


4. Kh

i t

o m

ng m

t chi

u



5. M

ng nhi

u chi

u



</div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>

Lập trình nâng cao - Chương 05 - Ngơ Công Thắng 3


I.1. Khái ni

m v

ki

u m

ng



²

M

ng là m

t nhóm các bi

ế

n n

m c

nh nhau


có cùng ki

u, cùng tên. M

i bi

ế

n

đượ

c g

i là


m

t ph

n t

. Các ph

n t

c

a m

ng

đượ

c truy


nh

p tr

c ti

ế

p thông qua tên bi

ế

n m

ng và ch


s

.




²

S

ph

n t

c

a m

ng

đượ

c xác

đị

nh ngay t


khi

đị

nh ngh

ĩ

a ra m

ng.

Đ

ây là

đ

i

m h

n ch

ế


c

a m

ng b

i vì n

ế

u khơng dùng h

ế

t các bi

ế

n


c

a m

ng s

gây lãng phí b

nh

.



I.2. Khai báo bi

ế

n m

ng m

t chi

u



² Khai báo biến mảng là xác định tên biến mảng, kiểu
phần tử, số chiều và kích thước mỗi chiều.


² Cú pháp khai báo biến mảng một chiều:


Kiểu_phần_tử Tên_biến_mảng[Kích thước];


trong đó kích thước là số phần tử của mảng, phải cho dưới
dạng hằng hoặc biểu thức hằng. Kiểu phần tử có thể là bất kỳ
kiểu nào.


<i>Ví dụ:</i> int a[5];


</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=3>

Lập trình nâng cao - Chương 05 - Ngô Công Thắng 5


I.3. Truy nh

p các ph

n t

c

a m

ng m

t chi

u



²

Các ph

n t

c

a m

ng

đượ

c

đ

ánh s

. Các s


này g

i là ch

s

. Ph

n t

ử đầ

u tiên có ch

s


0, ph

n t

th

2 có ch

s

là 1,… M

ng có


kích th

ướ

c n thì ph

n t

cu

i cùng có ch

s


n-1.




²

<i>Ví d</i>

<i>ụ</i>

<i>:</i>

n

ế

u ta

đị

nh ngh

ĩ

a m

t bi

ế

n m

ng


int a[5];



thì ta

đượ

c m

t bi

ế

n m

ng tên là a có 5 ph

n


t

, ph

n t

ử đầ

u tiên có ch

s

là 0, ph

n t


th

5 có ch

s

là 4.



I.3. Truy nh

p các ph

n t

c

a m

ng m

t chi

u



²

M

i ph

n t

c

a m

ng có th

truy nh

p tr

c


ti

ế

p thông qua tên bi

ế

n m

ng và ch

s

c

a nó



đặ

t trong ngo

c vng []. Ch

s

c

a ph

n t


có th

cho d

ướ

i d

ng h

ng ho

c bi

u th

c.



Tên bi

ế

n m

ng[Ch

s

]



²

<i>Ví d</i>

<i>ụ</i>

<i>:</i>

5 ph

n t

c

a m

ng a

ví d

trên có


tên là a[0], a[1],… Ta có th

dùng các l

nh


sau:



</div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=4>

Lập trình nâng cao - Chương 05 - Ngô Công Thắng 7


I.4. Kh

i t

o m

ng m

t chi

u



²

Ta có th

kh

i t

o giá tr

cho các ph

n t

c

a


m

ng ngay khi khai báo b

ng cách li

t kê các


giá tr

kh

i t

o

đặ

t trong ngo

c {}.



²

<i>Ví d</i>

<i>ụ</i>

<i>:</i>




Các giá trị khởi tạo


Kích thước mảng


int a[5] = {12, 6, 10, 7, 19};



Dấu chấm phẩy


I.4. Kh

i t

o m

ng m

t chi

u (ti

ế

p)



² Nếu số giá trị khởi tạo ít hơn kích thước mảng thì
các phần tử cịn lại sẽ được khởi tạo bằng 0. Nếu số
giá trị khởi tạo lớn hơn kích thước mảng thì trình
biên dịch sẽ báo lỗi.


<i>Ví dụ:</i> int a[3] = {6,8}; //a[0]=6, a[1]=8, a[2]=0
int a[2] = {8, 6, 9}; //Báo lỗi


² Với những mảng được khởi tạo có thể khơng cần
xác định kích thước mảng. Khi đó trình biên dịch sẽ


đếm số giá trị khởi tạo và dùng số đó làm kích
thước mảng. <i>Ví dụ:</i>


</div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=5>

Lập trình nâng cao - Chương 05 - Ngơ Cơng Thắng 9


I.5. M

ng nhi

u chi

u



² Mảng một chiều là mảng mà các phần tử của nó được


truy nhập qua một chỉ số. Mảng nhiều chiều là mảng
mà các phần tử được truy nhập qua nhiều chỉ số.


² C cho phép khai báo các mảng nhiều chiều với kích
thước mỗi chiều có thể khác nhau. Cú pháp chung như
sau:


Kiểu Tên_biến_mảng[Kích thước chiều 1][Kích thước chiều 2]…;


² Ví dụ:


int a[4][3];


Lưu ý là mỗi chiều phải được bao bởi cặp ngoặc []


I.5. M

ng nhi

u chi

u (ti

ế

p)



² Để truy nhập phần tử của mảng m chiều thì ta phải
dùng m chỉ số. Chỉ số của mỗi chiều có giá trị từ 0 đến
kích thước của chiều đó trừ đi 1. Cú pháp chung như
sau:


Tên_biến_mảng[chỉsố chiều 1][Chỉsố chiều 2]…


² Mảng 2 chiều có thể xem như là mảng một chiều có
các phần tử là một mảng một chiều.


² Ta cũng có thể khởi tạo giá trị cho các phần tử của
mảng nhiều chiều ngay khi định nghĩa. Ví dụ:



</div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=6>

Lập trình nâng cao - Chương 05 - Ngô Công Thắng 11


I.6. Chú ý v

ch

s

c

a ph

n t

m

ng



²

Trình biên d

ch C s

không báo l

i khi ch

s


dùng

để

truy nh

p ph

n t

c

a m

ng n

m


ngoài kho

ng cho phép, t

c là nh

h

ơ

n 0


ho

c l

n h

ơ

n kích th

ướ

c m

ng tr

1.

Đ

i

u


này r

t nguy hi

m b

i vì n

ế

u ta ghi d

li

u


vào ph

n t

m

ng v

i ch

s

n

m ngoài


kho

ng cho phép thì có th

ghi

đ

è lên d

li

u


c

a các ch

ươ

ng trình khác

đ

ang ch

y ho

c


chính ch

ươ

ng trình c

a ta.



I.7. Vào/ra v

i bi

ế

n m

ng



²

Không dùng

đượ

c l

nh printf và scanf



v

i c

bi

ế

n m

ng, ch

dùng

đượ

c v

i


t

ng ph

n t

c

a m

ng. Ví d

:



int a[5],i;


for(i=0;i<5;++i)


{printf("Nhap vao phan tu thu %d: ”, i+1);
scanf(“%d”,&a[i]);


}



</div>
<span class='text_page_counter'>(7)</span><div class='page_container' data-page=7>

Lập trình nâng cao - Chương 05 - Ngô Công Thắng 13


Bài t

p



1.

Cho dãy s

nguyên a

<sub>1</sub>

, a

<sub>2</sub>

, a

<sub>3</sub>

,…, a

<sub>n</sub>

. Tính



t

ng và TBC c

a dãy s

.



2.

Cho ma tr

n ngun có m hàng, n c

t. Tìm



ph

n t

l

n nh

t c

a t

ng hàng và

đổ

i ch


v

ề đầ

u hàng. Ma tr

n

đọ

c vào t

t

p v

ă

n


b

n.



BTVN



1.

Cho dãy s

nguyên a

<sub>1</sub>

, a

<sub>2</sub>

, a

<sub>3</sub>

,…, a

<sub>n</sub>

. S

p x

ế

p



dãy s

t

ă

ng d

n t

trái qua ph

i.



2.

Cho dãy s

nguyên a

<sub>1</sub>

, a

<sub>2</sub>

, a

<sub>3</sub>

,…, a

<sub>n</sub>

. Tính



t

ng và trung bình c

ng các s

d

ươ

ng mà


chia h

ế

t cho 3.



3.

Cho ma tr

n nguyên có m hàng, n c

t. Tính



</div>
<span class='text_page_counter'>(8)</span><div class='page_container' data-page=8>

Lập trình nâng cao - Chương 05 - Ngô Công Thắng 15


II. Xâu ký t




1. Khái ni

m v

ki

u xâu ký t


2. Khai báo bi

ế

n xâu ký t



3. Kh

i t

o bi

ế

n xâu ký t


4. Vào/ra v

i bi

ế

n xâu



5. Các hàm chu

n x

lý xâu ký t


6. M

ng xâu ký t



II.1. Khái ni

m v

ki

u xâu ký t



²

Xâu ký t

là m

t dãy ký t

có ký t

cu

i


cùng là ký t

r

ng. Ký t

r

ng có giá tr

s


0 và vi

ế

t là '\0'.



</div>
<span class='text_page_counter'>(9)</span><div class='page_container' data-page=9>

Lập trình nâng cao - Chương 05 - Ngô Công Thắng 17


II.2. Khai báo bi

ế

n xâu ký t



² Khai báo biến xâu ký tự là xác định tên biến xâu và
số ký tự cực đại có thể chứa trong biến xâu.


² Cú pháp khai báo biến xâu ký tự giống cú pháp khai
báo biến mảng một chiều:


char Tên_biến_xâu[Kích thước];
Ví dụ:


char s[16];



trong đó Kích thước là số ơ nhớ của biến xâu, phải
là hằng hoặc biểu thức hằng.


² Biến xâu có thể chứa các xâu ký tự có độ dài khác
nhau nhưng khơng vượt q Kích thước - 1.


II.3. Kh

i t

o bi

ế

n xâu



²

Khi

đị

nh ngh

ĩ

a bi

ế

n xâu ta có th

kh

i t

o


cho nó. D

ướ

i

đ

ây là 2 cách kh

i t

o:



n Khởi tạo như biến mảng:


char str[6] = {'D', 'H', 'N', 'N', 'I', '\0'};


n Khởi tạo bằng hằng xâu:


char str[6] = "DHNNI";


</div>
<span class='text_page_counter'>(10)</span><div class='page_container' data-page=10>

Lập trình nâng cao - Chương 05 - Ngô Công Thắng 19


II.3. Kh

i t

o bi

ế

n xâu (ti

ế

p)



² Lưu ý là khi khởi tạo cho biến xâu bằng hằng xâu
thì số ký tự cực đại của biến xâu phải lớn hơn số ký
tự của hằng xâu ít nhất là 1, bởi vì trình biên dịch sẽ


đưa thêm vào biến xâu một ký tự rỗng. Ví dụ:
char str[5] = "DHNNI"; //Sai



char str[6] = "DHNNI"; //Đúng


² Cũng giống như biến mảng, khi khởi tạo cho biến
xâu thì có thể khơng cần xác định số ký tự cực đại,
khi đó trình biên dịch sẽ xác định số ký tự cực đại
bằng số ký tự của hằng xâu cộng thêm 1. Ví dụ:


char str[] = "DHNNI";


II.4. Vào/ra v

i bi

ế

n xâu



² Có thể dùng lệnh printf và scanf với cả biến xâu.
Ví dụ:


char xau[11];


printf(“%s”,xau); scanf(“%s”,xau);


² scanf chỉ nhập vào được các xâu ký tự khơng có
dấu cách.


² Sử dụng fgets(stdin, Biến xâu, sizeof(Biến xâu)) để
nhập vào xâu ký tự có cả dấu cách. Ví dụ:
fgets(xau, sizeof(xau), stdin);


</div>
<span class='text_page_counter'>(11)</span><div class='page_container' data-page=11>

Lập trình nâng cao - Chương 05 - Ngô Công Thắng 21


II.5. Các hàm chu

n x

lý xâu ký t




²

C có m

t th

ư

vi

n hàm làm vi

c v

i xâu ký


t

là string.lib. Mu

n s

d

ng các hàm này ta


ph

i khai báo s

d

ng:



#include<string.h>



²

Hàm l

y

độ

dài c

a xâu: strlen(s) cho

độ

dài


c

a xâu s (khơng tính ký t

'\0'). Ví d

:


strlen(“08T1A”) => 5



²

Hàm copy xâu: strcpy(s1, s2) copy xâu s2


vào bi

ế

n xâu s1, s2 có th

là h

ng xâu ho

c


bi

ế

n xâu.



II.5. Các hàm chu

n x

lý xâu ký t

(ti

ế

p)



² Hàm nối xâu: strcat(s1,s2) nối xâu s2 vào cuối biến
xâu s1, s2 có thể là hằng xâu hoặc biến xâu, biến
xâu s1 phải có số ký tự cực đại đủ chứa các ký tự s2
khi thêm vào.


² Hàm so sánh xâu: strcmp(s1,s2) so sánh hai xâu s1
và s2 theo mã ASCII, có phân biệt chữ hoa chữ
thường (không phân biệt dùng hàm stricmp(s1,s2)).
Hàm trả về một giá trị int:


</div>
<span class='text_page_counter'>(12)</span><div class='page_container' data-page=12>

Lập trình nâng cao - Chương 05 - Ngô Công Thắng 23


II.5. Các hàm chu

n x

lý xâu ký t

(ti

ế

p)


²

Hàm

đả

o xâu: strrev(s)

đả

o ng

ượ

c các ký t




trong xâu s,

đầ

u v

cu

i, cu

i v

ề đầ

u.



²

Hàm chuy

n ch

th

ườ

ng thành ch

hoa:


strupr(s) chuy

n các ch

cái th

ườ

ng trong


xâu s thành ch

hoa, các ch

khác không


thay

đổ

i.



²

Hàm chuy

n ch

hoa thành ch

th

ườ

ng:


strlwr(s) chuy

n các ch

cái hoa trong xâu s


thành ch

th

ườ

ng, các ch

khác không thay



đổ

i.



II.6. M

ng xâu ký t



² Một mảng xâu ký tự rất hay được sử dụng, chẳng
hạn như dùng để lưu trữ danh sách tên, danh sách
mật khẩu, danh sách tên tệp,…


² Để tạo mảng các biến xâu rỗng ta tạo một mảng hai
chiều bởi vì xâu ký tự cũng là một mảng và mảng
xâu ký tự thực chất là mảng của các mảng.


² Ví dụ: để lưu trữ 5 họ tên, mỗi họ tên có tối đa 20
ký tự ta định nghĩa mảng xâu như sau:


</div>
<span class='text_page_counter'>(13)</span><div class='page_container' data-page=13>

Lập trình nâng cao - Chương 05 - Ngô Công Thắng 25


II.6. M

ng xâu ký t

(ti

ế

p)




for(i=0;i<5;++i)
{


printf("Nhap vao mot ho ten (an enter de thoat): “);
fgets(stdin,names[i],sizeof(names[i]));


if(strlen(names[i])==0)
break;


}


II.6. M

ng xâu ký t

(ti

ế

p)



²

Ta c

ũ

ng có th

kh

i t

o m

ng xâu ngay khi



đị

nh ngh

ĩ

a gi

ng nh

ư

các m

ng khác. Ví d

:


char Thu[7][10] =



</div>
<span class='text_page_counter'>(14)</span><div class='page_container' data-page=14>

Bài t

p



1.

Nh

p vào m

t h

tên,

đư

a h

tên ra màn



hình

d

ng ch

hoa. Ví d

: nguyen tuan


anh =>

đư

a ra NGUEN TUAN ANH. Cho


bi

ế

t h

tên có bao nhiêu ký t

.



2.

BTVN 4: Nh

p vào m

t h

tên. Chu

n hóa



h

tên theo các yêu c

u sau: (1)

Đầ

u và cu

i



h

tên khơng có d

u cách; (2) Gi

a các t


ch

có m

t d

u cách; (3) Các ch

ữ đầ

u tiên


c

a t

là ch

hoa, các ch

cịn l

i là ch


th

ườ

ng.



Lập trình nâng cao - Chương 05 - Ngô Công Thắng 27


Bài t

p



3. Nh

p vào m

t danh sách n tên (ch

tên,


không h

ọ đệ

m). S

p x

ế

p danh sách tên theo v

n


ABC.



4. BTVN5: Nh

p vào m

t s

nguyên d

ươ

ng.



Đư

a ra xâu ký t

s

nh

phân t

ươ

ng

ng.



5. BTVN6: Nh

p vào m

t s

nguyên d

ươ

ng có


giá tr

>= 100.

Đư

a ra xâu ký t

s

hex t

ươ

ng



</div>
<span class='text_page_counter'>(15)</span><div class='page_container' data-page=15>

Lập trình nâng cao - Chương 05 - Ngô Công Thắng 29


Bài t

p ch

ươ

ng 5



² Bài 1. Viết chương trình nhập vào một dãy n số
nguyên, hãy sắp xếp dãy số này theo thứ tự không
giảm bằng phương pháp sắp xếp chọn.


² Bài 2. Hình vng kỳ ảo bậc n được định nghĩa là
một ma trận vuông cấp n sao cho:



n Chứađủ n2 số tự nhiênđầu tiên (1, 2, 3,…, n2)


n Tổng các số trên từng hàng bằng tổng các số trên từng cột


bằng tổng các số trên đường chéo chính bằng tổng các số
trên đường chéo phụ.


Viết chương trình nhập vào số tự nhiên lẻ n, đưa ra
màn hình một hình vng kỳ ảo bậc n lẻ đó.


Bài t

p ch

ươ

ng 6 (ti

ế

p)



Ví d

d

ướ

i

đ

ây là 2 hình vng k

ỳ ả

o b

c 3


và b

c 5:



8 1 6


3 5 7


4 9 2


</div>
<span class='text_page_counter'>(16)</span><div class='page_container' data-page=16>

Lập trình nâng cao - Chương 05 - Ngô Công Thắng 31


Bài t

p ch

ươ

ng (ti

ế

p)



² Bài 3. Viết chương trình nhập vào một số tự nhiên
n, đưa ra màn hình xâu ký tự số nhị phân tương ứng.


</div>


<!--links-->

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×