LỜI NÓI ĐẦUChương trình đổi mới sách giáo khoa năm 2018 đã tạo ra bước đột phátrong giảng dạy cũng như trong việc xây dựng chương trình, kế hoạch dạy họcphù hợp với năng lực kiến thức củ
Trang 1TRƯỜNG THPT TRẦN HỮU TRANG
Trang 2LỜI NÓI ĐẦU
Chương trình đổi mới sách giáo khoa năm 2018 đã tạo ra bước đột phátrong giảng dạy cũng như trong việc xây dựng chương trình, kế hoạch dạy họcphù hợp với năng lực kiến thức của học sinh đồng thời đáp ứng được yêu cầu của
thực tiễn.C/C++ hiện là ngôn ngữ lập trình (NNLT) được ưa chuộng và sử dụng rộngrãi do tính năng mạnh mẽ, đa dụng của nó Hiện nay, NNLT C/C++ được nhiềutrường THPT trong và ngoài nước sử dụng để giảng dạy lập trình ban đầu cho họcsinh
Trên tinh thần đó, nhóm Tin học của trường THPT Trần Hữu Trang đã tổng
hợp biên soạn cuốn “Bài giảng ngôn ngữ lập trình C/C++ căn bản”, nhằm giúp
học sinh nắm được cấu trúc, cú pháp căn bản của NNLT C/C++, vận dụng vào giảimột số bài toán trong thực tế
Bên cạnh đó, với mong muốn giúp cho các em có niềm đam mê lập trìnhsau này học lên sẽ không còn bỡ ngỡ, xa lạ với NNLT C/C++
Nội dung của cuốn “Bài giảng ngôn ngữ lập trình C/C++ căn bản” 1 , được
chia thành 6 chương với 20 bài theo đúng phân phối chương trình giảng dạy ở bậcTHPT, đáp ứng yêu cầu chuẩn kiến thức, chuẩn kỹ năng và phát huy tính sáng tạocủa học sinh
Mặc dù đã có nhiều cố gắng nhưng không thể tránh khỏi những thiếu sót,rất mong nhận được sự nhận xét, góp ý của đồng nghiệp và học sinh để tài liệuđược hoàn thiện hơn
Nhóm Tin học
1 Trang code online: https://www.onlinegdb.com/online_c++_compiler
Trang 3MỤC LỤC
§1 THUẬT TOÁN (ALGORITHM) 1
1.1 Khái niệm 1
1.2 Các đặc trưng của thuật toán 1
1.3 Các công cụ biểu diễn thuật toán 1
2 Ngôn ngữ lập trình (NNLT) 2
3 Chương trình (máy tính) 3
4 Các bước xây dựng chương trình 4
§2 CÁC PHẦN TỬ CƠ BẢN CỦA NGÔN NGỮ LẬP TRÌNH C++ 6
1 Bảng kí tự của C++ (character set) 6
2 Từ khóa (keyword) 6
3 Tên gọi 6
4 Chú thích (comment) 7
BÀI ĐỌC THÊM: MÔI TRƯỜNG LÀM VIỆC CỦA C++ 9
1 Khởi động - Thoát khỏi C++ 9
2 Giao diện và cửa sổ soạn thảo 9
§3 CẤU TRÚC CHƯƠNG TRÌNH 12
1 Cấu trúc chung của một chương trình trong C++ 12
1.1 Thư viện chuẩn C++ (C++ Standard Library) 12
1.2 Hàm (Functions) 13
2 Biến - khai báo và sử dụng biến 14
2.1 Biến 14
2.2 Hằng 16
3 Vi dụ chương trình đơn giản 17
§4 CÁC DỮ LIỆU CƠ SỞ 19
1 Khái niệm về kiểu dữ liệu 19
2 Số nguyên 19
Trang 43 Số thực 19
4 Kiểu luận lý: 20
5 Kí tự 20
§5 PHÉP TOÁN, BIỂU THỨC, CÂU LỆNH GÁN 22
1 Phép toán 22
2 Biểu thức 26
3 Câu lệnh gán 28
§6 NHẬP XUẤT DỮ LIỆU TỪ BÀN PHÍM DÙNG CIN, COUT 29
1 Nhập dữ liệu từ bàn phím 29
2 In dữ liệu ra màn hình 30
3 Thư viện và không gian tên 31
4 Ví dụ chương trình nhập – xuất trong C++ 32
§7 BÀI TẬP THỰC HÀNH CHƯƠNG II 33
§8 CẤU TRÚC RẼ NHÁNH 35
I – Lệnh và khối lệnh 35
1 Lệnh (statement): 35
2 Khối lệnh (Block): 35
II – Cấu trúc điều khiển 35
1 Rẽ nhánh: 36
2 Câu lệnh IF 37
3 Cấu trúc (switch đủ) 41
§9 CẤU TRÚC LẶP 44
1 Lặp: 44
2 Lặp với số lần xác định và câu lệnh for 44
2 Lặp với số lần chưa biết trước với câu lệnh while 46
3 Câu lệnh do … while 48
§ BÀI TẬP THỰC HÀNH CHƯƠNG III 50
Trang 5§10 KIỂU DỮ LIỆU MẢNG 53
1 Mảng một chiều 53
2 Khai báo mảng 54
3 Truy xuất đến phần tử của mảng 55
4 Các thao tác với mảng 56
4.1 Nhập mảng 56
4.2 Xuất mảng 57
5 Các ví dụ về mảng một chiều 58
§11 KIỂU DỮ LIỆU XÂU (STRING) 60
1 Khái niệm xâu 60
2 Khai báo xâu kí tự (string) 61
3 Truy cập vào phần tử của xâu 61
4 Một số hàm xử lí xâu thông dụng 61
§12 DỮ LIỆU CẤU TRÚC (STRUCTURE) 64
1 Khái niệm về dữ liệu cấu trúc (struct) 64
2 Định nghĩa kiểu cấu trúc 64
3 Khai báo biến có kiểu dữ liệu cấu trúc 65
4 Truy cập vào các phần tử của Struct 67
§13 BÀI TẬP THỰC HÀNH CHƯƠNG IV 69
§14 KIỂU DỮ LIỆU TỆP 73
1 Vai trò của của kiểu tệp 73
2 Phân loại tệp và thao tác với tệp 73
3 Các thao tác cơ bản với tệp tin 74
§15 THAO TÁC VỚI TỆP 75
1 Khái niệm 75
2 Biến và con trỏ 75
3 Các thao tác trên tệp tin 75
Trang 63.1 Khai báo biến tệp tin 75
3.2 Mở tệp (open file) 76
3.4 Đóng tệp tin 78
4 Một số hàm xử lý khác 78
§16 BÀI THỰC HÀNH CHƯƠNG V 79
§17 HÀM 81
1 Khái niệm hàm (function) 81
2 Khai báo và sử dụng hàm 81
3 Sử dụng hàm 84
4 Phạm vi của biến 85
5 Tham số, đối số và cơ chế truyền đối số cho hàm 86
§18 VÍ DỤ VỀ CHƯƠNG TRÌNH CON 90
1 Khái niệm và vai trò của chương trình con 90
2 Phân loại chương trình con 90
3 Một số ví dụ về chương trình con 91
§19 CON TRỎ (POINTER) 94
1 Khái niệm về con trỏ (pointer) 94
2 Khai báo con trỏ 94
3 Cách sử dụng con trỏ trong C++ 95
4 Phép gán giữa các con trỏ 96
5 Một số ví dụ về con trỏ 97
§20 BÀI THỰC HÀNH TỔNG HỢP 99
TÀI LIỆU THAM KHẢO 104
Trang 7MỘT SỐ KHÁI NIỆM CƠ BẢN VỀ LẬP TRÌNH & NGÔN NGỮ LẬP TRÌNH
1.1 Khái niệm
Thuật toán là khái niệm cơ sở của toán học và tin học
Thuật toán là phương pháp thể hiện lời giải của vấn đề – bài toán
Thuật toán là dãy các thao tác, các hướng dẫn rõ ràng, được sắp xếptheo một trình tự xác định, sao cho 2 bộ xử lý (người/máy) khác nhau, với cùngđiều kiện đầu vào như nhau thì sau một số bước hữu hạn thực hiện, sẽ cho kết quảgiống nhau mà không cần biết ý nghĩa của các thao tác này
Cần chú ý là không phải mọi dãy thao tác, chỉ dẫn nào cũng đều tạo ra thuậttoán Phương pháp nấu ăn, cách dùng thuốc, đều không phải là thuật toán do cácthao tác, các chỉ dẫn là không xác định, không rõ ràng
1.2 Các đặc trưng của thuật toán
Tính xác định: Các thao tác của thuật toán phải xác định, không được nhập
nhằng, mơ hồ để có thể dễ dàng cài đặt trên một hệ tự động hóa
Tính dừng: Thuật toán phải dừng sau một số hữu hạn bước thực hiện Tính đúng đắn: Thuật toán phải cho kết quả đúng theo yêu cầu của bài toán
đặt ra
Tính phổ dụng: Thuật toán có thể được sử dụng lại để giải một lớp bài toán
tương tự
Tính hiệu quả: Thuật toán cần tối ưu về sử dụng bộ nhớ và đáp ứng yêu
cầu của bài toán trong thời gian ngắn nhất có thể được Thực tế rất khó đạt được cả
2 yêu cầu này trong một thuật toán
1.3 Các công cụ biểu diễn thuật toán
Ngôn ngữ tự nhiên: là ngôn ngữ liệt kê các bước, mô tả thuật toán theo
ngôn ngữ tự nhiên của con người
Trang 8Ví dụ: Thuật toán xác định trị lớn nhất trong 5 số nguyên.
Bước 1 : Gọi a, b, c, d, e là 5 biến lưu trữ các trị nguyên cho trước (nhập từ
bàn phím)
Bước 2: Gọi max là biến lưu trữ trị lớn nhất trong 5 số nguyên trên, và giả
sử a có trị lớn nhất
Bước 3: Lần lượt so sánh trị của max với các biến b, c, d, e còn lại Nếu trị
của max nhỏ hơn bất kỳ biến nào thì gán trị của biến đó cho max
Bước 4: Xuất kết quả trị biến max ra màn hình
Lưu đồ thuật toán hay sơ đồ khối (Flow chart): là công cụ cho phép biểu
diễn thuật toán một cách trực quan Thường chỉ có thể dung công cụ lưu đồ đốivới các thuật toán tương đối ngắn, có thể được biểu diễn trong một trang giấy.Các hình cơ bản sử dụng trong
Mã giả (Pseudo code) gần giống như ngôn ngữ tự nhiên, nhưng có sử dụng
các cấu trúc chuẩn hóa (khai báo biến, chú thích, cấu trúc điều khiển, ) dongười thiết kế quy định
Ngôn ngữ lập trình (Programming language) là hệ thống các kí hiệu cho
phép mô tả các quy trình tính toán dưới dạng văn bản
2 Ngôn ngữ lập trình (NNLT)
Các thành phần cơ bản của NNLT bao gồm:
Trang 9 Bộ kí tự (character set) hay bảng chữ cái dùng để viết chương trình.
Cú pháp (syntax) là bộ quy tắc để viết chương trình
Ngữ nghĩa (semantic) xác định ý nghĩa các thao tác, hành động cần phảithực hiện, ngữ cảnh (context) của các câu lệnh trong chương trình
Hiện đã có hàng nghìn NNLT được thiết kế, và hàng năm lại có thêm nhiềuNNLT mới xuất hiện Sự phát triển của NNLT gắn liền với sự phát triển củangành tin học Mỗi loại NNLT phù hợp với một số lớp bài toán nhất định
Phân loại NNLT:
Ngôn ngữ máy (machine language) hay còn gọi là NNLT cấp thấp có tậplệnh phụ thuộc vào một hệ máy cụ thể Chương trình viết bằng ngôn ngữ máy sửdụng bảng chữ cái chỉ gồm 2 kí tự 0, 1 Chương trình ngôn ngữ máy được nạp trựctiếp vào bộ nhớ và thực hiện ngay
Ngôn ngữ lập trình cấp cao nói chung không phụ thuộc vào loại máy tính
cụ thể Chương trình viết bằng NNLT cấp cao sử dụng bộ kí tự phong phú hơn, vàphải được chuyển đổi sang dạng mã máy để máy tính có thể hiểu được bằngchương trình dịch Một số NNLT cấp cao thông dụng hiện nay: Pascal, C, C++,Java, Smalltalk, Basic, Ruby, Fortran, Algol, Lisp, Prolog, Cobol, …
3 Chương trình (máy tính)
Là tập hợp hữu hạn các chỉ thị máy được bố trí, sắp xếp theo một trật tự xácđịnh, nhằm giải quyết yêu cầu của bài toán đặt ra Chương trình được viết bằngmột NNLT cụ thể nào đó
Các chương trình C/C++ (trong môi trường DOS) được tạo ra bằng 1 trìnhsoạn thảo văn bản (EDITOR) như: SK, NC Editor, VRES Hiện nay, cácchương trình dịch đều tích hợp sẵn editor riêng cho phép USER soạn thản, biêndịch, kiểm lỗi, liên kết và thực hiện chương trình một cách dễ dàng
Các chương trình này (mã nguồn – source code), thực chất là ở dạng ngônngữ tự nhiên, do đó phải được biên dịch lại dưới dạng mã máy (object code) màmáy tính có thể hiểu được Việc này được thực hiện bởi chương trình dịch
Trang 10Có 2 loại chương trình dịch:
Trình thông dịch (interpreter): mỗi lệnh được dịch sang mã máy và cho
thực hiện ngay
Trình biên dịch (compiler): toàn bộ chương trình nguồn được dịch sang
mã máy (tệp tin.obj), sau đó trình liên kết (linker) sẽ kết nối các module chươngtrình để tạo thành tệp tin EXE
Nói chung, một chương trình máy tính được bố cục thành 3 phần:
4 Các bước xây dựng chương trình
Bước 1: Xác định đúng yêu cầu của bài toán: Cần xác định phạm vi, các
giới hạn, ràng buộc, các giả thiết của bài toán Đặc biệt cần khắc phục sức ì vềmặt tâm lý trong quá trình tìm hiểu bài toán
Bước 2 : Xâuy dựng thuật giải: Cần có kiến thức liên quan đến vấn đề
đang giải quyết Cần xác định rõ thuật toán sẽ tác động trên những đối tượng(thông tin) nào ? Có bao nhiêu đối tượng (biến) cần xử lý? Mỗi biến có thể đượclưu trữ dưới dạng nào, kiểu gì ? Giá trị ban đầu của các biến ? Hình dung trướckết xuất DL sau khi xử lý sẽ như thế nào?
Bước 3: Thể hiện thuật giải bằng lưu đồ thuật toán (nếu được).
Bước 4: Cài đặt thuật toán bằng một NNLT cụ thể: Dùng một trình soạn
thảo VB để tạo chương trình nguồn (source code) theo một NNLT nào đó
Bước 5: Thử nghiệm thuật toán, nếu sai quay lại Bước 2 Cần xác định
lỗi của thuật toán thuộc loại nào: lỗi về mặt cú pháp (syntax error), lỗi lúc thựchiện chương trình (run-time error), và lỗi logic Lỗi cú pháp xảy ra lúc biên dịchchương trình, do vi phạm các quy định về mặt cú pháp của NNLT đang sử dụng.Lỗi này tương đối dễ khắc phục Lỗi run-time error như: divide by zero, stackoverflow, không đủ bộ nhớ, … Lỗi logic (logic error) khó phát hiện hơn nhiều
Bước 6: Kết thúc.
Trang 11CÂU HỎI BÀI 1
Thuật toán (Algorithm)
− Thuật toán là gì?
− Nêu các đặc trưng cần có của một thuật toán
− Các cách biểu diễn một thuật toán?
Ngôn ngữ lập trình (Programming language) là gì?
Nêu các bước xâuy dựng thuật toán?
Trang 12§2 CÁC PHẦN TỬ CƠ BẢN CỦA NGÔN NGỮ LẬP TRÌNH C++
1 Bảng kí tự của C++ (character set)
Hầu hết các ngôn ngữ lập trình hiện nay đều sử dụng các kí tự tiếng Anh,các kí hiệu thông dụng và các con số để thể hiện chương trình Các kí tự củanhững ngôn ngữ khác không được sử dụng (ví dụ các chữ cái tiếng Việt) Dướiđây là bảng kí tự được phép dùng để tạo nên những câu lệnh của ngôn ngữ C++
auto, break, case, char, continue, default, do, double, else, externe, float,for, goto, if, int, long, register, return, short, sizeof, static, struct, switch, typedef,union, unsigned, while
Một đặc trưng của C++ là các từ khoá 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 trongngôn ngữ (ví dụ các từ khoá, tên các hàm chuẩn ), một số do NLT tạo ra dùng đểđặt tên cho hằng, biến, kiểu, hàm các tên gọi do NLT tự đặt phải tuân theo một
số qui tắc sau:
Trang 13 Là dãy kí tự liên tiếp (không chứa dấu cách) và phải bắt đầu bằng chữ cái hoặc 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 chữ cái dùng để phân biệt tên gọi có thể được đặt tuỳ ý
Chú ý các tên gọi có sẵn của C++ cũng tuân thủ theo đúng qui tắc trên
Trong một chương trình nếu NLT đặt tên sai thì trong quá trình xử lý sơ
bộ (trước khi chạy chương trình) máy sẽ báo lỗi (gọi là lỗi văn phạm)
Ví dụ 1 :
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-nuoc
Các tên gọi sau đây là khác nhau: sai_gon, Sai_gon, TH_Trang, TH_TRANG,
Như vậy: Tên hợp lệ là một xâu kí tự liên tục gồm: Kí tự chữ, số và dấugạch dưới Kí tự đầu của tên phải là chữ hoặc dấu gạch dưới Khi đặt tên khôngđược đặt trùng với các từ khóa
4 Chú thích (comment)
Trong khi lập trình cần phải ghi chú để giải thích các biến, hằng, thao tác
xử lý giúp cho chương trình rõ ràng dễ hiểu, dễ nhớ, dễ sửa chữa và để người khácđọc vào dễ hiểu, dễ bảo trì hơn
Chương trình dịch sẽ bỏ qua những nội dung nằm trong phần chú thích
Có 2 loại chú thích:
• Chú thích trên một dòng:
// phần chú thích (cho đến cuối dòng)
• Chú thích trên nhiều dòng:
/* (mở) phần chú thích (có thể trải dài trên nhiều dòng) */(đóng)
Chú ý: Cặp dấu chú thích /* */ không được phép viết lồng nhau.
Trang 14Ví dụ : 2
a Chú thích từng dòng:
Trang 15ĐỌC THÊM
:
MÔI TRƯỜNG LÀM VIỆC CỦA C++
1 Khởi động - Thoát khỏi C++
Khởi động C++ cũng như mọi chương trình khác bằng cách nhấp đúp chuộtlên biểu tượng của chương trình Khi chương trình được khởi động sẽ hiện ra giaodiện gồm có menu công việc và một khung cửa sổ bên dưới phục vụ cho soạnthảo Một con trỏ nhấp nháy trong khung cửa sổ và chúng ta bắt đầu nhập nộidung (văn bản) chương trình vào trong khung cửa sổ soạn thảo này Mục đích củagiáo trình này là trang bị những kiến thức cơ bản của lập trình thông qua NNLTC++ cho các sinh viên mới bắt đầu nên chúng tôi vẫn chọn trình bày giao diện củacác trình biên dịch quen thuộc là Turbo C hoặc Borland C Về các trình biên dịchkhác độc giả có thể tự tham khảo trong các tài liệu liên quan
Để kết thúc làm việc với C++ (soạn thảo, chạy chương trình ) và quay vềmôi trường Windows chúng ta ấn Alt-X
2 Giao diện và cửa sổ soạn thảo
a Mô tả chung
Khi gọi chạy C++ trên màn hình sẽ xuất hiện một menu xổ xuống và mộtcửa sổ soạn thảo Trên menu gồm có các nhóm chức năng: File, Edit, Search, Run,Compile, Debug, Project, Options, Window, Help Để kích hoạt các nhóm chứcnăng, có thể ấn Alt+chữ cái biểu thị cho menu của chức năng đó (là chữ cái cógạch dưới) Ví dụ để mở nhóm chức năng File ấn Alt+F, sau đó dịch chuyển hộpsáng đến mục cần chọn rồi ấn Enter Để thuận tiện cho NSD, một số các chứcnăng hay dùng còn được gắn với một tổ hợp các phím cho phép người dùng có thểchọn nhanh chức năng này mà không cần thông qua việc mở menu như đã mô tả ởtrên Một số tổ hợp phím cụ thể đó sẽ được trình bày vào cuối phần này Các bộchương trình dịch hỗ trợ người lập trình một môi trường tích hợp tức ngoài chứcnăng soạn thảo, nó còn cung cấp nhiều chức năng, tiện ích khác giúp người lậptrình vừa có thể soạn thảo văn bản chương trình vừa gọi chạy chương trình vừa gỡlỗi …
b Các chức năng soạn thảo
Giống hầu hết các bộ soạn thảo văn bản, bộ soạn thảo của Turbo C hoặcBorland C cũng sử dụng các phím sau cho quá trình soạn thảo:
Dịch chuyển con trỏ: các phím mũi tên cho phép dịch chuyển con trỏsang trái, phải một kí tự hoặc lên trên, xuống dưới 1 dòng Để dịch chuyển nhanh
có các phím như Home (về đầu dòng), End (về cuối dòng), PgUp, PgDn (lên,xuống một trang màn hình) Để dịch chuyển xa hơn có thể kết hợp các phím nàycùng phím Control (Ctrl, ^) như ^PgUp: về đầu tệp, ^PgDn: về cuối tệp
Trang 16 Chèn, xoá, sửa: Phím Insert cho phép chuyển chế độ soạn thảo giữachèn và đè Các phím Delete, Backspace cho phép xoá một kí tự tại vị trí con trỏ
và trước vị trí con trỏ (xoá lùi)
c Chức năng tìm kiếm và thay thế
Chức năng này dùng để dịch chuyển nhanh con trỏ văn bản đến từ cầntìm Để thực hiện tìm kiếm bấm Ctrl-QF, tìm kiếm và thay thế bấm Ctrl-QA Vào
từ hoặc nhóm từ cần tìm vào cửa sổ Find, nhóm thay thế (nếu dùng Ctrl-QA) vàocửa sổ Replace và đánh dấu vào các tuỳ chọn trong cửa sổ bên dưới sau đó ấnEnter
d Các chức năng liên quan đến tệp
Ghi tệp lên đĩa: Chọn menu File\Save hoặc phím F2 Nếu tên tệpchưa có (còn mang tên Noname.cpp) máy sẽ yêu cầu cho tên tệp Phần mở rộngcủa tên tệp được mặc định là CPP
ạn thảo tệp mới: Chọn menu File\New Hiện ra cửa sổ soạn thảotrắng và tên file tạm thời lấy là Noname.cpp
ạn thảo tệp cũ: Chọn menu File\Open hoặc ấn phím F3, nhập têntệp hoặc dịch chuyển con trỏ trong vùng danh sách tệp bên dưới đến tên tệp cầnsoạn rồi ấn Enter Cũng có thể áp dụng cách này để soạn tệp mới khi không nhậpvào tên tệp cụ thể
ệp đang soạn thảo lên đĩa với tên mới: Chọn menu File\Save As
và nhập tên tệp mới vào rồi ấn Enter
e Chức năng dịch và chạy chương trình
-F9: Khởi động chức năng dịch và chạy toàn bộ chương trình
ạy chương trình từ đầu đến dòng lệnh hiện tại (đang chứa contrỏ)
ạy từng lệnh một của hàm main(), kể cả các lệnh con trong hàm ạy từng lệnh một của hàm main() Khi đó mỗi lời gọi hàm được
xem là một lệnh (không chạy từng lệnh trong các hàm được gọi)
Các chức năng liên quan đến dịch chương trình có thể được chọn thôngqua menu Compile (Alt-C)
f Tóm tắt một số phím nóng hay dùng
ạt menu: Alt+chữ cái đại diện cho nhóm menu đó
Ví dụ Alt-F mở menu File để chọn các chức năng cụ thể trong nó như Open (mởfile), Save (ghi file lên đĩa), Print (in nội dung văn bản chương trình ra máy in), …Alt-C mở menu Compile để chọn các chức năng dịch chương trình
ịch chuyển con trỏ khi soạn thảo
ở cửa sổ trợ giúp Đây là chức năng quan trọng giúp người lậptrình nhớ tên lệnh, cú pháp và cách sử dụng
Trang 17ệp lên đĩa.
ở tệp cũ ra sửa chữa hoặc soạn thảo tệp mới
ạy chương trình đến vị trí con trỏ
ẹp/mở rộng cửa sổ soạn thảo
ển đổi giữa các cửa sổ soạn thảo
ạy chương trình theo từng lệnh, kể cả các lệnh trong hàm con
ạy chương trình theo từng lệnh trong hàm chính
ịch và liên kết chương trình Thường dùng chức năng này để tìm lỗi cú pháp của chương trình nguồn trước khi chạy
-F7: Chuyển con trỏ về nơi gây lỗi trước đó
-F8: Chuyển con trỏ đến lỗi tiếp theo
Giờ đây chúng ta không cần phải cài phần mềm Turbo C, Borland Choặc C-Free nữa
Bởi lẽ hiện nay, có nhiều trang Website cho phép chúng ta viết code vàchạy trực tuyến, trang Website được biết tới nhiều nhất đó là trang:
https://www.onlinegdb.com/online_c++_compiler
Các em đánh tên trang Website vào trình duyệt, giao diện trang Website
hiện ra, các em nhìn lên góc trên cùng bên phải, phần Language các em nhấp mũi
tên xổ xuống và chọn C++
Sau khi chọn NNLT xong giao diện code hiện ra và các em tiến hànhviết code và bấm Run góc trên cùng bến trái để kiểm tra kết quả Kết quả sẽ nằmbến dưới của giao diện
Xem kết quả ở đâyViết code ở đây
Trang 18CHƯƠNG TRÌNH ĐƠN GIẢN
1 Cấu trúc chung của một chương trình trong C++
Khảo sát ví dụ một chương trình đơn giản viết bằng C++ như sau:
1 #include <iostream> Dùng thư viên iostream
2 using namespace std; Sử dụng không gian tên std
5 cout<<"Hello World"; Xuất ra màn hình “Hello Word”
Phần khai báo
Phần thân
Một chương trình viết bằng ngôn ngữ lập trình bậc cao thông thường có 2
phần: < Phần khai báo> và < Phần thân>
Ứng với cấu trúc trên trong chương trình C++ chính là các thành phần:
Thư viện chuẩn C++.
Hàm (Functions)
1.1 Thư viện chuẩn C++ (C++ Standard Library).
Thư viện là một tập hợp các mã được biên dịch sẵn, được đóng gói lại để
lập trình viên sử dụng, mà không cần phải viết lại Chẳng hạn: bạn viết một
chương trình tính toán, bạn có thể include thư viện toán học…
Dòng 1: Khai báo thư viện có tên iostream Thư viện này cung cấp cho
chúng ta khả năng nhập xuất dữ liệu cơ bản với chương trình
Trang 19Dòng 2: Khai báo thư viện toán học Khi chúng ta cần dùng đến căn bậc 2
hay bình phương… Thư viện này sẽ giúp chúng ta làm được điều đó
Dòng 3: Khai báo thư viện fstream Giúp chúng ta có thể làm việcvới các
file nằm ngoài chương trình
Thư viện là một phần không thể thiếu với người lập trình Có thư viện côngviệc của lập trinh sẽ trở nên dễ dàng hơn
Mỗi một câu lệnh sẽ yêu cầu chương trình thực hiện một nhiệm vụ nhất
định Câu lệnh phải kết thúc bằng dấu chấm phẩy “ ; ”.
Dòng 1: Câu lệnh khai báo biến có tên là x.
Dòng 2: Là câu lệnh gán giá trị cho biến x Ở đây biến x được gán giá trị
bằng kết quả của biểu thức 5 * 2;
Dòng 3: Câu lệnh có nhiệm vụ đưa dữ liệu lên màn hình.
Trang 202 Biến - khai báo và sử dụng biến
2.1 Biến
Biến là các tên gọi để lưu giá trị khi làm việc trong chương trình Biến đượcdùng để lưu trữ thông tin về các đối tượng và có giá trị cụ thể, xác định tại mỗithời điểm trong chương trình Mỗi vùng nhớ biến có một địa chỉ xác định Khácvới hằng, giá trị của biến có thể thay đổi trong quá trình làm việc bằng các lệnhđọc vào từ bàn phím hoặc gán
Mọi biến phải được khai báo trước khi sử dụng Một khai báo như vậy sẽ
báo cho chương trình biết về một biến mới gồm có: tên của biến, kiểu của biến
(tức kiểu của giá trị dữ liệu mà biến sẽ lưu giữ)
2.1.1 Khai báo biến
Có 2 cách khai báo biến trong C++
a Khai báo không khởi tạo
tên_kiểu tên_biến_1 ;tên_kiểu tên_biến_2 ;tên_kiểu tên_biến_3 ;
Nhiều biến cùng kiểu có thể được khai báo trên cùng một dòng:
Ví
dụ:
void main()
{
int i, j ; // khai báo 2 biến i, j có kiểu nguyên
<kiểu> <tên biến>;
<kiểu> <tên biến 1>, <tên biến 2> ;
tên_kiểutên_biến_1, tên_biến_2, tên_biến_3;
Trang 21ode online: https://www.onlinegdb.com/online_c++_compiler
char c, d[100] ; // biến kí tự c, xâu d chứa tối đa 100 kí tự}
b Khai báo có khởi tạo
Biến có thể được khởi tạo giá trị ban đầu trong phần khai báo biến
int i = 2; // khai báo i và khởi tạo bằng 2
char c = 'Z'; // khai báo biến kí tự c và khởi tạo bằng 'A'
char d[100] = "Tin học";
// khai báo xâu kí tự d chứa dòng chữ "Tin học"
…
}
c Gán giá trị cho biến (phép gán)
Các ví dụ trên chúng ta đã sử dụng phép gán dù nó chưa được trình bày,đơn giản một phép gán mang ý nghĩa tạo giá trị mới cho một biến Khi biến đượcgán giá trị mới, giá trị cũ sẽ được tự động xoá đi bất kể trước đó nó chứa giá trịnào
3 Trang c
Trang 233 Vi dụ chương trình đơn giản
Ví dụ 1:
1 #include <iostream.h> // de su dung cout Khai báo thư viên
2 void main() // hàm chính của chương trình
//chu y, neu y=0 thì Chương trình dịch se bao loi divide by zero
4 Trang code online: https://www.onlinegdb.com/online_c++_compiler
const <kiểu> <tên hằng>=<giá trị>;
Ví
dụ :
Trang 248 cout<<”Tong cua 2 so vua nhap la: ”<<a+b<<”\n”;
9 cout<<”Hieu cua 2 so vua nhap la: ”<<a-b<<”\n”;
10 cout<<”Tich cua 2 so vua nhap la: ”<<a*b<<”\n”;
11 if (b!=0)
12 cout<<”Thuong cua 2 so vua nhap la: ”<<a/b;
13 return 0;
14 }
Trang 25§4 CÁC DỮ LIỆU CƠ SỞ
1 Khái niệm về kiểu dữ liệu
Thông thường dữ liệu hay dùng là số và chữ Tuy nhiên việc phân chia chỉ
2 loai dữ liệu là không đủ Để dễ dàng hơn cho lập trình, hầu hết các NNLT đềuphân chia dữ liệu thành nhiều kiểu khác nhau được gọi là các kiểu cơ bản haychuẩn Dưới đây chúng ta sẽ xét đến một số kiểu dữ liệu chuẩn được qui địnhsẵn bởi C++
Các phép toán áp dụng được trên kiểu int::
lẻ Tên kiểu: float
Kích thước: 4 bytes và có phạm vi biểu diễn giá trị –3.4E –38 3.4E +38
Trang 26Kiểu (Type) Độ lớn (Byte) Miền giá trị (Range) float 4 3.4*10–38 … 3.4*1038
double 8 1.7*10–308 … 1.7*10308
long double 10 3.4*10-4932 đến 1.1*104932
Các phép toán áp dụng được trên kiểu float:
• Các phép toán số học: + , -, *, / (không có phép toán %)
• Các phép toán so sánh: <, <=, >, >=, ==, !=24
Ví
dụ : 17.06 = 1.706*101
4 Kiểu luận lý:
false (sai): giá trị 0
true (đúng): giá trị khác 0, thường là 1Kiểu (Type) Độ lớn (Byte) Miền giá trị (Range)
Tên kiểu: char
lưu mã ASCII của 256 kí tự
gồm 2 loại có dấu và không dấu
Kiểu (Type) Độ lớn (Byte) Miền giá trị (Range)
Các phép toán áp dụng được trên kiểu char:
Trang 27• Các phép toán số học: +, -, *, /, %
• Các phép toán so sánh: <, <=, >, >=, ==, !=
Ví
dụ:
1 #include <iostream> // khai báo thư viện
Trang 28§ 5 PHÉP TOÁN, BIỂU THỨC, CÂU LỆNH GÁN
1 Phép toán
C++ có rất nhiều phép toán loại 1 ngôi, 2 ngôi và thậm chí cả 3 ngôi Cácthành phần tên gọi tham gia trong phép toán được gọi toán hạng, các kí hiệu phéptoán được gọi là toán tử
Toán hạng: hằng, biến, lời gọi hàm
Phép toán a / b (chia) được thực hiện theo kiểu của các toán hạng, tức nếu
cả hai toán hạng là số nguyên thì kết quả của phép chia chỉ lấy phần nguyên,ngược lại nếu 1 trong 2 toán hạng là thực thì kết quả là số thực
Trang 29<= Nhỏ hơnNhỏ hơn hoặc bằng 22
int, float, double,char
So sánh bằng
So sánh khác nhau
2222
Chú ý : Cần phân biệt phép toán gán (=) và phép toán so sánh (==) Phép
gán vừa gán giá trị cho biến vừa trả lại giá trị bất kỳ (là giá trị của toán hạng bên phải), trong khi phép so sánh luôn luôn trả lại giá trị 1 hoặc 0
Các phép toán lôgic : && (và), || (hoặc ), ! (không, phủ định)
Trang 30Hai toán hạng của loại phép toán này phải có kiểu lôgic tức chỉ nhận mộttrong hai giá trị "đúng" (được thể hiện bởi các số nguyên khác 0) hoặc "sai" (thể hiện bởi 0) Khi đó giá trị trả lại của phép toán là 1 hoặc 0 và được cho trong bảngsau:
Phép toán "và" đúng khi và chỉ khi hai toán hạng cùng đúng
Phép toán "hoặc" sai khi và chỉ khi hai toán hạng cùng sai
Phép toán "không" (hoặc "phủ định") đúng khi và chỉ khi toán hạng của
Ví
dụ:
! (4 + 3 < 7) // = 1 vì (4+3<7) bằng 0
5 || (4 >= 6) // = 1 vì có một hạng thức (5) đúng
(5 < !0) || (4 >= 6) // = 0 vì cả hai hạng thức đều sai
Chú ý: việc đánh giá biểu thức được tiến hành từ trái sang phải và sẽ dừng
khi biết kết quả mà không chờ đánh giá hết biểu thức
c Các phép toán tự tăng, giảm: i++, ++i, i , i
++ (tăng 1 đơn vị), (giảm 1 đơn vị)
Trang 31trong biểu thức Ngược lại i++ sẽ tăng i sau khi biểu thức được tính toán xong (vớigiá trị i cũ).
d Toán tử gán phức hợp (Toán tử khởi tạo).
Toán tử khởi tạo được sử dụng để lưu trữ một biến Toán hạng trái nên làmột giá trị trái và toán hạng phải có thế là một biếu thức bất kỳ
Ví
dụ :
1 #include <iostream.h> // khai báo thư viện
2 int main () // hàm chính của chương trình
Trang 32Trong đó :
• <BT1> thường là một biểu thức so sánh hay một biểu thức logic
• <BT2>, và <BT3> là một biểu thức thông thường nào đó Kiểu của biểuthức điều kiện phụ thuộc vào kiểu của <BT2>, <BT3>
Cách tính giá trị biểu thức điều kiện
Ghi
chú : Mỗi biến số hoặc hằng số đơn lẻ cũng là một biểu thức.
a Biểu thức số học
Biểu thức số học gồm các giá trị, hằng số, biến số và hàm số kiểu số
nguyên hoặc số thực và các toán tử số học
Ví
dụ : (x + y) * 2 - 4 ; 3 - x + sqrt(y) ; (-b + sqrt(delta)) / (2*a) ;
Quy tắc thực hiện tính toán:
1 Nếu có ngoặc thì thực hiện tính toán trong ngoặc trước
2 Nếu không có ngoặc thực hiện tính toán các phép toán *, /, % trước; +, sau
-3 Nếu mức độ ưu tiên của các phép toán bằng nhau, thực hiện tính toán từtrái sang phải
Ví
dụ : (x / y) * 2 % (8 + 10 - 2) với x, y là các biến kiểu số nguyên
Biểu thức trên sẽ được thực hiện như sau:
1 Tính kết quả của biểu thức (x / y)
2 Tính kết quả của biểu thức (8 + 10 - 2) = (18 - 2) = 16
Trang 333 Tính kết quả của biểu thức ((x / y) * 2)
4 Tính kết quả của biểu thức ((x / y) * 2) % 16
b Biểu thức quan hệ
Biểu thức quan hệ có cấu trúc:
Quy tắc thực hiện tính toán:
1 Thực hiện tính toán giá trị các biểu thức
2 Thực hiện tính toán biểu thức quan hệ
3 Kết quả: Biểu thức quan hệ cho kết quả kiểu logic
Ví
dụ : (5*10+3) >= (1-2*6)
Biểu thức trên sẽ được thực hiện như sau:
1 Tính kết quả của biểu thức (5*10+3) = (50+3) = 53
2 Tính kết quả của biểu thức (1-2*6) = (1-12) = -11
3 Tính kết quả của biểu thức 53>=-11 là đúng
4 Vậy biểu thức (5*10+3) >= (1-2*6) có kết quả là đúng
c Biểu thức logic
Biểu thức logic gồm các giá trị, hằng số, biến số, hàm số kiểu logic, biểu thức quan hệ và các toán tử logic
Quy tắc thực hiện tính toán:
1 Nếu có ngoặc thì thực hiện tính toán trong ngoặc trước
2 Nếu không có ngoặc thì thực hiện tính toán phép toán logic ! trước; tiếptheo là biểu thức quan hệ; cuối cùng là các phép toán logic &&, ||
3 Nếu mức độ ưu tiên của các phép toán như nhau thì thực hiện tính toán
từ trái sang phải
Kết quả: Biểu thức logic cho kết quả kiểu logic.
Ví dụ: true && !(5>6)
Biểu thức trên sẽ được thực hiện như sau:
1 Tính kết quả của biểu thức (5>6) là false
2 Tính kết quả của biểu thức !(false) là true
3 Tính kết quả của biểu thức true && true là true
Vậy biểu thức true && !(5>6) có kết quả là true
<biểu thức 1> <toán tử quan hệ> <biểu thức 2>
Trang 34 Có thể gán giá trị của biến kiểu số nguyên cho biến kiểu số thực.
Nếu gán giá trị của biến kiểu số thực cho biến kiểu số nguyên thì biếnkiểu số nguyên sẽ lưu trữ giá trị là phần nguyên
Ví dụ:
1 int a; //khai báo biến a kiểu số nguyên
2 a=10; //gán giá trị 10 cho biến a
3 bool b; //khai báo biến b kiểu logic
4 b=5>6; //gán giá trị của biểu thức quan hệ 5>6 cho biến b
5 float c; //khai báo biến c kiểu số thực
6 c=a; //gán giá trị của biến a cho biến c
7 c=20.5; //gán giá trị 20.5 cho biến c
8 a=c; //gán giá trị của biến c cho biến a
<tên biến> = <biểu thức>
Trang 35cin >> <tên biến>;
TỪ BÀN PHÍM DÙNG CIN, COUT
1 Nhập dữ liệu từ bàn phím
Nhập dữ liệu từ bàn phím, ở mức độ cơ bản, là việc người dùng nhập số, kí
tự vào chương trình thông qua bàn phím máy tính Số và kí tự do người dùng nhậpvào sẽ được lưu trữ trong các biến tương ứng
Trong ngôn ngữ C++, chúng ta có thể dùng cấu trúc lệnh sau đây để thựchiện việc nhập dữ liệu từ bàn phím:
hoặc:
Câu lệnh trên bao gồm:
Hàm cin - hàm nhập chuẩn của C++
Toán tử >> cho phép gán giá trị vào biến Toán tử này tương thích
với nhiều kiểu dữ liệu khác nhau nhờ đã nạp chồng (overload), vấn đề này chúng
ta chưa cần phải quan tâm vào lúc này
<tên biến> là tên của biến mà các em muốn nhập dữ liệu vào
Và đừng quên dấu ; để thông báo kết thúc câu lệnh
Khi đọc đến câu lệnh trên, chương trình sẽ dừng lại để người dùngnhập dữ liệu vào, sau đó dữ liệu sẽ được lưu trữ dưới dạng giá trị của biến đó
Lệnh sau đây là câu lệnh hợp lệ:
cin >> x, y, z; // ý nghĩa chỉ nhập trị cho biến x
cin >> x >> y >> z; // Để nhập đầy đủ trị cho 3 biến x, y và z:
cin >> biến_1 >> biến_2 >> biến_3;
Trang 36Trong đó: Biểu thức có thể chứa biến, hằng, hay kết quả trả về của một hàm.
Câu lệnh trên bao gồm:
Hàm cout - hàm xuất chuẩn của C++
Toán tử << cho phép xuất dữ liệu ra
<dữ liệu> như thầy đã nói thì có thể là kí tự, xâu kí tự hoặc số, cũng
có thể là tên của biến hoặc biểu thức
cout<<"MON TIN HOC 11 \n"<<endl<<"************************";
cout<<biểu thức 1<<biểu thức<< <<biểu thức n;
Trang 37Thư viên <iostream> là thư viện các hàm nhập - xuất chuẩn như cin và cout.
Khai báo thư viện ở đầu chương trình bằng cách dùng cấu trúc:
#include <tên thư viện>:
Ví
dụ: #include <iostream>
b Không gian tên std:
Không gian tên là ngữ cảnh cho các đối tượng xác định
Lấy ví dụ lớp 11A1 và 11A2 có hai bạn cùng tên, chẳng hạn là tên Sơn, đểphân biệt hai bạn qua tên thì có thể gọi Sơn lớp A1 và Sơn lớp A2 hoặc nếu đãnhắc đến lớp nào từ trước thì có thể biết là đang nói đến bạn Sơn nào Trong ví dụtrên, A và B chính là không gian tên
Không gian tên std cho phép người dùng sử dụng các hàm chuẩn như cin,
cout, endl,v.v
}
// in kết quả
// nhập dữ liệucout << "Hãy nhập chiều dài: " ; cin >> cd ;
cout << "Hãy nhập chiều rộng: " ; cin >> cr ;cout << "Diện tích = " << cd * cr << '\n' ; cout << "Chu vi = " << 2 * (cd + cr) << '\n';
return ;
// khai báo tệp nguyên mẫu để dùng được cin, cout
// đây là hàm chính của chương trình
// khai báo các biến có tên cd, cr để chứa độ dài các cạnh
#include <iostream.h>
void main()
{
float cd, cr ;
Trang 38Chúng ta cần khai báo không gian tên ở phần khai báo của chương trình
std::cout << "Patience is bitter" << std::endl << "but its fruit is sweet.";
4 Ví dụ chương trình nhập – xuất trong C++
8 cout << "Nhap so hang thu hai: "; //Xuất ra dòng chữ "Nhap so hang thu
hai"
10 cout << "Tong hai so hang la: " <<
a+b << endl; //Xuất ra dòng chữ "Tong hai so hang la: " và kết quả, sau đó xuống
Trang 39§7 BÀI TẬP THỰC HÀNH CHƯƠNG II
Bài tập 1: Hãy viết đoạn chương trình sau, kiểm tra chương trình có lỗi haykhông? Chạy chương trình và xem kết quả
Bài tập 2 : Viết chương trình C++ để khai báo 2 biến nguyên và một biến
thực, sau đó in kết quả trên màn hình
Yêu cầu: Viết chương trình C++ để khai báo hai biến nguyên, một biến
thực và gán các giá trị tương ứng 8, 16 và 15.8 cho chúng Sau đó in kết quả trênmàn hình Chạy chương trình sau kiểm tra lỗi, và xem kết quả
1 #include <cstdlib> // Khai báo thư viện cstdlib
2 #include <iostream> // Khai báo thư viện iostream
3 using namespace std; // Khai báo không gian tên
4 int main() // Hàm chính của chương trình
6 int a; // Khai báo biến a kiểu số nguyên
7 int b; // Khai báo biến b kiểu số nguyên
8 float c; // Khai báo biến c kiểu số thực
10 b=16; // Gán giá trị cho biến b
11 c=15.8; // Gán giá trị cho biến c
12 cout<<"a="<<a<<"\t"<<"b="<<b<<"\t"<<"c="<<c; // Xuất ra màn hình kết quả
Trang 40Yêu cầu: Viết chương trình C++ để nhắc người dùng nhập tên của họ, sau
đó in kết quả trên màn hình
Chạy chương trình sau và xem kết quả
1 #include <cstdlib> // khai báo thư viện cstdlib
2 #include <iostream> // khai báo thư viện iostream
3 using namespace std; // khai báo không gian tên std
6 char name[20]; // khai báo biến name, kiêu dữ liệu kí tự, có độ dài 20
7 cout<<"Hay nhap ten cua ban:"; // xuât ra màn hình dòng thông báo
8 cin>>name; // nhập tên vào từ bàn phím
9 cout<<"Xin chao "<<name<<"! \n"; // thông báo ra màn hình kết quả
Tìm tổng, hiệu, tích và thương của hai số nguyên và in kết quả ra màn hình
Yêu cầu: Giả sử có 2 số nguyên cho trước, bạn hãy tính tổng, hiệu, tích và
thương của hai số rồi in kết quả ra màn hình