1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng tin học đại cương bài 9 đh bách khoa hà nội

16 146 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

Định dạng
Số trang 16
Dung lượng 0,92 MB

Nội dung

Nội dung TRƯỜNG ĐẠI HỌC B\CH KHOA H[ NỘI VIỆN CÔNG NGHỆ THÔNG TIN V[ TRUYỀN THÔNG 9.1 Mảng 9.2 X}u kí tự 9.3 Con trỏ v{ địa (optional) TIN HỌC ĐẠI CƯƠNG Phần Lập trình C Bài Mảng xâu ký tự Nội dung 9.1.1 Kh|i niệm mảng 9.1 Mảng • Tập hợp hữu hạn c|c phần tử kiểu, lưu trữ nhớ • C|c phần tử mảng có tên (l{ tên mảng) ph}n biệt với số cho biết vị trí mảng • Ví dụ: 9.1.1 Kh|i niệm mảng 9.1.2 Khai b|o v{ sử dụng mảng 9.1.3 C|c thao t|c mảng 9.1.4 Tìm kiếm mảng 9.1.5 Sắp xếp mảng 9.2 X}u kí tự – Bảng điểm sinh viên – Vector – Ma trận 9.1.2 Khai b|o v{ sử dụng mảng 9.1.2 Khai b|o v{ sử dụng mảng • Khai b|o mảng (một chiều) • Cấp ph|t nhớ – C|c phần tử mảng cấp ph|t c|c ô nhớ nhớ – Biến mảng lưu trữ địa ô nhớ vùng nhớ cấp ph|t kiểu_dữ_liệu tên_mảng[kích_thước_mảng]; • Trong – kiểu_dữ_liệu: kiểu liệu c|c phần tử mảng – tên_mảng: tên mảng – kích_thước_mảng: số phần tử mảng • Ngôn ngữ C đ|nh số c|c phần tử mảng – Phần tử thứ i mang_nguyen x|c định mang_nguyen[i-1] • Ví dụ int mang_nguyen[10]; // khai b|o mảng 10 phần tử có kiểu liệu int mang_nguyen[0] 9.1.2 Khai b|o v{ sử dụng mảng c[0], c[1], ,c[11] mang_nguyen[9] • Mảng chiều v{ mảng nhiều chiều – Mỗi phần tử mảng l{ mảng => mảng nhiều chiều c[0] -45 c[1] c[2] c[3] c[4] c[5] Các phần tử thuộc kiểu char ……… 9.1.2 Khai b|o v{ sử dụng mảng • Ví dụ khai báo mảng: char c[12]; Khai báo mảng: Tên c, có 12 phần tử, mang_nguyen[1] mang_nguyen 72 15 -89 c[6] c[7] 62 c[8] -3 c[9] c[10] c[11] 64 78 • Ví dụ – int a[6][5] ; mảng a gồm phần tử phần tử l{ mảng gồm số nguyên int – int b[3][4][5]; // mảng b gồm phần tử, phần tử l{ mảng hai chiều gồm phần tử Mỗi phần tử mảng hai chiều l{ mảng gồm số nguyên int b l{ mảng chiều 9.1.2 Khai b|o v{ sử dụng mảng 9.1.2 Khai b|o v{ sử dụng mảng • Khai b|o mảng nhiều chiều • Sử dụng mảng – Truy cập v{o phần tử thông qua tên mảng v{ số phần tử mảng tên_mảng[chỉ_số_phần_tử] – Chú ý: số kiểu_dữ_liệu tên_mảng[size1][size2]…[sizek]; Trong • sizei l{ kích thước chiều thứ i mảng • Ví dụ – int a[4]; – phần tử (thứ nhất) mảng: a[0] – phần tử cuối (thứ tư) mảng: a[3] – a[i]: l{ phần tử thứ i+1 a 10 9.1.2 Khai b|o v{ sử dụng mảng 9.1.3 C|c thao t|c mảng • Ví dụ (tiếp) a Nhập liệu cho mảng • Khởi tạo gi| trị cho mảng khai b|o – int b[3][4]; – phần tử mảng: b[0] l{ mảng chiều – phần tử mảng b[0]: b[0][0] – b[i][j]: l{ phần tử thứ j+1 b[i], b[i] l{ phần tử thứ i+1 b – Ví dụ: • int a[4] = {1,4,6,2}; • float b[ ] = {40.5, 20.1, 100}; • char c[5] = {‘h’, ‘e’, ‘l’, ‘l’, ‘o’}; • int b[2][3]={ {1,2,3}, {4,5,6} }; – Số lượng gi| trị khởi tạo không lớn số lượng phần tử mảng – Nếu số lượng n{y nhỏ hơn, c|c phần tử lại khởi tạo gi| trị – Nếu để trống kích thước mảng số phần tử khởi tạo 11 12 9.1.3 C|c thao t|c mảng 9.1.3 C|c thao t|c mảng a Nhập liệu cho mảng • Nhập liệu từ b{n phím h{m scanf #include #define MONTHS 12 int main(){ int rainfall[MONTHS], i; for ( i=0; i < MONTHS; i++ ){ printf(“Nhap vao phan tu thu %d: “, i+1); scanf("%d", &rainfall[i] ); } return 0; } – int a[10]; – Nhập liệu cho a[1]: scanf(“%d”, & a[1]); – Nhập liệu cho to{n phần tử mảng a => Sử dụng vòng lặp for • Lưu ý – Tên mảng l{ (hằng trỏ) thực phép to|n với tên mảng phép g|n sau đ~ khai b|o 13 14 9.1.3 C|c thao t|c mảng 9.1.3 C|c thao t|c mảng a Nhập liệu cho mảng • Lưu ý #include #include void main(){ int a[100]; int n, i; do{ printf(“\n Cho biet so phan tu cua mang: “); scanf(“%d”,&n); }while (n>100||n khai b|o mảng với kích thước tối đa v{ sử dụng biến lưu số phần tử thực mảng – Ví dụ: Khai b|o mảng số nguyên a có tối đa 100 phần tử Nhập từ b{n phím số phần tử mảng v{ gi| trị c|c phần tử đó… 15 16 9.1.3 C|c thao t|c mảng 9.1.3 C|c thao t|c mảng for(i = 0; i < n; i++){ printf(“a[%d] = ", i); scanf("%d",&a[i]); } getch(); b Xuất liệu mảng – Dùng hàm printf() – Để hiển thị tất c|c phần tử: dùng vòng for • Ví dụ – Hiển thị phần tử – Hiển thị tất c|c phần tử, phần tử dòng – Hiển thị tất c|c phần tử dòng, c|ch vị trí – Hiển thị k phần tử dòng } 17 18 9.1.3 C|c thao t|c mảng 9.1.3 C|c thao t|c mảng #include #define MONTHS 12 int main(){ int rainfall[MONTHS], i; for ( i=0; i < MONTHS; i++ ){ printf(“Nhap vao phan tu thu %d: “, i+1); scanf("%d", &rainfall[i] ); } for ( i=0; i < MONTHS; i++ ) printf( "%5d ” , rainfall[i]); printf("\n"); return 0; } c Tìm gi| trị lớn nhất, nhỏ • Tìm gi| trị lớn – Giả sử phần tử l{ phần tử – Lần lượt so s|nh với c|c phần tử lại – Nếu lớn => so s|nh tiếp – Nếu nhỏ => coi phần tử n{y l{ phần tử lớn v{ tiếp tục so s|nh – Cách làm? • Tìm gi| trị nhỏ nhất: tương tự 19 20 9.1.3 C|c thao t|c mảng 9.1.4 Tìm kiếm mảng max = rainfall[0]; • Bài toán – Cho mảng liệu a v{ gi| trị k – Tìm c|c phần tử mảng a có gi| trị (giống) với k Nếu có in vị trí (chỉ số) c|c phần tử n{y Ngược lại thông b|o không tìm thấy for(i = 1; i < n; i++) if(max < a[i]) max = a[i]; • Cách làm printf("\n Luong mua nhieu nhat la: %d", max); 21 – Duyệt to{n c|c phần tử mảng – Nếu a[i] (giống) k lưu lại số i – Sử dụng biến để x|c định tìm thấy hay không tìm thấy 9.1.4 Tìm kiếm mảng 9.1.4 Tìm kiếm mảng • Phân tích #include #include void main(){ int a[100], chi_so[100]; int n;//n la số phần tử mảng int i, k, kiem_tra; printf(“ Nhap vao so phan tu cua mang: “); scanf(“%d”,&n); printf(“Nhap vao giá trị tim kiem“); scanf(“%d”,&k); – Duyệt to{n c|c phần tử • Vòng lặp for (while, while) – Lưu lại i a[i] (giống) k • Sử dụng mảng lưu số – Biến x|c định tìm thấy hay không tìm thấy • Biến nhận gi| trị • Biến nhận gi| trị >=1 (tìm thấy tăng gi| trị) 23 22 24 9.1.4 Tìm kiếm mảng 9.1.4 Tìm kiếm mảng //Nhap cac phan tu cho mang a //Phan xu ly tim kiem kiem_tra = 0; // Duyệt qua tất phần tử for(i = 0;i 0){ printf(“Trong mang co %d phan tu co gia tri bang %d”,kiem_tra,k); printf(“\nChi so cua cac phan tula:“); for(i = 0;i < kiem_tra;i++) printf(“%3d”,chi_so[i]); } else printf(“\n Trong mang khong co phan tu nao co gia tri bang %d”,k); getch();} 25 26 9.1.5 Sắp xếp mảng 9.1.5 Sắp xếp mảng • Bài toán • Giải thuật xếp – Cho mảng a gồm n phần tử Sắp xếp c|c phần tử mảng a theo thứ tự tăng dần/giảm dần – Sắp xếp thêm dần (insertion sort) – Sắp xếp lựa chọn (selection sort) – Sắp xếp bọt (bubble sort) – Sắp xếp vun đống (heap sort) – Sắp xếp nhanh (quick sort) – Sắp xếp trộn (merge sort) – … 27 28 9.1.5 Sắp xếp mảng 9.1.5 Sắp xếp mảng • Giải thuật xếp lựa chọn • Ý tưởng – Tìm phần tử nhỏ chưa xếp mảng – Đổi chỗ với phần tử phần chưa – Lần xếp thứ • So s|nh a[0] với c|c a[i], i = n-1 a[0] > a[i] => đổi chỗ a[0] v{ a[i] • Thu a[0] l{ phần tử nhỏ – Lần xếp thứ • So s|nh a[1] với c|c a[i], i = n-1 a[1] > a[i] => đổi chỗ a[1] v{ a[i] • Thu a[1] l{ phần tử nhỏ thứ 29 30 9.1.5 Sắp xếp mảng 9.1.5 Sắp xếp mảng • Ý tưởng • A = { 12, 5, 3, }; – Lần xếp thứ k • So sánh a[k-1] với c|c a[i], i = k n-1 a[k-1] > a[i] => đổi chỗ a[k-1] a[i] • Thu a[k-1] l{ phần tử nhỏ thứ k 12 – … – Lần xếp thứ n-1 • So sánh a[n-2] a[n-1] a[n-2] > a[n-1] => đổi chỗ a[n-2] a[n-1] • Thu a[n-2] l{ phần tử nhó thứ n-1 => lại a[n-1] l{ phần tử nhỏ thứ n (lớn nhất) 31 Lượt 12 Lượt 12 Lượt 3 12 32 9.1.5 Sắp xếp mảng 9.1.5 Sắp xếp mảng //Khai bao cac bien int a[100]; int i, j, tmp; //Sap xep for (i = 0; i < n-1; i++) for (j = i+1; j a[j]){ tmp= a[i]; a[i]= a[j]; a[j] = tmp; } • Ví dụ (Trang 168) – Nhập v{o từ b{n phím mảng số nguyên m số phần tử nhập từ b{n phím – Hiển thị c|c phần tử vừa nhập v{o – Sắp xếp mảng m theo thứ tự tăng dần có hiển thị c|c phần tử lượt xếp 33 9.1.5 Sắp xếp mảng 34 9.1.5 Sắp xếp mảng #include #include void main(){ int m[100]; int n; // n la số phần tử mảng int i, j, k; // Nhập giá trị liệu cho mảng m printf(“ Cho biet so phan tu co mang: “); scanf(“%d”,&n); // nhập giá trị cho phần tử for(i = 0;i[...]... 49 9.3 Con trỏ v{ địa chỉ 9. 2.4 C|c h{m xử lý x}u kí tự printf(“\n strcpy(str1,str2) = %s”, strcpy(str1,str2)); printf(“ str1: %s”,str1); printf(“\n str2: %s”,str2); strcpy(str1,”ab”);strcpy(str2,”abc”); printf(“ str1: %s”,str1); printf(“\n str2: %s”,str2); printf(“\n strcmp(str1,str2) = %d”, strcmp(str1,str2)); getch(); } • 9. 3.1 Tổng quan về con trỏ • 9. 3.2 Các phép toán làm việc với con trỏ • 9. 3.3.. .9. 2.2 Khai b|o v{ sử dụng x}u 9. 2.2 Khai b|o v{ sử dụng x}u a Khai báo xâu • Cú pháp char tên_xâu [số_kí_tự_tối_đa]; • Lưu ý: b Truy cập v{o một phần tử của x}u • Cú pháp: tên_xâu [chỉ_số_của_kí_tự] • Ví dụ char quequan[10]; quequan = “Ha noi” ;//x}u n{y có nội dung l{ “Ha noi” – Để lưu trữ một x}u có n kí tự chúng ta cần một mảng có kích thước n+1 • Ví dụ – Để lưu trữ x}u Tin hoc” chúng... *ten_bien_con_tro = 10; 57 58 9. 3.1 Tổng quan về con trỏ • Ví dụ 2: main() { int i = 3, j = 6; int *p1, *p2; p1 = &i; p2 = &j; p1 = p2; } 59 60 15 9. 3.1 Tổng quan về con trỏ • d Con trỏ void – void *ten_bien_con_tro; – Con trỏ đặc biệt, không có kiểu, – Có thể nhận gi| trị l{ địa chỉ của một biến thuộc bất kỳ kiểu dữ liệu n{o – Ví dụ: • • • • void *p, *q; int x = 21; float y = 34.34; p = &x; q = &y; 9. 3.2 C|c phép... phải khai b|o x}u có số phần tử tối đa ít nhất l{ 8 char str [8]; 41 9. 2.3 C|c h{m xử lý kí tự  quequan[0] quequan[1] quequan[5] quequan[6] lưu trữ ‘q’ ‘u’ ‘i’ ‘\0’ 42 9. 2.3 C|c h{m xử lý kí tự • int isalpha(int ch): kiểm tra xem kí tự có phải chữ c|i hay không (‘a’…’z’,’A’, ’Z’) • int isdigit(int ch): kiểm tra chữ số (‘0‘,‘1‘, 9 ) • int islower(int ch): kiểm tra chữ thường • int isupper(int ch):... 3; • j = i + 1; • Chương trình dịch sẽ cấp ph|t cho biến đó một số ô nhớ liên tiếp đủ để chứa nội dung của biến Ví dụ một biến số nguyên (int) được cấp ph|t 2 byte • Địa chỉ của một biến chính l{ địa chỉ của byte đầu tiên trong số đó Biến Địa chỉ Giá trị i FFEC 3 j FFEE 4 53 54 9. 3.1 Tổng quan về con trỏ 9. 3.1 Tổng quan về con trỏ • b Kh|i niệm v{ khai b|o con trỏ • To|n tử & và * – To|n tử &: Trả... xuống dòng (‘\n’ 10), đầu dòng (‘\r’ 13), tab ngang (‘\t’ 9) , tab dọc (‘\v’ 11) • Tệp tiêu đề sử dụng: ctype.h • int toupper(int ch): chuyển kí tự thường th{nh kí tự hoa toupper(‘a’) => ‘A’ • int tolower(int ch): chuyển kí tự hoa th{nh kí tự thường tolower(‘B’) => ‘b’ 43 • trả về kh|c 0 nếu đúng, ngược lại trả về 0 44 11 9. 2.3 C|c h{m xử lý kí tự 9. 2.3 C|c h{m xử lý kí tự #include #include... printf(“\n strcmp(str1,str2) = %d”, strcmp(str1,str2)); getch(); } • 9. 3.1 Tổng quan về con trỏ • 9. 3.2 Các phép toán làm việc với con trỏ • 9. 3.3 Sử dụng con trỏ làm việc với mảng 51 13 9. 3.1 Tổng quan về con trỏ 9. 3.1 Tổng quan về con trỏ • a Địa chỉ v{ gi| trị của một biến • a Địa chỉ v{ gi| trị của một biến (tiếp) – Bộ nhớ như một d~y c|c byte nhớ – C|c byte nhớ được x|c định một c|ch duy nhất... x}u thứ hai – puts(tên_xâu); – printf(“%s”,tên_xâu); • char* strcat(char* x}u_đích, char* x}u_nguồn): ghép nối x}u nguồn v{o ngay sau x}u đích • Sự kh|c nhau giữa gets v{ scanf? 47 48 12 9. 2.4 C|c h{m xử lý x}u kí tự 9. 2.4 C|c h{m xử lý x}u kí tựp (ví dụ p183) Tệp tiêu đề: stdlib.h • int atoi(char* str): chuyển một x}u kí tự th{nh một số nguyên tương ứng • int atol(char*str): chuyển th{nh số long int... &i; Biến Địa chỉ Giá trị i FFEC 3 p FFEE FFEC void main() { int i = 3; int *p; p = &i; printf("*p = %d \n",*p); getch(); } – Một con trỏ chỉ có thể trỏ tới một đối tượng cùng kiểu 55 56 14 9. 3.1 Tổng quan về con trỏ 9. 3.1 Tổng quan về con trỏ • c Sử dụng biến con trỏ: • Ví dụ 1: – Một biến con trỏ có thể được g|n bởi: main() { int i = 3, j = 6; int *p1, *p2; p1 = &i; p2 = &j; *p1 = *p2; } • Địa chỉ của... hoa\n”); printf(“Ki tu chu thuong tuong ung %c\n”,tolower(ch)); }else if(islower(ch)){ printf(“Ki tu nay la chu thuong\n”); printf(“Ki tu chu hoa tuong ung %c\n”,toupper(ch)); } getch(); } 45 9. 2.3 C|c h{m xử lý kí tự 9. 2.4 C|c h{m xử lý x}u kí tự V{o ra x}u kí tự • Tệp tiêu đề: stdio.h • Nhập x}u kí tự Tệp tiêu đề: string.h • size_t strlen(char* tên_xâu): trả về độ d{i x}u • char* strcpy(char* x}u_đích, ... a[i], i = k n-1 a[k-1] > a[i] => đổi chỗ a[k-1] a[i] • Thu a[k-1] l{ phần tử nhỏ thứ k 12 – … – Lần xếp thứ n-1 • So sánh a[n-2] a[n-1] a[n-2] > a[n-1] => đổi chỗ a[n-2] a[n-1] • Thu a[n-2] l{ phần... printf(“%3d”,m[k]); } getch(); } 9. 1 Mảng 9. 2 X}u kí tự 9. 2.1 Kh|i niệm x}u kí tự 9. 2.2 Khai b|o v{ sử dụng x}u 9. 2.3 C|c h{m xử lý kí tự 9. 2.4 C|c h{m xử lý x}u 37 38 9. 2.1 Kh|i niệm x}u kí tự 9. 2.1 Kh|i niệm... a[i], i = n-1 a[1] > a[i] => đổi chỗ a[1] v{ a[i] • Thu a[1] l{ phần tử nhỏ thứ 29 30 9. 1.5 Sắp xếp mảng 9. 1.5 Sắp xếp mảng • Ý tưởng • A = { 12, 5, 3, }; – Lần xếp thứ k • So sánh a[k-1] với c|c

Ngày đăng: 04/12/2015, 07:56

TỪ KHÓA LIÊN QUAN