Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 90 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
90
Dung lượng
849,34 KB
Nội dung
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA CÔNG NGHỆ THÔNG TIN GIÁO TRÌNH TIN HỌC CƠ SỞ A (Ngơn ngữ lập trình C) ~*~ ĐẶNG BÌNH PHƯƠNG Lưu hành nội Mục lục CHƯƠNG GIỚI THIỆU NGƠN NGỮ LẬP TRÌNH C 1 6.1 GIỚI THIỆU 6.2 BỘ TỪ VỰNG CỦA C 6.3 CẤU TRÚC MỘT CHƯƠNG TRÌNH C BÀI TẬP CUỐI CHƯƠNG CHƯƠNG CÁC KIỂU DỮ LIỆU CƠ SỞ 9 7.1 CÁC KIỂU DỮ LIỆU CƠ SỞ 7.2 BIẾN, HẰNG, CÂU LỆNH VÀ BIỂU THỨC 11 7.3 CÁC LỆNH NHẬP XUẤT 21 BÀI TẬP CUỐI CHƯƠNG 25 CHƯƠNG CÂU LỆNH ĐIỀU KIỆN VÀ RẼ NHÁNH 26 8.1 CÂU LỆNH ĐIỀU KIỆN IF… ELSE 26 8.2 CÂU LỆNH RẼ NHÁNH SWITCH 29 8.3 KINH NGHIỆM SỬ DỤNG CÂU LỆNH ĐIỀU KIỆN VÀ RẼ NHÁNH 32 BÀI TẬP CUỐI CHƯƠNG 33 CHƯƠNG CÂU LỆNH LẶP 34 9.1 CÂU LỆNH FOR 34 9.2 CÂU LỆNH WHILE 37 9.3 CÂU LỆNH DO… WHILE 40 9.4 KINH NGHIỆM SỬ DỤNG CÁC CÂU LỆNH LẶP 42 BÀI TẬP CUỐI CHƯƠNG 42 CHƯƠNG 10 HÀM 44 10.1 KHÁI NIỆM 44 10.2 CÚ PHÁP 45 10.3 TẦM VỰC CỦA BIẾN VÀ HÀM 47 10.4 THAM SỐ VÀ LỜI GỌI HÀM 49 10.5 ĐỆ QUY 51 BÀI TẬP CUỐI CHƯƠNG 52 CHƯƠNG 11 DỮ LIỆU KIỂU MẢNG (ARRAY) . 53 11.1 KHÁI NIỆM 53 11.2 KHAI BÁO 53 11.3 TRUY XUẤT DỮ LIỆU KIỂU MẢNG 56 11.4 TRUYỀN MẢNG CHO HÀM 58 11.5 MỘT SỐ BÀI TỐN TRÊN MẢNG MỘT CHIỀU 59 BÀI TẬP CUỐI CHƯƠNG 77 CHƯƠNG 12 MỘT SỐ KIỂU DỮ LIỆU NÂNG CAO 79 12.1 KIỂU CHUỖI KÝ TỰ (STRING) 79 12.2 KIỂU CẤU TRÚC (STRUCT) 83 12.3 KIỂU TẬP TIN (FILE) VÀ KIỂU CON TRỎ (POINTER) 86 BÀI TẬP CUỐI CHƯƠNG 87 Chương Giới thiệu ngơn ngữ lập trình C Chương GiỚI THIỆU NGƠN NGỮ LẬP TRÌNH C Trong phần 1, tìm hiểu tổng quan máy tính điện tử bao gồm khái niệm phần cứng, phần mềm, hệ điều hành, mạng máy tính, biểu diễn thơng tin bên mạng máy tính bước đầu làm quen với khái niệm lập trình, biểu diễn thuật tốn sơ đồ khối… Bước sang phần 2, sâu tìm hiểu cách viết chương trình máy tính ngơn ngữ lập trình C để giải vấn đề, tốn Chương giới thiệu ngơn ngữ lập trình C, giúp có nhìn tổng quan ngơn ngữ lập trình 6.1 Giới thiệu Ngơn ngữ C thiết kế nhà khoa học Dennis Ritchie phòng thí nghiệm Bell Telephone vào năm 1972 C thiết kế để viết hệ điều hành UNIX để hỗ trợ cho nhà lập trình nhanh chóng hồn thành cơng việc Về tên gọi, ngơn ngữ C đặt tên tiền thân ngơn ngữ B Ngơn ngữ B phát triển nhà khoa học Ken Thompson, ơng làm việc phòng thí nghiệm Bell C ngơn ngữ lập trình mạnh linh động việc sử dụng nhanh chóng vượt qua khỏi giới hạn phòng thí nghiệm Bell Các nhà lập trình khắp bắt đầu sử dụng để viết đủ loại chương trình Ngay sau đó, nhiều nhà sản xuất phần mềm bắt đầu tung phiên C khác nhau, việc phân Chương Các kiểu liệu sở biệt hay sử dụng ngơn ngữ C bắt đầu làm cho nhà lập trình bối rối Để giải vấn đề này, Viện Định Chuẩn Quốc Gia Mỹ (American National Standard Institute) gọi tắt ANSI triệu họp vào năm 1983 nhằm thiết lập chuẩn mực cho ngơn ngữ C gọi ANSI C Ngồi ngơn ngữ C có nhiều ngơn ngữ lập trình cấp cao khác Pascal, BASIC… theo đánh giá chun gia điện tốn, C có ưu điểm bật sau : • C ngơn ngữ mạnh linh động, có khả thể ý tưởng bạn Nó chạy hệ điều hành khác chen đoạn lệnh C vào cách chương trình viết ngơn ngữ khác • C ngơn ngữ phổ biến, sử dụng rộng rãi nhà lập trình chun nghiệp Do có nhiều cơng cụ phát triển giúp người lập trình ngơn ngữ C nhanh chóng • C ngơn ngữ có tính khả chuyển Tức chương trình C víêt cho hệ thống máy tính (ví dụ IBM PC) biên dịch chạy hệ thống máy tính khác (ví dụ DEC VAX) với thay đổi hay khơng cần thay đổi • C ngơn ngữ lập trình đọng, chứa thuật ngữ gọi từ khóa, sở để xây dựng chương trình • C ngơn ngữ lập trình đơn thể Mã lệnh C viết thành hàm sử dụng lại nhiều chương trình khác Ngày có số ngơn ngữ lập trình cấp cao khác C++, C#, … Đây ngơn ngữ lập trình hướng đối tượng xem ngơn ngữ C nâng cấp Do đó, tồn bạn học ngơn ngữ C áp dụng cho ngơn ngữ nâng cấp Chương Giới thiệu ngơn ngữ lập trình C 6.2 Bộ từ vựng C 6.2.1 Các ký tự dùng C C ngơn ngữ lập trình phân biệt chữ In (Upcase) chữ thường (Lowcase) câu lệnh, biến, hằng, kiểu Các ký tự hợp lệ liệt kê đây: • Bộ chữ 26 ký tự Latinh A, B, C… Z, a, b, c… z • Bộ chữ số thập phân : 0, 1, 2, …, • Các ký hiệu tốn học thơng dụng : + - * / = < > ( ) • Các ký tự đặc biệt : , : ; [ ] % \ # $ ‘, gạch nối _, ‘ ’ 6.2.2 Từ khóa (Keyword) Từ khóa từ dành riêng ngơn ngữ, từ có chức định sử dụng phải viết cú pháp Từ khóa phân biệt chữ hoa chữ thường Ngồi ra, khơng thể sử dụng từ khóa để đặt tên cho biến, hàm, tên chương trình Từ khóa chia thành loại sau đây: • Các từ khóa dùng để khai báo const signed union • double short • break • asm register typedef float void int else if Các từ khóa điều khiển case switch • extern struct volatile Các từ khóa kiểu liệu char long • enum static unsigned default Các từ khóa vòng lặp for while Các từ khóa điều khiển continue goto Các từ khóa khác goto sizeof return Chương Các kiểu liệu sở 6.2.3 Tên hay định danh (Identifier) Tên hay định danh dãy ký tự dùng để tên số, ký tự, tên biến, kiểu liệu, hàm Tên khơng trùng với từ khóa tạo thành từ chữ chữ số bắt buộc chữ đầu phải chữ dấu gạch _ Có thể sử dụng ký tự _ chen tên khơng cho phép chen khoảng trắng Tuy nhiên ta nên đặt tên ngắn gọn, dễ nhớ đầy đủ ý nghĩa Ví dụ: Các tên hợp lệ: GiaiPhuongTrinh, Bai_Tap1, … Các tên khơng hợp lệ: 1A, Giai Phuong Trinh, … Ngơn ngữ C phân biệt chữ hoa chữ thường, tên sau có ý nghĩa khác nhau: BaiTap, baitap, BAITAP… 6.2.4 Dấu chấm phẩy (;) Dấu chấm phẩy ; sử dụng để phân cách câu lệnh C Ví dụ: printf(“Nhập a : ”); scanf(“%d”, &a); 6.2.5 Câu ghi C cho phép người lập trình chèn vào chương trình câu ghi vị trí nhằm mục đích làm sáng tỏ thêm cấu trúc chương trình mà khơng làm ảnh hưởng đến phần khác Các câu ghi ghi dòng dòng khác miễn chúng bao dấu /* đầu dấu */ cuối Ví dụ: /* Chương trình giải phương trình bậc ax + b = */ /* Họ Tên : Nguyễn Văn A MSSV : 0712001 */ Một số trình biên dịch sau cho phép sử dụng hai dấu xổ chéo // thay cho việc dùng /* */ ghi dòng Ví dụ: // Chương trình giải phương trình bậc ax + b = Chương Giới thiệu ngơn ngữ lập trình C 6.2.6 Hằng ký tự chuỗi Hằng ký tự có giá trị ký tự bảng mã ASCII, biểu diễn cặp dấu nháy đơn Ví dụ: ‘A’, ‘a’, ‘0’, ‘ ’, … Hằng chuỗi dãy ký tự, biểu diễn cặp dấu nháy kép “ ” Ví dụ : “Tin học sở A”, “Tơi tên là: Nguyễn Văn A” 6.3 Cấu trúc chương trình C Chương trình viết ngơn ngữ C gồm phần sau đây: • Phần khai báo chèn tập tin tiêu đề (header file) vào chương trình Đây tập tin chứa định nghĩa cần thiết cho trình biên dịch Có hai cách để xác định tập tin theo sau thị #include: bao tên tập tin cặp dấu < > tập tin thư viện stdio.h, conio.h cặp dấu “ ” tập tin tiêu đề người lập trình tạo • Phần khai báo biến tồn cục hàm sử dụng chương trình Thơng thường người ta thường đặt ngun mẫu hàm (function prototype) phần mơ tả hàm đặt • Phần định nghĩa hàm Hàm có tên main thành phần ln phải có chương trình C Thơng thường chương trình bắt đầu cách thực dòng lệnh hàm main Chương Các kiểu liệu sở Ví dụ: // Phan khai bao chen cac tap tin tieu de #include #include // Phan khai bao cac bien toan cuc, nguyen mau ham int x, y; void Nhap(int &); // Prototype ham Nhap int TinhTong(int, int); // Protytype ham TinhTong // Phan dinh nghia ham main void main() { int a, b, tong; Nhap(a); Nhap(b); tong = TinhTong(a, b); } printf(“Tong cua a va b la %d.”, tong); // Phan mo ta cac ham void Nhap(int &n) { printf(“Nhap mot so nguyen: ”); scanf(“%d”, &n); } int TinhTong(int a, int b) { return a + b; } Chương Giới thiệu ngơn ngữ lập trình C Bài tập cuối chương Lý thuyết Tên (định danh) sau đặt khơng hợp lệ, sao? a Tin hoc co SO A b 1BaiTapKHO c THucHaNH d TinHOC_DaiCuonG Câu ghi dùng để làm gì? Cách sử dụng sao? Cho ví dụ minh họa Trình bày cấu trúc chương trình C Giải thích ý nghĩa phần cấu trúc Thực hành Gõ chạy thử chương trình sau Xác định phần tiêu đề, phần khai báo phần thân chương trình Chương trình xuất câu thơng báo hình #include void main() { printf(“Tin hoc co so A”); } Chương trình tính tổng, hiệu, tích, thưong số ngun a b nhập từ bàn phím #include #include void main() { int a, b, tong, hieu, tich; float thuong; // Nhap so nguyen a va b printf(“Nhap hai so nguyen: “); Chương 11 Dữ liệu kiểu mảng (array) 73 Cài đặt Thủ tục xếp mảng : số ngun tố đứng trước tăng dần (Cách 1) số lại đứng sau giảm dần Đầu vào : mảng a, số lượng phần tử n Đầu : khơng có void SapXepSNT(int a[], int n) { int b[MAX], c[MAX]; int nb, nc; // Chuyen cac so nguyen to a vao b TachSNT(a, n, b, nb); // Chuyen cac so khong la snt a vào c TachSKNT(a, n, c, nc); // Sap xep mang b tang dan SapXepTang(b, nb); // Sap xep mang c giam dan SapXepGiam(c, nc); } // Gop mang b va c mang a GopMang(b, nb, c, nc, a, n); Lưu ý • Thủ tục SapXepTang, SapXepGiam trình bày • Thủ tục TachSNT TachSKNT trình bày phần để tách số ngun tố số khơng phải ngun tố từ mảng mảng khác Ngồi ta viết hàm khác để lúc chia mảng a mảng b (chứa số ngun tố) c (chứa số khơng phải ngun tố) (bài tập) 74 Chương 11 Dữ liệu kiểu mảng (array) Thủ tục xếp mảng : số ngun tố đứng trước tăng dần (Cách 2) số lại đứng sau giảm dần Đầu vào : mảng a, số lượng phần tử n Đầu : khơng có void SapXepSNT(int a[], int n) { int i, j; // Duyet tat ca cac cap phan tu a for (i = 0; i < n – 1; i++) for (j = i + 1; j < n; j++) // Neu (a[i], a[j]) nghich the if (NghichThe(a[i], a[j])) HoanVi(a[i], a[j]); } Hàm NghichThe sử dụng viết sau: Hàm kiểm tra cặp số có phải nghịch hay khơng trường hợp nghịch : x ngun tố, y ngun tố x > y x khơng ngun tố, y khơng ngun tố x < y x khơng ngun tố, y ngun tố Đầu vào : cặp số ngun x, y Đầu : (nghịch thế), (khơng nghịch thế) int NghichThe(int x, int y) { // De tranh viec kiem tra nhieu lan int xLaSNT = LaSNT(x); int yLaSNT = LaSNT(y); } // truong hop if ((xLaSNT && (!xLaSNT && (!xLaSNT && return 1; return 0; la nghich the yLaSNT && x > y) || !yLaSNT && x < y) || yLaSNT)) Chương 11 Dữ liệu kiểu mảng (array) 75 Lưu ý • Có thể viết trực tiếp trường hợp nghịch vào thủ tục xếp thay gọi hàm NghichThe làm rối chương trình • Nên kiểm tra trước x y có phải số ngun tố khơng gán vào biến tạm để tránh việc tính tính lại nhiều lần 11.5.13 Sửa/Thêm/Xóa mảng u cầu Cho trước mảng a, số lượng phần tử n Hãy viết hàm thực u cầu sau: • Sửa phần tử vị trí vt mảng a thành giá trị x • Thêm phần tử x vào mảng a vị trí vt • Xóa phần tử vị trí vt mảng a Ý tưởng • Sửa: o Kiểm tra vt có hợp lệ hay khơng (0 ≤ vt < n) o Cập nhật giá trị phần tử vt thành giá trị x • Thêm: o Kiểm tra vt có hợp lệ hay khơng (0 ≤ vt ≤ n) o “Đẩy giá trị” phần tử từ vị trí vt sang phải phần tử “chèn” phần tử x vào vị trí vt o Tăng số lượng phần tử n mảng a lên • Xóa: o Kiểm tra vt có hợp lệ hay khơng (0 ≤ vt < n) o “Kéo giá trị” phần tử bên phải vị trí vt sang trái phần tử o Giảm số lượng phần tử n mảng a xuống 76 Chương 11 Dữ liệu kiểu mảng (array) Cài đặt Thủ tục sửa số mảng giá trị cho trước Đầu vào : mảng a, số lượng phần tử n, vị trí vt, số x Đầu : khơng có void Sua(int a[], int n, int vt, int x) { // Kiem tra tinh hop le cua vt if (vt >= && vt < n) a[vt] = x; } Thủ tục thêm phần tử vào mảng ví trí Đầu vào : mảng a, số lượng phần tử n, vị trí vt, số x Đầu : khơng có void Them(int a[], int &n, int vt, int x) { // Kiem tra tinh hop le cua vt if (vt >= && vt vt; i ) a[i] = a[i - 1]; // Chen x vao vi tri vt a[vt] = x; } } // Tang so luong phan tu n len n++; Chương 11 Dữ liệu kiểu mảng (array) 77 Thủ tục xóa phần tử mảng ví trí Đầu vào : mảng a, số lượng phần tử n, vị trí vt Đầu : khơng có void Xoa(MyArray a, int &n, int vt) { // Kiem tra tinh hop le cua vt if (vt >=0 && vt < n) { // Keo tu vi tri vt + sang trai for (int i = vt; i < n – 1; i++) a[i] = a[i + 1]; } } // Giam so luong phan tu n xuong n ; Lưu ý • Nếu cẩn thận kiểm tra số lượng phần tử có tối đa chưa, tối đa khơng thể thêm vào • Cẩn thận với giá trị biến chạy vòng lặp for Bài tập cuối chương Lý thuyết Mảng gì? Trường hợp sử dụng mảng? Tình bày cách khai báo kiểu, biến, mảng cho ví dụ minh họa Trình bày thao tác truy xuất mảng Cho ví dụ minh họa trường hợp 78 Chương 11 Dữ liệu kiểu mảng (array) Thực hành Thực thao tác sau mảng chiều a gồm số ngun, số lượng phần tử phần tử n Các thao tác nhập xuất a Nhập mảng b Xuất mảng Các thao tác kiểm tra a Mảng có phải mảng tồn số chẵn? b Mảng có phải mảng tăng dần? Các thao tác tính tốn a Có số chia hết cho khơng chia hết cho b Tính tổng số ngun tố có mảng Các thao tác tìm kiếm a Tìm vị trí số ngun tố mảng có b Tìm số nhỏ mảng c Tìm số dương nhỏ mảng Các thao tác xử lý a Tách mảng thành hai mảng b c, mảng b chứa số ngun dương, mảng c chứa số lại b Sắp xếp mảng giảm dần c Sắp xếp mảng cho số dương đứng đầu mảng giảm dần, số âm tăng dần, cuối số d Sửa số ngun tố có mảng thành số e Chèn (thêm) số đằng sau số ngun tố mảng f Xóa tất số ngun tố có mảng Chương 12 Một số kiểu liệu nâng cao 79 Chương 12 MỘT SỐ KIỂU DỮ LIỆU NÂNG CAO Chúng ta tìm hiểu kiểu liệu sở C bao gồm kiểu số ngun, kiểu số thực, kiểu luận lý, kiểu ký tự (ở chương 7) kiểu liệu mảng (ở chương 11) Chương trình bày kiểu liệu nâng cao khác bao gồm kiểu chuỗi ký tự, kiểu cấu trúc (lưu trữ xử lý liệu phức tạp), kiểu tập tin (lưu trữ xử lý thơng tin đĩa) kiểu trỏ (quản lý nhớ) 12.1 Kiểu chuỗi ký tự (string) 12.1.1 Khái niệm Như ta biết, liệu kiểu char chứa ký tự, để lưu trữ chuỗi (nhiều ký tự) ta sử dụng mảng ký tự (Chương 11 – Dữ liệu kiểu mảng) 12.1.2 Khai báo Kiểu liệu chuỗi khai báo theo cú pháp khai báo mảng chiều với phần tử có kiểu char (ký tự) Ví dụ: char s[10]; Biến s khai báo chứa chuỗi có độ dài tối đa ký tự (khơng phải 10) C chuỗi được xem loạt ký tự kết thúc ký tự rỗng (NULL), ký hiệu \0 80 Chương 12 Một số kiểu liệu nâng cao Giống cách khởi tạo mảng thơng thường, để khởi tạo cho chuỗi s giá trị “THCS A” ta thực sau: char s[10] = {‘T’, ‘H’, ‘C’, ‘S’, ‘ ’, ‘A’, ‘\0’}; Tuy nhiên, ta khởi tạo cho chuỗi ngắn gọn cách sử dụng chuỗi thường (chuỗi bao cặp dấu “ ”) Lúc trình biên dịch tự động thêm vào ký tự kết thúc chuỗi (‘\0’) char s[10] = “THCS A”; char s[] = “THCS A”; 12.1.3 // Tu xac dinh dai Nhập xuất chuỗi Để xuất chuỗi, ta sử dụng hàm printf với đặc tả “%s” hàm puts sau: Hàm xuất liệu hình (#include ) int puts(const char *s); Hàm puts xuất chuỗi s hình tự động xuống dòng Nếu thành cơng trả giá trị khơng âm, ngược lại trả EOF Ví dụ: char ten[] = “THCS A”; printf(“%s”, ten); puts(ten); // Khong xuong dong // Tu dong xuong dong Để nhập chuỗi, ta sử dụng hàm scanf( ) với đặc tả “%s” hàm đọc ký tự từ bàn phím đến gặp ký tự khoảng trắng Ví dụ: char ten[100; scanf(“%s”, &ten); puts(ten); Nếu nhập vào “THCS A” nhận chuỗi “THCS” Chương 12 Một số kiểu liệu nâng cao 81 Để nhập chuỗi đầy đủ, ta sử dụng hàm sau: Hàm nhập liệu từ bàn phím (#include ) char *gets(char *s); Hàm gets đọc tất ký tự nhập từ bàn phím đến gặp ký tự sang dòng (khi ta nhấn enter) Hàm gets loại bỏ ký tự enter thêm vào chuỗi ký tự kết thúc chuỗi ‘\0’ Hàm gets trả địa chuỗi nhận Ví dụ: char ten[100]; gets(ten); puts(ten); 12.1.4 Các thao tác liệu kiểu chuỗi Chuỗi mảng ký tự, khơng thể gán liệu hai kiểu chuỗi Thay vào ta sử dụng lệnh strcpy định nghĩa string.h Hàm chép chuỗi (#include ) char *strcpy(char *dest, const char *src); Sao chép chuỗi src sang chuỗi dest, kết thúc gặp ký tự kết thúc chuỗi Hàm trả địa chuỗi dest char s[100]; s = “Tin hoc co so A”; strcpy(s, “Tin hoc co so A”); // Sai // Dung Trong string.h cung cấp số hàm khác thao tác liệu kiểu chuỗi ký tự Một vài hàm quan trọng sau: Hàm chuyển chuỗi thành chuỗi thường (#include ) char *strlwr(char *s); Hàm strlwr chuyển chuỗi s thành chuỗi thường (các ký tự ‘A’, ‘B’, …, ‘Z’ thành ‘a’, ‘b’, … ‘z’) trả địa chuỗi s 82 Chương 12 Một số kiểu liệu nâng cao Hàm chuyển chuỗi thành hoa (#include ) char *strupr(char *s); Hàm strupr chuyển chuỗi s thành chuỗi hoa (các ký tự ‘a’, ‘b’, …, ‘z’ thành ‘A’, ‘B’, … ‘Z’) trả địa chuỗi s Hàm đảo ngược chuỗi (#include ) char *strrev(char *s); Hàm đảo ngược thứ tự ký tự chuỗi (trừ ký tự kết thúc chuỗi) trả địa chuỗi kết Hàm so sánh hai chuỗi (#include ) int *strcmp(const char *s1, const char *s2); Hàm trả < s1 < s2; = s1 = s2, > s1 > s2 Hàm nối hai chuỗi (#include ) char *strcat(char *dest, const char *src); Hàm nối chuỗi src chuỗi dest trả địa chuỗi nối Hàm tính độ dài chuỗi (#include ) size_t *strlen(const char *s); Hàm trả độ dài chuỗi Hàm tìm chuỗi chuỗi (#include ) char *strstr(const char *s1, const char *s2); Hàm tìm vị trí xuất chuỗi s2 chuỗi s1 Hàm trả địa thành phần chuỗi s1 tìm Nếu khơng tìm trả null Chương 12 Một số kiểu liệu nâng cao 83 12.2 Kiểu cấu trúc (struct) 12.2.1 Khái niệm Cấu trúc (struct) dạng liệu gồm nhiều thành phần khác kiểu Mỗi thành phần truy xuất định danh gọi trường (field) 12.2.2 Khai báo Kiểu liệu cấu trúc khai báo theo cú pháp sau: Cú pháp khai báo kiểu cấu trúc struct { ; ; … ; }; Ví dụ: struct SinhVien { char hoten[30]; float toan, ly, hoa; }; Khai báo biến dựa khai báo kiểu (khơng tường minh) sau: Cú pháp khai báo biến cấu trúc (khơng tường minh) struct { ; ; … ; }; struct ; 84 Chương 12 Một số kiểu liệu nâng cao Hoặc khai báo biến trực tiếp (tường minh) sau: Cú pháp khai báo biến cấu trúc (tường minh) struct { ; ; … ; } ; Ví dụ: struct SinhVien { char hoten[30]; float toan, ly, hoa; } sv1, sv2, sv3; // Tuong minh struct SinhVien sv4, sv5; // Khong tuong minh Cách khai báo dạng tường minh cho ta dễ nhận thấy mối quan hệ biến trường Tuy nhiên cấu trúc chương trình C thường đòi hỏi khai báo tham số định danh kiểu nên việc khai báo tường minh sử dụng Để khởi tạo giá trị cho biến cấu trúc, ta sử dụng cách sau: Cú pháp khai báo biến ghi (tường minh) struct { ; ; … ; } = {,…,}; Chương 12 Một số kiểu liệu nâng cao 85 Ví dụ: struct SinhVien { char hoten[30]; float toan, ly, hoa; } sv1 = {“Nguyen Van A”, 10, 7.5, 9}, sv2, td3; 12.2.3 Truy xuất liệu kiểu ghi Chúng ta khơng thể nhập xuất trực tiếp liệu kiểu cấu trúc mà nhập xuất thơng qua trường cấu trúc Để truy xuất đến trường cấu trúc ta sử dụng tốn tử chấm Cú pháp truy xuất đến trường cấu trúc . Ví dụ struct SinhVien sv; strcpy(sv.hoten, “Nguyen Van A”); sv.toan = 10; sv.ly = 7.5; sv.hoa = 9; printf(“Ho ten sinh vien: %s\n”, sv.hoten); printf(“DTB: %.2f”, (sv.toan + sv.ly + sv.hoa)/3); 12.2.4 Gán liệu kiểu ghi Đối với liệu ghi có kiểu, thực phép gán theo cách sau đây: Thơng qua trường (tường minh) ..; 86 Chương 12 Một số kiểu liệu nâng cao Sử dụng lệnh gán = ; Ví dụ: struct SinhVien { char hoten[30]; float toan, ly, hoa; } sv1 = {“Nguyen Van A”, 10, 7.5, 9}, sv2; sv2 = sv1; // Cach strcpy(sv2.hoten, sv1.hoten); sv2.toan = sv1.toan; sv2.ly = sv1.ly; sv2.hoa = sv1.hoa; // Cach 12.3 Kiểu tập tin (file) kiểu trỏ (pointer) Các kiểu liệu ta khảo sát diện nhớ RAM khởi động chương trình, chấm dứt chương trình liệu bị xóa mất, việc lưu trữ liệu lâu dài sử dụng lại nhiều lần khơng thể thực C tạo kiểu cho phép ta lưu trữ liệu lâu dài đĩa mềm đĩa cứng gọi liệu kiểu file Có hai loại tập tin tập tin văn (text file) tập tin nhị phân (binary file) Kiểu trỏ (pointer) loại liệu có kích thước byte, khơng dùng để chứa liệu mà chứa địa Segment Offset biến khác hay nói cách khác biến trỏ trỏ đến biến mà chứa địa Biến trỏ sử dụng cách tốn quy hoạch động… Trong khn khổ chương trình Tin học sở A khơng bàn đến hai kiểu Sinh viên tham khảo tài liệu chương trình Tin học sở A2 để tìm hiểu thêm Chương 12 Một số kiểu liệu nâng cao 87 Bài tập cuối chương Lý thuyết Trình bày khái niệm kiểu chuỗi? Mơ tả cách khai báo sử dụng Trình bày khái niệm kiểu cấu trúc? Mơ tả cách khai báo kiểu, biến, ghi Cho ví dụ minh họa Thực hành Tập sử dụng hàm thư viện string.h Để biết thí sinh đậu hay rớt kỳ tuyển sinh, ta cần lưu thơng tin Họ tên thí sinh, khu vực (1, 2, 3), nhóm (1, 2, 3), tổng điểm mơn a Nhập thơng tin n thí sinh b Lập danh sách thí sinh đậu với điểm chuẩn bảng sau: Nhóm Nhóm Nhóm Khu vực 18 17.5 17 Khu vực 17 16.5 16 Khu vực 16 15.5 15 c In danh sách xếp theo điểm giảm dần