1. Trang chủ
  2. » Thể loại khác

lap trinh c++ ppsx

51 1,3K 0
Tài liệu đã được kiểm tra trùng lặp

Đ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 4 : Chuỗi
Tác giả ThS. Đỗ Đình Trang
Trường học Trường Đại Học Công Nghệ Thông Tin
Chuyên ngành Kỹ Thuật Lập Trình
Thể loại Bài Giảng
Định dạng
Số trang 51
Dung lượng 193,78 KB

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

Nội dung

 chr là một biến ký tự chứa giá trị cần tìm. Hàm trả về con trỏ trỏ đến giá trị tìm được đầu tiên trong chuỗi, hoặc NULL nếu không tìm gặp thấy Các hàm về chuỗi tt...  Mở một tập tin

Trang 1

ThS Đỗ Đình Trang

KỸ THUẬT LẬP TRÌNH

dodinhtrang@gmail.com

Trang 2

ThS Đỗ Đình Trang

CHƯƠNG 4 : CHUỖI

dodinhtrang@gmail.com

Trang 3

 Các biến và hằng kiểu chuỗi:

phải được khai báo trước khi sử dụng

Một hằng chuỗi là một dãy các ký tự nằm trong dấu nháy kép

 Mỗi ký tự trong một chuỗi được lưu trữ như là một phần tử của mảng

Trang 4

 Có thể gán giá trị cho chuỗi ký tự bằng những cách sau:

 char arr_str[7] = {`H', `e', `l', `l', `o', `!', `\0'};

 char str[7] = "Hello!";

 char str[] = "I like C.";

 char *ptr_str = "I teach myself C.";

Trang 5

 Chuỗi có thể được lưu và truy cập bằng cách sử dụng con trỏ kiểu ký tự.

 Một con trỏ kiểu ký tự trỏ đến một chuỗi được khai báo như sau:

 char *ptr_str;

 ptr_str = "A character string.";

Khai báo chuỗi (tt)

ptr_str = `x'; /* Sai */

*ptr_str = `x'; /* Đúng */

Trang 6

Các hàm này là một phần của thư viện nhập/xuất chuẩn tên stdio.h

 Hàm gets() dùng để đọc các ký tự từ một giao tiếp nhập chuẩn (stdin) Cú

pháp : gets(str); trong đó str là một mảng ký tự đã được khai báo

 Hàm puts() dùng để xuất các ký tự cho một giao tiếp xuất chuẩn (stdout)

Cú pháp : puts(str);

Trang 7

int i=0, delt = `a' - `A';

}

Trang 8

 Các thao tác Nhập/Xuất chuỗi có định dạng

Có thể sử dụng các hàm scanf() và printf() để nhập và hiển thị các

Trang 9

 Các hàm này có thể tìm thấy trong tập tin string.h

 strlen(char *str): Xác định chiều dài của chuỗi str

 char str1[] = {`A', ` `,`s', `t', `r', `i', `n', `g', ` `,`c', `o', `n', `s', `t', `a',

`n', `t', `\0'};

 char str2[] = "Another string constant";

 char *ptr_str = "Assign a string to a pointer.";

 printf(“str1 is: %d bytes\n", strlen(str1)); // 17

 printf(“str2 is: %d bytes\n", strlen(str2)); // 23

 printf(“ptr_str is: %d bytes\n",strlen(ptr_str)); // 29

Trang 10

 chr là một biến ký tự chứa giá trị cần tìm.

Hàm trả về con trỏ trỏ đến giá trị tìm được đầu tiên trong chuỗi, hoặc NULL nếu không tìm gặp thấy

Các hàm về chuỗi (tt)

Trang 11

else printf("%c does not occur in

%s\n", chr, str2);

getch();

}

Các hàm về chuỗi – Ví dụ về strchr()

Trang 13

{ char name1[15] = "Geena";

char name2[15] = "Dorothy";

char name3[15] = "Shania";

char name4[15] = "Geena";

Trang 14

str1 và str2 là hai chuỗi đã được khai báo và khởi tạo.

Hàm sao chép giá trị str2 vào str1 và trả về chuỗi str1

 Nối 2 chuỗi vào nhau: strcat()

 Cú pháp: strcat(str1, str2);

str1 và str2 là hai chuỗi đã được khai báo và khởi tạo.

Các hàm về chuỗi (tt)

Trang 15

{ char hotelname1[15] = "Sea View";

char hotelname2[15] = "Sea Breeze";

Trang 16

}

Các hàm về chuỗi – Ví dụ về strcat()

Trang 17

ThS Đỗ Đình Trang

dodinhtrang@gmail.com

Trang 18

 Tập tin biểu thị một thiết bị cụ thể có thể trao đổi thông tin được

 Nó có thể là tập tin trên đĩa, màn ảnh, máy in, băng từ.

 Khi tiếp cận, phải có động tác mở tập tin; khi không dùng nữa, phải đóng lại.

 Có 2 kiểu nhập xuất trên tập tin:

 Kiểu văn bản (text file)

 Kiểu nhị phân (binary file)

Trang 19

Khai báo này cho biết fptr là một con trỏ trỏ đến một FILE

Định nghĩa và khai báo (tt)

Trang 20

Mở một tập tin văn bản: fopen()

FILE *fopen(const char *filename, const char *mode);

filename là con trỏ trỏ đến chuỗi ký tự chứa một tên tập tin

hợp lệ và cũng có thể chứa cả phần mô tả đường dẫn

mode xác định cách thức tập tin được mở

 Các chế độ hợp lệ mà một tập tin có thể mở:r Chế độ Mở một tập tin văn bản để đọcÝ nghĩa

w Tạo một tập tin văn bản để ghi

a Nối vào một tập tin văn bản r+ Mở một tập tin văn bản để đọc/ghi w+ Tạo một tập tin văn bản để đọc/ghi

Trang 22

fclose() trả về 0 nếu đóng thành công

 Bất kỳ giá trị trả về nào khác 0 đều cho thấy có lỗi xảy ra

Có thể dùng fcloseall() để đóng tất cả các tập tin đang

cùng mở, và nó trả về số tập tin đã đóng hoặc trả về EOF nếu thất bại

Các tập tin văn bản (tt)

Trang 23

char filename[]= "haisu.txt";

int reval = SUCCESS;

if ((fptr = fopen(filename, "r"))

==NULL)

{printf("Cannot open %s.\n", filename);

reval = FAIL;

}

else { printf("The value of fptr: 0x%p\n", fptr);

printf("Ready to close the file.");

fclose(fptr);

} return reval;

Trang 24

int fputc(int ch, FILE *fp);

fp là một con trỏ tập tin trả về bởi hàm fopen()

ch là ký tự cần ghi

ch được khai báo là kiểu int, nhưng nó được hàm fputc() chuyển đổi

thành kiểu unsigned char.

Hàm fputc() ghi một ký tự vào stream đã định tại vị trí hiện hành

của con trỏ định vị trí bên trong tập tin và sau đó tăng con trỏ này lên.

Nếu fputc() thành công, nó trả về ký tự đã ghi, ngược lại nó trả về

Các tập tin văn bản (tt)

Trang 25

int fgetc (FILE *fp);

fp là một con trỏ tập tin kiểu FILE trả về bởi hàm fopen().

Hàm fgetc() trả về ký tự kế tiếp của vị trí hiện hành trong

stream input, và tăng con trỏ định vị trí bên trong tập tin lên

Ký tự đọc được là một ký tự kiểu unsigned char và được chuyển thành kiểu int.

Nếu đã đến cuối tập tin, fgetc() trả về EOF.

Các tập tin văn bản (tt)

Trang 26

 Chương trình sau đây nhận các ký tự từ bàn phím và ghi chúng vào

một tập tin cho đến khi người dùng nhập ký tự ‘@’ Sau khi người

dùng nhập thông tin vào, chương trình sẽ hiển thị nội dung ra màn hình

Các tập tin văn bản (tt)

Trang 27

}

do {

ch = fgetc (fp);

putchar(ch) ;} while (ch!=EOF);

getch();

fclose(fp);

}

Các tập tin văn bản (tt)

Trang 28

Nhập xuất chuỗi: fputs() và fgets()

int fputs(const char *str, FILE *fp);

 Viết toàn bộ chuỗi vào stream.

 Trả về EOF nếu xảy ra lỗi

char *fgets(char *str, int length, FILE *fp);

 Đọc một chuỗi từ stream đã cho cho đến khi đọc được một ký tự sang

dòng mới hoặc sau khi đã đọc được length-1 ký tự

 Hàm trả về một con trỏ trỏ đến chuỗi nếu thành công và NULL nếu

Các tập tin văn bản (tt)

Trang 29

wb Tạo một tập tin nhị phân để ghi

ab Nối vào một tập tin nhị phânr+b Mở một tập tin nhị phân để đọc/ghiw+b Tạo một tập tin nhị phân để đọc/ghia+b Nối vào một tập tin nhị phân để đọc/ghi

Trang 30

fp là một con trỏ tập tin trỏ đến một tập tin đang mở

Ghi một tập tin nhị phân: fwrite()

size_t fwrite(const void *buffer, size_t num_bytes, size_t count, FILE *fp);

size_t: được dùng như một số nguyên dương

buffer: là một con trỏ trỏ đến thông tin sẽ được ghi vào tập tin

Các tập tin nhị phân (tt)

Trang 31

fp: là một con trỏ tập tin trỏ đến một stream đã được mở trước đó

Các tập tin mở cho những thao tác này phải mở ở chế độ nhị phân

 Hàm này trả về số lượng các đối tượng đã ghi vào tập tin nếu

thao tác ghi thành công Nếu giá trị này nhỏ hơn count thì đã

xảy ra lỗi.

 Hàm ferror() (sẽ được thảo luận trong phần tới) có thể được dùng để xác định lỗi

Các tập tin nhị phân (tt)

Trang 32

 Dùng để đọc bất kỳ kiểu dữ liệu nào

size_t fread(void *buffer, size_t num_bytes, size_t count, FILE *fp);

 buffer: là con trỏ trỏ đến vùng nhớ sẽ nhận dữ liệu từ tập tin.

num_bytes: Số byte phải đọc hoặc ghi.

count: xác định có bao nhiêu mục (mỗi mục dài num_bytes) được đọc

hoặc ghi.

fp là một con trỏ tập tin trỏ đến một stream đã được mở trước đó Các

tập tin đã mở cho những thao tác này phải mở ở chế độ nhị phân.

Các tập tin nhị phân (tt)

Trang 33

 Các hàm fread() và fwrite() thường được gọi là các hàm

đọc hoặc ghi không định dạng

 Chương trình sau đây ghi vào và sau đó đọc ngược ra một

số kiểu double, một số kiểu int và một số kiểu long từ tập

tin trên đĩa Lưu ý rằng nó sử dụng hàm sizeof() để xác

định độ dài của mỗi kiểu dữ liệu.

Các tập tin nhị phân (tt)

Trang 34

fwrite (&d, sizeof(double), 1, fp);

fwrite (&i, sizeof(int), 1, fp);

fwrite (&li, sizeof(long), 1,fp);

if ((fp = fopen ("jak", "rb+")) == NULL )

{ printf("Cannot open file");

exit(1);

} fread (&d, sizeof(double), 1, fp); fread(&i, sizeof(int), 1, fp);

fread (&li, sizeof(long), 1, fp); printf ("%f %d %ld", d, i, li); fclose (fp);

Các tập tin nhị phân – Ví dụ

Trang 35

feof(): dùng để chỉ ra cuối tập tin khi tập tin được mở cho các thao tác nhị phân.

rewind(): đặt lại vị trí của con trỏ định vị trí về đầu tập tin.

ferror(): xác định liệu một thao tác trên tập tin có sinh lỗi hay không.

remove(): xóa một tập tin đã cho.

fflush(): làm sạch và chép các buffer ra ngoài Nếu một tập tin được mở để đọc, thì vùng đệm

nhập của nó sẽ trống, trong khi một tập tin được mở để ghi thì vùng đệm xuất của nó được ghi vào tập tin

fseek(): có thể được sử dụng để đặt lại vị trí của con trỏ định vị bên trong tập tin.

Hệ thống nhập xuất có vùng đệm cũng bao gồm hai hàm fprintf() và fscanf(), hai hàm này tương tự như hàm printf() và scanf(), ngoại trừ chúng thao tác trên tập tin

Trang 36

Thiết lập một tập tin văn bản chứa các số nguyên từ 1 đến 1000,

đọc lại tập tin và chọn ra các số nguyên tố vào một tập tin khác

Trang 37

 Mở tập tin, đọc các số từ tập tin, đồng thời tăng m.

 Tính số chiều n của ma trận vuông, khởi tạo n = 0, sau đó lặp lại nếu n*n < m thì tăng n, nếu n*n >

m thì kết thúc lặp.

 Dùng hàm rewind để trở lại đầu tập tin.

 Đọc lại tập tin và in các số, sử dụng biến đếm d để in ra số phần tử, nếu d = n thì xuống dòng (sau mỗi hàng d gán trở lại bằng 0)

BÀI TẬP

Trang 38

ThS Đỗ Đình Trang

CHƯƠNG 6 : KIỂU CẤU TRÚC VÀ KIỂU HỢP

dodinhtrang@gmail.com

Trang 39

 Là kiểu dữ liệu khai báo các hằng integer có định danh.

 Cấu trúc như sau:

 enum tag_name {enumeration_list} variable_list;

 tag_name và variable_list là không bắt buộc.

 Ví dụ:

 enum automobile {sedan, pick_up, sport_utility};

 enum language {human=100, animal=50, computer};

 enum days{SUN, MON, TUE, WED, THU, FRI, SAT};

Kiểu dữ liệu enum

Trang 40

int money_units[5] = {dollar,

quarter, dime, nickel, penny};

} printf("\n");

Trang 41

 typedef int TWO_BYTE;

 Với định nghĩa trên, ta có thể khai báo:

 TWO_BYTE i, j;

Trang 42

typedef char BIT8;

typedef int BIT16;

void Convert2Upper(PTR_STR str1, PTR_STR str2)

{ BIT16 i;

for (i=0; str1[i]; i++){

if ((str1[i] >= `a') &&(str1[i] <= `z')) str2[i] = str1[i] - DELT;

else str2[i] = str1[i];

} str2[i] = `\0';

Trang 43

STRING moon = {"Whatever we wear", "we

become beautiful”, "moon viewing!"};

}for (i=0; i<ITEM_NUM; i++){printf("\n%s", str[i]);

free (str[i]);

}return term;

}

Ví dụ về kiểu typedef (tt)

Whatever we wear

we become beautifulmoon viewing!

WHATEVER WE WEAR

WE BECOME BEAUTIFULMOON VIEWING!

Trang 44

 Các thành phần được truy nhập thông qua tên

 Khai báo: struct struct_tag { data_type1 variable1;

data_type2 variable2;

data_type3 variable3;

};

- struct_tag là tên cấu trúc

- Các thành phần trong {}

là các kiểu dữ liệu được tập hợp

Trang 45

nghĩa biến cấu trúc

struct [tên cấu trúc]

{ khai báo các thành phần;

}danh sách các biến cấu trúc;

Ví dụ:

struct hocsinh {

char hoten[20]; float diem;

} hs, dshs[100]; Kiểu cấu trúc (tt)

Trang 47

 Tham chiếu các phần tử cấu trúc

Trang 48

 1,

 “B Smith”

};

Trang 50

 Định nghĩa biến kiểu hợp

 union automobile sedan,

 } sedan, pick_up, sport_utility;

 Tham chiếu các phần tử kiểu hợp

 Dùng dấu chấm (.) hoặc -> như cấu trúc

Kiểu hợp (tt)

Trang 51

 Viết một chương trình C để cài đặt một hệ thống quản lý kho Hãy lưu trữ

mã số, tên hàng, giá cả và số lượng đang có của mỗi món hàng trong một cấu trúc Nhập chi tiết của 5 món hàng vào một mảng các cấu trúc và hiển thị tên từng món hàng và tổng giá trị của nó Ở cuối chương trình , hãy hiển thị tổng giá trị của kho hàng.

 Viết một chương trình C để lưu trữ các tên và điểm số của 5 sinh viên trong một mảng cấu trúc Hãy sắp xếp mảng cấu trúc theo thứ tự điểm số giảm dần Hiển thị 3 điểm số cao nhất

Bài tập tự làm

Ngày đăng: 29/06/2014, 13:20

Xem thêm

TỪ KHÓA LIÊN QUAN