Giáo trình Lập trình cơ bản (Phần 1)

pdf 51 trang phuongnguyen 6710
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Lập trình cơ bản (Phần 1)", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfgiao_trinh_lap_trinh_co_ban_phan_1.pdf

Nội dung text: Giáo trình Lập trình cơ bản (Phần 1)

  1. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái LỜI NÓI ĐẦU Giáo trình “Lập trình cơ bản” trong bộ giáo trình nghề Công nghệ thông tin, được xây dựng và biên soạn trên cơ sở chương trình khung đào tạo nghề do Bộ Lao động – Thương binh và Xã hội ban hành và được chi tiết hóa trong chương trình đào tạo nghề Công nghệ thông tin (ứng dụng phần mềm) của Trường Cao đẳng nghề Yên Bái. Đối tượng phục vụ là học sinh sinh viên trong các khoá đào tạo trình độ cao đẳng nghề, trung cấp nghề Công nghệ thông tin, trong các cơ sở sản xuất làm tài liệu học tập và nghiên cứu. Các nhà quản lý và người sử dụng nhân lực trong các cơ sở sản xuất làm tài liệu tham khảo. Giáo trình môn học “Lập trình cơ bản” được biên soạn theo các nguyên tắc: Tính định hướng thị trường lao động, tính hệ thống và khoa học, tính ổn định và linh hoạt, hướng tới liên thông, chuẩn đào tạo nghề trong nước và thế giới, tính hiện đại và sát thực với sản xuất. Nội dung giáo trình này gồm 7 chương: Cung cấp cho sinh viên những khái niệm cơ bản về ngôn ngữ lập trình C: câu lệnh, từ khóa, cú pháp, cách khai báo và sử dụng biến, hàm và các cấu trúc lệnh trong ngôn ngữ C;Hiểu được ý nghĩa, cách khai báo, cách truy xuất với một số cấu trúc dữ liệu;Biết được một số thuật toán để xử lý một số yêu cầu đơn giản; Cài đặt được một số chương trình ứng dụng đơn giản bằng ngôn ngữ lập trình C;Đọc hiểu và chỉnh sửa các chương trình C có sẵn; Trong quá trình thực hiện nhóm biên soạn đã tham khảo nhiều tài liệu liên quan của các trường bạn, sách kỹ thuật của các chuyên gia đồng thời tham khảo nhiều tài liệu của các trường đào tạo, hãng sản xuất; các yêu cầu của thực tế, các kiến thức mới cũng đã được nhóm biên soạn cố gắng cập nhật và thể hiện trong giáo trình Ngoài ra còn có sự tham gia đóng góp ý kiến tích cực của các cán bộ, kỹ sư kỹ thuật chuyên ngành trong và ngoài tỉnh để giáo trình được hoàn thiện. Giáo trình môn học “Lập trình cơ bản” đã được Hội đồng thẩm định Trường Cao đẳng nghề Yên Bái nghiệm thu và nhất trí đưa vào sử dụng làm tài liệu chính thống trong nhà trường phục vụ giảng dạy và học tập của học sinh sinh viên. Giáo trình này được biên soạn lần đầu nên mặc dù đã hết sức cố gắng song khó tránh khỏi những thiếu sót, chúng tôi mong nhận được các ý kiến đóng góp của người sử dụng và các đồng nghiệp để giáo trình ngày càng được hoàn thiện hơn. Xin trân trọng giới thiệu! HIỆU TRƯỞNG 1
  2. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái Thạc sỹ: Trịnh Tiến Thanh MỤC LỤC LỜI MỞ ĐẦU 1 Chương 1:TỔNG QUAN VỀ NGÔN NGỮ C 7 1. Giới thiệu ngôn ngữ C 7 1.1 Lịch sử phát triển 7 1.2 Sự cần thiết 7 2. Các thao tác cơ bản 8 2.1 Khởi động 8 2.2 Thoát khỏi 9 2.3 Tạo mới, ghi một chương trình C 9 3. Sử dụng trợ giúp 10 4. Một số thao tác trên thanh menu bar 10 Chương 2: CÁC THÀNH PHẦN CƠ BẢN 17 1. Từ khóa và kí hiệu 17 1.1 Từ khóa 17 1.2 Ký hiệu 17 1.3 Tập ký hiệu 17 2. Các kiểu dữ liệu sơ cấp 18 2.1 Kiểu số nguyên 18 2.2 Kiểu số dấu phẩy động 19 2.3 Kiểu ký tự 19 3. Biến, hằng, biểu thức 20 3.1. Phân loại, khai báo và sử dụng biến 20 3.2 Hằng 20 3.3 Biểu thức 22 4.Cấu trúc một chương trình 23 2
  3. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 4.1 Tiền xử lý và biên dịch 23 4.2 Cấu trúc một chương trình C 24 4.3 Các thư viện thông dụng 25 4.4 Chú thích trong chương trình 25 5. Các phép toán 26 6. Câu lệnh 27 6.1 Khái niệm 27 6.2 Lệnh gán và lệnh gộp 27 6.3 Nhập xuất dữ liệu 29 6.4. Các lệnh toán học 31 6.5. Một số lệnh làm việc với màn hình và bàn phím 31 7. Thực thi chương trình 32 BÀI TẬP THỰC HÀNH 33 Chương 3: CÁC LỆNH CẤU TRÚC 37 1. Cấu trúc rẽ nhánh 37 1.1. Dạng đầy đủ 37 1.2. Dạng không đầy đủ 38 3. Cấu trúc lặp 41 3.1 Cấu trúc lặp for 41 3.2 Cấu trúc lặp while, do while 42 4. Các lệnh đặc biệt 44 4.1. Lệnh Break 44 4.2. Lệnh continue 45 4.3. Lệnh goto 45 BÀI TẬP THỰC HÀNH 46 Chương 4: HÀM 52 1. Khái niệm hàm 52 1.1Khái niệm và phân loại 52 1.2 Quy tắc hoạt động của hàm 53 3
  4. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 2. Xây dựng hàm 53 2.1 Định nghĩa hàm 53 2.2 Sử dụng hàm 55 3. Các tham số của hàm 56 3.1 Phân biệt các loại tham số 56 3.2 Cách truyền tham số 57 Truyền bằng tham trị 57 Truyền bằng biến 57 Các đối số mặc định 57 Chiều dài biến đổi được của danh sách tham số 57 Các tham số danh định 58 3.3. Biến toàn cục và biến cục bộ 58 4. Hàm đệ quy 59 4.1 Khái niệm đệ quy 59 4.2 Các bài toán dùng đệ quy 59 4.3 Cách xây dựng hàm đệ quy 60 4.4 Các ví dụ về hàm đệ quy 60 BÀI TẬP VẬN DỤNG 63 Chương 5: MẢNG 67 1. Khái niệm mảng 67 2. Khai báo mảng 67 3. Truy xuất mảng 70 3.1 Truy xuất mảng 1 chiều 70 3.2 Truy xuất mảng 2 chiều 70 BÀI TẬP THỰC HÀNH 72 Chương 6: CON TRỎ 77 1. Khái niệm về con trỏ và địa chỉ 77 2. Khai báo về sử dụng biến con trỏ 78 2.1 Khai báo biến con trỏ 78 4
  5. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 2.2. Các thao tác trên con trỏ 78 3. Con trỏ và mảng 1 chiều 82 3.1 Phép toán lấy địa chỉ 83 3.2 Tên mảng là 1 hằng địa chỉ 84 3.3 Con trỏ trỏ tới các phần tử của mảng 1 chiều 85 4. Con trỏ và hàm 87 BÀI TẬP THỰC HÀNH 88 Chương 7 : CHUỖI KÝ TỰ 91 1. Khái niệm 91 2. Khai báo 91 2.1 Khai báo theo mảng 91 3. Các thao tác trên chuỗi 92 3.1 Nhập chuỗi từ bàn phím 92 3.2 Xuất chuỗi ra màn hình 92 3.3 Một số hàm xử lý chuỗi 93 3.4 Một số thao tác cơ bản trên chuỗi 94 BÀI TẬP THỰC HÀNH 97 PHỤ LỤC 101 HƯỚNG DẪN DEBUG TRÊN MÔI TRƯỜNG BORLAND C 101 TÀI LIỆU THAM KHẢO 104 5
  6. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 6
  7. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái CHƯƠNG 1: TỔNG QUAN VỀ NGÔN NGỮ C 1. Giới thiệu ngôn ngữ C 1.1 Lịch sử phát triển C là ngôn ngữ lập trình cấp cao, được sử dụng rất phổ biến để lập trình hệ thống cùng với Assembler và phát triển các ứng dụng. Vào những năm cuối thập kỷ 60 đầu thập kỷ 70 của thế kỷ XX, Dennish Ritchie (làm việc tại phòng thí nghiệm Bell) đã phát triển ngôn ngữ lập trình C dựa trên ngôn ngữ BCPL (do Martin Richards đưa ra vào năm 1967) và ngôn ngữ B (Do Ken Thompson phát triển từ ngôn ngữ BCPL vào năm 1970 khi viết hệ điều hành UNIX) của máy DEC PDP-11. Năm 1978, Dennish Ritchie và B.W Kernighan đã cho xuất bản quyển “Ngôn ngữ lập trình C” và được phổ biến rộng rãi đến ngày nay. Lúc ban đầu, C được thiết kế nhằm lập trình trong môi trường của hệ điều hành UNIX nhằm mục đích cho công việc lập trình phức tạp. Nhưng về sau, với những nhu cầu phát triển ngày một tăng của công việc lập trình, C đã vượt qua khuôn khổ của phòng thí nghiệm Bell và nhanh chóng hội nhập vào thế giới lập trình để rồi các công ty lập trình sử dụng một cách rộng rãi. Sau đó, các công ty sản xuất phần mềm lần lượt đưa ra các phiên bản hỗ trợ cho việc lập trình bằng ngôn ngữ C và chuẩn ANSI C cũng được khai sinh từ đó. 1.2 Sự cần thiết Ngôn ngữ lập trình C đã làm thay đổi thế giới máy tính. Sự tác động của nó nhiều khi không được đánh giá đúng mức. Nó thay đổi cách tiếp cận và nhìn nhận về lập trình một cách cơ bản. Sự ra đời của C là kết quả trực tiếp của sự cần thiết phải thay đổi về cấu trúc, hiệu quả, ngôn ngữ bậc cao thay thế cho mã máy khi viết các chương trình hệ thống. Như chúng ta biết, khi thiết kế một ngôn ngữ lập trình, sự cân nhắc luôn được xem xét giữa: - Tính dễ dàng sử dụng và sức mạnh - Sự an toàn - Sự chặt chẽ và khả năng mở rộng Trước khi có C, lập trình viên thường xuyên phải chọn giữa các ngôn ngữ đã thu gọn một tập các đặc điểm. Ví dụ, mặc dù FORTRAN có thể được dùng để viết các chương trình hiệu quả cho các ứng dụng khoa học, nhưng nó không tốt lắm cho viết mã hệ thống. Trong khi BASIC dễ dàng cho người học thì nó lại không đủ mạnh và thiếu các cấu trúc cho các chương trình lớn. Ngôn ngữ Assembly có thể được dùng để viết các chương trình hiệu quả cao nhất nhưng không dễ dàng để sử dụng cũng như gỡ rối rất khó khăn. 7
  8. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái Một số vấn đề khác là các ngôn ngữ lập trình như BASIC, COBOL, không được thiết kế dựa trên các yếu tố cấu trúc. Chúng dựa trên lệnh GOTO để điều khiển chương trình. Vì vậy mà các chương trình được viết bởi ngôn ngữ này hướng tới việc sinh ra mã spagheti – một khối lộn xộn các lệnh nhảy và rẽ nhánh làm cho chương trình không thể hiểu được. Trong khi ngôn ngữ như Pascal là ngôn ngữ cấu trúc, nó không được thiết kế để đạt hiệu quả cao, và thiếu các đặc điểm cần thiết để ứng dụng cho những chương trình lớn. Vì thế, trước khi có ngôn ngữ C, không có ngôn ngữ nào có thể dung hòa được sự xung đột đã tồn tại trước đó. Ngôn ngữ C là một ngôn ngữ lập trình hệ thống rất mạnh mẽ và rất “mềm dẻo”, có một thư viện gồm rất nhiều các hàm (function) đã được tạo sẵn. Người lập trình có thể tận dụng các hàm này để giải quyết các bài toán mà không cần phải tạo mới. Hơn thế nữa, ngôn ngữ C hỗ trợ rất nhiều phép toán nên phù hợp cho việc giải quyết các bài toán kỹ thuật có nhiều công thức phức tạp. Ngoài ra, C cũng cho phép người lập trình tự định nghĩa thêm các kiểu dữ liệu trìu tượng khác. Tuy nhiên, điều mà người mới học lập trình C thường gặp “rắc rối” là “hơi khó hiểu” do sự “mềm dẻo” của C. Dù vậy, C được phổ biến khá rộng rãi và đã trở thành một công cụ lập trình khá mạnh, được sử dụng như là một ngôn ngữ lập trình chủ yếu trong việc xây dựng những phần mềm hiện nay. 2. Các thao tác cơ bản 2.1 Khởi động Turbo C là môi trường hỗ trợ lập trình C do hãng Borland cung cấp. Môi trường này cung cấp các chức năng như: soạn thảo chương trình, dịch, thực thi chương trình Phiên bản sử dụng ở đây là Turbo C 3.0. - Sau khi cài đặt song ta có thư mục TC hoặc TC30 trong thư mục này có các thư mục con sau. TC BIN Chứa các tệp tin chính của chýõng trình trong đó có tệp TC.EXE INCLUDE Chứa các tệp tin khai báo thý viện ( *.h) LIB Chứa các tệp tin mã lệnh của các thý viện (*.LIB) - Để khởi động chương trình này chúng ta chạy tệp tin TC.EXE trong thư mục Bin của TurboC . Màn hình giao diện của TurboC có dạng sau: 8
  9. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái Hình 1.2.1: Màn hình giao diện TurboC 3.0 Dòng trên cùng gọi là thanh menu (menu bar). Mỗi mục trên thanh menu có thể có nhiều mục con nằm trong một menu kéo xuống. Dòng dưới cùng ghi chức năng của một số phím đặc biệt. Muốn vào thanh menu ngang ta gõ phím F10. Sau đó dùng các phím mũi tên qua trái hoặc qua phải để di chuyển vùng sáng tới mục cần chọn rồi gõ phím Enter. Trong menu kéo xuống ta lại dùng các phím mũi tên lên xuống để di chuyển vùng sáng tới mục cần chọn rồi gõ Enter. Ta cũng có thể chọn một mục trên thanh menu bằng cách giữ phím Alt và gõ vào một ký tự đại diện của mục đó. 2.2 Thoát khỏi Để thoát khỏi Turbo C và trở về DOS hay Windows có 2 cách: - Cách 1: Vào menu File/Exit - Cách 2 : Dùng phím tắt : Alt + X 2.3 Tạo mới, ghi một chương trình C Muốn soạn thảo một chương trình mới ta chọn mục New trong menu File (File ->New). Trên màn hình sẽ xuất hiện một vùng trống để cho ta soạn thảo nội dung của chương trình. Trong quá trình soạn thảo chương trình ta có thể sử dụng các phím sau: Các phím chèn ký tự/ dòng Insert Thay đổi viết xen hay viết chồng Ctrl - N Xen một dòng trống vào truớc vị trí con trỏ 9
  10. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái Các phím xoá ký tự/ dòng Phím Ý nghĩa Phím tắt Delete Xoá ký tự tại vị trí con trỏ Ctrl -G BackSpace Di chuyển sang trái đồng thời xoá ký tự đứng Ctrl -H truớc con trỏ Xoá một dòng chứa con trỏ Ctrl -Y Xoá từ vị trí con trỏ đến cuối dòng Ctrl –Q- Y Xoá ký tự bên phải con trỏ Ctrl -T - Ghi chương trình đang soạn thảo vào đĩa Sử dụng File/Save hoặc gõ phím F2. Có hai trường hợp xảy ra: Nếu chương trình chưa được ghi lần nào thì một hội thoại sẽ xuất hiện cho phép bạn xác định tên tập tin (FileName). Tên tập tin phải tuân thủ quy cách đặt tên của DOS và không cần có phần mở rộng (sẽ tự động có phần mở rộng là .C hoặc .CPP). Sau đó gõ phím Enter. Nếu chương trình đã được ghi một lần rồi thì nó sẽ ghi những thay đổi bổ sung lên tập tin chương trình cũ. Chú ý: Để đề phòng mất điện trong khi soạn thảo chương trinh thỉnh thoảng bạn nên gõ phím F2. 3. Sử dụng trợ giúp Trên menu Help bao gồm các lệnh gọi trợ giúp khi người lập trình cần giúp đỡ một số vấn đề nào đó như: Cú pháp câu lệnh, cách sử dụng các hàm có sẵn - Lệnh Contents: Hiển thị toàn bộ nội dung của phần help. - Lệnh Index: Hiển thị bảng tìm kiếm theo chỉ mục. 4. Một số thao tác trên thanh menu bar Các lệnh trên menu File - Lệnh New : Dùng để tạo mới một chương trình. Tên ngầm định của chương trình là NONAMEXX.C (XX là 2 số từ 00 đến 99). - Lệnh Open : Dùng để mở một chương trình đã có sẵn trên đĩa để sửa chữa, bổ sung hoặc để thực hiện chương trình đó. Khi tập tin được mở thì văn bản chương trình được 10 Hình 1.4a. Các lệnh trên menu file
  11. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái trình bày trong vùng soạn thảo; hộp thoại Open như sau: Hình 1.4b: Hộp thoại Open Trong trường hợp ta nhập vào tên tập tin chưa tồn tại thì chương trình được tạo mới và sau này khi ta lưu trữ, chương trình được lưu với tên đó. - Lệnh Save: Dùng để lưu chương trình đang soạn thảo vào đĩa. - Lệnh Save as : Dùng để lưu chương trình đang soạn thảo với tên khác, hộp thoại lưu tập tin đang soạn với tên khác như sau: Hình 1.4c: Hộp thoại Save - Lệnh Save All : Dùng để lưu mọi thay đổi trên tất cả các chương trình đang mở - Lệnh Change Dir : Dùng để đổi thư mục hiện hành 11
  12. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái Hình 1.4d: Hộp thoại thay đổi thư mục - Lệnh Print: Dùng để in chương trình đang soạn thảo ra máy in. - Lệnh Printer Setup : Dùng để thiết đặt một số thông số cho máy in. - Lệnh Dos Shell: Dùng để thoát tạm thời về Dos, để trở lại Turbo C ta gõ EXIT. - Lệnh Exit: Dùng để thoát khỏi C. Các lệnh trên menu Edit - Lệnh Undo: Dùng để hủy bỏ thao tác soạn thảo cuối cùng trên cửa sổ soạn thảo. - Lệnh Redo: Dùng đẻ phục hồi lại tha tác đã bị Undo cuối cùng. - Lệnh Cut : Dùng để xóa một phần văn bản đã được đánh dấu khối, phần dữ liệu bị xóa sẽ được lưu vào một vùng nhớ đặc biệt gọi là Clipboard. - Lệnh Copy: Dùng để chép phần chương trình Hình 1.4e: Các lệnh trên đã được đánh dấu khối vào Clipboard. menu Edit - Lệnh Paste: Dùng để dán phần chương trình đang được lưu trong Clipboard vào cửa sổ đang soạn thảo, bắt đầu tại vị trí của con trỏ. - Lệnh Clear: Dùng để xóa phần dữ liệu đã được đánh dấu khối, dữ liệu bị xóa không được lưu vào Clipboard. - Lệnh Show clipboard: Dùng để hiển thị phần chương trình đang được lưu trong Clipboard trong một cửa sổ mới. 12
  13. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái Các lệnh trên menu Search - Lệnh Find : Dùng để tìm kiếm một cụm từ trong văn bản chương trình. Nếu tìm thấy thì con trỏ sẽ di chuyển đến doạn văn bản trùng với cụm từ cần tìm; hộp thoại Find như sau: Hình 1.4f: Các lệnh trên menu Search Hình 1.4g: Hộp thoại Find text Ý nghĩa các lựa chọn trong hộp thoại trên như sau: + Case sentitive: Phân biệt chữ IN HOA với chữ in thường trong khi so sánh cụm từ cần tìm với văn bản chương trình. + Whole word only: Một đoạn văn bản chương trình trùng với toàn bộ cụm từ cần tìm thì mới được xem là tìm thấy. + Regular expression: Tìm theo biểu thức + Global: Tìm trên tất cả tập tin. + Forward: Tìm đến cuối tập tin. + Selected text: Chỉ tìm trong khối văn bản đã được đánh dấu. + Backward: Tìm đến đầu tập tin. + From cursor: Bắt đầu từ vị trí con nháy. + Entire scope: Bắt đầu từ vị trí đầu tiên của khối hoặc tập tin. 13
  14. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái - Lệnh Replace : Dùng để tìm kiếm một đoạn văn bản nào đó, và tự động thay bằng một đoạn văn bản khác, hộp thoại replace như sau: Hình 1.4h: Hình ảnh minh họa tìm các cụm từ Scanf và thay thế bằng scanf - Lệnh Search again: Dùng để thực hiện lại việc tìm kiếm. - Các lệnh còn lại trên menu Search, các bạn sẽ tìm hiểu thêm khi thực hành trực tiếp trên máy. Các lệnh trên menu Run Lệnh Run : Dùng để thực thi hay “chạy” một chương trình. - Lệnh Step over: Dùng để “chạy” chương trình từng bước. - Lệnh Trace into: Dùng để chạy chương trình từng bước. Khác với Hình 1.4i: Các lệnh trên menu lệnh Step over ở chỗ: Lệnh Step over không cho chúng ta xem từng bước “chạy” trong chương trình con, còn lệnh Trace into cho chúng ta xem từng bước trong chương trình con. Các lệnh trên menu Complie - Lệnh Complie: Biên dịch một chương trình. - Lệnh Make, Build, : Tìm hiểu trên máy 14
  15. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái - Lệnh Information: Dùng để hiển thị các thông tin về chương trình, Mode, môi trường. Hình 1.4j: Các lệnh trên menu Complie Các lệnh trên menu Debug - Lệnh Breakpoints: Dùng để đặt “điểm dừng” trong chương trình. Khi chương trình thực thi đến “điểm dừng thì nó sẽ dừng lại”. - Lệnh Watch: Dùng để mở một cửa sổ hiển thị kết quả Hình 1.4k: Các lệnh trên menu Debug trung gian của một biến nhớ nào đó khi chạy chương trình từng bước. - Lệnh Evaluate/Modify: Tìm hiểu trên máy. Các lệnh trên menu Option - Lệnh Complier : Dùng để thiết đặt lại một số thông số khi biên dịch chương trình như hình sau. - Lệnh Directories : Dùng để đặt lại đường dẫn tìm đến các tập tin cần thiết khi biên dịch chương trình như sau: Hình 1.4m: Các lệnh trên menu Option 15
  16. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái Hình 1.4n: Hộp thoại thiết lập đường dẫn tới các tệp tin cần thiết + Include Directories: Thư mục chứa các tập tin mà chúng ta muốn đưa vào chương trình (các tập tin .h trong dòng #include). + Library directories: Thư mục chứa các tập tin thư viện (các tập tin .Lib) + Output directory: Thư mục chứa các tập tin “đối tượng” (có phần mở rộng là .OBJ), tập tin thực thi (.exe) khi biên dịch chương trình. + Source directories: Thư mục chứa các tập tin “nguồn” (có phần mở rộng là .obj,.lib). - Lệnh Enviroment: Dùng để thiết lập môi trường làm việc như: + Reference : Các tham chiếu. + Editor: Môi trường soạn thảo + Mouse : Đặt chuột + Colors Đặt màu. Các lệnh trên menu Window - Lệnh Cascade: Dùng để sắp xếp các cửa sổ. - Lệnh Close all: Dùng để đóng tất cả các cửa sổ. - Lệnh Zoom: Dùng để phóng to/thu nhỏ cửa sổ. - Các lệnh khác: Tìm hiểu khi thực hành 16
  17. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái CHƯƠNG 2: CÁC THÀNH PHẦN CƠ BẢN 1. Từ khóa và kí hiệu 1.1 Từ khóa Từ khóa là các từ dành riêng (reserved words) của C mà người lập trình có thể sử dụng nó trong chương trình tùy theo ý nghĩa của từng từ. Ví dụ: void struct class while . Không được dùng từ khóa để đặt tên cho các hằng, biến, mảng, hàm Từ khóa phải viết bằng chữ thường. Ví dụ: - Từ khóa viết đúng: struct - Từ khóa viết sai: Struct. 1.2 Ký hiệu Mỗi một ngôn ngữ lập trình đều được xây dựng từ một bộ ký tự nào đó. Các ký tự được nhóm lại theo nhiều cách khác nhau để lập nên các từ. Đến lượt mình các từ được liên kết theo một quy tắc nào đó để tạo thành các câu lệnh. Một chương trình bao gồm nhiều câu lệnh và diễn đạt một thuật toán để giải một bài toán nào đó. Ngôn ngữ C được xây dựng trên bộ ký tự sau: Các chữ cái hoa: A B C Z Các chữ cái thường: a b c z Các chữ số: 0 1 2 3 Các kí hiệu toán học: + - * / = Các dấu ngoặc: [] {} () Các ký hiệu đặc biệt khác:, . ; : / ? @ # $ % ^ & ‘ “ Các dấu ngăn cách không nhìn thấy như dấu cách, dấu nhảy tab, dấu xuống dòng. Dấu gạch dưới:_ 1.3 Tập ký hiệu Là một dãy kí tự liên tiếp (không chứa dấu cách) bao gồm: chữ, số và dấu gạch nối được dùng để chỉ tên hằng, tên biến, tên mảng, tên hàm Tên phải bắt đầu bằng một chữ hoặc dấu gạch nối. Tên không được đặt trùng với từ khóa. 17
  18. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái Ví dụ Các tên viết hợp lệ: Giai_phuong_trinh_bac2, abc123 Các tên viết không hợp lệ: Baitap 1, 123abc. Chú ý: Trong ngôn ngữ lập trình C tên được phân biệt chữ hoa và chữ thường. Thông thường chữ hoa thường được dùng để đặt tên cho các hằng, còn các đại lượng khác thì dùng chữ thường. 2. Các kiểu dữ liệu sơ cấp 2.1 Kiểu số nguyên Kiểu số nguyên 2 bytes gồm có 4 kiểu như sau: STT Kiểu dữ liệu Miền giá trị(Domain) 1 enum Từ -32,768 đến 32,767 2 unsignedint Từ 0 đến 65,535 3 shortint Từ -32,768 đến 32,767 4 int Từ -32,768 đến 32,767 Kiểu enum, short int, int: Lưu các số nguyên từ -32768 đến 32767. Sử dụng bit bên trái nhất để làm bit dấu.  Nếu gán giá trị >32767 cho 1 trong 3 kiểu trên thì giá trị của biến này có thể là số âm. Kiểu Unsigned int: Kiểu unsgned int lưu các số nguyên dương từ 0 đến 65535. Kiểu số nguyên 4 bytes hay còn gọi là số nguyên dài (long) gồm 2 kiểu sau: STT Kiểu dữ liệu Miền giá trị (Domain) 1 unsigedlong Từ 0 đến 4,294,967,295 2 long Từ -2,147483648 đến 2,147,483,647 Kiểu long: Lưu các số nguyên từ -2147483647 đến 214483647. Sử dụng bit bên trái nhất để làm bit dấu. 18
  19. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái  Nếu gán giá trị >2147483647 cho biến có kiểu long thì giá trị của biến này có thể là số âm Kiểu unsigned long: Kiểu unsigned long lưu các số nguyên dương từ 0 đến 4294967295 2.2 Kiểu số dấu phẩy động Kiểu số thực dùng để lưu các số thực hay các số có dấu chấm thập phân gồm có 3 kiểu sau: STT Kiểu dữ liệu Kích thước (size) Miền giá trị (Domain) 1 float 4 bytes Từ 3.4* 10-38 đến 3.4* 1038 2 double 8 bytes Từ 1.7* 10-038 đến 1.7* 10308 3 longdouble 10 bytes Từ 3.4* 10-4932 đến 3.4* 104932 Mỗi kiểu số thực ở trên đều có miền giá trị và độ chính xác (số lẻ) khác nhau. Tùy vào nhưu cầu sử dụng mà ta có thể khai báo biến thuộc 1 trong 3 kiểu trên. Ngoài ra ta còn có kiểu void, kiểu này mang ý nghĩa là kiểu rỗng không chứa giá trị gì cả. 2.3 Kiểu ký tự Kiểu ký tự là kiểu số nguyên 1 byte bao gồm 2 kiểu sau: STT Kiểu dữ liệu Miền giá trị (Domain) Từ 0 đến 255 (tương đương 256 ký tự trong 1 unsignedchar bảng mã ASCII) 2 char Từ -128 đến 127 Kiểu unsigned char: Lưu các số nguyên dương từ 0 đến 255.  Để khai báo một biến là kiểu ký tự thì ta khai báo biến kiểu unsigned char. Mỗi số trong miền giá trị của kiểu unsigned char tương ứng với một ký tự trong bảng mã ASCII. Kiểu char: Lưu các số nguyên từ -128 đến 127. Kiểu char sử dụng bit trái nhất để làm bit dấu.  Nếu gán giá trị >127 cho biến kiểu char thì giá trị của biến này có thể là số âm. 19
  20. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 3. Biến, hằng, biểu thức 3.1. Phân loại, khai báo và sử dụng biến Biến là yếu tố cơ bản của bất kỳ ngôn ngữ máy tính nào. Biến là vùng trống trong bộ nhớ máy tính dành cho một kiểu dữ liệu nào đó và có đặt tên. Các biến trong bộ nhớ ở các thời điểm khác nhau có thể cất giữ các giá trị khác nhau. Trước khi sử dụng một biến nào đó phải khao báo nó. Quy tắc khai báo: Kiểu_dữ_liệu Tên _biến; Có thể khai báo nhiều biến cùng kiểu trên cùng một hàng, các biến được phân cách nhau bởi dấu phẩy. Ví dụ: int a,b; /*Biến có kiểu nguyên*/ float f; /*Biến thực*/ char ch; /*Biến ký tự*/ Khi khai báo một biến ta có thể khởi đầu giá trị cho nó theo mẫu sau: Kieu_dulieu tenbien = giatri; Ví dụ: float x=5; int n= 10; Để lấy địa chỉ của một biến ta dùng toán tử & cụ thể như sau: &tenbien Ví dụ: &x lấy địa chỉ của biến x &n lấy địa chỉ của biến n 3.2 Hằng Hằng(const) là một đại lượng không thay đổi giá trị trong toàn chương trình. Hằng có thể là số nguyên, số thực, ký tự hoặc chuỗi ký tự. Dữ liệu chứa trong máy tính có thể là biến hoặc hằng. Biến và hằng được lưu trữ trong bộ nhớ và thường được đặt tên cho dễ sử dụng thay vì phải sử dụng địa chỉ ô nhớ cũng như giá trị cụ thể của chúng, rất khó sử dụng.  Hằng số nguyên - Hệ thập phân bình thường VD: 545 20
  21. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái Hệ cơ số 8 (Octal) bắt đầu bằng số 0 và chỉ biểu diễn số dương VD: 024 = 2010 Hệ cơ số 16 (Hecxa) bắt đầu bằng 0x VD: 0xAB = 16310 Chú ý: Nếu là hằng kiểu long thì thêm l(hay L) vào đuôi VD: 123L Một hằng số nguyên có giá trị vượt ra ngoài phạm vi cho phép được ngầm hiểu là hằng long.  Hằng số thực được viết theo hai cách sau: Dạng thập phân gồm: Phần nguyên, dấu chấm thập phân, phần thập phân. VD: 34.2 -344.122 Chú ý: Phần nguyên hay phần thập phân có thể vắng mặt nhưng dấu chấm thập phân không được thiếu. VD: 343. .454 Dạng mũ gồm: Phần định trị và phần mũ. Phần định trị là số nguyên hay số thực dạng thập phân, phần mũ bắt đầu bằng E hoặc e, theo sau là số nguyên. VD: 1234.5E-122  Hằng ký tự Là một ký hiệu trong bảng mã ASCII được đặt trong hai dấu nháy đơn. Giá trị của hằng ký tự chính là mã ASCII của ký hiệu. VD: Hằng ‘A’ có giá trị là 65. Chú ý: Hằng ký tự biểu thị mã của kí tự đó trong bẳng mã ASCII. Do vậy một hăng ký tự cũng có thể tham gia vào các phép toán. VD: ‘A‘ +10 có giá trị (65 + 10 = 75). Một số ký tự đặc biệt: Viết Ký tự Diễn giải \’ ‘ Dấu nháy đơn \” “ Dấu nháy kép \\ \ Dấu gạch chéo ngược \n \n Xuống dòng mới 21
  22. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái \0 \0 Ký tự Null \t Nhảy cách ngang, ký tự tab \b Xóa trái \r Về đầu dòng \f Sang trang  Hằng xâu ký tự. Là một dãy các ký tự đặt trong dấu nháy “ ” Xâu ký tự được đặt trong một mảng ô nhớ liền nhau song còn thêm ô nhớ cuối cùng chứa mã là 0 (ký hiệu là ‘\0’) VD: “Yen Bai” Được tổ chức trong bộ nhớ như sau: Y e n B a i \0 Chú ý: Chúng ta cần phân biệt “A” và ‘A’. Trong đó “A” được chứa trong 2 byte, còn ‘A’ chỉ mất 1 byte và nó có thể tham gia tính toán trong các biểu thức.  Hằng có thể định nghĩa bằng 2 cách: Cách 1: Dùng toán tử #define nhằm định nghĩa một hằng ký hiệu. #define Giải thích: Cấu trúc này định nghĩa một hằng ký hiệu có tên bằng xâu kí tự. Khi biên dịch chương trình, chương trình dịch thay thế các lần xuất hiện của bằng xâu ký tự tương ứng. VD: #define MAX 100 Cách 2: const kieu_du_lieu ten_hang = gia_tri_hang; VD: const int n=20; 3.3 Biểu thức Biểu thức là một sự kết hợp giữa các biểu thức và các toán hạng để diễn đạt một công thức nào đó. Mỗi biểu thức có một giá trị. Tùy theo giá trị của biểu thức mà có các biểu thức nguyên hay biểu thức thực. Các mệnh đề logic có giá trị nguyên trong đó giá trị khác 0 tương ứng mệnh đề đúng, còn giá trị khác 0 tương ứng mệnh đề sai. 22
  23. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái Biểu thức được sử dụng trong vế phải của lệnh gán; làm tham số thực của các hàm; làm chỉ số; các câu lệnh if, for, while, do while; Khi máy tính thực hiện tính toán biểu thức sẽ tuân theo thư tự ưu tiên giống như toán học. Ví dụ: (8 +3 * (4-2))/2 =7; 4.Cấu trúc một chương trình 4.1 Tiền xử lý và biên dịch Trong C, việc dịch một tập tin nguồn được tiến hành trên hai bước hoàn toàn độc lập với nhau: - Tiền xử lý. - Biên dịch. Hai bước này phần lớn thời gian được nối tiếp với nhau một cách tự động theo cách thức mà ta có ấn tượng rằng nó đã được thực hiện như là một xử lý duy nhất. Nói chung, ta thường nói đến việc tồn tại của một bộ tiền xử lý nhằm chỉ rõ chương trình thực hiện việc xử lý trước. Ngược lại, các thuật ngữ biên dịch hay sự biên dịch vẫn còn nhập nhằng bởi vì nó chỉ ra khi thì toàn bộ hai giai đoạn, khi thì là giai đoạn thứ hai. Bước tiền xử lý tương đương với việc cập nhật trong văn bản của chương trình nguồn, chủ yếu dựa trên việc diễn giải các mã lệnh rất đặc biệt gọi là các chỉ thị này được nhận biết bởi chúng bắt đầu bằng ký hiệu #. Hai chỉ thị quan trọng nhất là: - Chỉ thị sự gộp vào của các tập tin nguồn khác: #include - Chỉ thị việc định nghĩa các macros hoặc ký hiệu: #define Chỉ thị đầu tiên được sử dụng trước hết là nhằm gộp vào nội dung của các tập tin cần có (header file), không thể thiếu trong việc sử dụng một cách tốt nhất các hàm của thư viện chuẩn, phổ biến là: #include Chỉ thị thứ hai rất hay được sử dụn trong các tập tin thư viện (header file) đã được định nghĩa trước đó và thường được khai thác bởi các lập trình viên trong việc định nghĩa các ký hiệu như là: #define NB_COUPS_MAX 100 #define SIZE 25 23
  24. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 4.2 Cấu trúc một chương trình C Một chương trình C bao gồm các phần như: Các chỉ thị tiền xử lý, khai báo biến ngoài, các hàm tự tạo, chương trình chính (hàm main). Cấu trúc có thể như sau: Các chỉ thị tiền xử lý (Preprocesor directives) #include #define Định nghĩa kiểu dữ liệu (phần này không bắt buộc): Dùng để đặt tên cho một kiểu dữ liệu nào đó để gợi nhớ hay đặt một kiểu dữ liệu cho riêng mình dựa trên các kiểu dữ liệu đã có. o Cú pháp: Typedef o Ví dụ: Typedef int SoNguyen // Kiểu số nguyên là kiểu int. Khai báo các protyppe (tên hàm, các tham số, kiểu trả về, của các hàm sẽ cài đặt trong phần sau, phần này không bắt buộc): Phần này chỉ được khai báo đầu hàm, không phải là phần định nghĩa hàm. Khai bái các biến ngoài(các biến toàn cục) phần này không bắt buộc: Phần này khai bái các biến toàn cục được sử dụng trong cả chương trình. Chương trình chính phần này bắt buộc phải có main() { Các khai báo cục bộ trong hàm main: Các khai báo này chỉ tồn tại trong hàm mà thôi, có thê khai báo biến hay khai báo kiểu . Các câu lệnh dùng để định nghĩa hàm main Return ; // Hàm phải trả về kết quả } Cài đặt các hàm function 1(các tham số) { Các khai báo cục bộ trong hàm. Các câu lệnh dùng để định nghĩa hàm Return ; } 24
  25. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái Một chương trình C bắt đầu thực thi từ hàm main (thông thường là từ câu lệnh đầu tiên đến câu lệnh cuối). 4.3 Các thư viện thông dụng Đây là các tập tin chứa các hàm thông dụng khi lập trình C, muốn sử dụng các hàm trong các tập tin header này thì phải khai #include ở đầu của chương trình. 1)stdio.h: Tập tin định nghĩa các hàm vào/ra chuẩn (standard input/outpht). Gồm các hàm in dữ liệu (printf()), nhập giá trị cho biến (scanf()), nhận ký tự từ bàn phím (getc()), in ký tự ra màn hình (putc()), xóa vùng đệm bàn phím (fflush(), fopen(),fclose(), fread(), fwrite(),getchar(),putchar(),getw(), putw(), ) 2)conio.h: Tập tin định nghĩa các hàm vào/ra trong chế độ DOS gồm các hàm: clrscr(), getch(), getche(), getpass(), cgets(), cputs(), putch(), clreol() . 3) math.h : Tập tin định nghĩa các hàm tính toán gồm các hàm abs() sqrt(),log(), log10(), sin(), cos(), tan(), exp(), pow(), 4)alloc.h: Tập tin định nghĩa các hầm liên quan đến viện quản lý bộ nhớ. Gồm các hàm calloc(), realloc(), free(), farmalloc(), faraclloc(), farfee(), 5) io.h: Tập tin định nghĩa các hàm vào ra cấp thấp. Gồm các hàm Open(), _open(), read(), close(), create(), _create(), creatnew(), eof(), filelength(), lock(), 6) graphics.h: Tập tin định nghĩa các hàm liên quan đến đồ họa. Gồm initgraph(), line(), circle(), putpixel(), getpixel(0, setcolor(), 4.4 Chú thích trong chương trình Một chương trình thường được viết một cách ngắn gọn, do vậy thông thường bên cạnh các câu lệnh chính thức của chương trình, người lập trình còn được phép viết vào chương trình các câu ghi chú, giải thích để làm rõ nghĩa hơn chương trình. Một chú thích có thể ghi chú về nhiệm vụ, mục đích, cách thức của thành phần đang được chú thích như biến, hằng, hàm hoặc công dụng của một đoạn lệnh Các chú thích sẽ làm cho chương trình sáng sủa, dễ đọc, dễ hiểu và vì vậy dễ bảo trì, sửa chữa về sau. Có 2 cách báo cho chương trình biết một đoạn chú thích: − Nếu chú thích là một đoạn kí tự bất kỳ liên tiếp nhau (trong 1 dòng hoặc trên nhiều dòng) ta đặt đoạn chú thích đó giữa cặp dấu đóng mở chú thích /* (mở) và */ (đóng). − Nếu chú thích bắt đầu từ một vị trí nào đó cho đến hết dòng, thì ta đặt dấu // ở vị trí đó. Như vậy // sử dụng cho các chú thích chỉ trên 1 dòng. 25
  26. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái Như đã nhắc ở trên, vai trò của đoạn chú thích là làm cho chương trình dễ hiểu đối với người đọc, vì vậy đối với máy các đoạn chú thích sẽ được bỏ qua. Lợi dụng đặc điểm này của chú thích đôi khi để tạm thời bỏ qua một đoạn lệnh nào đó trong chương trình (nhưng không xoá hẳn để khỏi phải gõ lại khi cần dùng đến) ta có thể đặt các dấu chú thích bao quanh đoạn lệnh này (ví dụ khi chạy thử chương trình, gỡ lỗi ), khi cần sử dụng lại ta có thể bỏ các dấu chú thích. Chú ý: Cặp dấu chú thích /* */ không được phép viết lồng nhau. 5. Các phép toán Các phép toán trong C gọi là các toán tử (operator), bao gồm:  Các phép toán số học - Ký hiệu: +, -,*, /,% - Ý nghĩa: cộng ,trừ, nhân, chia, chia dư - Dữ liệu tác động: Kiểu số nguyên hoặc số thực - Kết quả: Các phép toán số học cho kết quả là dữ liệu kiểu số Ví dụ: 2+5, 5*6, 3/2 Chú ý: đối với phép chia (/) nếu hai vế dữ liệu là số nguyên thì máy sẽ chia lấy phần nguyên, nếu một trong hai vế là số thực thì máy cho kết quả chính xác. Ví dụ: 7/4 sẽ cho kết quả là 1(là phần nguyên của 7 chia 4) 7.0/4 hoặc 7/4.0 sẽ cho kết quả là 1.75 7%4 sẽ cho kết quả là 3(là phân dư của 7 chia 4)  Các phép toán quan hệ - Ký hiệu: >, =, <=, ==, != - Ý nghĩa : lớn hơn, nhỏ hơn, lớn hơn hoặc bằng, nhơ hơn hoặc bằng, so sánh bằng, và khác - Dữ liệu tác động: là các dữ liệu kiểu số và chữ, nếu là chữ thì máy sẽ so sánh mã ASCII của các chữ đo. - Kết quả: phép toán cho kết quả là loogic(đúng hoặc sai)  Các phép kết nối logic - Ký hiệu: &&, ||, ! 26
  27. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái - Ý nghĩa: và, hoặc, phủ định - Kiểu dữ liệu tác động: là các dữ liệu có giá trị đúng hoặc sai(kiểu logic) - Kết quả: cho kết quả logic(đúng hoặc sai) Bảng kết quả: E1 E2 E1&&E2 E1|| E2 !E1 Đúng Đúng Đúng Đúng Sai Đúng Sai Sai Đúng Sai Sai Đúng Sai Đúng Đúng Sai Sai Sai Sai Đúng  Phép toán Tăng và giảm (++ & ) - Toán tử: ++ tăng thêm 1 vào toán hạng của nó. - Toán tử trừ bớt 1 vào toán hạng của nó. Nói cách khác: x = x + 1 giống như x ++ hay x = x – 1 giống như x Cả 2 toán tử tăng và giảm đều có thể tiền tố (đặt trước) hay hậu tố (đặt sau) toán hạng. Ví dụ: x = x + 1 có thể viết x++ (hay ++x) Tuy nhiên giữa tiền tố và hậu tố có sự khác biệt khi sử dụng trong 1 biểu thức. Khi 1 toán tử tăng hay giảm đứng trước toán hạng của nó, C thực hiện việc tăng hay giảm trước khi lấy giá trị dùng trong biểu thức. Nếu toán tử đi sau toán hạng, C lấy giá trị toán hạng trước khi tăng hay giảm nó. Ví dụ: x = 10 ; y = ++x ; // giá trị biến y = 11 x = 10 ; y = x++; // giá trị biến y = 10 Thứ tự ưu tiên của các toán tử số học: ++, sau đó là *, /, % rồi mới đến +, - 6. Câu lệnh 6.1 Khái niệm Một câu lệnh (statement) xác định một công việc mà chương trình phải thực hiện để xử lý dữ liệu đã được mô tả và khai báo. Các câu lệnh được ngăn cách với nhau bởi dấu chấm phẩy (;) 6.2 Lệnh gán và lệnh gộp Lệnh gán dùng để gán giá trị của một biểu thức cho một biến. Cú pháp: 27
  28. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái = VD: x = 10; /* Gan hang so 10 cho bien x*/ y = 2*x; /*Gan gia tri 2*x = 2*10 =20 cho x*/ Nguyên tắc khi dùng lệnh gán là kiểu của biến và kiểu của biểu thức phải giống nhau, gọi là có sự tương thích giữa các kiểu dữ liệu. Chẳng hạn ví dụ sau cho thấy một sự không tương thích về kiểu: int x,y; x= 10; /*Gan hang so 10 cho bien x*/ y= “Xin chao”; /* y co kieu int, con “Xin chao” co kieu char*/ Khi biên dịch chương trình này, C sẽ báo lỗi “Cannot convert ‘char *’ to ‘int’” tức là C không thể tự động chuyển đổi kiểu từ char* (chuỗi ký tự) sang int. Tuy nhiên trong đa số trường hợp sự tự động biến đổi kiểu để sự tương thích về kiểu sẽ được thực hiện VD: int x,y; float r; char ch; r= 9000; x=10; /*Gan hang so 10 cho bien x*/ y=’d’; /*y co kieu int, con ‘d’ co kieu char*/ r= ‘e’; /*r co kieu float, ‘e’ co kieu char*/ ch = 65.7; /*ch co kieu char,con 65.7 co kieu float*/ Trong nhiều trường hợp để tạo ra sự tương thích về kiểu, ta phải sử dụng đến cách thức chuyển đổi kiểu một cách tường minh. Cú pháp của phép toán này như sau: (Tên_kiểu) Chuyển đổi kiểu của thành kiểu mới . Chẳng hạn như: float f; f = (float) 10/4; /*f luc nay la 2.5*/ Chú ý: 28
  29. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái Khi một biểu thức được gán cho một biến thì giá trị của nó sẽ được thay thế giá trị cũ mà biến đã lưu giữ trước đó. Trong câu lệnh gán, dấu = là một toán tử; do đó nó có thể được sử dụng là một thành phần của biểu thức. Trong trường hợp này giá trị của biểu thức gán chính là giá trị của biến. VD: int x,y; y = x = 3; /*y luc nay cung bang 3*/ Ta có thể gán giá trị cho biến được khai báo theo cách thức sau: = ; VD: int x=10, y = x; 6.3 Nhập xuất dữ liệu  Lệnh hiện dữ liệu lên màn hình - Cú pháp: printf(“điều khiển”,các dữ liệu cần hiện); Trong đó: - Điều khiển : Là các cặp kí tự điều khiển để hiện dữ liệu lên màn hình và phải được viết trong cặp dấu nháy kép, mỗi cặp kí tự điều khiển bao gồm dấu “%” và sau đó là một ký tự định kiểu. Cách viết Ý nghĩa %d Hiện số nguyên %c Hiện ký tự trong bảng mã ASCII %f Hiện số thực %s Hiện chuỗi ký tự - Dữ liệu cần hiện: Là các biểu thức dữ liệu cần hiện ra màn hình, các biểu thức này cách nhau bởi dấu phẩy. Để sử dụng được lệnh hiện dữ liệu lên màn hình ta phải nạp thư viện Ví dụ: printf(“%d”,65); thì kết quả hiện ra màn hình sẽ là: 65 printf (“%c”,65); 29
  30. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái thì máy sẽ hiện ra ký tự có mã là 65 và đó là: chữ A Chú ý: - Để hiện dữ liệu có xuống dòng trên màn hình ta sử dụng \n trong điều khiển của lệnh printf Ví dụ printf(“yen bai \n ngày %d”,12); màn hình sẽ hiện ra như sau: yen bai ngay 12 - Để cách một khoảng trên màn hình như bấm phím Tab ta sử dụng \t trong điều khiển của lệnh printf. Vidu: printf(“yen bai \n\t ngay %d”,12); Màn hình sẽ hiện ra như sau: Yen bai ngay 12  Lệnh nhập dữ liệu từ bàn phím Cú pháp : scanf(“điều khiển”,& tên biến nhớ); Trong đó - điều khiển : Để quy định dữ liệu nhập vào dưới dạng nào, cách viết như điều khiển trong lệnh printf . - Tên biến nhớ: Dùng để lưu trữ dữ liệu nhập vào từ bàn phím, phải có dấu & ở trước. Để sử dụng được lệnh nhập dữ liệu từ bàn phím ta phải nạp thư viện . Ví dụ: scanf(“%d”,&a); Nhập một số nguyên từ bàn phím vào cho biến nhớ a. Chú ý: 30
  31. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái - Có thể nhập nhiều dữ liệu vào nhiều biến trong một lệnh scanf. Ta phải điền vào các điều khiển nhập cùng với các biến nhớ tương ứng cách nhau bởi dấu phẩy. Ví dụ: scanf(“%d%f”,&a,&b); Sẽ nhập số nguyên vào biến nhớ a, số thực vào biến nhớ b - Có thể quy định độ rộng dữ liệu khi nhập, phải viết độ rộng đó vào giữa dấu % và kí tự định kiểu tương ứng. Nếu gõ thừa máy sẽ tự động cắt bỏ. Ví dụ: scanf(“%2d%5f”,&a,&b); nhập một số nguyên vào biến nhớ a tối đa là 2 chữ số, nhập số thực vào biến nhớ b, với độ rộng tối đa là 5 chữ số. 6.4. Các lệnh toán học Các lệnh toán học cung cấp bởi thư viện do vậy phải khai báo nạp thư viện ở đầu chương trình. Tên lệnh Ý nghĩa sin(E); Tính sin của E cos(E); Tính cos của E pow(E1,E2); Tính lũy thừa E2 của E1 sqrt(E); Tính căn bậc hai của E abs(E); Tính trị tuyệt đối của E nguyên fabs(E); Tính trị tuyệt đối của E thực E là một biểu thức hay giá trị. Ví dụ 1: printf(“hay nhap vao mot so nguyen”); scanf(“%d”,&a); printf(“can bac hai cua %d la:%f”,a,sqrt(a)); 6.5. Một số lệnh làm việc với màn hình và bàn phím Để sử dụng được lệnh làm việc với màn hình và bàn phím ta phải lạp thư viện ở đầu chương trình. Tên lệnh Ý nghĩa clrscr(); Xóa màn hình textcolor(m); Đặt mầu chữ textbackground(m) ; Đặt mầu nền cho chữ 31
  32. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái getch(); Chờ bấm một phím không hiện nên màn hình getche(); Chờ bấm một phím có hiện lên màn hình wherex(); Cho biết tọa độ cột hiện thời của con trỏ nháy wherey(); Cho biết tọa độ dòng hiện thời của con trỏ nháy textmode(m); Đặt chế độ văn bản hiển thị lên mà hình Ví dụ: textcolor(red); cprintf (“Yen Bai ”); textcolor(blue); printf(“Ngay 12 thang 09 nam 2009”); Hiện lên màn hình dòng chữ “Yen Bai” mầu đỏ, dòng chữ “Ngay 12 thang 09 nam 2009” mầu xanh. 7. Thực thi chương trình - Cách thực hiện một chương trình trên máy Khi thực hiện chương trình thì máy tình sẽ thực hiện các câu lệnh trong chương trình chính. Quá trình thực hiện sẽ tuần tự từ trên xuống dưới và từ trái sang phải. Ví dụ ta có chương trình sau #include #include void main() { A1; A2; B1; B2; C1; A3; } Thì máy sẽ thực hiện các câu lệnh theo tuần tự sau: A1,A2,B1,B2,C1,A3 Trước khi chạy chương trình ta nhấn F9 để kiểm tra lỗi nếu phát hiện lỗi các bạn nên đọc thông báo lỗi, kiểm tra xem có bao nhiêu lỗi và tại vị trí nào và khắc phục lỗi, hộp thoại thông báo hiện ra như sau: 32
  33. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái Hình 2.7: Hộp thoại thông báo lỗi khi chạy chương trình Để thực hiện chương trình hãy dùng Ctrl + F9 (Nhấn đồng thời phím Ctrl và phím F9). Một số thông báo lỗi hay gặp khi lập trình bằng TC Thông báo tiếng Anh Ý nghĩa tiếng Việt Undefined symbol ‘ ’ Chưa khai báo tên trong nháy Unable to open include file ’ ’ Không mở được tệp thư viện(có thể viết sai tên thư viện hoặc đường dẫn đến thư viện chưa đúng) Undefined symbol_main in modul Chưa viết chương trình chính hoặc viết tên c0.asm chương trình chính bị sai Compound statement missing } Thiếu dấu đóng ngoặc của khối lệnh Unexpected Thừa dấu đóng ngoặc của khối lệnh Unterminated string or character Chưa có dấu nháy kép kết thúc viết hằng constant chuỗi kí tự Statement missing ; Thiếu dấu chấm phẩy kết thúc câu lệnh Function call missing ) Thiếu đóng ngoặc khi viết lệnh If statement mising ( Lệnh if thiếu dấu mở ngoặc BÀI TẬP THỰC HÀNH Bài tập 1: 33
  34. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái Viết chương trình nhập vào từ bàn phím 2 số nguyên. Tính tổng hai số đó, hiện kết quả ra màn hình. #include #include Void main() { int a,b; clrscr(); printf(“nhap so a =”); scanf(“%d”,&a); printf(“nhap so b =”); scanf(“%d”,&b); printf(“tong hai so %d va %d la: %d”,a,b,a+b); getch(); } Bài tập 2 Viết chương trình nhập vào từ bàn phím 5 số nguyên. Hiện 5 số vừa hập ra màn hình và trung bình cộng 5 số đó. #include #include void main() { int a1,a2,a3,a4,a5; clrscr(); printf("nhap so thu nhat a1= ");scanf("%d",&a1); printf("\nnhap so thu hai a2= ");scanf("%d",&a2); printf("\nnhap so thu 3 a3= ");scanf("%d",&a3); printf("\nnhap so thu 4 a4= ");scanf("%d",&a4); printf("\nnhap so thu 5 a5= ");scanf("%d",&a5); printf("5sovuanhapla:%d %d %d %d %d ",a1,a2,a3,a4,a5); printf("\ntrungbinhcong5sovuanhapla:%f",(a1+a 2+a3+a4+a5)/5.0); getch() ; 34
  35. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái } Bài tập 3 Nhập x từ bàn phím, tính f(x), đưa kết quả ra màn hình. f (x) 3 x 3 tg(x) Nội dung chương trình #include #include #include Void main() { int x; clrscr(); printf(“nhap so x =”); scanf(“%d”,&x); printf(“gia tri bieu thuc f(x) = %f ”,pow((x+3),1.0/3)+sin(x)/cos(x)); getch(); } Bài tập 4: Lập chương trình đọc vào từ bàn phím tọa độ 3 điểm A,B,C. Tính độ dài các đoạn thẳng AB, BC, CA. #include #include #include void main() { int xa,ya,xb,yb,xc,yc,xab,yab,xbc,ybc,xac,yac; float ab,bc,ac; clrscr(); printf("nhap toa do diem A:\n xa= ");scanf("%d",&xa); printf("\n ya= ");scanf("%d",&ya); 35
  36. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái printf("nhap toa do diem B:\n xb= ");scanf("%d",&xb); printf("\n yb= ");scanf("%d",&yb); printf("nhap toa do diem C:\n xc= ");scanf("%d",&xc); printf("\n yc= ");scanf("%d",&yc); xab=xa-xb;yab=ya-yb; xbc=xb-xc;ybc=yb-yc; xac=xa-xc;yac=ya-yc; ab=sqrt(xab*xab+yab*yab); bc=sqrt(xbc*xbc+ybc*ybc); ac=sqrt(xac*xac+yac*yac); printf("\ndo dai doan thang AB la: %f",ab); printf("\ndo dai doan thang BC la: %f",bc); printf("\ndo dai doan thang AC la: %f",ac); getch() ; } 36
  37. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái CHƯƠNG 3: CÁC LỆNH CẤU TRÚC 1. Cấu trúc rẽ nhánh Lệnh rẽ nhánh cho phép chương trình thực hiện các khối lệnh tùy theo từng trường hợp cụ thể. 1.1. Dạng đầy đủ Lệnh rẽ nhánh này cho phép rẽ hai nhánh ứng với trường hợp đúng hoặc sai của biểu thức trọn, cách viết như sau: Cú pháp: if(điều_kiện_lựa_trọn) Hành_động_1; else hành_động_2; Trong đó: - Điều kiện lựa trọn: Là biểu thức logic có giá trị đúng hoặc sai - Hành động 1 và 2: Là các khối lệnh để thực hiện cho trường hợp 1 và 2 tương ứng. Sơ đồ khối: đúng Biểu_thức sai Hành động 1 Hành động 2 Chức năng: Máy sẽ thực hiện hành động 1 nếu điều kiện lựa chọn có giá trị dúng, ngược lại máy sẽ thực hiện hành động 2. Ví dụ: if(x%2 ==0) printf(“ so x là so chan”); else 37
  38. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái printf(“so x la so le”); 1.2. Dạng không đầy đủ Cú pháp câu lệnh if(điều_kiện_lựa_trọn) Hành_động; Trong đó: Điều_kiện_lựa_chọn và Hành_động tương tự như trong câu lênh if ở dạng đầy đủ. Sơ đồ khối Biểu thức Sai Đúng Hành động Nguyên tắc hoạt động: Đầu tiên máy tính toán giá trị của biểu thức. Nếu biểu thức trả về giá trị đúng thì máy tiến hành thực hiện công _việc sau đó tiến hành thực hiện các câu lệnh tiếp theo sau câu lệnh if. Nếu biểu thức trả về giá trị sai thì máy bỏ qua việc thực hiện công_việc trong câu lệnh if mà tiến hành thực hiện ngay các công việc sau câu lệnh if. Chú ý: - Mỗi hành động có thể có một hoặc nhiều lệnh, nếu nhiều lệnh phải có cặp dấu đóng mở ngoặc nhọn { } ví dụ: int a,b; printf("Nhap vao gia tri cua 2 so a, b!"); scanf("%d%d",&a,&b); if (a>b) { printf("\n Gia tri cua a lon hon gia tri cua b"); 38
  39. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái printf("\n a=%d, b=%d",a,b);} 2.Cấu trúc lựa chọn Lệnh switch cho phép rẽ nhiều nhánh với các trường hợp bằng xảy ra khi so sánh biểu thức chọn với các giá trị trong từng trường hợp đó. Cú pháp: switch(biểu_thức_chọn) { case giá_trị_1: hành động 1;[break;] case giá_trị_2: hành động 2;[break;] . case giá_trị_k: hành động k;[break;] default: hành động x; } Trong đó: - Biểu thức trọn: là biểu thức dạng đếm được có thể là số nguyên hoặc ký tự, dùng để so sánh lựa trọn. - Các giá trị 1,2, ,k là các giá trị số nguyên hoặc ký tự để so sánh. - Các hành động 1,2, ,k là các khối lệnh để thực hiện ứng với từng trường hợp trên. - Từ khóa break sau mỗi hành động để kết thúc lệnh sau mỗi trường hợp sẩy ra. Có thể có hoặc không có các từ khóa break này. Chức năng: Máy sẽ so sánh biểu thức trọn lần lượt với các giá trị 1, giá trị 2, giá trị 3, giá trị k. Nếu gặp một giá trị i(i=1,2, ,k) nào đó bằng giá trị biểu thức chọn thì máy sẽ thực hiện các hành động đứng sau giá trị i đó đến khi gặp từ khóa break hoăc hết mọi hành động có trong lệnh switch. Nếu tất cả các trường hợp từ 1 đến k không sẩy ra điều kiện bằng thì mặc định máy sẽ thực hiện hành động X sau từ khóa default. 39
  40. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái Sơ đồ khối: Chú ý: - Lệnh switch có thể không có phần từ khóa default và khối lệnh x, khi đó máy sẽ không làm gì trong trường hợp không xẩy ra điều kiện bằng giữa biểu thức trọn và giá trị tương ứng của case. Ví dụ: switch(t) { case 1: printf(“chu nhat”);break; case 2: printf(“thu 2”);break; 40
  41. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái case 3: printf(“thu 3”);break; case 4: printf(“thu 4”);break; case 5: printf(“thu 5”);break; case 6: printf(“thu 6”);break; case 7: printf(“thu 7”);break; default: printf(“khongla mot ngay trong tuan”); } 3. Cấu trúc lặp Lệnh lặp cho phép máy thực hiện một hành động nào đó lặp lại nhiều lần, mặc dù chúng ta chỉ viết một lần, ngôn ngữ C có các lệnh lặp sau đây. 3.1 Cấu trúc lặp for Cú pháp: for (nhóm lệnh 1;biểu thức 2; nhóm lệnh3) Hành động lặp; Trong đó : - Các nhóm lệnh 1,2,3 là các lệnh điều khiển trong quá trình lặp của for - Hành động lặp là khối lệnh để máy tính thực hiện lặp lại nhiều lần. Sơ đồ khối: Chức năng: 41
  42. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái Máy thực hiện nhóm lệnh 1 duy nhất một lần đầu tiên, sau đó thực hiện tính biểu thức 2 và nếu kêt quả tương ứng với giá trị đúng thì máy thực hiện hành đông lặp, tiếp theo máy thực hiện nhóm lênh 3, và lặp lại kiểm tra biểu thức 2 cho đến khi kết quả tương ứng với giá trị sai. Ví dụ: for(i=1;i =1;i ) printf(“\n i = %d”,i); Sẽ hiện các số nguyên từ 4 xuống 1 ra màn hình. Chú ý: - Trong hành động lặp có thể có một lệnh hoặc nhiều lệnh, nếu có nhiều lệnh thì phải có cặp dấu mở đóng ngoặc nhọn {} để tạo khối - Trong lệnh này chỉ có nhóm lệnh 1 được thực hiện một lần đầu tiên, còn lại các biểu thức 2 và nhóm lệnh 3 và hành động lặp, sẽ thực hiện nhiều lần trong quá trình lặp. - Các nhóm lệnh 1, 3 và biểu thức 2 có thể không xuất hiện trong lênh for nhưng phải có dấu chấm phẩy (;) khi đó nếu không có biểu thức 2 thì máy sẽ xem như điều kiện lặp luôn luôn đúng và sẽ lặp vô tận. - Trong mỗi nhóm lệnh 1 và 3 có thể có nhiều lệnh cách nhau bởi dấu phẩy đối với biểu thức 2 có thể thay đổi bằng một nhóm lệnh và khi đó máy sẽ lấy kết quả của lệnh cuối cùng làm điều kiện lặp hoặc dừng. 3.2 Cấu trúc lặp while, do while  Lệnh While Cú pháp while (điều kiện lặp) Hành động lặp; Trong đó: - Điều kiện lặp : là biểu thức so sánh hoặc biểu thức nguyên 42
  43. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái - Hành động lặp: là các lệnh sẽ được thực hiện hiều lần trong quá trình lặp, nếu có nhiều lệnh phải có dấu { } để đóng khối. Sơ đồ khối đúng Điều kiện Hành động lặp lặp sai Chức năng: Trong khi điều kiện lặp vẫn có giá trị đúng thì máy sẽ lặp thực hiện khối lệnh, và sẽ dừng lại nếu điều kiện sai Ví dụ: x=1; y=10; while(x<y) { printf(“\n x = %d va y = %d”,x,y); x +=2;y ; } Chú ý: Nếu hành động sai ngay từ đầu thì máy sẽ không thực hiện hành động lặp dù chỉ một lần.  Lệnh do while Cú pháp: do{ hành động lặp; }while(điều kiện lặp); Trong đó: hành động lặp và điều kiện lặp giống như lệnh while ở trên 43
  44. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái Sơ đồ khối Hành động lặp đúng Điều kiện sai Chức năng: Máy sẽ thực hiện hành động lặp nhiều lần cho đến khi điều kiện lặp có giá trị sai. Ví dụ: x=1; y=10; do{ printf(“\n x=%d và y=%d”,x,y); x+=2;y ; } while(x<y); Chú ý: - Hành động lặp ít nhất được thưc hiện một lần dù cho điều kiện lặp luôn có giá trị sai vì máy kiểm tra điều kiện lặp sau khi thực hiện hành động lặp, điều này khác với lệnh while. 4. Các lệnh đặc biệt 4.1. Lệnh Break Lệnh break có tác dụng dừng vòng lặp (for ,while, do-while) trong mọi trường hợp. 44
  45. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái 4.2. Lệnh continue Lệnh continue làm cho chương trình bỏ qua phần còn lại của vòng lặp và nhảy sang lần lặp tiếp theo. Những câu lệnh viết sau lệnh continue sẽ không được thực hiện. 4.3. Lệnh goto Lệnh goto: Lệnh này cho phép nhảy vô điều kiện tới bất kỳ điểm nào trong chương trình. Ví dụ: Nhập vào từ bàn phím 1 số bất kì. Kiểm tra số đó là chẵn hay lẻ, hiện kết quả lên màn hình. Sau khi hiện song hỏi người dùng có tiếp tục chương trình không. Nếu có thì lập lại hành động trước đó. Nếu không thì kết thúc chương trình. #include #include void main() { int x; char ch; L: clrscr(); printf("nhap mot so bat ki: "); scanf("%d",&x); if(x%2 = =0) printf(“\nso do la so chan”); else printf(“\nso do la so le”); printf("\ncotieptuc truong trinh ko(c/k)?"); ch=getche(); if(ch =='c') goto L; getch() } 45
  46. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái BÀI TẬP THỰC HÀNH Bài tập 1 Viết chương trình giải bất phương trình bậc nhất: ax + b > 0 #include #include void main() { int a,b; clrscr(); printf("nhap he so a = ");scanf("%d",&a); printf("nhap he so b = ");scanf("%d",&b); if(a = =0) { if(b > 0) printf("\n BPT luon dung voi moi x"); else printf("\n BPT vo nghiem"); } if(a > 0) printf("\nNghiemcuaBPTla:x>%f",-b*1.0/a); if(a #include #include void main() { int a,b,c; float d,x1,x2; 46
  47. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái clrscr(); printf("nhap he so a= ");scanf("%d",&a); printf("nhap he so b= ");scanf("%d",&b); printf("nhap he so c= ");scanf("%d",&c); if(a == 0) printf("\nkhong phai la phuong trinh bac hai "); else { d=b*b-4*a*c; if(d TWO #include #include void main() { int so; 47
  48. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái clrscr(); printf("hay nhap vao mot so:(tu 1->10): "); scanf("%d",&so); switch(so) { case 1:printf("\n so 1 tieng anh la ONE");break; case 2:printf("\n so 2 tieng anh la TWO");break; case 3:printf("\nso 3 tieng anh la THREE");break; case 4:printf("\n so 4 tieng anh la FOUR");break; case 5:printf("\n so 5 tieng anh la FIVE");break; case 6:printf("\n so 6 tieng anh la SIX");break; case 7:printf("\nso 7 tieng anh la SEVEN");break; case 8:printf("\nso 8 tieng anh la EIGHT");break; case 9:printf("\n so 9 tieng anh la NINE");break; case 10:printf("\nso 10 tieng anh la TEN");break; default: printf("\n nhap du lieu sai"); } getch() ; } Bài tập 4 Nhập vào một số n từ bàn phím, hiện lên màn hình các số chẵn và lẻ từ 1 đến n (hiện hết số chẵn rồi mới hiện số lẻ). #include #include void main() { int n,i; clrscr(); printf("Nhap vao so n= ");scanf("%d",&n); printf("\n Cac so chan tu 1 den %d la: ",n); for(i=1; i<=n;i++) 48
  49. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái if(i%2 = =0)printf(" %d",i); printf("\n Cac so le tu 1 den %d la:",n); for(i=1;i #include void main() { int i, n; float s = 0; clrscr(); printf(“\n nhap n= ”); scanf(“%d”,&n); for(i=1;i #include void main() { int i=1,so,dem = 0; 49
  50. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái float tong_duong = 0,tong_am = 0; clrscr(); printf("\nnhap vao mot day cac so nguyen:"); do { printf("\nnhap so thu %d: ",i); scanf("%d",&so); if(so>0)tong_duong = tong_duong+so; else { tong_am = tong_am + so; if(so!=0)dem++; } i++; }while(so!=0); printf("\ntong cac so duong la: %f",tong_duong); if(dem!=0) printf("\nTBC cac so am la: %f",tong_am/dem); getch() ; } Bài tập 7 Lập chương trình tìm các số có 3 chữ số sao cho số đó bằng tổng lập phương các chữ số của nó #include #include #include void main() { int i =100, tram,chuc,donvi; clrscr(); 50
  51. Giáo trình: Lập trình cơ bản Trường Cao đẳng nghề Yên Bái printf("cac so tim duoc la:\n"); do{ tram=i/100; chuc=(i%100)/10; donvi=(i%100)%10; if(i==(pow(tram,3)+pow(chuc,3)+pow(donvi,3))) printf(" %d",i); i++; }while(i<1000); getch(); } 51