C là một ngôn ngữ lập trình cấu trúc bậc cao được các nhà lập trình chuyên nghiệp sử dụng phổ biến để phát triển các phần mềm hệ thống (hệ điều hành, chương trình dịch, cơ sở dữ liệu. Bài giảng giới thiệu tới người đọc các kiến thức về nhập môn Lập trình Ngôn ngữ C, ngôn ngữ Lập trình C, language C, programmer en langage C. Mời các bạn cùng tham khảo.
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN o0o - Tạ Tuấn Anh Bài giảng điện tử môn học NGƠN NGỮ LẬP TRÌNH C Tóm tắt nội dung mơn học C ngơn ngữ lập trình cấu trúc bậc cao nhà lập trình chuyên nghiệp sử dụng phổ biến để phát triển phần mềm hệ thống (hệ điều hành, chương trình dịch, sở liệu, ) Lý ngôn ngữ C đươc ưu chuộng tính mềm dẻo ngắn gọn Một chương trình viết ngơn ngữ C có tính khả chuyển cao Nó dịch chạy nhiều loại máy tính (PC, Sun, Mainframe, ) nhiều hệ điều hành (DOS, UNIX, ) Ngồi C cho phép viết chương trình bám sát cách tổ chức nhớ chương trình chạy Do chương trình dịch từ C ln có kích thước nhỏ gọn chương trình loại dịch từ ngôn ngữ bậc cao khác PASCAL Nhưng lí mà việc nắm bắt thành thạo ngôn ngữ C khó khăn nhiều so với ngơn ngữ khác Môn học giới thiệu cho học viên kiến thức nâng cao ngôn ngữ lập trình C Bên cạnh kiến thức cú pháp kĩ viết chương trình C, học viên nắm bắt vấn đề liên quan đến tổ chức nhớ chương trình Kiến thức yêu cầu Để tiếp thu tốt kiến thức môn học này, yêu cầu học viên trước học tìm hiểu khái niệm Tin học, có kĩ viết chương trình có cấu trúc ngơn ngữ bậc cao PASCAL Ngoài số kiến thức cấu trúc liệu giải thuật (danh sách móc nối, tìm kiếm, ) giúp học viên sử dụng C để viết chương trình ứng dụng Tổng thời lượng: 45 tiết MỤC LỤC TÀI LIỆU THAM KHẢO Nhập mơn Lập trình Ngơn ngữ C Trần Việt Linh, Lê Đăng Hưng, Lê Đức Trung, Nguyễn Thanh Thuỷ Nhà Xuất Khoa học Kỹ thuật, 2000 Ngơn ngữ Lập trình C Quách Tuấn Ngọc Nhà Xuất Giáo dục, 1998 Language C Brian Kernighan, Denis Ritchie Prentice Hall, 1988 Programmer en langage C Claude Delannoy Eyrolles, 1998 CHƯƠNG - NHẬP MƠN LẬP TRÌNH C Mục đích chương giới thiệu tổng quan ngôn ngữ C bao gồm kiến thức lịch sử, đặc điểm vai trị Học viên làm quen với chương trình viết C cách dịch chúng để chạy Yêu cầu: Có phiên cài đặt trình biên dịch Turbo C hay trình biên dịch khác để chạy thử chương trình Thời lượng: tiết Mục 1.1 - Tổng quan ngôn ngữ C Mục cho phép học viên làm quen với chương trình viết ngơn ngữ C tìm hiểu lịch sử Các thành phần chương trình C giới thiệu để học viên có nhìn tổng quan ngơn ngữ lập trình u cầu: Đã có khái niệm lập trình ngơn ngữ lập trình Thời lượng: tiết Bài - Lịch sử hình thành phát triển Tóm tắt nội dung: Ngơn ngữ lập trình C đời vào đầu thập kỉ 70 với mục đích dùng để viết hệ điều hành UNIX C phát triển mạnh sau chuẩn hố với tên gọi ANSI C Ngôn ngữ nhà lập trình chuyên nghiệp ưa chuộng để phát triển phần mềm hệ thống Một mở rộng C C++ đời vào đầu thập kỉ 80 Nó ngơn ngữ lập trình hướng đối tượng phát triển C Thời lượng: tiết Ngôn ngữ C Brian W.Kernighan Denis M Ritchie phát triển vào đầu năm 70 phịng thí nghiệm BELL (Hoa Kỳ) với mục đích ban đầu để phát triển hệ điều hành UNIX Bối cảnh đời xuất phát từ nhu cầu cần phải có ngơn ngữ lập trình hệ thống thay cho hợp ngữ (ASSEMBLY) nặng nề lập trình Hơn chương trình viết hợp ngữ khơng có tính khả chuyển chúng gắn chặt với lệnh vi xử lí Tiền thân C phải kể đến ngôn ngữ BCPL Martin Richard nghiên cứu Tiếp đến ngôn ngữ B Ken Thompson xây dựng năm 1970 dùng để viết hệ điều hành UNIX cho dòng máy tính PDP-7 C ngơn ngữ kế thừa từ B hồn thiện để có tính mạnh ngơn ngữ lập trình hệ thống có khả ứng dụng rộng rãi ngày Đó tính năng: - - - - Lập trình bậc cao: Giống PASCAL, chương trình C sử dụng tập câu lệnh điều khiển rẽ nhánh, lặp mức độ trừu tượng lưu đồ giải thuật Điều cho phép viết giải thuật ngơn ngữ C dễ dàng Lập trình cấu trúc: Một chương trình C phân chia, cấu trúc thành modul nhỏ Điều giúp phát triển chương trình cách hệ thống dễ bảo trì Lập trình hệ thống: Khơng giống PASCAL, ngơn ngữ C không dùng nhiều kiểu liệu trừu tượng C cho phép thao tác với nhớ chương trình uyển chuyển Một người lập trình ngơn ngữ C tự tổ chức lưu trữ liệu nhớ theo ý Tính vô quan trọng cần phát triển chương trình hệ thống liên quan nhiều đến nhớ máy tính Ngồi ngơn ngữ C hỗ trợ phần lớn phép xử lí mà hợp ngữ làm Tính khả chuyển: Một chương trình viết ngơn ngữ C dịch mã chương trình nhiều dịng máy hệ điều hành khác khả tương thích câu lệnh chương trình Ngồi C cịn có tiền xử lí tạo khả biên dịch theo điều kiện để việc dịch chương trình thích ứng cho hệ thống khác Tính nhỏ gọn: Một chương trình viết C sau dịch có độ tối ưu mã lệnh ngôn ngữ bậc cao khác Chính chương trình dịch từ ngơn ngữ C thường có kích thước nhỏ gọn Với tất tính trên, ngơn ngữ C ngơn ngữ hiệu có sức diễn cảm lập trình Nó trở thành ngơn ngữ lập trình mà nhà lập trình chuyên nghiệp ưa chuộng nhiều lĩnh vực Trong lĩnh vực lập trình hệ thống, có tới 90% chương trình viết ngơn ngữ C Ngồi cịn dùng để viết chương trình lĩnh vực đại khác Tin học xử lí tín hiệu, số liệu, văn bản, Ngơn ngữ C viện tiêu chuẩn quốc gia Mỹ (ANSI) chuẩn hố cơng bố vào năm 1988 với tên gọi ANSI C Bên cạnh ngôn ngữ C người lập trình cịn biết đến ngơn ngữ lập trình có tên tương tự C++ Đây ngơn ngữ lập trình mở rộng từ C để thêm khả lập trình hướng đối tượng Vì C++ ngôn ngữ bao trùm lên C nên để học tốt C++ yêu cầu người lập trình trước hêt phải nắm vững C Bài - Bắt đầu lập trình C Tóm tắt nội dung: Học viên làm quen với hai chương trình đơn giản Chúng minh họa thành phần có chương trình C Thời lượng: tiết Chương trình Hello! Cũng với nhiều ngơn ngữ lập trình khác, bắt đầu tìm hiểu ngơn ngữ qua chương trình đơn giản in thông báo "Hello!" cho người sử dụng Chương trình viết ngơn ngữ C #include void main() { printf("Hello!"); } Dịng chương trình gọi khai báo sử dụng tệp tiêu đề Trong chương trình ngơn ngữ C cần có khai báo tệp tiêu đề chúng cho phép gọi hàm có sẵn thư viện viết người lập trình khác Trong chương trình khai báo sử dụng tệp tiêu đề để sử dụng hàm vào liệu chuẩn hệ thống (printf(), scanf(), ) Phần chương trình hàm chứa câu lệnh thực chương trình chạy Một chương trình C ln có hàm có tên main Dịng thơng báo "Hello!" in hình thực nhờ câu lệnh gọi hàm hàm thư viện printf() chương trình Chương trình thứ hai Để thấy rõ cấu trúc chương trình C, tiếp tuc tìm hiểu ngơn ngữ thơng qua ví dụ thứ hai Ở ví dụ tạo chương trình cho phép in diện tích hình trịn tương ứng với bán kính người sử dụng nhập vào #include /* khai báo số PI */ #define PI 3.14 /* khai báo hàm tạo công thức tính diện tích */ float dientich(float r) { return PI*r*r; } /* hàm chương trình */ void main() { float r; printf("Nhập bán kính r ="); scanf("%f", &r); printf("Diện tích hình trịn %f", dientich(r)); } Chương trình thể phần cấu trúc chương trình C mơ tả chi tiết Dưới thuyết minh cho chương trình: - Chú thích chương trình: Các dịng văn đặt nằm dấu /* */ thích cho chương trình C - Khai báo số: Dịng thứ hai chương trình có tác dụng khai báo số PI có giá trị 3.14 - Hàm: Một chương trình C cấu trúc nhiều hàm Trong chương trình trên, khai báo hàm để tính diện tích hình trịn với bán kính truyền vào tham số thực (float) Kết rõ ràng phải số thực Hàm gọi hàm chương trình để in giá trị diện tích hình trịn ngồi hình - Hàm chính: Một chương trình hoạt động thể câu lệnh hàm Trong hàm chương trình khai báo biến thực để chứa giá trị bán kính hình trịn người sử dụng nhập vào từ bàn phím Lệnh gọi hàm scanf() cho phép chương trình lấy liệu bán kính người sử dụng nhập vào Dịng lệnh cuối hàm dùng để in giá trị diện tích hình trịn có bán kính tương ứng hình Giá trị diện tích tính thơng qua hàm dientich() khai báo Bài - Các thành phần chương trình C Tóm tắt nội dung: Cũng ngơn ngữ lập trình khác, chương trình C viết từ từ khoá, biến, câu lệnh, hàm, Trong xem chi tiết thành phần có chương trình C để biết ý nghĩa vai trò chúng Thời lượng: tiết Từ vựng Một chương trình C xây dựng từ vựng bao gồm tập kí tự có phân biệt chữ hoa thường Chính viết chương trình C khơng phép sử dụng tuỳ tiện chữ hoa hay chữ thường Ví dụ hàm chương trình bắt buộc phải viết main mà không viết MAIN hay Main Trong chương trình C gặp hai loại từ vựng quan trọng từ khoá tên người sử dụng Từ khoá: Từ khoá từ vựng định nghĩa từ trước ngôn ngữ để sử dụng vào mục đích xác định chương trình Một số từ khoá hay dùng từ khoá kiểu liệu (char, int, long, float, double, ), lệnh điều khiển (if, switch, for, do, while, ), v.v asm char extern goto interrupt register sizeof typedef volatile Bảng từ khố ngơn ngữ C break case cdecl const continue default double else enum far float for huge if int long near pascal return short signed static struct switch union unsigned void while Tên: Trong chương trình người sử dụng cần tên để đặt cho biến, hàm, kiểu liệu Tên người sử dụng đòi hỏi phải chuỗi kí tự chữ cái, chữ số gạch nối ‘_’ Tên phải bắt đầu chữ gạch nối Cấu trúc chương trình Trong thấy cấu trúc chương trình C Phần trình bày khái quát thành phần cấu trúc chương trình a Khai báo tiêu đề Một tệp tiêu đề chương trình C chứa mơ tả hàm gọi chương trình (xem mục 6.2 - Tệp tiêu đề) Khi cần gọi hàm chương trình ta phải khai báo tệp tiêu đề có mơ tả tương ứng cho hàm Chính hàm thư viện ln với tệp tiêu đề tương ứng trình bày b Khai báo hằng, cấu trúc liệu Các số chương trình C thường định nghĩa thị #define (xem 35 - Một số thị tiền xử lí) Ngồi kiểu liệu bản, chương trình C có cấu trúc liệu phức người sử dụng định nghĩa Các cấu trúc thường khai báo phần đầu chương trình (xem mục 3.4 - Cấu trúc) c Khai báo hàm và/hoặc nguyên mẫu hàm Chương trình C cấu trúc hàm (xem mục 2.3 - Hàm) Một hàm thể modul chương trình Nó nhận tham số thực trả kết cho nơi gọi hàm Thân hàm chia làm hai phần: khai báo biến (xem mục 2.1 - Biến, số biểu thức) lệnh thực (xem mục 2.2 - Các cấu trúc lệnh điều khiển) Các biến khai báo phần đầu thân hàm sau đến câu lệnh Mỗi câu lệnh chương trình C phải kết thúc dấu chấm phẩy ‘;’ Chúng ta tạo khối lệnh cách đặt chúng cặp dấu {} Thân hàm phải đặt cặp dấu d Khai báo biến Trong chương trình C khai báo biến dạng tổng thể hay cục (biến hàm) Một biến tổng thể khai báo bên ngồi hàm sử dụng tất hàm chương trình Ngược lại biến cục sử dụng hàm nơi khai báo Mục 1.2 - Biên dich chương trình Mục đưa cho người sử dụng kiến thức chuyên sâu vấn đề biên dịch chương trình Các trình IDE (Integrated Development Environment) biết đến mơi trường tích hợp trợ giúp việc phát triển chương trình bao gồm công việc soạn thảo, biên dịch gỡ rối Học viên tìm hiểu trình IDE dùng phổ biến môi trường DOS Turbo C Yêu cầu: Có trình cài đặt Turbo C Borland C++ Thời lượng: tiết Bài - Quá trình biên dịch Tóm tắt nội dung: Biên dịch chương trình trình dịch chương trình viết dạng văn C sang chương trình mã máy tệp exe DOS Q trình phải qua nhiều pha khác xảy lỗi pha Thời lượng: tiết Ngôn ngữ lập trình C ngơn ngữ dạng biên dịch Chương trình viết C muốn chạy máy tính phải trải qua q trình biên dịch để chuyển đổi từ dạng mã nguồn sang chương trình dạng mã thực Tồn q trình biên dịch ngơn ngữ minh hoạ hình Q trình chia làm hai giai đoạn chính: giai đoạn dịch giai đoạn liên kết Mã ngu?n Ti?n x? lí D?ch C Mã assembly D?ch Assembly Thu vi?n Mã máy Liên k?t Chuong trình Hình 1: Quá trình biên dich chương trình C Giai đoạn dịch (compiling) Mục đích giai đoạn chuyển đổi tất mã chương trình viết ngơn ngữ C sang dạng mã máy Ba công đoạn thực là: tiền xử lí mã nguồn, dịch C sang Assembly dịch Assembly sang mã máy - Cơng đoạn tiền xử lí nhận mã nguồn chương trình thực xố bỏ tất thích chương trình Ngồi tất thị tiền xử lí (bắt đầu #) xử lí cơng đoạn Ví dụ thị #include cho phép ghép thêm mã chương trình tệp tiêu đề vào mã nguồn cần dịch Các số định nghĩa #define thay giá trị cụ thể nơi sử dụng chương trình - Cơng đoạn dịch C cho phép phân tích cú pháp mã nguồn C sau chuyển chúng sang dạng mã Assemly môt ngôn ngữ bậc thấp gần với tập lệnh vi xử lí Cơng đoạn dịch Assembly cho phép dịch chương trình sang mã máy Sau cơng đoạn tệp mã máy (.o) thường sinh hệ thống Như sau giai đoạn dịch lỗi chương trình phát thơng báo cho người sử lỗi cú pháp chương trình Nó phát lỗi khơng tồn (hoặc có mà đặt đường dẫn tìm kiếm sai để khơng tìm thấy) tệp tiêu đề cơng đoạn tiền xử lí Giai đoạn liên kết (linking) Trong giai đoạn mã máy chương trình dịch từ nhiều nguồn khác liên kết lại với để tạo thành chương trình đích Mã máy hàm thư viện gọi chương trình đưa vào chương trình cuối giai đoạn Chính mà lỗi liên quan đến việc gọi hàm hay sử dụng biến tổng thể mà không tồn bị phát Kể lỗi viết chương trình khơng có hàm main() phát liên kết Để liên kết với hàm thư viện cần phải đặt đường dẫn tìm kiếm thư viện đến tệp chứa mã máy thư viện (.obj, lib, ) Bài - Turbo C Tóm tắt nội dung: Turbo C trình IDE cho ngôn ngữ C chạy DOS Một số phiên hay dùng bao gồm Turbo C 1.0, Turbo C++ 3.0 Ngồi ta dùng phiên chạy nên hệ điều hành Windows có tên Borland C++ Thời lượng: tiết Môi trường trợ giúp phát triển (IDE) Để trợ giúp cho việc phát triển ứng dụng ngôn ngữ cách thuận tiện, nhà sản xuất cung cấp tiện ích cho phép người sử dụng thao tác biên soạn chương trình, dịch hay gỡ rối thao tác đơn giản qua phím nóng Như nhờ có IDE (Intergrated Development Environment) mà lập trình viên khơng phải thực pha biên dịch câu lệnh phức tạp mà cần đơn giản nhấn phím nóng Q trình sửa lỗi thuận tiện IDE định vị giúp người lập trình vị trí lỗi chương trình hình soạn thảo Một IDE thường có ba thành phần là: - Cơng cụ soạn thảo giúp lập trình viên soạn thảo chương trình ngơn ngữ hỗ trợ Trình soạn thảo thực đổi màu từ khố chương trình để giúp người lập trình quan sát chương trình cách trực quan - Cơng cụ biên dịch chạy chương trình Bằng thao tác đơn giản lập trình viên u cầu biên dịch tồn chương trình xong chạy Nếu chương trình có lỗi cơng cụ thơng báo loại lỗi với vị trí lỗi chương trình đến người sử dụng Chính việc tiến hành sửa lỗi chương trình IDE đơn giản - Công cụ gỡ rối giúp lập trình viên chạy lần bước chương trình theo dịng lệnh Trong q trình lần bước lập trình viên quan sát thay đổi giá trị biến chương trình qua mà phát lỗi Turbo C Có nhiều trình IDE khác cho ngơn ngữ C phổ dụng môi trường DOS Windows phiên Turbo C Chúng ta kể số phiên hay sử dụng Turbo C hỗ trợ ngôn ngữ C chạy DOS, Turbo C++ 3.0 hỗ trợ C C++ chạy DOS, phiên từ 3.1 trở lên đổi tên Borland C++ chạy Windows Khi dịch chương trình Turbo C cần ý thiết lập đường dẫn tìm kiếm tệp tiêu đề thư viện Ví dụ với phiên Turbo C++ để xác lập đường dẫn thư mục ta cần dùng menu vào lựa chọn Options|Directories Khi hộp hội thoại xuất đặt đường dẫn thư mục tìm kiếm tệp tiêu đề (Include) thư mục tìm kiếm thư viện (Library) Thường tệp tiêu đề lưu thư mục INCLUDE thư mục cài đặt Turbo Còn tệp thư viện lưu thư mục LIB Hình Màn hình IDE Turbo C++ 3.0 Chúng ta thường dùng phím nóng IDE để thực nhanh số thao tác Sau số phím nóng thơng dụng: Phím nóng Ý nghĩa F3 Mở tệp nguồn F2 Ghi tệp F9 Biên dịch chương trình tạo tập tin EXE Ctrl+F9 Biên dịch chạy chương trình F4, F7, F8 Chạy lần vết, gỡ rối if (read(fd, bigbuff, file_length*sizeof(float)) == -1) { perror("Loi doc doc du lieu"); exit(1); } printf("Da doc tep xong"); close(fd); } Bài 34 - Thao tác với bàn phím hình Tóm tắt nội dung: Khi viết chương trình hệ điều hành DOS sử dụng số hàm thao tác trực tiếp với bàn phím hình để phục vụ tạo giao diện cho chương trình Tất hàm thao tác trực tiếp thiết bị khai báo nguyên mẫu tệp tiêu đề Thời lượng: tiết Một chương trình viết chạy hệ điều hành DOS sử dụng số hàm thao tác với hình bàn phím có khai báo tệp để tạo giao diện cho chương trình Đây hàm vào mức thấp thao tác trực tiếp với thiết bị vật lí Các hàm trình bày hình void clrscr(void); /* xố nội dung mà hình */ void clreol(void); /* xố hết dịng */ void gotoxy(int x, int y); /* chuyển trỏ hình đến toạ độ (x, y) */ int wherex(void); /* lấy vị trí toạ độ x */ int wherey(void); /* lấy vị trí toạ độ y */ void textcolor(int color); /* xác lập màu chữ in */ void textbackground(int color); /* xác lập màu */ void textattr(int attr); /* xác lập thuộc tính màu cho kí tự in */ void window(int x1, int y1, int x2, int y2); /* xác lập cửa sổ in văn hình */ Các số màu định nghĩa enum COLORS { BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY, DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, /* màu đậm */ /* màu nhạt */ WHITE }; Các hàm xử lí bàn phím int getch(void); /* đọc kí tự vừa gõ bàn phím, khơng cần đợi */ int getche(void); /* đọc kí tự vừa gõ đồng thời in hình */ int kbhit(void); /* chờ phím nhấn */ Các hàm khác với hàm nhập liệu chuẩn kênh stdin chỗ lấy liệu trực tiếp từ vùng đệm vật lí bàn phím Trong hàm nhập liệu chuẩn lấy liệu kênh stdin Trong trường hợp stdin kết nối với bàn phím liệu gõ bàn phím đưa vào kênh stdin nhấn Ví dụ: /* Chương trình in dịng chữ Hello! hình màu xanh lơ, chữ đỏ có nhấp nháy */ #include #include void main() { int attr; textbackground(BLUE); clrscr(); /* xác lập thuộc tính kí tự in vào attr */ attr = RED; /* bit thấp thể mầu chữ */ attr |= BLUE=(b) ? (a): (b)) b) ((a)ten, ten); hs->diem = -1; /* ban đầu chưa có điểm thi, vào điểm sau */ /* nối vào đầu danh sách */ hs->tiep = *header_ptr; *header_ptr = hs; } int xoa_nuths(struct nut_hs**header_ptr, char *ten) { struct nut_hs * hs, *p; hs = *header_ptr; p = NULL; /* p trỏ tới nút trước nút cần xoá */ while(hs !=NULL&&strcmp(hs->ten, ten) !=0) { p = hs; hs = hs->tiep; } if (hs !=NULL) /* tìm thấy nút cần xố */ { /* kiểm tra có nút đứng trước nút cần xố khơng */ if (p !=NULL) p->tiep = hs->tiep; else /* nút đầu danh sách nút sau nút cần xoá */ *header_ptr = hs->tiep; free(hs); return 1; } return 0; } struct nut_hs* tim_nuths(struct nut_hs*header, char *ten) { struct nut_hs * hs; hs = header; while(hs !=NULL&&strcmp(hs->ten, ten) !=0) hs = hs->tiep; return hs; } void sapxep_nuths(struct nut_hs*header) { struct nut_hs *hs1, *hs2; char ten[25]; int diem; for (hs1=header; hs1!=NULL&&hs1->tiep!=NULL; hs1=hs1->tiep) for (hs2=hs1->tiep; hs2!=NULL; hs2=hs2->tiep) if(strcmp(hs1->ten, hs2->ten)>0) { /* doi cho thong tin ve hai nut danh sach */ strcpy(ten, hs1->ten); strcpy(hs1->ten, hs2->ten); strcpy(hs2->ten, ten); diem = hs1->diem; hs1->diem = hs2->diem; hs2->diem = diem; } } Tệp tiêu đề "func.h": #ifndef FUNC_H #define FUNC_H #include "list.h" /* chức quản lí chương trình bao gồm: */ /* thêm học sinh vào danh sách */ void themhocsinh(struct nut_hs**header_ptr); /* xoá học sinh khỏi danh sách */ void xoahocsinh(struct nut_hs**header_ptr); /* tra điểm cho môt học sinh danh sách */ void tradiem(struct nut_hs *header); /* in danh sách học sinh */ void indanhsach(struct nut_hs *header); /* nhập điểm thi cho học sinh lớp học */ void nhapdiem(struct nut_hs *header); #endif Tệp nguồn "func.c": /* thi hành hàm khai báo func.h */ #include "func.h" #include #include void themhocsinh(struct nut_hs**header_ptr) { char ten[25]; fflush(stdin); /* xoá vùng d?m stdin d? nh?p xâu tên */ printf("Ten: "); gets(ten); if (strcmp(ten, "")!=0) { them_nuths(header_ptr, ten); printf("Da them hoc sinh %s vao danh sach\n", ten); } } void xoahocsinh(struct nut_hs**header_ptr) { char ten[25]; fflush(stdin); /* xoá vùng d?m stdin d? nh?p xâu */ printf("Ten hoc sinh can xoa: "); gets(ten); if (xoa_nuths(header_ptr, ten)) printf("Da xoa hoc sinh %s khoi danh sach\n", ten); else printf("Khong co hoc sinh %s danh sach\n", ten); } void tradiem(struct nut_hs *header) { char ten[25]; struct nut_hs *tim; fflush(stdin); /* xoá vùng d?m stdin d? nh?p xâu */ printf("Ten hoc sinh can tra diem: "); gets(ten); tim = tim_nuths(header, ten); if (tim==NULL) printf("Khong co hoc sinh %s danh sach\n", ten); else if(tim->diem!=-1) printf("Co diem thi la %d\n", tim->diem); else printf("Chua co diem\n"); } void indanhsach(struct nut_hs *header) { struct nut_hs *p; int i=1; printf("%3s%25s%8s\n", "STT", "Ho va Ten", "Diem"); for(p=header; p!=NULL; p=p->tiep) { printf("%3d%-25s", i, p->ten); if(p->diem==-1) printf("%8s\n", "Chua co"); else printf("%8d\n", p->diem); i++; } } void nhapdiem(struct nut_hs *header) { struct nut_hs *p; int diem; for(p=header; p!=NULL; p=p->tiep) { printf("Diem cua %s:", p->ten); scanf("%d", &p->diem); } } Tệp nguồn "menu.c": /* chương trình menu lựa chọn cơng việc menu gọi hàm chức có func.h list.h */ #include "list.h" #include "func.h" #include void main() { int chon; struct nut_hs *header=NULL; /* trỏ đầu danh sách học sinh */ /* tạo menu lựa chọn công việc */ { printf("1 Them hoc sinh\n"); printf("2 Xoa hoc sinh\n"); printf("3 Nhap diem\n"); printf("4 Tra diem\n"); printf("5 In danh sach hoc sinh\n"); printf("0 Thoat\n"); printf("Lua chon: "); scanf("%d", &chon); switch(chon) { case 1: themhocsinh(&header); break; case 2: xoahocsinh(&header); break; case 3: nhapdiem(header); break; case 4: tradiem(header); break; case 5: sapxep_nuths(header); indanhsach(header); } }while(chon !=0); } BÀI TẬP TỔNG HỢP Câu 1: Hãy xây dựng từ điển cách dùng nhị phân Hãy xây dựng hàm xử lý khâu - Khởi tạo từ điển - Chèn vào từ - In từ - Hiển thị từ điển Viết chương trình hồn chỉnh cách tạo bảng chọn lệnh với chức sau: Tạo từ điển Đọc từ điển từ đĩa vào Thêm từ vào Xoá từ Hiển thị từ theo thứ abc Cất từ điển vào đĩa Thốt khỏi chương trình Câu 2: Hãy xây dựng sổ tay Telephone với tính sau: Đọc sổ tay từ đĩa vào Tìm kiếm tên người danh mục phone Thêm vào danh mục người Xoá người khỏi danh mục Cất vào đĩa Thoát khỏi chương trình Lưu ý danh mục phone ln giữ theo thứ tự bảng chữ ... với ngôn ngữ kh? ?c Môn h? ?c giới thiệu cho h? ?c viên kiến th? ?c nâng cao ngơn ngữ lập trình C Bên c? ??nh kiến th? ?c cú pháp kĩ viết chương trình C, h? ?c viên c? ??n nắm bắt vấn đề liên quan đến tổ ch? ?c nhớ... ch? ?c nhớ chương trình Kiến th? ?c yêu c? ??u Để tiếp thu tốt kiến th? ?c môn h? ?c này, yêu c? ??u h? ?c viên trư? ?c h? ?c tìm hiểu khái niệm Tin h? ?c, c? ? kĩ viết chương trình c? ? c? ??u tr? ?c ngơn ngữ b? ?c cao PASCAL Ngoài... lập trình quan sát chương trình c? ?ch tr? ?c quan - C? ?ng c? ?? biên dịch chạy chương trình Bằng thao t? ?c đơn giản lập trình viên u c? ??u biên dịch tồn chương trình xong chạy Nếu chương trình c? ? lỗi c? ?ng