Mục tiêu của Giáo trình Lập trình căn bản là phân tích chương trình: xác định nhiệm vụ chương trình (phải làm gì), xác định dữ liệu và cấu trúc dữ liệu của hệ thống. Phân tích và xây dựng thuật toán. Thiết kế chương trình: tìm giải pháp kỹ thuật (làm thế nào) đối với những công việc đã xác định trong giai đoạn phân tích. Mời các bạn cùng tham khảo!
Trang 1ỦY BAN NHÂN DÂN TỈNH AN GIANG TRƯỜNG CAO ĐẲNG NGHỀ AN GIANG
(Ban hành theo Quyết định số: /QĐ-CĐN ngày tháng năm 20
của Hiệu trưởng trường Cao đẳng nghề An Giang)
Tác giả: Vương Thị Minh Nguyệt Năm ban hành : 2017
Trang 2LỜI GIỚI THIỆU
Trước đây, để tạo ra chương trình máy tính người ta phải làm việc trực tiếp với các con số 0 hoặc 1, hay còn gọi là ngôn ngữ máy Công việc này vô cùng khó khăn, chiếm nhiều thời gian, công sức và đặc biệt dễ gây ra lỗi Để khắc phục nhược điểm này, người ta đề xuất ra hợp ngữ, một ngôn ngữ cho phép thay thế dãy 0 hoặc 1 này bởi các từ gợi nhớ tiếng Anh Tuy nhiên, cải tiến này vẫn còn chưa thật thích hợp với
đa số người dùng máy tính, những người luôn mong muốn các lệnh chính là ý nghĩa của các thao tác mà nó mô tả Vì vậy, ngay từ những năm 1950, người ta đã xây dựng những ngôn ngữ lập trình mà câu lệnh của nó gần với ngôn ngữ tự nhiên Các ngôn ngữ này được gọi là ngôn ngữ lập trình bậc cao
Lập trình căn bản với Pascal và C, C++
Đây là 2 ngôn ngữ căn bản và phổ biến nhất mà hầu như sinh viên nào cũng cần phải học qua trong giai đoạn mới bắt đầu học lập trình
Giáo trình này được thiết kế theo từng mô đun/ môn học thuộc hệ thống mô đun/môn học của một chương trình, để đào tạo hoàn chỉnh nghề Lập trình máy tính
ở cấp trình độ bậc cao và được dùng làm giáo trình cho học viên trong các khóa đào tạo, cũng có thể được sử dụng cho đào tạo ngắn hạn hoặc cho các công nhân kỹ thuật Mục tiêu thực hiện của môn học:
- Phân tích chương trình: xác định nhiệm vụ chương trình (phải làm gì), xác định
dữ liệu và cấu trúc dữ liệu của hệ thống Phân tích và xây dựng thuật toán
- Thiết kế chương trình: tìm giải pháp kỹ thuật (làm thế nào) đối với những công việc đã xác định trong giai đoạn phân tích
- Viết chương trình
- Vận dụng điều kiện, trợ giúp môi trường của ngôn ngữ lập trình, chẳng hạn: trình biên tập mã lệnh
- Mô tả được hằng và biến dùng trong chương trình
- Vận dụng quy tắc cú pháp của ngôn ngữ lập trình
- Vận dụng các cấu trúc điều khiển, cấu trúc lặp
Trang 3- Trình bày chương trình có chú thích (tóm tắt) cho từng đoạn mã, thuận lợi cho việc theo dõi chức năng của chúng
Nội dung chính của môn học:
CHƯƠNG 1: THUẬT TOÁN
CHƯƠNG 2: GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH C++
CHƯƠNG 3: CÁC THÀNH PHẦN VÀ CÁC KIỂU DỮ LIỆU CƠ BẢN CHƯƠNG 4: CÁC CẤU TRÚC ĐIỀU KHIỂN
để cuốn giáo trình ngày một hoàn thiện hơn
An Giang, ngày tháng năm 20
Tham gia biên soạn
Vương Thị Minh Nguyệt
Trang 4MỤC LỤC
LỜI GIỚI THIỆU 1
CHƯƠNGTRÌNH MÔN HỌC 6
CHƯƠNG 1: THUẬT TOÁN 9
I.KHÁI NIỆM 9
II.CÁC ĐẶC TRƯNG CỦA THUẬT TOÁN 10
III PHƯƠNG PHÁP BIỂU DIỄN THUẬT TOÁN 10
BÀI TẬP 16
CHƯƠNG 2: GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH C++ 17
I.LỊCH SỬ HÌNH THÀNH 17
II.ĐẶC ĐIỂM 17
III.CẤU TRÚC MỘT CHƯƠNG TRÌNH C++ 18
IV.MỘT SỐ VÍ DỤ MẪU 19
V CÀI ĐẶT CHƯƠNG TRÌNH 20
VI KHỞI ĐỘNG CHƯƠNG TRÌNH 20
VII.SOẠN THẢO CHƯƠNG TRÌNH 21
VIII.THOÁT KHỎI CHƯƠNG TRÌNH 23
BÀI TẬP 23
CHƯƠNG 3: CÁC THÀNH PHẦN VÀ CÁC KIỂU DỮ LIỆU CƠ BẢN 24
I.CÁC THÀNH PHẦN 24
II.CÁC KIỂU KIỂU DỮ LIỆU CƠ BẢN 26
III HẰNG 28
VI CÁC PHÉP TOÁN CỦA C++ 29
V.XUẤT, NHẬP DỮ LIỆU 32
BÀI TẬP 39
CHƯƠNG 4: CÁC CẤU TRÚC ĐIỀU KHIỂN 40
I.LỆNH ĐƠN VÀ LỆNH PHỨC 40
II.CẤU TRÚC ĐIỀU KIỆN if else 41
III CẤU TRÚC LỰA CHỌN switch case 44
Trang 5IV CÁC CẤU TRÚC LẶP 46
V.CÂU LỆNH break, continue, goto và hàm exit 52
BÀI TẬP 55
CHƯƠNG 5: HÀM 57
I.KHÁI NIỆM 57
II.KHAI BÁO HÀM 57
III KẾT QUẢ TRẢ VỀ CỦA HÀM 60
IV CÁCH TRUYỀN THAM SỐ CHO HÀM 60
V.ĐỆ QUI 62
BÀI TẬP 66
CHƯƠNG 6: MẢNG 67
I.KHÁI NIỆM 67
II.KHAI BÁO MẢNG 67
III.KHỞI TẠO MẢNG 68
IV DÙNG MẢNG LÀM THAM SỐ 70
V MẢNG NHIỀU CHIỀU 72
BÀI TẬP 74
CHƯƠNG 7: CON TRỎ 75
I.KHÁI NIỆM 76
II.CON TRỎ VÀ ĐỊA CHỈ 76
III.KHAI BÁO BIẾN KIỂU CON TRỎ 78
IV CÁC PHÉP TOÁN 78
V.CON TRỎ MẢNG 80
VI CON TRỎ HẰNG 82
VII.CON TRỎ KHÔNG KIỂU 83
VIII.KHỞI TẠO CON TRỎ 84
IX CON TRỎ TRỎ TỚI CON TRỎ 85
X.CON TRỎ HÀM 85
BÀI TẬP 87
CHƯƠNG 8: CẤU TRÚC 88
I.KHÁI NIỆM 88
II.KHAI BÁO CẤU TRÚC 88
Trang 6III.TRUY CẬP ĐẾN CÁC THÀNH PHẦN CỦA CẤU TRÚC 92
IV CON TRỎ CẤU TRÚC VÀ ĐỊA CHỈ CẤU TRÚC 95
BÀI TẬP 98
CÁC THUẬT NGỮ CHUYÊN MÔN 99
TÀI LIỆU THAM KHẢO 99
Trang 7CHƯƠNGTRÌNH MÔN HỌC Tên môn học: LẬP TRÌNH CĂN BẢN
- Thuộc nhóm môn: Cơ sở
- Được bố trí sau các môn: Môn học được bố trí sau khi học sinh học xong các môn: toán cho tin học và tin học căn bản
- Phân tích chương trình: xác định nhiệm vụ chương trình (phải làm gì), xác định
dữ liệu và cấu trúc dữ liệu của hệ thống Phân tích và xây dựng thuật toán
- Thiết kế chương trình: tìm giải pháp kỹ thuật (làm thế nào) đối với những công việc đã xác định trong giai đoạn phân tích
2 Về kỹ năng
- Vận dụng điều kiện, trợ giúp môi trường của ngôn ngữ lập trình, chẳng
- Trình bày chương trình có chú thích (tóm tắt) cho từng đoạn mã, thuận lợi cho việc theo dõi chức năng của chúng
- Thử nghiệm được chương trình
3 Về năng lực tự chủ và trách nhiệm
- Nghiêm túc trong học tập và thực hiện tốt các yêu cầu được giao
- Luôn động não suy nghĩ Thường xuyên luyện tập tư duy trong việc học
- Thực hiện học tập và thực hành nhóm
III NỘI DUNG MÔN HỌC:
Chương 1: Thuật toán
I Khái niệm
II Các đặc trưng của thuật toán
III Phương pháp biểu diễn
Chương 2: Giới thiệu ngôn ngữ lập trình C++
I Lịch sử hình thành
II Đặc điểm
Trang 8III Cấu trúc của một chương trình C++
IV Một số ví dụ mẫu
V Cài đặt chương trình
VI Khởi động chương trình
VII Soạn thảo chương trình
VIII Thoát khỏi chương trình
Chương 3: Các thành phần và các kiểu dữ liệu cơ bản
II Cấu trúc điều kiện: if else
III Cấu trúc lựa chọn: switch case
IV Các cấu trúc lặp
V Câu lệnh break, continue, goto và hàm exit
Chương 5: Hàm
I Khái niệm
II Khai báo hàm
III Kết quả trả về của hàm – Lệnh return
IV Cách truyền tham số cho hàm
V Đệ qui
Chương 6: Mảng
I Khái niệm
II Khai báo mảng
III Khởi tạo mảng
IV Dùng mảng làm tham số
Chương 7: Con trỏ
I Khái niệm
II Toán tử lấy địa chỉ (&)
III Toán tử tham chiếu (*)
IV Khai báo biến kiếu con trỏ
V Các phép toán
Trang 9VI Con trỏ hằng
VII Con trỏ mảng
VIII Khởi tạo con trỏ
IX Con trỏ trỏ tới con trỏ
X Con trỏ không kiểu
XI Con trỏ hàm
Chương 8: Cấu trúc
I Khái niệm cấu trúc
II Khai báo cấu trúc
III Truy cập đến các thành phần của cấu trúc
IV Ví dụ cấu trúc
Trang 10CHƯƠNG 1 THUẬT TOÁN Giới thiệu
Thuật toán là một hệ thống chặt chẽ và rõ ràng các qui tắc nhằm xác định một dãy các thao tác trên những đối tượng, sao cho sau một số hữu hạn bước thực hiện các
Ví dụ 1: Giải phương trình bậc hai ax2 + bx + c = 0
Trang 11II CÁC ĐẶC TRƯNG CỦA THUẬT TOÁN
1 Tính xác định
Ở mỗi bước của thuật toán, các thao tác phải hết sức rõ ràng Không thể gây nên
sự nhập nhằng, lẫn lộn, tùy tiện Nói cách khác là trong cùng một điều kiện, hai bộ xử
lí cùng thực hiện một bước của thuật toán thì phải cho cùng một kết quả
- Thời gian cần thiết để chạy
- Có dễ hiểu đối với con người không
- Có dễ cài đặt trên máy không
III PHƯƠNG PHÁP BIỂU DIỄN THUẬT TOÁN
Khi chứng minh hoặc giải một bài toán trong toán học, ta thường dùng những ngôn từ toán học như : "ta có", "điều phải chứng minh", "giả thuyết", và sử dụng những phép suy luận toán học như phép suy ra, tương đương, Thuật toán là một phương pháp thể hiện lời giải bài toán nên cũng phải tuân theo một số quy tắc nhất định Ðể có thể truyền đạt thuật toán cho người khác hay chuyển thuật toán thành chương trình máy tính, ta phải có phương pháp biểu diễn thuật toán Có 3 phương pháp biểu diễn thuật toán : Dùng ngôn ngữ tự nhiên, dùng lưu đồ - sơ đồ khối, dùng
mã giả
Trang 121 Ngôn ngữ tự nhiên
Trong cách biểu diễn thuật toán theo ngôn ngữ tự nhiên, người ta sử dụng ngôn ngữ thường ngày để liệt kê các bước của thuật toán (ví dụ 1sử dụng ngôn ngữ tự
nhiên) Phương pháp biểu diễn này không yêu cầu người viết thuật toán cũng như
người đọc thuật toán phải nắm các quy tắc Tuy vậy, cách biểu diễn này thường dài dòng, không thể hiện rõ cấu trúc của thuật toán, đôi lúc gây hiểu lầm hoặc khó hiểu cho người đọc Gần như không có một quy tắc cố định nào trong việc thể hiện thuật toán bằng ngôn ngữ tự nhiên Tuy vậy, để dễ đọc, ta nên viết các bước con lùi vào bên phải và đánh số bước theo quy tắc phân cấp như 1, 1.1, 1.1.1
2 Lưu đồ - sơ đồ khối
Lưu đồ hay sơ đồ khối là một công cụ trực quan để diễn đạt các thuật toán Biểu diễn thuật toán bằng lưu đồ sẽ giúp người đọc theo dõi được sự phân cấp các trường hợp và quá trình xử lý của thuật toán Phương pháp lưu đồ thường được dùng trong những thuật toán có tính rắc rối, khó theo dõi được quá trình xử lý
Ðể biểu diễn thuật toán theo sơ đồ khối, ta phải phân biệt hai loại thao tác Một
thao tác là thao tác chọn lựa dựa theo một điều kiện nào đó Chẳng hạn : thao tác "nếu
a = 0 thì kết thúc thuật toán, nếu a ≠ 0 thì tính delta" là thao tác chọn lựa Các thao
tác còn lại không thuộc loại chọn lựa được xếp vào loại hành động Chẳng hạn, "tính
x
2
2
" là một thao tác thuộc loại hành động
Thao tác chọn lựa (decision)
Thao tác chọn lựa được biểu diễn bằng hình thoi bên trong chứa biểu thức điều kiện
x
2
1
Trang 13Khi dùng ngôn ngữ tự nhiên, ta mặc định hiểu rằng quá trình thực hiện sẽ lần lượt đi từ bước trước đến bước sau (trừ khi có yêu cầu nhảy sang bước khác) Trong ngôn ngữ lưu đồ, do thể hiện các bước bằng hình vẽ và có thể đặt các hình vẽ này ở vị trí bất kỳ nên ta phải có phương pháp để thể hiện trình tự thực hiện các thao tác Hai bước kế tiếp nhau được nối bằng một cung, trên cung có mũi tên để chỉ hướng thực hiện
Từ thao tác chọn lựa có thể có đến hai hướng đi, một hướng ứng với điều kiện thỏa và một hướng ứng với điều kiện không thỏa Do vậy, ta dùng hai cung xuất phát
từ các đỉnh hình thoi, trên mỗi cung có ký hiệu Ð/Ðúng/Y/Yes để chỉ hướng đi ứng với điều kiện thỏa và ký hiệu S/Sai/N/No để chỉ hướng đi ứng với điều kiện không thỏa
Ðiểm cuối (terminator)
Ðiểm cuối là điểm khởi đầu và kết thúc của thuật toán, được biểu diễn bằng hình ovan, bên trong có ghi chữ bắt đầu/start/begin hoặc kết thúc/end Ðiểm cuối chỉ có cung đi ra (điểm khởi đầu) hoặc cung đi vào (điểm kết thúc) Xem lưu đồ thuật toán giải phương trình bậc hai ở trên để thấy cách sử dụng của điểm cuối
Ðiểm nối (connector)
Ðiểm nối được dùng để nối các phần khác nhau
của một lưu đồ lại với nhau Bên trong điểm nối, ta
đặt một ký hiệu để biết sự liên hệ giữa các điểm nối
Ðiểm nối sang trang (off-page connector)
Delta > 0
Phương trình có 2 nghiệm phân biệt
x1, x2
Delta = 0
Đ
S
Trang 14Tương tự như điểm nối, nhưng điểm nối sang trang được dùng khi lưu đồ quá lớn, phải vẽ trên nhiều trang Bên trong điểm nối sang trang ta cũng đặt một ký hiệu
để biết được sự liên hệ giữa điểm nối của các trang
Ở trên chỉ là các ký hiệu cơ bản và thường được dùng nhất Trong thực tế, lưu
đồ còn có nhiều ký hiệu khác nhưng thường chỉ dùng trong những lưu đồ lớn và phức tạp Ðối với các thuật toán trong cuốn sách này, ta chỉ cần sử dụng các ký hiệu trên là
đủ
Ví dụ: Vẽ lưu đồ giải phương trình bậc hai ax2
+ bx + c = 0
Trang 15delta b
x
2
1
Phương trình có nghiệm kép
a
b x
2
Phương trình vô nghiệm
Trang 16Bảng ký hiệu
Ý nghĩa Ký hiệu
Điểm đầu, cuối
Thao tác chọn lựa
sẽ tìm hiểu về thao tác lặp trong các bài sau)
Khi thể hiện thuật toán bằng mã giả, ta sẽ vay mượn các cú pháp của một ngôn
ngữ lập trình nào đó để thể hiện thuật toán Tất nhiên, mọi ngôn ngữ lập trình đều có những thao tác cơ bản là xử lý, rẽ nhánh và lặp Dùng mã giả vừa tận dụng được các khái niệm trong ngôn ngữ lập trình, vừa giúp người cài đặt dễ dàng nắm bắt nội dung thuật toán Tất nhiên là trong mã giả ta vẫn dùng một phần ngôn ngữ tự nhiên Một khi đã vay mượn cú pháp và khái niệm của ngôn ngữ lập trình thì chắc chắn mã giả sẽ
bị phụ thuộc vào ngôn ngữ lập trình đó Chính vì lý do này, chúng ta chưa vội tìm hiểu về mã giả trong bài này (vì chúng ta chưa biết gì về ngôn ngữ lập trình!) Sau khi tìm hiểu xong bài về thủ tục - hàm bạn sẽ hiểu mã giả là gì !
Một đoạn mã giả của thuật toán giải phương trình bậc hai
if Delta > 0 then begin
x1=(-b-sqrt(delta))/(2*a)
x2=(-b+sqrt(delta))/(2*a)
KH
#STT
Trang 17xuất kết quả : phương trình có hai nghiệm là x1 và x2
xuất kết quả : phương trình vô nghiệm
BÀI TẬP: xây dựng thuật toán và vẽ sơ đồ khối của các bài toán sau:
1 Tính n!
2 Giải phương trình: ax + b = 0
3 Tính chu vi, diện tích hình tròn biết bán kính r=3cm
4 Đưa ra màn hình dòng chữ: "Mon hoc lap trinh can ban"
Trang 18CHƯƠNG 2 GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH C++
- Mô tả được lịch sử hình thành và phát triển của ngôn ngữ C++
- Trình bày được cấu trúc của một chương trình C++
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 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 hỗ trợ cho các 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ừ
đó
II ĐẶC ĐIỂM
Ngôn ngữ lập trình C là một ngôn ngữ lập trình hệ thống rất mạnh 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
Trang 19ngườ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 vừa 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
Ngôn ngữ C có những đặc điểm cơ bản sau:
* Tính cô đọng (compact): C chỉ có 32 từ khóa chuẩn và 40 toán tử chuẩn,
nhưng hầu hết đều được biểu diễn bằng những chuỗi ký tự ngắn gọn
* Tính cấu trúc (structured): C có một tập hợp những chỉ thị của lập trình
như cấu trúc lựa chọn, lặp… Từ đó các chương trình viết bằng C được tổ chức rõ ràng, dễ hiểu
* Tính tương thích (compatible): C có bộ tiền xử lý và một thư viện chuẩn
vô cùng phong phú nên khi chuyển từ máy tính này sang máy tính khác các chương trình viết bằng C vẫn hoàn toàn tương thích
* Tính linh động (flexible): C là một ngôn ngữ rất uyển chuyển và cú pháp,
chấp nhận nhiều cách thể hiện, có thể thu gọn kích thước của các mã lệnh làm chương trình chạy nhanh hơn
* Biên dịch (compile): C cho phép biên dịch nhiều tập tin chương trình riêng
rẽ thành các tập tin đối tượng (object) và liên kết (link) các đối tượng đó lại với nhau thành một chương trình có thể thực thi được (executable) thống nhất
III CẤU TRÚC MỘT CHƯƠNG TRÌNH C++
Chương trình C++ là một chương trình tập hợp nhiều hàm trong đó phải có một hàm chính là main()
Hàm là đoạn mã lệnh độc lập được đặt tên và thực hiện một công việc xác định khi được gọi đến Một hàm có thể gọi đến nhiều hàm khác
Hàm main() là hàm được máy tính gọi đến trước tiên khi thực hiện chương trình Một chương trình c++ thường có cấu trúc như sau:
/* Các chỉ thị tiền xử lý */
#include
#define
typedef /* định nghĩa các kiểu dữ liệu */
/* khai báo nguyên mẫu các hàm */
Kiểu_dữ_liệu tên_hàm(tham_số);
khai báo các biến toàn cục;
/* chương trình chính */
Trang 20Ví dụ : Xuất " Chao cac ban"
#include <stdio.h> // chỉ thị tiền xử lý
void main() // hàm main()
int x,y,dt; // khai báo biến
printf(“\nNhap chieu dai:”);scanf(“%d”,&x); // hàm đọc từ bàn phím
printf(“\nNhap chieu rong:”);scanf(“%d”,&y);
Trang 21V CÀI ĐẶT CHƯƠNG TRÌNH
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 được sử dụng ở đây là Turbo C 3.0
Chạy Turbo C cũng giống như chạy các chương trình khác trong môi trường DOS hay Windows, màn hình sẽ xuất hiện menu của Turbo C có dạng như sau:
Dòng trên cùng gọi là thanh menu (menu bar) Mỗi mục trên thanh menu lại 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 Chẳng hạn khi gõ phím F1 thì ta có được một hệ thống trợ giúp mà ta có thể tham khảo nhiều thông tin
bổ ích
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 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 đó (ký tự có màu sắc khác với các ký tự khác) Chẳng hạn để chọn mục File ta gõ Alt-F (F là ký tự đại diện của File)
VI KHỞI ĐỘNG CHƯƠNG TRÌNH
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 được sử dụng ở đây là Turbo C 3.0
Chạy Turbo C cũng giống như chạy các chương trình khác trong môi trường DOS hay Windows, màn hình sẽ xuất hiện menu của Turbo C có dạng như sau:
Trang 22VII SOẠN THẢO CHƯƠNG TRÌNH
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 xem thông tin trợ giúp:
- F1: Xem toàn bộ thông tin trong phần trợ giúp
- Ctrl-F1: Trợ giúp theo ngữ cảnh (tức là khi con trỏ đang ở trong một từ nào
đo, chẳng hạn int mà bạn gõ phím Ctrl-F1 thì bạn sẽ có được các thông tin về kiểu dữ liệu int)
Các phím di chuyển con trỏ trong vùng soạn thảo chương trình:
Trang 24Các phím, phím tắt thực hiện các thao tác khác:
Thực hiện chương trình
Để thực hiện chương trình hãy dùng Ctrl-F9 (giữ phím Ctrl và gõ phím F9)
Ví dụ: Thực hiện chương trình vừa soạn thảo xong và quan sát trên màn hình để thấy kết quả của việc thực thi chương trình sau đó gõ phím bất kỳ để trở lại với Turbo
Với một chương trình đã có trên đĩa, ta có thể mở nó ra để thực hiện hoặc sửa chữa bổ sung Để mở một chương trình ta dùng File/Open hoặc gõ phím F3 Sau đó
gõ tên tập tin vào hộp File Name hoặc lựa chọn tập tin trong danh sách các tập tin rồi
gõ Enter
VIII THOÁT KHỎI CHƯƠNG TRÌNH
Dùng File/Exit hoặc Alt-X
BÀI TẬP
1 Viết chương trình tính chu vi, diện tích hình tròn biết bán kính
2 Viết chương trình tính chu vi hình chữ nhật biết chiều dài và chiều rộng
3 Viết chương trình xuất ra dòng "hello word"
4 Viết chương trình nhập vào thông tin của một người (họ, tên, tuổi, địa chỉ ) rồi xuất theo thứ tự các thông tin đó ra màn hình
Trang 25CHƯƠNG 3 CÁC THÀNH PHẦN VÀ CÁC KIỂU DỮ LIỆU CƠ BẢN Giới thiệu
Bài này sẽ trình bày cách sử dụng hệ thống kí hiệu và từ khóa, trình bày các kiểu
dữ liệu căn bản, các loại biến, hằng biểu thức cho từng chương trình cụ thể, so sánh được các lệnh, khối lệnh, thực hiện được việc chạy chương trình
Mục tiêu
- Sử dụng được hệ thống kí hiệu và từ khóa
- Trình bày được các kiểu dữ liệu căn bản
- Vận dụng được các loại biến, hằng biểu thức cho từng chương trình cụ thể
Ngôn ngữ C được xây dựng trên bộ ký tự sau:
- 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 cách tab, dấu xuống dòng
- Dấu gạch nối dưới: _
2 Từ khoá
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ừ Ta không được dùng từ khóa
để đặt cho các tên của riêng mình Các từ khóa của Turbo C 3.0 bao gồm:
Asm auto break case cdecl char
Class const continue _cs default delete
Trang 26do double _ds else enum _es
extern _export far _fastcall float f or
friend goto huge if inline int
interrupt _loadds long near new operator
pascal private protected public register return
_saveregs _seg short signed sizeof _ss
static struct switch template this typedef
union unsigned virtual void volatile while
3 Tên (định danh)
Tên gọi của các thành phần trong chương trình được gọi là định danh(Identifier) Định danh được sử dụng để xác định các thành phần như biến , kiểu, phương thức(method) hay còn được gọi là hàm, đối tượng, lớp
Trong C định danh là một dãy các ký tự gồm các chữ cái, chữ số và một số các
ký hiệu như: ký tự gạch dưới nối câu ‟_‟ , ký hiệu tiền tệ $ và không được bắt đầu bằng chữ số
Chú ý: C phân biệt chữ hoa và chữ thường, ví dụ HUE và hue là hai định danh khác nhau Độ dài(số ký tự) của định danh trong C về mặt lý thuyết là không giới hạn
Ví dụ:
- Các định danh viết đúng: bai_1, hue,
- Các định danh viết sai: 24gio bai tap,
Để trở thành một nhà lập trình chuyên nghiệp, chúng ta nên sử dụng cách đặt tên theo một chuẩn nhất định để dễ phân biệt được các loại khác nhau của các thành phần
sử dụng Chúng ta qui ước cách đặt tên thống nhất như sau:
Định danh cho các lớp: chữ cái đầu của mỗi từ trong định danh đều viết hoa, ví
Trang 27char ten[50]; /* khai bao bien ten kieu char 50 ky tu */
/*Xuat chuoi ra man hinh*/
printf(“Xin cho biet ten cua ban !”);
scanf(“%s”,ten); /*Doc vao 1 chuoi la ten cua ban*/
printf(“Xin chao ban %s\n ”,ten);
printf(“Chao mung ban den voi Ngon ngu lap trinh C”);
/*Dung chuong trinh, cho go phim*/
Có hai kiểu dữ liệu char: kiểu signed char và unsigned char
Kiểu Phạm vi biểu diễn Số ký
tự
Kích thước
Trang 28char (signed char) -128 đến 127 256 1 byte
unsigned char 0 đến 255 256 1 byte
Ví dụ sau minh hoạ sự khác nhau giữa hai kiểu dữ liệu trên:
Xét đoạn chương trình sau:
Nhưng cả ch1 và ch2 đều biểu diễn cùng một ký tự có mã 200
Phân loại ký tự: Có thể chia 256 ký tự làm ba nhóm:
Nhóm 1: Nhóm các ký tự điều khiển có mã từ 0 đến 31 Chẳng hạn ký tự mã 13 dùng để chuyển con trỏ về đầu dòng, ký tự 10 chuyển con trỏ xuống dòng dưới (trên cùng một cột) Các ký tự nhóm này nói chung không hiển thị ra màn hình
Nhóm 2: Nhóm các ký tự văn bản có mã từ 32 đến 126 Các ký tự này có thể được đưa ra màn hình hoặc máy in
Nhóm 3: Nhóm các ký tự đồ hoạ có mã số từ 127 đến 255 Các ký tự này có thể đưa ra màn hình nhưng không in ra được (bằng các lệnh DOS)
2 Kiểu số nguyên:
Trong C cho phép sử dụng số nguyên kiểu int, số nguyên dài kiểu long và số nguyên không dấu kiểu unsigned Kích cỡ và phạm vi biểu diễn của chúng được chỉ
ra trong bảng dưới đây:
Kiểu Phạm vi biểu diễn Kích
thước Int -32768 đến 32767 2 byte
unsigned int 0 đến 65535 2 byte
Long -2147483648 đến
2147483647
4 byte
unsigned long 0 đến 4294967295 4 byte
Chú ý: Kiểu ký tự cũng có thể xem là một dạng của kiểu nguyên
Trang 293 Kiểu dấu phảy động (số thực):
Trong C cho phép sử dụng ba loại dữ liệu dấu phảy động, đó là float, double và
long double Kích cỡ và phạm vi biểu diễn của chúng được chỉ ra trong bảng dưới
b 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
Ví dụ: 34.2 -344.122
Dạng khoa học(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
Trang 30Ví dụ: 1234.54E-122
c Hằng ký tự
Hằng ký tự là một ký tự riêng biệt được viết trong cặp
dấu nháy đơn („) Mỗi một ký tự tương ứng với một giá trị
trong bảng mã ASCII Hằng ký tự cũng được xem như trị số
nguyên
Ví dụ: „a‟, „A‟, „0‟, „9‟
Chúng ta có thể thực hiện các phép toán số học trên 2
ký tự (thực chất là thực hiện phép toán trên giá trị ASCII
của chúng) Hằng ký tự còn có thể được viết theo cách:
„\uc1c2c3c4‟ trong đó c1c2c3c4 là một số hệ 16 mà giá trị
của nó chính là mã Unicode của ký tự cần biểu diễn.Ví dụ:
„A‟ hay „\u0041‟
- Một chuỗi không có nội dung “” được gọi là chuỗi rỗng
- Khi lưu trữ trong bộ nhớ, một chuỗi được kết thúc bằng ký tự NULL („\0‟: mã Ascii là 0)
- Để biểu diễn ký tự đặc biệt bên trong chuỗi ta phải thêm dấu \ phía trước
Ví dụ: “I‟m a student” phải viết “I\‟m a student”
“Day la ky tu “dac biet”” phải viết “Day la ky tu \”dac biet\”
3 Khai báo hằng
const <kieu_du_lieu> <ten_hang> = <gia_tri_hang>;
Một hằng phải được khởi tạo khi khai báo, và chỉ khởi tạo duy nhất một lần trong suốt chương trình và không được thay đổi
Ví dụ: const int DOSOI = 100;
Trong khai báo trên, 100 là một hằng số và DOSOI là tên hằng có kiểu nguyên
Ví dụ: minh họa việc sử dụng những biểu tượng hằng
VI CÁC PHÉP TOÁN CỦA C++
1 Phép toán số học
Trang 31% Phép lấy phần dư 5/3 = 2
về giá trị là true nếu giá trị bên trái của toán tử lớn hơn giá trị bên phải của toán tử
Do vậy 5 > 2 trả về một giá trị là true, trong khi 2 > 5 trả về giá trị false
Các toán tử quan hệ trong ngôn ngữ C được trình bày ở bảng bên dưới
Trang 32Thứ tự ưu tiên của các toán tử quan hệ là Logic
(2>1)&&(5==2) 0
||
Liên kết giữa hai biểu thức logic Phép Hoặc (or), Giá trị bằng 0 khi cả hai toán hạng bằng có giá trị 0
4 Phép toán tăng giảm
Trong ngôn ngữ lập trình C đưa ra hai phép toán một ngôi để tăng và giảm các biến (nguyên và thực) Toán tử tăng ++ sẽ thêm 1 vào toán hạng của nó, toán tử giảm – sẽ trừ đi 1
Dấu phép toán ++ và có thể đứng trước hoặc đứng sau toán hạng Như vậy ta
có thể viết: ++n, n++, n, n
Trang 33Sự khác nhau của ++n và n++ ở chỗ: Trong phép toán n++ thì n tăng sau khi giá trị của nó được sử dụng, còn trong ++n thì giá trị của n tăng trước khi giá trị của nó được sử dụng Tương tự đối với –n và n
Ví dụ: giả sử trước mỗi phép tính int i=3, j=15;
Phép toán Tương đương Kết quả
i = ++j j = j+1 ; i=j i=16; j=16
i = j++ i = j ; j = j+1; i = 15 ; j = 16 i++ i = i+1 i=4
1 Các thư viện nhập xuất chuẩn:
Ngôn ngữ C dùng 2 thư viện nhập xuất chuẩn là stdio.h và conio.h Trong đó:
Thư viện studio.h chứa các hàm như gets(), puts(), scanf(), printf(), fflush(), fwrite()
Thư viện conio.h chứa các hàm như getch(), putch(), clrscr(), gotoxy() …
Đề sử dụng các thư viện này, ta phải khai báo các chỉ thị #include ở đầu chương trình: #include <stdio.h> và #include <conio.h> Trong đó dấu ngoặc < và > để chỉ thị cho trình biên dịch tìm kiếm thư viện trong danh mục chứa thông tin thư viện chuẩn (trong thư mục Include)
2 Các hàm nhập xuất chuẩn:
a Hàm getchar ():
Cách dùng: Sử dụng câu lệnh: biến = getchar();
Công dụng: Nhận một ký tự vào từ bàn phím và không đưa ra màn hình Hàm
sẽ trả về ký tự nhận được và lưu vào biến
Trang 34Công dụng: Đưa ký tự ch lên màn hình tại vị trí hiện tại của con trỏ Ký tự sẽ
được hiển thị với màu trắng
Nếu bộ đệm rỗng, máy sẽ tạm dừng Khi gõ một ký tự thì hàm nhận ngay ký
tự đó (không cần bấm thêm phím Enter như trong các hàm nhập khác) Ký
tự vừa gõ không hiện lên màn hình
Nếu dùng: biến=getch();
Thì biến sẽ chứa ký tự đọc vào
d Hàm putch():
Cách dùng: Sử dụng câu lệnh: putch(ch);
Công dụng: Đưa ký tự ch lên màn hình tại vị trí hiện tại của con trỏ Ký tự sẽ
được hiển thị theo màu xác định trong hàm textcolor
e Hàm printf:
Cách dùng:
prinf(điều khiển, đối số 1, đối số 2, );
Hàm printf chuyển, tạo khuôn dạng và in các đối của nó ra thiết bị ra chuẩn
dưới sự điều khiển của chuỗi điều khiển Chuỗi điều khiển chứa hai kiểu đối tượng:
các ký tự thông thường, chúng sẽ được đưa ra trực tiếp thiết bị ra, và các đặc tả
chuyển dạng, mỗi đặc tả sẽ tạo ra việc đổi dạng và in đối tiếp sau của printf
Chuỗi điều khiển có thể có các ký tự điều khiển:
\n sang dòng mới
\f sang trang mới
\b lùi lại một bước
\t dấu tab
Trang 35Dạng tổng quát của đặc tả:
%[-][fw][.pp]ký tự chuyển dạng Mỗi đặc tả chuyển dạng đều được đưa vào bằng ký tự % và kết thúc bởi một ký
tự chuyển dạng Giữa % và ký tự chuyển dạng có thể có:
Dấu trừ:
Khi không có dấu trừ thì kết quả ra được dồn về bên phải nếu độ dài thực tế của kết quả ra nhỏ hơn độ rộng tối thiểu fw dành cho nó Các vị trí dư thừa sẽ được lấp đầy bằng các khoảng trống Riêng đối với các trường số, nếu dãy số fw bắt đầu bằng
số 0 thì các vị trí dư thừa bên trái sẽ được lấp đầy bằng các số 0
Khi có dấu trừ thì kết quả được dồn về bên trái và các vị trí dư thừa về bên phải (nếu có) luôn được lấp đầy bằng các khoảng trống
fw: Khi fw lớn hơn độ dài thực tế của kết quả ra thì các vị trí dư thừa sẽ được
lấp đầy bởi các khoảng trống hoặc số 0 và nội dung của kết quả ra sẽ được đẩy
về bên phải hoặc bên trái Khi không có fw hoặc fw nhỏ hơn hay bằng độ dài thực tế của kết quả ra thì độ rộng trên thiết bị ra dành cho kết quả sẽ bằng chính độ dài của
nó Tại vị trí của fw ta có thể đặt dấu *, khi đó fw được xác định bởi giá trị nguyên của đối tương ứng
"abcdef" 8 không có abcdef
"abcdef" 08 có abcdef
"abcdef" 08 không có abcdef
pp: Tham số pp chỉ được sử dụng khi đối tương ứng là một chuỗi ký tự hoặc
một giá trị kiểu float hay double Trong trường hợp đối tương ứng có giá trị kiểu float hay double thì pp là độ chính xác của trường ra Nói một cách cụ thể hơn giá trị in ra
sẽ có pp chữ số sau số thập phân
Khi vắng mặt pp thì độ chính xác sẽ được xem là 6
Khi đối là chuỗi ký tự:
Trang 36Nếu pp nhỏ hơn độ dài của chuỗi thì chỉ pp ký tự đầu tiên của chuỗi được in ra Nếu không có pp hoặc nếu pp lớn hơn hay bằng độ dài của chuỗi thì cả chuỗi ký tự sẽ được in ra
"alphabeta" 8 3 không có alpha 3
"alphabeta" không có không không có alphabeta 9
"alpha" 8 6 có alpha 5
Các ký tự chuyển dạng và ý nghĩa của nó:
Ký tự chuyển dạng là một hoặc một dãy ký hiệu xác định quy tắc chuyển dạng
và dạng in ra của đối tương ứng Như vậy sẽ có tình trạng cùng một số sẽ được in ra theo các dạng khác nhau Cần phải sử dụng các ký tự chuyển dạng theo đúng qui tắc định sẵn Bảng sau cho các thông tin về các ký tự chuyển dạng
Ký tự chuyển dạng Ý nghĩa
d Đối được chuyển sang số nguyên hệ thập phân
o Đối được chuyển sang hệ tám không dấu (không có số
0 đứng trước)
x Đối được chuyển sang hệ mưới sáu không dấu (không
có 0x đứng trước)
u Đối được chuyển sang hệ thập phân không dấu
c Đối được coi là một ký tự riêng biệt
s Đối là chuỗi ký tự, các ký tự trong chuỗi được in cho
tới khi gặp ký tự không hoặc cho tới khi đủ số lượng ký
tự được xác định bởi các đặc tả về độ chính xác pp
e Đối được xem là float hoặc double và được chuyển
sang dạng thập phân có dạng [-]m.n nE[+ hoặc -] với
độ dài của chuỗi chứa n là pp
f Đối được xem là float hoặc double và được chuyển
sang dạng thập phân có dạng [-]m m.n n với độ dài của chuỗi chứa n là pp Độ chính xác mặc định là 6
Lưu ý rằng độ chính xác không xác định ra số các chữ
Trang 37số có nghĩa phải in theo khuôn dạng f
g Dùng %e hoặc %f, tuỳ theo loại nào ngắn hơn, không
f Hàm scanf:
Hàm scanf là hàm đọc thông tin từ thiết bị vào chuẩn (bàn phím), chuyển dịch chúng (thành số nguyên, số thực, ký tự vv ) rồi lưu trữ nó vào bộ nhớ theo các địa chỉ xác định
Cách dùng:
scanf(điều khiển,đối 1, đối 2, );
Chuỗi điều khiển chứa các đặc tả chuyển dạng, mỗi đặc tả sẽ tạo ra việc đổi
dạng biến tiếp sau của scanf
Đặc tả có thể viết một cách tổng quát như sau:
%[*][d d]ký tự chuyển dạng
Trang 38Việc có mặt của dấu * nói lên rằng trường vào vẫn được dò đọc bình thường, nhưng giá trị của nó bị bỏ qua (không được lưu vào bộ nhớ) Như vậy đặc tả chứa dấu
* sẽ không có đối tương ứng
d d là một dãy số xác định chiều dài cực đại của trường vào, ý nghĩa của nó được giải thích như sau:
Nếu tham số d d vắng mặt hoặc nếu giá trị của nó lớn hơn hay bằng độ dài của trường vào tương ứng thì toàn bộ trường vào sẽ được đọc, nội dung của
nó được dịch và được gán cho địa chỉ tương ứng (nếu không có dấu *)
Nếu giá trị của d d nhỏ hơn độ dài của trường vào thì chỉ phần đầu của trường có kích cỡ bằng d d được đọc và gán cho địa chỉ của biến tương ứng Phần còn lại của trường sẽ được xem xét bởi các đặc tả và đối tương ứng tiếp theo
124 cho biến a chuỗi "523" và dấu kết thúc \0 cho biến ch chuỗi "48a" và dấu kết thúc \0 cho biến ct
Trang 39Các ký tự chuyển dạng và ý nghĩa của nó:
C Vào một ký tự, đối tương ứng là con trỏ ký tự Có xét ký tự
khoảng trắng
D Vào một giá trị kiểu int, đối tương ứng là con trỏ kiểu int Trường
phải vào là số nguyên
Ld Vào một giá trị kiểu long, đối tương ứng là con trỏ kiểu long
Trường phải vào là số nguyên
O Vào một giá trị kiểu int hệ 8, đối tương ứng là con trỏ kiểu int
Trường phải vào là số nguyên hệ 8
Lo Vào một giá trị kiểu long hệ 8, đối tương ứng là con trỏ kiểu long
Trường phải vào là số nguyên hệ 8
X Vào một giá trị kiểu int hệ 16, đối tương ứng là con trỏ kiểu int
Trường phải vào là số nguyên hệ 16
Lx Vào một giá trị kiểu long hệ 16, đối tương ứng là con trỏ kiểu
long Trường phải vào là số nguyên hệ 16
f hay e Vào một giá trị kiểu float, đối tương ứng là con trỏ float, trường
vào phải là số dấu phảy động
lf hay
le
Vào một giá trị kiểu double, đối tương ứng là con trỏ double,
trường vào phải là số dấu phảy động
S Vào một giá trị kiểu double, đối tương ứng là con trỏ kiểu char,
trường vào phải là dãy ký tự bất kỳ không chứa các dấu cách và
các dấu xuống dòng
[Dãy ký tự], [^Dãy ký tự] Các ký tự trên dòng vào sẽ lần lượt được đọc cho đến khi nào gặp một ký tự không thuộc tập các ký tự đặt trong[] Đối tương ứng là con trỏ kiểu char Trường vào là dãy ký tự bất kỳ (khoảng trắng được xem như một ký tự)
Ví dụ:
int a,b;
char ch[10], ck[10];
scanf("%d%[0123456789]%[^0123456789]%3d",&a,ch,ck,&b);
Nếu dòng nhập vào là: 35 13145 xyz 584235
Thì trình biên dịch sẽ gán: giá trị 35 cho biến a, chuỗi "13145" và dấu kết thúc chuỗi „\0‟ cho biến ch, chuỗi "xyz” và dấu kết thúc chuỗi “\0” cho ck , giá trị 584 cho biến b
Trang 40printf(“\n x+y = %#x\n x-y = %#x”, x+y, x-y );
3 Biểu diễn các số sau dưới dạng nhị phân : 127, -129, 12.12
4 Đối với các dữ liệu sau, ta dùng kiểu dữ liệu nào hợp lý:
Ngày, tháng, năm sinh ; điểm trung bình môn học
5 Viết chương trình nhập số giây, xuất ra dạng giờ : phút : giây
6 Viết chương trình nhập giờ : phút : giây, xuất ra số giây