Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 22 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
22
Dung lượng
580,26 KB
Nội dung
Bài Những khái k niệm m vềề ngôn ngữ ữC Mục tiiêu: Kết thú úc học nàyy, bạn có thể:: ¾ Phhân biệt kháác Câu lệnh, Chhương trình vàà Phần mềm ¾ Biếết q trrình hình thàn nh C ¾ Nêên dùng C khii saao ¾ Nắắm cấu trúc t chươ ơng trình C ¾ Hiểu rõ khái niệệm giải thuật (algorithms) wchart) ¾ Vẽẽ lưu đồ (flow ¾ Liệệt kê ký hiệu h dùng tronng lưu đồ hiệu Giới th Ngày nay, n khoa họcc máy tính thâm nhập vào lĩnh vựcc Tự động hóóa ngành chủủ chốt điều hư ướng phátt triển giớ ới Bất nggành nghề o cần pphải hiểu biếtt nhiều Cơng nghệ Thơng T tin lập l trình nói chung c Cụ thểể, C ngôn n ngữ lập trình cấp caoo mà lập trình viên cầần phải biết Vì V thế, giáo trình nàày, nghiên cứuu chi tiết cấu trúc ngôn nggữ C Ðầu tiên tìm hiểu khác c kh hái niệm: Lệệnh (Commannd), Chương trình (Prograam) Phần mềm m (Softwaare) 1.1 Ra R lệnh cho máy m tính làm việc Khi mộột máy tính đ khởi độộng, tự động thực thhi số tiếnn trình xu uất kết raa hình Ðiều Ð diễnn nào? Câu trả lời đđơn giản nhhờ vào Hệ điiều hành cài đặt đ bên trongg máy tính Hệ H điều hành (operating sy ystem) xem x phần mềm hệ thống Phần mềềm khởi động máy tính thiết lập l thôngg số ban đầu ttrước traoo quyền cho người n dùng Để làm đượcc điều này, hệệ điều hành phải p cấuu tạo từ ttập hợp chương trình Mọi chương trình cố gắng đưa lời giải cho m hay nhiều tốn nàào đóMọi chư ương trình cố gắng đưa giải pháp choo hay nh hiều vấn đề Mỗi M chương trrình tập hợ ợp câu lện nh giải toán cụ thể Một nhóm n lệnh tạạo thành chương c trình nhóm m chương trình tạo thànnh phần mềm m Để rõ hơn, h chúng taa xem xétt thí dụ : Một người bạn b đến nhà cchúng ta chơi mờii sữa dâuu Anh ta thấyy ngon miệngg muốn xinn công thức lààm Chúng taa hướng dẫn cho c làm m sau : Lấy sữa s Đổ nước ép p dâu vào Trộn hỗn hợ ợp làm m lạnh Bây bạn củaa theeo dẫn này, họ c tạạo sữaa dâu tuyệt vờ ời Chúng ta phân tích t thị (lệệnh) ¾ Lệnh : Lệnh nàyy hồn chỉnh chưa c ? Nó cóó trả lời câu hỏi lấy sữ ữa ‘ở đâu’ ? ¾ Lệnh thứ haai : Một lần nữ ữa, lệnh kkhơng nói rõ nước ép dâu để ‘ở đâu’ May mắn bạn đủ thông minh để hiểu cơng thức pha chế nói trên, nhiều điểm chưa rõ ràng Do muốn phổ biến cách làm, cần bổ sung bước sau : Rót ly sữa vào máy trộn Đổ thêm vào nước dâu ép Ðóng nắp máy trộn Mở điện bắt đầu trộn Dừng máy trộn lại Nếu trộn tắt máy, ngược lại trộn tiếp Khi trộn xong, rót hỗn hợp vào tô đặt vào tủ lạnh Ðể lạnh lúc lấy dùng So sánh hai cách hướng dẫn nêu trên, hướng dẫn thứ hai chắn hồn chỉnh, rõ ràng hơn, đọc hiểu Tương tự, máy tính xử lý liệu dựa vào tập lệnh mà nhận Ðương nhiên thị đưa cho máy vi tính cần phải hồn chỉnh có ý nghĩa rõ ràng Những thị cần phải tuân thủ quy tắc: Tuần tự Có giới hạn Chính xác Mỗi thị tập thị gọi “câu lệnh” tập câu lệnh gọi “chương trình” Chúng ta xét trường hợp chương trình hướng dẫn máy tính cộng hai số Các lệnh chương trình : Nhập số thứ nhớ Nhập số thứ hai nhớ Thực phép cộng số thứ số thứ hai, nhớ kết phép cộng Hiển thị kết Kết thúc Tập lệnh tuân thủ tất quy tắc đề cập Vì vậy, tập lệnh chương trình thực thành cơng việc cộng hai số máy tính Ghi chú: Khả nhớ người biết đến trí nhớ, khả nhớ liệu đưa vào máy tính gọi “bộ nhớ” Máy tính nhận liệu thời điểm làm việc với liệu vào thời điểm khác, nghĩa máy tính ghi liệu vào nhớ sau đọc để truy xuất giá trị liệu làm việc với chúng Khi khối lượng công việc giao cho máy tính ngày nên nhiều phức tạp tất câu lệnh khơng thể đưa vào chương trình, chúng cần chia thành số chương trình nhỏ Tất chương trình cuối tích hợp lại để chúng làm việc với Một tập hợp chương trình gọi phần mềm Lập trình C Mối quan q hệ giữaa ba khái niệệm câu lệnhh, chương trìình phần mềm có thểể biểu diễn sơ s đồ hình h 1.1: Software Program P Program Commandss Command ds Commandss Hình 1.1: Phần mềềm, chương trình t câu lệnh 1.2 N Ngơn ngữ C Vào đầầu năm m 70 phịng g thí nghiệm Bell, B Dennis Ritchie phhát triển ngônn ngữ C C đư ược sử dụng lầần đầu m hệ thống cài đặt hệ điiều hành UN NIX C có nguuồn gốc từ nggơn ngữ BCP PL Martin n Richards phát triển BCPL sau đđược Ken Thompson phát triển thành ngôn n ngữ B, đ người khởi k thủy C C Trong BCPL v B không hỗ h trợ kiểu ữ liệu, C đ có nhiều kkiểu liệu khác k Những N kiểu ữ liệu gồm g : kiểu ký tự (characterr), kiểu số nguuyên (intergerr) kiểu số thực t (float) C liên kết chặt chẽ với v hệ thống UNIX nhưngg khơng bị tróói buộc vào mááy tính hay hệệ điều hành n C hiệuu để viết c chương trrình thuộc nhiiều lĩnnh vực khác n C cũngg dùng để đ lập trình hệ h thống Mộtt chương trìnhh hệ thống cóó ý nghĩa liênn quan đến hệệ điều hành c máy tínhh hay tiện t ích hỗ trợ ợ Hệ điềuu hành (OS), trình thơng dịch d (Interpreeters), trình sooạn thảo (Ed ditors), chươnng trình Hợp Ngữ (Assem mbly) chương trình hệ h thống Hệệ điều hành UNIX U ph hát triển dựa vào v C C đanng sử dụụng rộng rãi tính hiệuu linh hoạt Trình biên b dịch (compiler) C có sẵn cho hầu hết máy tính Mã lệnnh viết C máy đượ ợc biên dịch v chạy máy m khác chỉỉ cần thay đổii kkhơng thay đổổi Trìnhh biên dịch C dịch nhanh v cho mã đối tượng khhông lỗi C thực t thi nhanh hợp ngữ (A Assembly) Lậập trình viên có c thể tạo bảo trì thư viện hàm mà m chúng đ tái sử dụ ụng cho chươ ơng trình khácc Do đó, nhữ ững dự án lớnn quản lý dễ dàng d mà tốn rấất công sức ữ bậc trung 1.2.1 C – Ngôn ngữ C đượcc hiểu ngô ôn ngữ bậc truung nóó kết hợp nhữ ững yếu tố củủa ngô ôn ngữ cấp caao chức củ hợp ngữ (nngôn ngữ cấp thấp) C cho phép thao tácc thành phần mááy tính bits, b bytes, địaa chỉ… Hơn nữa, mã C rấất dễ di chuyển nghĩa phần p mềm viếết cho loại máy tính có c thể chạy t loại máy tính kh hác Mặc dù C có năm kiểểu liệu bản, khơng đư ược xem nganng hàng với nggôn ngữ cao cấp mặt kiiểu liệu C cho phép chhuyển kiểu ữ liệu Nó choo phép thao táác trực tiếp trrên bits, bytess, word conn trỏ (pointerr) Vì vậy, dùng cho lập trình mức m hệ thống 1.2.2 C - Ngôn ngữ ữ cấu trúc Thuật ngữ ngôn ngữ cấu trúc khối (block-structured language) không áp dụng với C Ngôn ngữ cấu trúc khối cho phép thủ tục (procedures) hay hàm (functions) khai báo bên thủ tục hàm khác C không cho phép việc tạo hàm hàm nên khơng phải ngơn ngữ cấu trúc khối Tuy nhiên, xem ngơn ngữ cấu trúc có nhiều điểm giống với ngơn ngữ cấu trúc ALGOL, Pascal số ngôn ngữ tương tự khác C cho phép có tổng hợp mã lệnh liệu Ðiều đặc điểm riêng biệt ngơn ngữ cấu trúc Nó liên quan đến khả tập hợp ẩn dấu tất thơng tin lệnh khỏi phần cịn lại chương trình để dùng cho tác vụ riêng biệt Ðiều thực qua việc dùng hàm hay khối mã lệnh (Code Block) Các hàm dùng để định nghĩa hay tách rời tác vụ yêu cầu chương trình Ðiều cho phép chương trình hoạt động đơn vị thống Khối mã lệnh nhóm câu lệnh chương trình nối kết với theo trật tự logic xem đơn vị thống Một khối mã lệnh tạo tập hợp nhiều câu lệnh dấu ngoặc mở đóng xoắn đây: { i = i + 1; } while (i < 40); Ngôn ngữ cấu trúc hỗ trợ nhiều cấu trúc dùng cho vòng lặp (loop) while, do-while, for Những cấu trúc lặp giúp lập trình viên điều khiển hướng thực thi chương trình 1.3 Cấu trúc chương trình C C có số từ khóa, xác 32 Những từ khóa kết hợp với cú pháp C hình thành ngơn ngữ C Nhưng nhiều trình biên dịch cho C thêm vào từ khóa dùng cho việc tổ chức nhớ giai đoạn tiền xử lý định Vài quy tắc lập trình C sau : - Tất từ khóa chữ thường (khơng in hoa) Ðoạn mã chương trình C có phân biệt chữ thường chữ hoa Ví dụ : while khác với DO WHILE Từ khóa khơng thể dùng cho mục đích khác đặt tên biến (variable name) tên hàm (function name) Hàm main() hàm gọi đến chương trình bắt đầu chạy (chúng ta xem xét kỹ phần sau) Xem xét đoạn mã chương trình: main () { /* This is a sample program */ int i = 0; i = i + 1; } Lập trình C Ghi chú: c Những khía k cạnh khácc chư ương trình C đ xem xét qua đoạn mã t Ðoạn mãã xem đoạn mã m mẫu, dùng lạii suốt ph hần cịn lại củaa giáo trình nàày 1.3.1 Ðịnh Ð nghĩa Hàm H Chươn ng trình C đư ược chia thànnh đơn vị v gọi hàm m Ðoạn mã m mẫu có d mộtt hàm main() Hệ điều hàn nh trao quyền q điều kkhiển cho hàm m main() chương trình C đượcc thực thi Tên n hàm ln đ theo sau cặp dấu nggoặc đơn () Trong T dấu ngooặc đơn có th hể có hay khơnng có tham số (paraameters) 1.3.2 Dấu D phân cách (Delimiters) Sau địn nh nghĩa hàm m dấu ng goặc xoắn mở { Nó thơngg báo điểm bắt đầu hààm Tương tự ự, dấu ngoặc xoắn đóng } sau câu lệnh h cuối hhàm điiểm kết thúc hàm Dấấu ngoặc xoắắn mở đánh dấu d điểm bắt đầu đ khối mã lệnhh, dấu ngoặc xoắn x đóng đáánh dấu điểm m kết thúc củaa khối mã lệnnh Trong đoạn đ mã mẫu có câu lệnhh dấu ngoặc n xoắn Hơn nữ ữa, hààm, dấu ngoặcc xoắn dùng d để phân định đđoạn mã trongg trường hợp dùng cho cấuu trúc vòng lặặp lệnh điềều kiện 1.3.3 Dấu D kết thúcc câu lệnh (Terminator) Dòng int i = 0; đoạnn mã mẫu m câu lệnh h (statement) Một câu lệnhh C g dịng dùng pphím Enter, khoảng k trắng dùng kết thúúc dấu chấm phẩy (;)) C khơng hiểểu việc xuống phím spacebar s hay khoảng cách dùngg phím tab Có C thể có nhiều câu c lệnh hààng mỗ ỗi câu lệnh phhải kết thúc dấấu chấm phẩyy Một câu lệnnh không đượ ợc kết thúc bằằng dấu chấm m phẩy xem x câu lệnh sai 1.3.4 Dòng D thíích (Commen nt) Nhữngg thích th hường viết v để mô tảả công việc củ lệnh đđặc biệt, mộtt hàm hay tồàn chương g trình Trình h biên dịch khơng dịch chúng c Trongg C, thíchh bắt đầu bằngg ký hiệu /* v kết thúc bằằng */ Trườn ng hợp thhích có nhiềuu dịng, ta phải ý ký hhiệu kết thúc (*/), thiếếu ký hiệu nàày, toàn ch hương trình sẽẽ bị coi l thíích Trong đooạn mã mẫu dịng d chữ "Thiis is a samplee program" làà dịng thhích Trong trư ường hợp chúú thích trêên dịng ta dùnng // Ví dụ: int a = 0; // Biến ‘a’ khai báo m kiểu số nguyên (intergger) 1.3.5 Thư T viện C (Library) Tất trình biên dịch C chứa m thư viện hàm h chuẩn dù ùng cho nhữnng tác vụ chunng Một vài b cài đặt C đặt đ thư viện t tập p tin (file) lớnn đaa số cịn lại chhứa nhiều tập tinn nhỏ Khi lậpp trình, nhữngg hàm chứa c thư viện dùng chho nhiều loại tác vụ khác nnhau Một hààm (được viếết lậpp trình viên) đặt thư viện đượ ợc dùng nhiều n chương g trình đư ược yêu cầu Vài V trình biênn dịch cho phép hàm thêm vào thư viện chuẩn số khác lại yêu cầu c tạo thhư viện riêng 1.4 B Biên dịch thực thi mộtt chương trìn nh (Compilin ng and Runn ning) Nhữngg bước khác n việcc dịch chhương trình C từ mã nguồồn thành mã thực t thi đượcc thực nhhư sau : ¾ Soạn thảo/Xử lý l từ Ta dùng trình xử lý từ (word processor) hay trình soạn thảo (editor) để viết mã nguồn (source code) C chấp nhận loại mã nguồn viết dạng tập tin văn chuẩn Vài trình biên dịch (compiler) cung cấp mơi trường lập trình (xem phụ lục) gồm trình soạn thảo ¾ Mã nguồn Ðây đoạn văn chương trình mà người dùng đọc Nó đầu vào trình biên dịch C ¾ Bộ tiền xử lý C Từ mã nguồn, bước chuyển qua tiền xử lý C Bộ tiền xử lý xem xét câu lệnh bắt đầu dấu # Những câu lệnh gọi thị tiền biên dịch (directives) Điều giải thích sau Chỉ thị tiền biên dịch thường đặt nơi bắt đầu chương trình đặt nơi khác Chỉ thị tiền biên dịch tên ngắn gọn gán cho tập mã lệnh ¾ Mã nguồn mở rộng C Bộ tiền xử lý C khai triển thị tiền biên dịch đưa kết Ðây gọi mã nguồn C mở rộng, sau chuyển cho trình biên dịch C ¾ Trình biên dịch C (Compiler) Trình biên dịch C dịch mã nguồn mở rộng thành ngơn ngữ máy để máy tính hiểu Nếu chương trình q lớn chia thành tập tin riêng biệt tập tin biên dịch riêng rẽ Ðiều giúp ích mà tập tin bị thay đổi, toàn chương trình khơng phải biên dịch lại ¾ Bộ liên kết (Linker) Mã đối tượng với thủ tục hỗ trợ thư viện chuẩn hàm dịch riêng lẻ khác kết nối lại Bộ liên kết mã thực thi Lập trình C ¾ Bộộ nạp (Loadeer) Mãã thực thi đượ ợc thi hành bở ởi nạp hệ thống Tiếến trình đ mơ tả qu ua lưu đồ 1.2 sau : # includee file Soource file Tập tin thê êm vào Chươ ơng trình gốc Library File Coompiler Thư việ ện Trình biên dịch Other Useergenerateed Object Fiile Ob bject File Các tập tin thực t tthi khác người n dùng Tập tin đối tượng L Linker Bộ ộ liên kết Execcutable File Tập tin thực thi Hình 1.2: Biên dịch h thực thi chương trình 1.5 Các bước lập trình giảii vấn đề đ Chúng ta thường gặặp phải nhữngg toán Để giải n toáán đó, cần hiểu chúng c trước r sau mớ ới hoạch định bước cầnn làm Giả sử muuốn từ phòòng học đến quán ăn tự phục p vụ tầnng hầm Ðể thực việcc cần hiểu n tìm bước giải trước thực thi ccác bước đó: BƯỚC C : Rời phònng BƯỚC C : Ðến cầu thang BƯỚC C : Xuống tầầng hầm BƯỚC C : Ði tiếp đến quán ăn tự ự phục vụ Thủ tục liệt kê tập hợp bước b thực hiệện xác định đ rõ ràng cho c việc giải vấn đề Một tập hợp p bước nhhư gọi giải thuật (Allgorithm hay gọi vắn tắt làà algo ) Một giiải thuật (cònn gọi thuật tốn) định ngghĩa m thủ tục, côông thức hayy cách giải quuyết vấn đề Nó N gồm tậập hợp bư ước giúp đạt đ lời giải Qua phhần trên, chúnng ta thấy rõ ràng để giải m tốn, trước tiên ta phải hiểu bàii tốn đó, chúng taa cần tập hợpp tất thơng tin liiên quan tới nnó Bước kế xử lý nnhững mẩu thhơng tin Cuối C cùng, chúúng ta cho lời giải b toán Giải thuật có tập hợp bước liệt kê dạng ngôn ngữ đơn giản Rất bước hai người khác viết tương tự ngôn ngữ dùng diễn tả bước khác Do đó, cần thiết có phương pháp chuẩn mực cho việc viết giải thuật để người dễ dàng hiểu Chính , giải thuật viết cách dùng hai phương pháp chuẩn mã giả (pseudo code) lưu đồ (flowchart) Cả hai phương pháp dùng để xác định tập hợp bước cần thi hành để có lời giải Liên hệ tới vấn đề đến quán ăn tự phục vụ trên, vạch kế hoạch (thuật tốn) để đến đích Tuy nhiên, để đến nơi, phải cần thi hành bước thật Tương tự, mã giả lưu đồ đưa bước cần làm Lập trình viên phải viết mã cho việc thực thi bước qua việc dùng ngơn ngữ Chi tiết về mã giả lưu đồ trình bày 1.5.1 Mã giả (pseudo code) Nhớ mã giả mã thật Mã giả sử dụng tập hợp từ tương tự mã thật khơng thể biên dịch thực thi mã thật Chúng ta xem xét mã giả qua ví dụ sau.Ví dụ hiển thị câu 'Hello World!' Ví dụ 1: BEGIN DISPLAY 'Hello World!' END Qua ví dụ trên, đoạn mã giả phải bắt đầu với từ BEGIN START, kết thúc với từ END hay STOP Ðể hiển thị giá trị đó, từ DISPLAY WRITE dùng Khi giá trị hiển thị giá trị (không đổi), trường hợp (Hello World), đặt bên dấu nháy Tương tự, để nhận giá trị người dùng, từ INPUT hay READ dùng Ðể hiểu điều rõ hơn, xem xét ví dụ 2, ví dụ ta nhập hai số máy hiển thị tổng hai số Ví dụ 2: BEGIN INPUT A, B DISPLAY A + B END Trong đoạn mã giả này, người dùng nhập vào hai giá trị, hai giá trị lưu nhớ truy xuất A B theo thứ tự Những vị trí đặt tên nhớ gọi biến Chi tiết biến giải thích phần sau chương Bước đoạn mã giả hiển thị tổng hai giá trị biến A B Tuy nhiên, đoạn mã trên, ta bổ sung để lưu tổng hai biến biến thứ ba hiển thị giá trị biến ví dụ sau Ví dụ 3: BEGIN INPUT A, B Lập trình C C = A + B DI ISPLAY C END Một tậập hợp thị hay c bước tronng mã giả gọi chuung cấấu trúc Có baa loại cấu trúúc : tuần tự, chhọn lựa lặặp lại Trong đđoạn mã giả ta t viết trên,chúng ta dùnng cấu trúc tuầần tự Chúng gọi nhhư nhữ ững thị đư ược thi hành tuần tự, nnày sau khác k bắt đầu đ từ điểm đầu đ tiên Hai loại l cấu trúc c lại đượ ợc đề cập tron ng chươ ơng sau 1.5.2 Lưu đồ (Flowcharts) Một lư ưu đồ hình ảnh nh hoạ cho ggiải thuật Nó vẽ biểu đđồ luồng thị hay n hoạt độộng tiến trình Mỗi M hoạt độngg đượ ợc biểu diễn qqua ký hiệu Ðể hiểểu điều rõ õ hơn, chúngg ta xem lưu đđồ hình h 1.3 dùng hiiển thị thông điệp truyền thống t ‘Hello World!’ S TA R T DIS P L AY 'H e ll o W o rld r !' STO P Hìn nh 1.3: Lưu đồ đ đ mã giả l bắt đầầu với từ BE EGIN ST TART, kếtt thúc với từ END Lưu đồồ giống với đoạn hay ST TOP Tương tự, t từ khóa DISPLAY D đư ược dùng để hiển h thị giá trrị đếnn người dùng Tuy nhiên, đây, từ khóa nằằm nhữnng ký hiệu Những N ký hiệuu khác mang m ý nghĩa n tương ứng ứ trìn nh bày bảngg Hình 11.4 Hình 1.4: Ký hiệu tron ng lưu đồ Ta xét lưu đồ cho ví dụ Hình 1.5 Ký hiệu bắt đầu: Dùng để bắt đầu lưu đồ Ký hiệu xuất/nhập: Dùng để nhập hai số A, B Ký hiệu xử lý: Dùng để cộng hai số Ký hiệu xuất/nhập: Dùng để hiển thị tổng C Ký hiệu kết thúc: Dùng kết thúc lưu đồ Hình 1.5: Lưu đồ cộng hai số Tại bước mà giá trị hai biến cộng gán cho biến thứ ba xem xử lý trình bày hình chữ nhật Lưu đồ mà xét đơn giản.Thông thường, lưu đồ trải rộng nhiều trang giấy Trong trường hợp thế, biểu tượng nối dùng để điểm nối hai phần chương trình nằm hai trang Vịng tròn nối kết phải chứa ký tự số hình 1.6 Như thế, tạo liên kết giưa hai lưu đồ chưa hồn chỉnh Hình 1.6: Bộ nối Bởi lưu đồ sử dụng để viết chương trình, chúng cần trình bày cho lập trình viên hiểu chúng dễ dàng Nếu có ba lập trình viên dùng ba ngơn ngữ lập trình khác để viết mã, toán họ cần giải phải Trong trường hợp này, mã giả đưa cho lập trình viên giống ngơn ngữ lập trình họ dùng tất nhiên cú pháp khác Nhưng kết cuối Do đó, cần thiết phải hiểu rõ toán mã giả phải viết cẩn thận Chúng ta kết luận mã giả độc lập với ngơn ngữ lập trình Vài điểm cần thiết khác phải ý vẽ lưu đồ : ¬ Lúc đầu tập trung vào khía cạnh logic tốn vẽ luồng xử lý lưu đồ ¬ Một lưu đồ phải có điểm bắt đầu (START) điểm kết thúc (STOP) 10 Lập trình C ¬ Khhơng cần thiếtt phải mơ tả từ ừng bước củaa chương trình h lưu đồồ mà cần bước chínnh có ý nghĩa cần thiết t Chúng ta tuân theo cấu trrúc tuần tự, mà m luuồng thực thii chương trìnhh qua tất c thị ch hỉ thị n Chúng ta ccó thể bắt gặp p điều kiệện chươ ơng trình, dựaa điềều kiện hư ướng thực thii chương trình rẽ nhánh Nhhững cấu trúc cho việc rẽ nhánh n cấu trúc chọnn lựa, cấu trúc điều kiện hay rẽ nhánh Những cấu trrúc đề cập chi tiếết sau đây: ¾ Cấấu trúc IF (N Nếu) Cấấu trúc chọn lựa l cấu trúc ‘IF’’ Ðể hiểu cấuu trúc chúúng ta xeem xét ví dụ khách hàng giảm giiá mua trrên 100 đồngg Mỗi lần kháách hàng trả tiền, t đoạạn mã chư ương trình kiểm tra xem m lượng tiền ttrả có q 1000 đồng khơngg? Nếu giảm m giá 10% tổng sốố tiền trả, ngư ược lại khơơng giảm giá Ðiều minh m họa sơ lược l qua mã ggiả sau: IF khách hààng mua 100 giảm giá 10% Cấấu trúc dùng câu lệệnh IF Hìnnh thức chung cho câu lện nh IF (cấu trúcc IF) sau: IF Điều kiệnn Cácc câu lệnh P Phần thân củaa cấu trúc IF END IF ột cấu trúc ‘IIF’ bắt đầu làà IF theo sau điều kiện Nếu điều kiiện (tthỏa điều kiệnn) Mộ quyyền điều khiểển chhuyển đến cácc câu lệnh troong phần thânn để thực thi Nếu điều kiệện sai (khhông thỏa điềều kiện), nhữnng câu lệnh phần thân khhông thự ực thi chươ ơng trình nhảyy đến câu u lệnh sau EN ND IF (chấm dứt d cấu trúc IF) I Cấu trúc IF I phải kết thúc bằngg END IF Chhúng ta xem ví v dụ cho cấấu trúc IF Ví dụ 4: Yêêu cầu: Kiểm xem số l chẵn hay khhông hiển thị thông điệpp báo đúnng số chẵn, ta xử x lý sauu : BE EGIN INPUT num m r = num MO OD IF r=0 Dissplay “Numbeer is even” END IF EN ND Ðooạn mã nhập n số từ người dùngg, thực tooán tử MOD (lấy phần dư ư) kiểm traa xem phần dư có bằngg hay khôngg Nếu hiển thị thônng điệp, ngượ ợc lại thoát raa Lư ưu đồ cho đoạạn mã giả trênn thể quaa hình 1.7 S TAR T IN P U T n u m r = n u m M OD r =0 No Yes D IS P L AY "N u m b e r i s E ve n " S TOP Hình 1.7 : Kiểm tra số chẵn Cú pháp lệnh IF C sau: if (Điều kiện) { Câu lệnh } ¾ Cấu trúc IF…ELSE Trong ví dụ 4, hay ta cho thông điệp báo số khơng số chẵn tức số lẻ thay Ðể làm điều ta thêm câu lệnh IF khác để kiểm tra xem trường hợp số khơng chia hết cho Ta xem ví dụ Example 5: BEGIN INPUT num r = num MOD IF r=0 DISPLAY “Even number” END IF IF r0 DISPLAY “Odd number” END IF END Ngơn ngữ lập trình cung cấp cho cấu trúc IF…ELSE Dùng cấu trúc hiệu tốt để giải vấn đề Cấu trúc IF …ELSE giúp lập trình viên làm phép so sánh sau thực thi bước tùy theo kết phép so sánh True (đúng) hay False (sai) Cấu trúc chung câu lệnh IF…ELSE sau: IF Điều kiện 12 Lập trình C Câu u lệnh ELSE Câu u lệnh END IF Cúú pháp cấuu trúc if…else C sau: if(Điều kiệnn) { Câu u lệnh } else { Câu u lệnh } t (True), câu c lệnh đư ược thực thi Ngược N lại, câuu lệnh thực thi Không K Nếếu điều kiện thỏa baoo hai đ thực thi lúc Vì vậy, đoạn mãã tối ưu ccho ví dụ tìm m số chẵn đượcc viết ví dụ Ví dụ 6: BE EGIN INPUT num m r = num MO OD IF r = DIS SPLAY “Even n Number” ELSE DIS SPLAY “Oddd Number” END IF EN ND Lư ưu đồ cho đoạạn mã giả trênn thể quaa Hình 1.8 S TA R T IN P U T n u m r = n um M O D Yes No r = D IS P L AY "N u m b e r i s E ve n " D IS PL A Y " N u m b er is O d d " S TOP Hình 1.8: Số chẵn hay số lẻ ¾ Ða điều kiện sử dụng AND/OR Cấu trúc IF…ELSE làm giảm độ phức tạp, gia tăng tính hữu hiệu Ở mức độ đó, nâng cao tính dễ đọc mã Các thí dụ IF đề cập đến thời điểm đơn giản Chúng có điều kiện IF để đánh giá Thỉnh thoảng phải kiểm tra cho điều kiện, thí dụ: Ðể xem xét nhà cung cấp có đạt MVS (nhà cung cấp quan trọng nhất) không?, công ty kiểm tra xem nhà cung cấp có làm việc với cơng ty 10 năm khơng? có tổng doanh thu 5,000,000 khơng? Hai điều kiện thỏa mãn nhà cung cấp xem MVS Do tốn tử AND dùng câu lệnh ‘IF’ ví dụ sau: Ví dụ 7: BEGIN INPUT yearsWithUs INPUT bizDone IF yearsWithUs >= 10 AND bizDone >=5000000 DISPLAY “Classified as an MVS” ELSE DISPLAY “A little more effort required!” END IF END Ví dụ đơn giản, có điều kiện Ở tình thực tế, có nhiều điều kiện cần kiểm tra Nhưng dễ dàng dùng toán tử AND để nối điều kiện lại giống ta làm Bây giờ, giả sử cơng ty ví dụ đổi quy định, họ định đưa điều kiện dễ dàng Như : Hoặc làm việc với cơng ty 10 năm có doanh số (giá trị thương mại,giao dịch) 14 Lập trình C từ 5,000,000 trở lên Vì vâỵ,, ta thay toán t tử AND toán tử OR Nhớ rằnng toán tử OR R cho giá trị True (đđúng) chỉỉ cần điềuu kiện Truee ¾ Cấấu trúc IF lồn ng Mộ ột cách khác để đ thực ví dụ sử dụng cấu trúcc IF lồng nhaau Cấu trúc IF F lồng l câu lệnnh IF nằm m trongg câu lệnh IF khác Chúngg ta viết lại víí dụ sử dụnng cấu trúc IF F lồng ví dụ n sau: Víí dụ 8: BE EGIN INPUT ye earsWithUs s INPUT bi izDone IF years sWithUs >= = 10 IF bizDone >=5 5000000 DIS SPLAY “Classified as an MVS S” ELS SE DISPLAY “A lit ttle more effort required!” ” END IF ELSE DISPLAY “A lit ttle more effort required!” ” END IF EN ND Ðooạn mã thhực cùngg nhiệm vụ nhhưng khơng có c ‘AND’ Tuuy nhiên, chúúng ta có lệnh IF (kiểm tra xem m bizDone lớ ớn b 5,000,00 00 hay không??) bên lệnh l IF khác (kiểm ( traa xem yearsW WithUs lớn hơ ơn 10 hay không g?) Câu lệnhh IF kiểm tra điềuu kiện thờ ời gian nhà cuung cấp làm việc v với cơngg ty có lớn hơ ơn 10 năm hayy không Nếuu 10 năm m (kết trả Faalse), kh hông công nhhận nhà cung cấp M MVS; Nếu thỏỏa điều kiện n xét câu u lệnh IF thứ hai, kiểểm tra tới điềều kiện bizDoone lớn hooặc 5,00 00,000 hay khhông Nếếu thỏa điều kiện k (kết trả t Truee) lúc nhà cung cấp đượ ợc xem mộtt MVS, khơng k thơng điiệp báo đ khơng m MVS Lư ưu đồ cho mã giả ví dụụ trình bày qua hìnhh 1.9 START INPUT yearsWithUs INPUT bizDone Yes No yearsWithUs >= 10 Yes No DISPLAY "A little more effort required!" bzDone > 5000000 DISPLAY "Classified as an MVS" DISPLAY "A little more effort required!" STOP Hình 1.9: Câu lệnh IF lồng Mã giả trường hợp cấu trúc IF lồng ví dụ chưa hiệu Câu lệnh thông báo không thỏa điều kiện MVS phải viết hai lần Hơn lập trình viên phải viết thêm mã nên trình biên dịch phải xét hai điều kiện lệnh IF, lãng phí thời gian Ngược lại, dùng tốn tử AND xét tới điều kiện câu lệnh IF lần Ðiều khơng có nghĩa cấu trúc IF lồng nói chung khơng hiệu Nó tùy theo tình cụ thể mà ta dùng Có dùng tốn tử AND hiệu hơn, có dùng cấu trúc IF lồng hiệu Chúng ta xét ví dụ mà dùng cấu trúc IF lồng hiệu dùng toán tử AND Một công ty định phần lương cho công nhân dựa tiêu chuẩn bảng 1.1 Grade E E M M Experience 3 Salary 2000 3000 3000 4000 Bảng 1.1: Lương Vì vậy, cơng nhân xếp loại E có hai năm kinh nghiệm lương 2000, ba năm kinh nghiệm lương 3000 Mã giả dùng toán tử AND cho vấn đề ví dụ 9: 16 Lập trình C Ví dụ 9: BE EGIN INPUT gr rade INPUT ex xp IF grade e =”E” AND D exp =2 salary=2000 ELSE IF grade = “E” ” AND exp= =3 sal lary=3000 END IF END IF IF grade e =”M” AND D exp =2 salary=3000 ELSE IF grade = “M” ” AND exp= =3 sal lary=4000 END IF END IF EN ND Cââu lệnh IF đầuu tiên kiểm traa xếp loại kkinh nghiệm công nhâân Nếu xếp looại E kinnh nghhiệm năm m lương làà 2000, xếp lo oại E, ccó năm kinhh nghiệm lươ ơng 3000 Nếếu điều kiện k khơng thỏ ỏa câu lệnnh IF thứ hai c tương tự ự kiểm điềuu kiện xếp loạại kin nh nghiệm cho công nhân để đ phân định lương Giả sử xếp loại công g nhân E vvà có hai năm m kinh nghiệm m Lương ngư ười đượcc tính theeo mệnh đề IF F Ph hần lại củủa câu lệnh IF F thứ đượ ợc bỏ qua Tuuy nhiên, điềuu kiện mệnh đề IF thứ hai đư ược xét tấtt nhiên khơơng thỏa, kiểm tra t mệnh đề ELSE E củaa câu lệnh IF F thứ kếtt False Ðây q bước thừa mà m chương trìnnh xétt qua Trong ví dụ, ta chỉỉ có hai câu llệnh IF v ta xét có c hai loại làà E M Nếếu có khoảng 15 loại t tốn thờ ời gian tài nngun máy tính t cho việc tính tốn thừaa lươnng xácc định câu u lệnh IF t Ðây dứt khốt khơng phải mã ngguồn hiệu Bâây t xét mã giả dùng cấu trúúc IF lồng nhaau sử ửa đổi ví v dụ 10 Ví dụ 10: BEGIN INPUT grade INPUT exp IF grade=”E” IF exp=2 salary = 2000 ELSE IF exp=3 salary=3000 END IF END IF ELSE IF grade=”M” IF exp=2 Salary=3000 ELSE IF exp=3 Salary=4000 END IF END IF END IF END IF END Ðoạn mã nhìn khó đọc Tuy nhiên, đem lại hiệu suất cao Chúng ta xét ví dụ Nếu công nhân xếp loại E kinh nghiệm năm lương tính 2000 bước đầu câu lệnh IF Sau đó, chương trình khơng cần thực thi thêm lệnh ELSE Do đó, khơng có lãng phí đoạn mã mang lại hiệu suất cho chương trình chương trình chạy nhanh ¾ Vịng lặp Một chương trình máy tính tập câu lệnh thực Nó lặp lại số bước với số lần lặp xác định theo yêu cầu toán đến số điều kiện định thỏa Chẳng hạn, ta muốn viết chương trình hiển thị tên ta lần Ta xét mã giả Ví dụ 11: BEGIN DISPLAY DISPLAY DISPLAY DISPLAY DISPLAY END “Scooby” “Scooby” “Scooby” “Scooby” “Scooby” Nếu để hiển thị tên ta 1000 lần, ta viết DISPLAY “Scooby” 1000 lần tốn cơng sức Ta tinh giản vấn đề cách viết câu lệnh DISPLAY lần, sau đặt cấu trúc vịng lặp, thị máy tính thực lặp 1000 lần cho câu lệnh 18 Lập trình C Taa xem mã giả cấu trúc vịng v lặp tronng ví dụ 12 n sau: Ví dụ 12: Do o loop 100 00 times DISPLAY “Scooby” En nd loop Nhhững câu lệnhh nằm Do D loop Ennd loop (trong g ví dụ làà lệnh DISPLA AY) thự ực thi 1000 lần Nhữnng câu lệnh với c lệnh loop l end lloop gọ ọi cấu trúc vòng lặpp Cấu trúc vò òng lặp giúp lập l trình viênn phát triển thhành chhương trình lớ ớn ccó thể yêuu cầu thực thii hàng ngàn câu c lệnh Do lloop…end loop dạnng thức tổng qt q vịngg lặp Ví dụ sau cácch viết khác n dùùng cấu trúc vịng v lặp Ví dụ 13: BE EGIN cnt=0 WHILE (c cnt < 1000 0) DO DISPLAY “Scoob by” cnt=cnt+1 END DO EN ND Lư ưu đồ cho mã giả ví dụ d 13 vẽ v Hình 1.10 S TA R T cn t = ccn t < 0 Yes N No D I S P L A Y " S c o ob y " ccn t = c n t + S TOP Hình 1.100: Cấu trúc vịng v lặp 10 khơng có ký k hiệu đặc bbiệt để biểểu diễn cho vòòng lặp Chúnng ta dùng kýý hiệu Chú ý Hình 1.1 phân nhánh n để kiểm m tra điều kiiện quản lý hướng của chư ương trình bằn ng dịng chảy (flow lines) Tóm tắt học ¾ Phần mềm tập hợp chương trình ¾ Một chương trình tập hợp thị (lệnh) ¾ Những đoạn mã lệnh sở cho chương trình C ¾ Ngơn ngữ C có 32 từ khóa ¾ Các bước cần thiết để giải toán nghiên cứu chi tiết toán đó, thu thập thơng tin thích hợp, xử lý thơng tin đến kết ¾ Một giải thuật danh sách rút gọn logic bước để giải vấn đề Giải thuật viết mã giả lưu đồ ¾ Mã giả trình bày giải thuật ngơn ngữ tương tự mã thật ¾ Một lưu đồ trình bày dạng biểu đồ giải thuật ¾ Lưu đồ chia nhỏ thành nhiều phần đầu nối dùng cho việc nối chúng lại nơi chúng bị chia cắt ¾ Một chương trình gặp điều kiện dựa theo việc thực thi phân theo nhánh rẽ khác Cấu trúc lệnh gọi cấu trúc chọn lựa, điều kiện hay cấu trúc rẽ nhánh ¾ Cấu trúc chọn cấu trúc “IF” ¾ Cấu trúc IF …ELSE giúp lập trình viên làm so sánh đơn sau thực thi bước tùy theo kết phép so sánh True (đúng) hay False (sai) ¾ Cấu trúc IF lồng câu lệnh IF nằm câu lệnh IF khác ¾ Thông thường ta cần lặp lại số bước với số lần lặp xác định theo yêu cầu toán đến số điều kiện định thỏa Những cấu trúc giúp làm việc gọi cấu trúc vịng lặp 20 Lập trình C ... dùng cho lập trình m? ?c m hệ thống 1. 2.2 C - Ngơn ngữ ữ c? ??u tr? ?c Thuật ngữ ngôn ngữ c? ??u tr? ?c khối (block-structured language) không áp dụng với C Ngôn ngữ c? ??u tr? ?c khối cho phép thủ t? ?c (procedures)... phòòng h? ?c đến quán ăn tự ph? ?c p vụ tầnng hầm Ðể th? ?c việcc c? ??n hiểu n tìm bư? ?c giải trư? ?c th? ?c thi cc? ?c bư? ?c đó: BƯ? ?C C : Rời phònng BƯ? ?C C : Ðến c? ??u thang BƯ? ?C C : Xuống tầầng hầm BƯ? ?C C : Ði... khácc Do đó, nhữ ững dự án lớnn quản lý dễ dàng d mà tốn rấất c? ?ng s? ?c ữ b? ?c trung 1. 2 .1 C – Ngôn ngữ C đượcc hiểu ngô ôn ngữ b? ?c truung nóó kết hợp nhữ ững yếu tố c? ??ủa ngô ôn ngữ c? ??p caao chức