1. Trang chủ
  2. » Giáo án - Bài giảng

giáo trình C chương 5 phần 1

51 333 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Chương 5 Mảng, Chuỗi Ký Tự - Phần 1: Mảng Một Chiều
Trường học Đại Học Bách Khoa Hà Nội
Chuyên ngành Lập trình C
Thể loại Giáo trình
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 51
Dung lượng 4,13 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Chương 5 Mảng, chuỗi ký tự Mục tiêu của bài học Định nghĩa mảng. Mảng 1 chiều Mảng 2 chiều. Chuỗi ký tự.

Trang 1

Chương 5

Mảng, chuỗi ký tự

Trang 2

Mục tiêu của bài học

 Định nghĩa mảng

 Mảng 1 chiều

 Mảng 2 chiều

 Chuỗi ký tự

Trang 3

Phần 1: Mảng một chiều

Trang 4

Kiểu dữ liệu mảng

Mảng là tập hợp các phần tử có cùng kiểu dữ liệu, được lưu trữ ở các vị trí kế tiếp nhau trong

bộ nhớ chính

3 2 4 5 1 9 6 7 4 8

Mảng kiểu int, gồm 10 phần tử

Trang 5

Lớp lưu trữ : auto, static, extern, register

Kiểu dữ liệu: Các kiểu dữ liệu cơ bản và nâng cao

Tên mảng: Đặt theo tên định danh

Kích thước mảng: Hằng số

 Lớp lưu trữ mặc định là auto  Không cần sử dụng từ khóa này khi khai báo các mảng auto

Ví dụ: int A[10];

Trang 6

Các phần tử và chỉ số của mảng

 Mỗi phần tử được xác định bằng một số thứ tự (còn gọi

là chỉ số) duy nhất trong mảng

 Số chiều của mảng được xác định bằng số các chỉ số cần thiết để định danh duy nhất từng phần tử

 Chỉ số là một số nguyên dương trong [ ] đặt ngay sau tên mảng

 Chỉ số của mảng (trong C) được bắt đầu là 0

Ví dụ: mảng A với 10 phần tử:

A[0],A[1],A[2],…,A[9]

3 2 4 5 1 9 6 7 4 8

Trang 7

Quản lý mảng trong C

 Trong ngôn ngữ C, mảng được “đối xử” không giống hoàn toàn với biến

 Hai mảng có cùng kiểu và cùng kích thước cũng không được xem là tương đương nhau

 Không thể gán trực tiếp một mảng cho một mảng khác

 Không thể gán trị cho toàn bộ mảng, mà phải gán trị cho từng phần tử của mảng

Trang 8

Một số thao tác trên mảng

 Khởi tạo mảng

 Truy xuất các phần tử mảng

 Nhập giá trị cho các phần tử mảng

 Truyền mảng vào hàm

Trang 9

Khởi tạo mảng

 Khởi tạo mảng

 Truy xuất các phần tử mảng

 Nhập giá trị cho các phần tử mảng

 Truyền mảng vào hàm

Trang 10

Khởi tạo mảng

 Là thao tác gán giá trị cho các phần tử mảng

 Các mảng không được khởi tạo tự động

 Không sử dụng mảng khi chưa khởi tạo thích hợp

 Khởi tạo mảng trong khi khai báo:

Trang 11

Khởi tạo mảng (tt)

 Trong trường hợp mảng extern và static , các phần tử được tự động khởi tạo với

giá trị 0

Trang 12

Bài tập áp dụng

 Bài tập 1: Viết chương trình:

 Khai báo và khởi tạo giá trị cho 1 mảng kiểu int, gồm 10 phần tử

 Hiển thi ra màn hình giá trị các phần tử mảng

 Kiểm tra trường hợp số giá trị khởi tạo < kích thước mảng

Trang 13

Truy xuất các phần tử mảng

 Thực hiện khi muốn xem, hiển thị hoặc sử dụng giá trị của chúng để tính toán, kiểm tra…

 Truy xuất phần tử mảng với các chỉ số cụ thể:

Ví dụ:

int A[0] ; int A[5] ;

Trang 14

Nhập giá trị cho các phần tử mảng

 Gán trực tiếp giá trị cho các phần tử:

Trang 15

Bài tập áp dụng

 Bài tập 2: Viết chương trình:

 Khai báo và nhập giá trị cho mảng kiểu int, gồm n phần tử

 Hiển thị các giá trị đã nhập ra màn hình

Trang 16

Truyền mảng vào hàm

 Khi một mảng được truyền vào hàm như một tham số, chỉ có địa chỉ của mảng được truyền vào

 Tên mảng không kèm theo chỉ số là địa chỉ của mảng

Ví dụ:

void main() {

int A[10];

func(A);

}

Mảng A được truyền vào hàm func()

Trang 17

Truyền mảng vào hàm

Khai báo hàm func():

func (int ary []) /*Số phần tử không được xác định trước*/

Trang 18

Bài tập áp dụng

 Bài tập 3: Viết chương trình:

 Khai báo và nhập giá trị cho mảng kiểu int, gồm n phần tử

 Hiển thị các giá trị đã nhập ra màn hình

 Tìm giá trị lớn nhất trong mảng

Yêu cầu: Chương trình được viết ở dạng hàm

Trang 19

Bài tập về nhà

 Bài 1: Viết chương trình (dạng hàm) thực hiện các yêu cầu sau:

Khai báo và nhập giá trị cho một mảng n phần tử, kiểu int

 Hiển thị các giá trị đã nhập ra màn hình

 Tính tổng các phần tử trong mảng

 Tính tổng các phần tử chẵn trong mảng

 Bài 2: Viết chương trình (dạng hàm) thực hiện các yêu cầu sau:

Khai báo và nhập giá trị cho một mảng n phần tử, kiểu int

 Hiển thị các giá trị đã nhập ra màn hình

 Liệt kê các số chính phương trong mảng

Trang 20

Phần 2: Mảng nhiều chiều

Trang 21

Mảng hai chiều

 Mảng đa chiều đơn giản nhất và thường được dùng nhất là mảng hai chiều

 Mảng hai chiều có thể xem như là một mảng với mỗi phần tử là mảng một chiều

 Về logic, một mảng hai chiều trông giống như một bảng lịch trình xe lửa, gồm các dòng và các cột

Trang 22

Một mảng chuỗi hai chiều được khai báo

theo cách sau:

int Ary[3][4];

Khởi tạo mảng đa chiều (tt)

Mảng có kích thước 3  4 (3 hàng, 4 cột)

A[2,0] A[2,1] A[2,2] A[2,3]

A[1,0] A[1,1] A[1,2] A[1,3]

A[0,0] A[0,1] A[0,2] A[0,3]

Trang 23

Khởi tạo mảng đa chiều

1 2 3 4 Ary[0,0]=1; Ary[0,1]=2 ; Ary[0,2]=3; Ary[0,3]=4;

Ary[1,0]=5; Ary[1,1]=6 ; Ary[1,2]=7; Ary[1,3]=8; Ary[2,0]=9; Ary[2,1]=10 ; Ary[2,2]=11; Ary[2,3]=12;

Trang 24

int ary[3][4]

={{1,2,3},{4,5,6},{7,8,3}};

Kết quả của phép gán trên như sau:

Khởi tạo mảng đa chiều (tt)

7 8 3 0

4 5 6 0

1 2 3 0 Ary[0,0]=1; Ary[0,1]=2 ; Ary[0,2]=3; Ary[0,3]=0;

Ary[1,0]=4; Ary[1,1]=5 ; Ary[1,2]=6; Ary[1,3]=0; Ary[2,0]=7; Ary[2,1]=8 ; Ary[2,2]=3; Ary[2,3]=0;

Trang 25

Truy xuất các phần tử mảng

 Truy xuất phần tử mảng với các chỉ số cụ thể

A[0][0] //Phần tử đầu tiên (hàng 0, cột 0)

A[1][3] //Phần tử ở hàng 2, cột 4

A[m-1][n-1] //Phần tử cuối cùng(hàng m, cột n)

 Sử dụng vòng lặp (for, while, do…while):

for (int i=0;i<m;i++){

Trang 26

Bài tập áp dụng

 Bài tập 4: Viết chương trình:

 Khai báo và khởi tạo giá trị cho 1 mảng 2 chiều kiểu nguyên, kích thước 3  3

 Hiển thị các giá trị đã nhập ra màn hình

Trang 27

Nhập giá trị cho các phần tử mảng

int A[2][3]; //Khai báo mảng

 Gán trực tiếp giá trị cho các phần tử mảng

A[0][0] = 1; A[0][1] = 2; A[0][2] = 3;

A[1][0] = 4; A[0][1] = 5; A[0][2] = 6;

A[0][0] = 7; A[0][1] = 8; A[0][2] = 9;

 Sử dụng vòng lặp (for, while, do…while):

for (int i=0;i<2;i++)

Trang 28

Bài tập áp dụng

 Bài tập 4: Viết chương trình:

 Khai báo mảng 2 chiều kiểu nguyên, kích thước m  n (m, n bất kỳ, nhập từ bàn phím)

 Nhập giá trị cho các phần tử mảng

 Hiển thị các giá trị đã nhập ra màn hình

Trang 29

Truyền mảng 2 chiều vào hàm

Nguyên mẫu hàm:

func (int ary [10][20])/*Xác định trước kích thước mảng*/

{

}

func (int ary [][20])/*Không xác định kích thước mảng*/

{

}

Hoặc:

Trang 30

Truyền mảng 2 chiều vào hàm

}

Mảng Ary được truyền vào hàm func

Trang 31

Bài tập áp dụng

 Bài tập 5: Viết chương trình dưới dạng hàm, thực hiện các yêu câu cầu sau:

 Khai báo mảng 2 chiều kiểu nguyên, kích thước m  n

 Nhập giá trị cho các phần tử mảng

 Hiển thị các giá trị đã nhập ra màn hình

 Liệt kê các số nguyên tố trong mảng

Trang 32

Phần 3: Chuỗi ký tự

Trang 33

Chuỗi/Mảng ký tự

 Khai báo chuỗi:

Chuỗi có thể được định nghĩa như là một mảng

kiểu ký tự, được kết thúc bằng ký tự null („\0‟)

 Chuỗi lưu tối đa 9 ký tự, ký tự cuối cùng là ký tự „\0‟

Ví dụ:

char str [10];

char <Tên chuỗi> [Độ dài chuỗi];

Trang 34

Chuỗi/mảng ký tự

 Có thể gán các hằng chuỗi cho các biến chuỗi

 Hằng chuỗi là một chuỗi các ký tự nằm trong dấu

nháy kép

 Ký tự null „\0‟ được tự động thêm vào biểu diễn

bên trong của chuỗi

phần tử trống cho ký tự kết thúc

Trang 35

Gán giá trị trong khi khai báo:

char str [] = “ Hello ” ; Hoặc char str [ 6 ] = “ Hello ” ;

 Nhập chuỗi:

Trang 36

Các hàm về chuỗi

Các hàm xử lý chuỗi nằm trong tập tin

string.h Một số thao tác được thực hiện

bởi các hàm này là:

• Ghép chuỗi

• So sánh chuỗi

• Xác định vị trị một ký tự trong chuỗi

• Sao chép một chuỗi sang chuỗi khác

• Tính chiều dài chuỗi

• …

Trang 37

Các hàm xử lý chuỗi

Tên hàm Ý nghĩa

strcat(str, s) Nối chuỗi s bắt đầu từ cuối chuỗi str

strncat(str,s,n) Nối n ký tự của chuỗi s bắt đầu từ cuối chuỗi str

strcmp(str1,str2) So sánh 2 chuỗi str1 và str2 Hàm trả về 1 trong 3 giá trị: lớn

hơn 0 (str1>str2), nhỏ hơn 0 (str1<str2) hoặc bằng 0 (str1 = str2) strncmp(str,t,n) So sánh n kí tự đầu tiên của 2 chuỗi str1 và str2 Hàm này cũng

trả về 1 trong 3 giá trị như trên

strcpy(str,s) Copy chuỗi s vào chuỗi str

strncpy(str,s,n) Copy n ký tự của chuỗi s vào chuỗi str

strlen(str) Trả về chiều dài của chuỗi str, được tính bằng số kí tự trong

chuỗi str, không kể kí tự kết thúc null

strchr(str,c) Trả về địa chỉ của ký tự c đầu tiên xuất hiện trong chuỗi str

strrchr(str,c) Trả về địa chỉ của ký tự c cuối cùng xuất hiện trong chuỗi str

Trang 39

 Hàm trả về một giá trị:

• Nhỏ hơn 0, nếu str1< str2

• 0, nếu str1 giống str2

• Lớn hơn 0, nếu str1 > str2

Trang 40

• con trỏ trỏ đến vị trí tìm được đầu tiên

của ký tự (trỏ bởi chr) trong chuỗi str

NULL nếu chr không có trong chuỗi

Trang 43

Gọi hàm:

Trang 44

 Hiển thị các chuỗi đã nhập ra màn hình

 Nối 2 chuỗi s1, s2 và hiển thị kết quả ra màn hình

Trang 45

Mảng chuỗi

 Mảng của chuỗi  mảng ký tự hai chiều

 Chỉ số bên trái xác định số chuỗi, chỉ số bên phải xác định kích thước chuỗi

Ví dụ: char str_ary [50][100];

 Mảng str_ary chứa 50 chuỗi

 Mỗi chuỗi có độ dài tối đa 100 kí tự

str_ary[0]: Chuỗi thứ nhất str_ary[1]: Chuỗi thứ 2 …

str_ary[i]: Chuỗi thứ i + 1

Trang 46

}

Trang 47

Xuất mảng chuỗi

Ví dụ:

char str_ary[10][50];

{ printf(“%s\n”,str_ary[i]); }

Trang 48

 Hiển thị các chuỗi đã nhập ra màn hình

 Tìm chuỗi có độ dài lớn nhất trong các chuỗi đã nhập

Trang 49

Truyền mảng chuỗi vào hàm

Nguyên mẫu hàm:

func (char str [20][30])/*Xác định trước kích thước mảng*/

{

}

func (char str [][30])/*Không xác định kích thước mảng*/

{

}

Hoặc:

 Tương tự như truyền mảng 2 chiều

Trang 50

Truyền mảng chuỗi vào hàm

}

Mảng chuỗi str được truyền vào hàm func

Trang 51

 Hiển thị chuỗi đã nhập ra màn hình

 Liệt kê những chuỗi ký tự có độ dài bằng chuỗi ký tự đầu tiên

Ngày đăng: 12/05/2014, 13:07

TỪ KHÓA LIÊN QUAN

w