CHƯƠNG 1: TỔNG QUAN VỀ NGÔN NGỮ C++ ---------- 1.1 KHÁI NIỆM VỀ LẬP TRÌNH 1.1 Giới thiệu chung Máy tính là một công cụ để giải quyết hàng loạt các bài toán lớn. Một lời giải cho một bài toán nào đó được gọi là một giải thuật hay thuật toán (algorithm); nó mô tả một chuỗi các bước cần thực hiện để giải quyết bài toán. Ví dụ: Bài toán về sắp xếp một danh sách các số theo thứ tự tăng dần. Giải thuật của bài toán trên là: Giả sử danh sách đã cho là list1; ta tạo ra một danh sách rỗng list2, để lưu danh sách đã sắp xếp.
Lặp đi lặp lại công việc, tìm số nhỏ nhất trong list1, xóa nó khỏi list1 và thêm vào phần tử kế tiếp trong danh sách list2, cho đến khi list1 là rỗng. Giải thuật được diễn giải bằng các thuật ngữ trừu tượng mang tính chất dễ hiểu. Ngôn ngữ thật sự được hiểu bởi máy tính là ngôn ngữ máy. Chương trình được diễn đạt bằng ngôn ngữ máy được gọi là có thể thực thi.
Một chương trình được viết bằng bất kỳ một ngôn ngữ nào trước hết cần được dịch sang ngôn ngữ máy để máy tính có thể hiểu và thực thi nó. Ngôn ngữ máy cực kỳ khó hiểu đối với lập trình viên vì thế họ không thể sử dụng trực tiếp ngôn ngữ máy để viết chương trình. Một sự trừu tượng khác là ngôn ngữ assembly. Nó cung cấp những tên dễ nhớ cho các lệnh và một ký hiệu dễ hiểu hơn cho dữ liệu.
Bộ dịch được gọi là assembler chuyển ngôn ngữ assembly sang ngôn ngữ máy. Ngay cả những ngôn ngữ assembly cũng khó sử dụng. Những ngôn ngữ cấp cao như: C, C++, Pascal, … cung cấp các ký hiệu thuận tiện hơn nhiều cho việc lập trình cũng như thi hành các giải thuật. Các ngôn ngữ cấp cao này giúp cho các lập trình viên không phải nghĩ nhiều về các ngôn ngữ cấp thấp vì thế giúp họ chỉ tập trung vào giải thuật.
Trình biên dịch (compiler) sẽ đảm nhiệm việc dịch chương trình viết bằng ngôn ngữ cấp cao sang ngôn ngữ assembly. Mã assembly được tạo ra bởi trình biên dịch sau đó sẽ được tập hợp lại để cho ra một chương trình có thể thực thi.2 Định nghĩa Lập trình là kỹ thuật tổ chức dữ liệu và xây dựng quy trình xử lý cho máy tính làm việc thông qua ngôn ngữ lập trình chẳng hạn như: C, C++, Pascal, … - Tổ chức dữ liệu: sắp xếp các thông tin nhằm phục vụ cho yêu cầu nào đó. - Quy trình xử lý: bao gồm các chỉ thị để thực hiện các công việc như: tạo thông tin ban đầu, tính toán, sao chép, di chuyển, tìm kiếm, in kết quả, … 1.3 Giải thuật (Algorithm) Muốn viết được một chương trình nào đó cho máy tính thực hiện điều trước tiên là ta phải tìm được giải thuật (thuật toán) cho công việc cần viết chương trình đó. Trang 1 Trường ĐHSPKT Vĩnh Long Giáo trình môn Lập trình căn bản Giải thuật (thuật toán) là một tập hợp có thứ tự các bước tiến hành công việc nhằm đạt được kết quả mong muốn.
Ví dụ: Để viết được chương trình giải phương trình bậc 2 (ax2 + bx + c = 0) ta cần phải tìm được các bước để thực hiện công việc này, đó chính là giải thuật: Bước 1: Nhập 3 hệ số a, b và c Bước 2: Tính = b2 – 4ac Bước 3: Xét dấu Nếu < 0 thì phương trình vô nghiệm Ngược lại, nếu = 0 thì phương trình có nghiệm kép x1 = x2 = b 2a ngược lại ( > 0) thì phương trình có 2 nghiệm phân biệt: b b x1 = ; x2 = 2a 2a 1.4 Đặc tính của giải thuật - Phải kết thúc sau một số bước hữu hạn. - Các bước trong giải thuật phải được máy chấp nhận và có thể thực hiện được. - Xét hết tất cả các trường hợp có thể xảy ra. - Áp dụng được cho tất cả các bài toán cùng loại (cùng dạng).5 Các lưu ý - Một bài toán có thể có nhiều giải thuật khác nhau.
- Một giải thuật được gọi là tốt nếu nó có các tính chất sau: + Đơn giản, dễ hiểu. + Tiết kiệm vùng nhớ. + Thời gian thực hiện nhanh.6 Các công cụ thể hiện giải thuật Để thể hiện giải thuật ta có thể dùng nhiều công cụ khác nhau, trong đó có 2 công cụ được dùng nhiều nhất là ngôn ngữ giả và lưu đồ.1 Ngôn ngữ giả Ta có thể sử dụng các từ ngữ, ký hiệu sao cho ngắn gọn, dễ hiểu và có đánh số thứ tự các bước thực hiện. Ví dụ: Giải thuật giải phương trình bậc 2 ở trên được thể hiện bằng ngôn ngữ giả.2 Lưu đồ (Flow chart) Ta sử dụng các khối theo qui định để thể hiện giải thuật, các khối được dùng là: : Bắt đầu / Kết thúc : Nhập / Xuất Trang 2 Trường ĐHSPKT Vĩnh Long Giáo trình môn Lập trình căn bản : Thi hành (Thực hiện) hoặc : Lựa chọn (Điều kiện) : Chương trình con : Tập hợp các tập tin dữ liệu : Các ghi chú, giải thích : Nối : Đường đi Ví dụ: Giải thuật giải phương trình bậc 2 ở trên được thể hiện bằng lưu đồ như sau: Bắt đầu Nhập a, b, c = b2 – 4.c Đ <0 Xuất PTVN S Đ =0 Xuất x = -b/(2.2 CÁC THÀNH PHẦN CƠ BẢN TRONG NGÔN NGỮ C++ Một ngôn ngữ lập trình (NNLT) cấp cao cho phép người lập trình (NLT) biểu diễn ý tưởng của mình để giải quyết một vấn đề, một bài toán bằng cách diễn đạt gần với ngôn ngữ thông thường thay vì phải diễn đạt theo ngôn ngữ máy (dãy các ký hiệu 0, 1).
Hiển nhiên, các ý tưởng NLT muốn trình bày phải được viết theo một cấu trúc chặt chẽ thường được gọi là giải thuật hay thuật toán và theo đúng các qui tắc của ngôn ngữ gọi là cú pháp hoặc văn phạm. Trang 3 Trường ĐHSPKT Vĩnh Long Giáo trình môn Lập trình căn bản 1.1 Bảng ký tự của C++ Dưới đây là bảng ký tự được dùng để tạo nên những câu lệnh của ngôn ngữ C++: - Các chữ cái La tinh (viết thường và viết hoa): a. Cùng một chữ cái nhưng viết thường phân biệt với viết hoa. Ví dụ chữ cái 'a' là khác với 'A'.
- Dấu gạch dưới: _ - Các chữ số thập phân: 0. - Các ký hiệu toán học: +, -, *, /, % , &, ||, !, >, <, =. - Các ký hiệu đặc biệt khác: , ;: [ ], {}, #, dấu cách, .2 Từ khóa Một từ khoá là một từ được qui định trước trong NNLT với một ý nghĩa cố định, thường dùng để chỉ các loại dữ liệu hoặc kết hợp thành câu lệnh. Người lập trình có thể tạo ra những từ mới để chỉ các đối tượng của mình nhưng không được phép trùng với từ khóa.
Dưới đây là một vài từ khoá thường gặp, ý nghĩa của các từ này sẽ được trình bày dần trong các đề mục liên quan: asm, break, case, char, continue, default, do, double, else, extern, float, for, goto, if, int, long, register, return, short, sizeof, static, struct, switch, typedef, union, unsigned, while. Một đặc trưng cần nhớ của C++ là các từ khóa luôn luôn được viết bằng chữ thường.3 Tên gọi Để phân biệt các đối tượng với nhau chúng cần có một tên gọi. Hầu hết một đối tượng được viết ra trong chương trình thuộc 2 dạng, một dạng đã có sẵn trong ngôn ngữ (chẳng hạn như các từ khoá, tên các hàm chuẩn, .), dạng còn lại là do người lập trình tạo ra dùng để đặt tên cho hằng, biến, kiểu, hàm,. Các tên gọi do người lập trình tự đặt phải tuân theo một số qui tắc sau: - Là dãy ký tự liên tiếp (không chứa dấu cách và các ký hiệu) và phải bắt đầu bằng chữ cái hoặc dấu gạch dưới.
- Phân biệt ký tự in hoa và thường. - Không được trùng với từ khóa. - Số lượng ký tự dùng để phân biệt tên gọi là tùy ý. Ví dụ: Các tên gọi sau đây là đúng (được phép): i, i1, j, tinhoc, tin_hoc, luu_luong Các tên gọi sau đây là sai (không được phép): 1i, tin hoc, luu-luong Các tên gọi sau đây là khác nhau: ha_noi, Ha_noi, HA_Noi, HA_NOI 1.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 chú thích (ghi chú) nhằm giải thích rõ nghĩa hơn cho câu lệnh, Trang 4 Trường ĐHSPKT Vĩnh Long Giáo trình môn Lập trình căn bản đoạn chương trình hay 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 dễ hiểu hơn vì vậy dễ bảo trì, sửa chữa về sau hơn. 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 hàng hoặc trên nhiều hà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 hàng, thì ta đặt dấu // ở vị trí đó.
Như vậy // sử dụng cho các chú thích chỉ trên 1 hàng. Như đã nói ở 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ấu trúc một chương trình trong C++ Một chương trình C++ có thể được đặt trong một hoặc nhiều file văn bản khác nhau. Mỗi file văn bản chứa một số phần nào đó của chương trình. Với những chương trình đơn giản và ngắn thường chỉ cần đặt chúng trong một file. Một chương trình gồm nhiều hàm, mỗi hàm phụ trách một công việc khác nhau của chương trình.
Đặc biệt trong các hàm này có một hàm duy nhất có tên hàm là main(). Khi chạy chương trình, các câu lệnh trong hàm main() sẽ được thực hiện đầu tiên.