BÀI MỞ ĐẦU: TỔNG QUAN VỀ NGÔN NGỮ LẬP TRÌNH Mục tiêu − Trình bày được các khái niệm và lịch sử phát triển của ngôn ngữ lập trình; − Nêu được cách xây dựng thuật toán trong ngôn ngữ lập
Trang 1ỦY BAN NHÂN DÂN TỈNH VĨNH LONG TRƯỜNG CAO ĐẲNG NGHỀ VĨNH LONG
GIÁO TRÌNH
MÔN HỌC: LẬP TRÌNH CĂN BẢN
NGHỀ: KỸ THUẬT SỬA CHỮA, LẮP RÁP MÁY TÍNH
TRÌNH ĐỘ: CAO ĐẲNG LIÊN THÔNG
(Ban hành theo Quyết định số 172 /QĐ - CĐNVL ngày 15 tháng 04 năm 2020
của Hiệu trưởng trường Cao đẳng nghề Vĩnh Long
(Lưu hành nội bộ) NĂM 2020
Trang 2ỦY BAN NHÂN DÂN TỈNH VĨNH LONG TRƯỜNG CAO ĐẲNG NGHỀ VĨNH LONG
Tác giả biên soạn: ThS Nguyễn Hồng Thắm
GIÁO TRÌNH
MÔN HỌC: LẬP TRÌNH CĂN BẢN
NGHỀ: KỸ THUẬT SỬA CHỮA, LẮP RÁP MÁY TÍNH
TRÌNH ĐỘ: CAO ĐẲNG LIÊN THÔNG
NĂM 2020
Trang 3LỜI MỞ ĐẦU
Để đáp ứng nhu cầu học tập của các em học sinh, nhất là học sinh chuyên ngành tin học, Khoa Công nghệ thông in Trường Cao đẳng nghề Vĩnh Long chúng tôi đã tiến hành biên soạn các giáo trình trong chương trình học Giáo trình này cũng được biên soạn dựa trên kinh nghiệm giảng dạy nhiều năm môn Lập Trình Căn Bản của chúng tôi
Mục tiêu của nó nhằm giúp các em học sinh chuyên ngành có một tài liệu cô đọng dùng làm tài liệu học tập, nhưng chúng tôi cũng không loại trừ toàn bộ các đối tượng khác tham khảo Chúng tôi nghĩ rằng các em học sinh, sinh viên không chuyên tin và những người quan tâm tới lập trình căn bản sẽ tìm được trong này những điều hữu ích
Mặc dù đã rất cố gắng nhiều trong quá trình biên soạn giáo trình nhưng chắc chắn giáo trình sẽ còn nhiều thiếu sót và hạn chế Rất mong nhận được sự đóng góp ý kiến quý báu của học sinh và các bạn đọc để giáo trình ngày một hoàn thiện hơn
Tác giả
Trang 4MỤC LỤC
BÀI MỞ ĐẦU: TỔNG QUAN VỀ NGÔN NGỮ LẬP TRÌNH 1
1 Giới thiệu các khái niệm cơ bản về ngôn ngữ lâp trình 1
1.1 Lập trình máy tính 1
1.2 Bài toán 1
1.3 Thuật toán 1
2 Giới thiệu lịch sử phát triển và ứng dụng của ngôn ngữ lập trình 3
3 Xây dựng thuật toán bằng sơ đồ khối 5
4 Làm quen môi trường phát triển phần mềm 6
4.1 Giao diện chương trình Turbo C 6
4.2 Các phím thường hay sử dụng đối với chương trình C 6
4.3 Thoát khỏi chương trình C 7
5 Sử dụng sự trợ giúp từ help file về cú pháp lệnh, về cú pháp hàm, các chương trình mẫu 7
5.1 Trợ giúp từ help file về cú pháp lệnh, về cú pháp hàm 7
5.2 Các chương trình mẫu 7
BÀI TẬP 12
CHƯƠNG 1: GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH C 13
1 Giới thiệu 13
2 Bộ từ vựng của C 14
1.1 Các ký tự dùng trong C 14
1.2 Từ khóa (Keyword) 14
1.3 Tên hay định danh (Identifier) 15
1.4 Dấu chấm phẩy (;) 15
1.5 Câu chú thích 15
3 Cấu trúc một chương trình C 16
BÀI TẬP 17
CHƯƠNG 2: CÁC KIỂU DỮ LIỆU CƠ SỞ 18
1 Các kiểu dữ liệu cơ sở 18
1.1 Kiểu số nguyên - int 18
1.2 Kiểu số thực - float 18
1.3 Kiểu luận lý 19
1.4 Kiểu ký tự - char 19
2 Biến, hằng, câu lệnh và biểu thức 19
2.1 Hằng ký tự và hằng chuỗi 19
2.2 Biến và lệnh gán giá trị cho biến 21
Trang 52.3 Hàm 21
2.4 Các phép toán 22
2.5 Biểu thức 26
2.6 Các lệnh và khối lệnh 26
3 Câu lệnh nhập xuất 27
3.1 Nhập dữ liệu từ bàn phím 27
3.2 Xuất dữ liệu ra màn hình 27
BÀI TẬP 30
CHƯƠNG 3: CÁC CẤU TRÚC ĐIỀU KHIỂN 32
1 Khái niệm về lệnh cấu trúc 32
2 Các lệnh cấu trúc lựa chọn 32
2.1 Câu lệnh điều kiện 32
2.2 Câu lệnh rẽ nhánh 34
3 Các câu lệnh lặp 36
3.1 Câu lệnh for 36
3.2 Câu lệnh while 37
3.3 Câu lệnh do while 38
3.4 So sánh sự khác nhau của các vòng lặp 39
4 Các lệnh chuyển điều khiển 39
4.1 Câu lệnh break 39
4.2.Câu lệnh continue 40
4.3.Câu lệnh Goto 40
4.4 Hàm Exit 40
BÀI TẬP 42
CHƯƠNG 4: HÀM 44
1 Khái niệm chương trình con 44
1.1 Cú pháp 44
1.2 Một số lưu ý 45
2 Cấu trúc chương trình có sử dụng chương trình con 46
3 Các hàm trong ngôn ngữ lập trình 49
4 Tham trị và tham biến 50
4.1 Tham trị 50
4.2 Tham biến 50
5 Biến toàn cục và biến địa phương 51
5.1 Biến toàn cục 51
5.2 Biến địa phương 53
BÀI TẬP 54
Trang 6CHƯƠNG 5: DỮ LIỆU KIỂU MẢNG (ARRAY), CHUỖI KÝ TỰ (STRING) VÀ
BẢN CHI (STRUCT) 55
1 Dữ liệu kiểu mảng 55
1.1 Khái niệm 55
1.2 Khai báo mảng 55
1.3 Gán giá trị cho mảng 56
1.4 Một số bài toán trên mảng 57
1.5 Mảng nhiều chiều 59
2 Dữ liệu kiểu chuỗi ký tự 63
2.1 Khái niệm 63
2.2 Khai báo chuỗi 63
2.3 Các thao tác trên chuỗi 64
2.4 Nhập, xuất chuỗi 65
2.5 Các hàm làm việc với chuỗi 66
3 Dữ liệu kiểu bản ghi 68
3.1 Khái niệm 68
3.2 Khai báo kiểu bản ghi 70
3.3 Truy xuất kiểu bản ghi 70
BÀI TẬP 73
TÀI LIỆU THAM KHẢO 77
Trang 7BÀI MỞ ĐẦU: TỔNG QUAN VỀ NGÔN NGỮ LẬP TRÌNH
Mục tiêu
− Trình bày được các khái niệm và lịch sử phát triển của ngôn ngữ lập trình;
− Nêu được cách xây dựng thuật toán trong ngôn ngữ lập trình;
− Xây dựng được thuật toán bằng sơ đồ khối;
− Cẩn thận, tự giác trong học tập
Nội dung
1 Giới thiệu các khái niệm cơ bản về ngôn ngữ lâp trình
Lập trình là việc sử dụng cấu trúc dữ liệu và các lệnh của ngôn ngữ lập trình cụ thể để mô tả dữ liệu và diễn đạt các thao tác của thuật toán
1.3 Thuật toán
- Thuật toán để giải quyết một bài toán là một dãy hữu hạn các thao tác được sắp xếp theo một trình tự xác định sao cho sau khi thực hiện dãy thao tác đó, từ Input của bài toán, ta nhận được Output cần tìm
- Ví dụ: Thuật toán giải phương trình: ax + b = 0 (a, b là các số thực)
1.3.1 Các đặc trưng của thuật toán
- Dữ liệu đầu vào (Input): Mỗi thuật toán cần có một số (có thể bằng 0) các dữ
liệu ban đầu
- Kết quả (Output): Thuật toán phải cho ra được kết quả
- Tính xác định: Các thao tác phải xác định, không nhập nhằng, lẫn lộn, tùy tiện
Trang 8- Tính khả thi: Thuật toán phải có khả năng thực hiện được trong một thời gian
- Tính kết thúc: hữu hạn các bước tính toán
1.3.2 Các bước xây dựng chương trình
Sử dụng ngôn ngữ tự nhiên
Sử dụng mã giả
- Vay mượn ngôn ngữ nào đó (ví dụ Pascal) để biểu diễn thuật toán
Trang 9- Cài đặt thuật toán bằng C/C++
2 Giới thiệu lịch sử phát triển và ứng dụng của ngôn ngữ lập trình
Kể từ khi ra đời năm 1837, máy tính dần có tốc độ nhanh hơn và cũng đồng nghĩa với việc phải làm nhiều việc hơn Để có thể đáp ứng những điều này, các ngôn ngữ lập trình cũng phải phát triển theo để đơn giản hơn cho lập trình viên những cũng vẫn phải đáp ứng được các yêu cầu phức tạp của chương trình
Những năm 1950
Autocode (1952): Đây là tập hợp một loạt những hệ thống ngôn ngữ lập trình đơn giản được phát triển vào những năm 50 cho hệ thống máy tính kỹ thuật số tại đại học Manchester, Cambridge và London và được coi là ngôn ngữ lập trình chính thức đầu tiên Autocode được phát triển bởi Alick Glennie và rất được phổ biến vào thời gian này
Những năm 1970
Pascal (1970): đây là ngôn ngữ được đặt theo tên nhà toán học người Pháp Blaise Pascal Ngôn ngữ này được sáng tạo bởi Niklaus Wirth cho phép người dùng có thể tự xác định dạng dữ liệu của mình theo kiểu danh sách, sơ đồ cây hay đồ thị
Trang 10C (1972): Đây là một trong những ngôn ngữ lập trình được sử dụng nhiều nhất mọi thời đại C được thế kế để lập trình theo cấu trúc Phần mã nguồn của ngôn ngữ này ở dạng văn bản không định dạng và dùng những dấu chấm, phẩy để thiển hiện cấu trúc lệnh
Những năm 80
C++ (1980): ngôn ngữ này chủ yếu để lập trình hệ thống nhưng đến nay đã mở rộng ra cho cả những máy tính cá nhân thông thường, máy chủ để tạo ra những ứng dụng thông thường Hầu hết các câu lệnh của ngôn ngữ này được kế thừa từ C và cũng vẫn giữ nguyên khả năng hướng đối tượng và lập trình tổng quát
Perl (1987): thuộc nhóm ngôn ngữ lập trình bậc cao Ngôn ngữ này vay mượn không ít tính năng từ những ngôn ngữ khác như C, AWK và sad Ban đầu nó thô sơ đến mức hướng dẫn sử dụng chỉ có 1 trang Thế nhưng đến nay nó đã có thêm nhiều phiên bản và nhiều thay đổi so với ban đầu
Từ 1990 đến năm 2000
Python (1991): ngôn ngữ này được thiết kế cực kỳ đơn giản, thậm chí là có khả năng đọc được như bảng chữ cái Triết lý của những nhà phát triển ngôn ngữ nay đó là làm cho mã nguồn ngắn hơn, không dài và phức tạp như C++ hay Java
Java (1995): ngôn ngữ này được phát triển vớ
Với mục tiêu càng ít phụ thuộc vào khả năng vận hành thực tế của thiết bị càng tốt Nói cách khác là nó chỉ cần viết một lần trên một máy, và chạy được trên mọi máy khác Chính vì vậy mà đến nay, từ máy tính để bàn đến điện thoại di động Symbian S40
ta đều có thể gặp các chương trình Java
PHP (1995): đây là ngôn ngữ sử dụng thực thi trên máy chủ và dùng cho việc phát triển web Nó thực hiện các yêu cầu của người dùng sau đó trả kết quả lên trình duyệt qua việc kết hợp với HTML tạo ra giao diện các trang web hiện nay Khi mới xuất hiện, PHP không được định nghĩa là một ngôn ngữ lập trình, tuy nhiên qua thời gian, ngôn ngữ này đã có một lượng người dùng đông đảo và vẫn là sự lựa chọn của nhiều nhà phát triển web ngày nay
Những năm 2000
C# (2001): Visual Basic NET (2001): Đây là ngôn ngữ được phát triển trên nền Visual Basic và thực hiện trên nền tảng NET framwork Đây là lý do vì sao khi cài đặt một số chương trình sẽ có yêu cầu cài đặt thêm NET framwork phiên bản nào đó Nó
sử dụng các câu lệnh để xác định hành động của chương trình giống như Visual C#
Trang 11khi viết, các chương trình có thể được kiểm tra rất nhanh và các bài kiểm tra cũng sẽ ở cấp độ cao hơn Ngoài ra đồ hoạ các chương trình dùng ngôn ngữ này cũng sẽ đẹp hơn nhưng yêu cầu phần cứng sẽ thấp hơn
Tương lai của lập trình
Các ngôn ngữ lập trình ngày càng được phát triển do đó lập trình viên cũng phải liên tục cập nhật bản thân để có thể bắt kịp xu thế này Việc làm liên quan đến ngành lập trình cũng đang được dự báo tăng trung bình 8% ở mỗi nước cũng như mức lương trung bình cho công việc này đang ở mức 74.000 USD một năm
Số lượng những nhà phát triển hiện nay cũng đang tăng lên, dần vượt nhu cầu dự kiến số dự án phát triển sẽ lăng lên 22% đến năm 2022 Do đó mức lương cho những người làm công việc này có thể lên mức 93,350 USD một năm
3 Xây dựng thuật toán bằng sơ đồ khối
Lưu đồ thuật toán là công cụ dùng để biểu diễn thuật toán, mô tả nhập (input), dữ liệu xuất (output) và luồng xữ lý thông qua các ký hiệu hình học Công cụ này rất thích hợp để bạn học cách tư duy phân tích bài toán
Chỉ hướng thao tác tiếp theo
Lưu đồ thuật toán được duyệt lưu đồ thuật toán theo trình tự sau:
− Duyệt từ trên xuống
− Duyệt từ trái sang phải
Để cho dễ hình dung, chúng ta sẽ tìm hiểu các bài toàn sau:
Ví dụ: Giải phương trình bậc nhất ax + b = 0
Trang 124 Làm quen môi trường phát triển phần mềm
4.1 Giao diện chương trình Turbo C
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ó giao diện như sau:
Giao diện Turbo C
4.2 Các phím thường hay sử dụng đối với chương trình C
- Alt-Enter: phóng to/thu nhỏ màn hình C
- F5: phóng to cửa sổ của một file chương trình *.cpp hoặc *.c
- F6: chuyển đổi giữa các cửa sổ file chương trình
- F2: lưu một file chương trình
- F3: mở một cửa sổ mới để tạo một file chương trình
- Alt-F5: xem kết quả chạy chương trình
- F7/F8: chạy chương trình từng bước
- F9: biên dịch chương trình
- Ctrl-F9: chạy chương trình
Trang 134.3 Thoát khỏi chương trình C
Có hai cách cơ bản để thoát khỏi C:
- Nhấn tổ hợp phím ALT+X hoặc
- Nhấn tổ hợp phím Alt + F sau đó dùng phím mũi tên di đến mục Quit và ấn Enter
5 Sử dụng sự trợ giúp từ help file về cú pháp lệnh, về cú pháp hàm, các chương trình mẫu
5.1 Trợ giúp từ help file về cú pháp lệnh, về cú pháp hàm
Trong quá trình soạn thảo chương trình chúng 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 lệnh hoặc hàm nào đó, gõ phím Ctrl-F1 thì chúng ta sẽ có được các thông tin về cú pháp lệnh hoặc
cú pháp hàm)
Trên menu Help bao gồm các lệnh gọi trợ giúp khi người lập trình cần giúp đỡ một số vấn đề nào đó như: Cú pháp câu lệnh, cách sử dụng các hàm có sẵn…
- Lệnh Contents: Hiển thị toàn bộ nội dung của phần help
- Lệnh Index : Hiển thị bảng tìm kiếm theo chỉ mục
- Các lệnh còn lại, chúng ta sẽ tìm hiểu khi thực hành trên máy
5.2 Các chương trình mẫu
5.2.1 Tạo một file chương trình trong C
Để tạo một file chương trình trong C, sau khi đã mở C xong nhấp chuột menu File →New (hoặc nhấn phím F3), màn hình xuất hiện như sau:
Màn hình soạn thảo
Ví dụ: Tạo một chương trình lưu với tên Vidu.cpp để xuất ra câu Xin chao!!!
Trang 14Sau khi soạn thảo xong ta tiến hành:
- Nhấn F9: biên dịch, nếu báo:
Error … : chương trình bị lỗi, tiến hành sữa lỗi xem mục 2
Warning … : cảnh báo không nhất thiết phải sữa lỗi xem mục 3
Success : Press any key : chương trình viết đúng cú pháp có thể chạy
được, nhấn tổ hợp phím CTRL – F9 để chạy chương trình
Màn hình báo biên dịch thành công Màn hình màu đen sẽ xuất hiện và hiển thị ra câu thông báo ‘Xin chao!!!’ theo như yêu cầu:
Màn hình hiển thị kết quả chương trình
Gõ Enter để trở về giao diện xanh của chương trình
4.2.2 Các lỗi và cách sửa lỗi
Dưới đây là các lỗi thông dụng hay gặp phải khi sử dụng phần mềm C, và vị trí sai được phát hiện chính là dòng được tô đậm màu xanh:
Trang 15Lỗi không khai báo thư viện cho các câu lệnh được sử dụng trong file chương trình
Thông báo này thường gặp là Function ‘tên câu lệnh’ should have a prototype như hình dưới, có nghĩa là câu lệnh ‘tên câu lệnh’ được sử dụng trong chương trình nhưng chưa khai báo thư viện chứa câu lệnh này (hoặc gõ sai tên câu lệnh)
Màn hình lỗi thiếu thư viện Lỗi không chỉ đúng đường dẫn đến các tệp thư viện chương trình C
Câu thông báo lỗi thường gặp là Unable to open include file
‘stdio.h’ hoặc conio.h’ như hình vẽ dưới, phần mềm C không tìm thấy các file thư viện mà chương trình có sử dụng
Màn hình lỗi không chỉ dẫn đúng đường dẫn đến thư viện Lỗi thiếu dấu chấm phẩy (dấu kết thúc mỗi câu lệnh trong C)
Câu thông báo lỗi thường gặp là Statement missing; như hình dưới, có
nghĩa là thiếu một dấu chấm phẩy ở một dòng lệnh nào đó trong chương trình
Trang 16Màn hình lỗi thiếu dấu ; Các cảnh báo (Warning)
Các cảnh báo thường không ảnh hưởng đến việc chạy chương trình, tuy nhiên khi có cảnh báo thì chúng ta cũng nên điều chỉnh các dòng lệnh để khắc phục cảnh báo
đó
Cảnh báo ‘Function should return a value’
Cảnh báo này cho biết rằng trong chương trình có sử dụng hàm (ví dụ hàm main()) nhưng không khai báo kiểu giá trị trả về của hàm như hình sau:
Màn hình lỗi cảnh báo không khai báo kiểu giá trị trả về Cảnh báo ‘… i assigned a value that is never used’ Cảnh báo này cho biết trong chương trình có khai báo biến, gán giá trị cho biến nhưng lại không sử dụng biến này khắc phục cảnh báo này bằng cách xóa đi biến được khai đó
Trang 17Màn hình cảnh báo khai báo biến, gán trị nhưng không sử dụng
Chương trình chạy vô hạn
Lỗi này xảy ra khi đã biên dịch chương trình (ấn F9) thành công và sau khi ấn
Ctrl-F9 để chạy chương trình thì nó chạy vô hạn không thể thoát ra trở lại cửa sổ chương trình được sau khi ấn Enter nhiều lần
- Để tạm dừng chương trình và trở về cửa sổ chương trình, gõ tổ hợp phím Break → sau đó gõ phím Ctrl-F2 để làm mất dòng được tô màu xanh đậm
Ctrl Tiến hành chỉnh sửa code chương trình và lại lưu, biên dịch và chạy chương trình
Không xem được kết quả chạy chương trình
Lỗi này xảy ra sau khi ấn tổ hợp phím Ctrl-F9 mà vẫn không xem được kết quả chạy chương trình, đồng thời vẫn giữ nguyên cửa sổ file chương trình
- Khắc phục bằng cách ấn tổ hợp phím Alt-F5 để xem kết quả chạy chương trình
hoặc vào chỉnh sửa code (thêm dòng getch() ở kề cuối chương trình)
Trang 18BÀI TẬP
Lý thuyết
1 Thuật toán là gì? Trình bày các tính chất quan trọng của một thuật toán?
2 Các bước xây dựng chương trình?
3 Các cách biểu diễn thuật toán? Ưu và khuyết điểm của từng phương pháp?
Cho ví dụ minh họa
Thực hành
4 Nhập năm sinh của một người Tính tuổi người đó
5 Nhập 2 số a và b Tính tổng, hiệu, tích và thương của hai số đó
6 Nhập tên sản phẩm, số lượng và đơn giá Tính tiền và thuế giá trị gia tăng phải trả, biết:
a tiền = số lượng * đơn giá
b thuế giá trị gia tăng = 10% tiền
7 Nhập điểm thi và hệ số 3 môn Toán, Lý, Hóa của một sinh viên Tính điểm
trung bình của sinh viên đó
8 Nhập bán kính của đường tròn Tính chu vi và diện tích của hình tròn đó
9 Nhập vào số xe (gồm 4 chữ số) của bạn Cho biết số xe của bạn được mấy nút?
10 Nhập vào 2 số nguyên Tính min và max của hai số đó
Trang 19CHƯƠNG 1: GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH C
Mục tiêu
− Giới thiệu được ngôn ngữ lập trình C;
− Nêu được bộ từ vựng của C;
− Trình bày được cấu trúc một chương trình C;
− Chạy được chương trình trong C;
− Thực hiện các thao tác an toàn với máy tính
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ừ đó
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 người lập trình tự định nghĩa thêm các kiểu dữ liệu trừu tượng khác Tuy nhiên, điều mà người mới 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
Trang 20Ngô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
Trang 21Chú ý: Trong ngôn ngữ lập trình C từ khóa bao giờ cũng được viết bằng chữ
thường
1.3 Tên hay định danh (Identifier)
Tên hay định danh là một dãy ký tự dùng để chỉ tên một hằng số, hằng ký tự, tên một biến, một kiểu dữ liệu, một hàm Tên không được trùng với các từ khóa và được tạo thành từ các chữ cái và các chữ số nhưng bắt buộc chữ đầu phải là chữ cái hoặc dấu gạch duới _ Có thể sử dụng ký tự _ chèn trong tên nhưng không cho phép chèn giữa các khoảng trắng Tuy nhiên ta nên đặt tên ngắn gọn, dễ nhớ và đầy đủ ý nghĩa
Ví dụ:
Các tên hợp lệ: GiaiPhuongTrinh, Bai_Tap1, …
Các tên không hợp lệ: 1A, Giai Phuong Trinh, …
Ngôn ngữ C phân biệt chữ hoa chữ thuờng, do đó các tên sau đây có ý nghĩa khác nhau: BaiTap, baitap, BAITAP…
Trang 223 Cấu trúc một chương trình C
Chương trình được viết bằng ngôn ngữ C gồm các phần chính sau đây:
- Phần khai báo chèn các tập tin tiêu đề (header file) vào chương trình Đây là các tập tin chứa các định nghĩa cần thiết cho trình biên dịch Có hai cách để xác định tập tin theo sau chỉ thị #include: bao tên tập tin bởi cặp dấu < > đối với tập tin thư viện như stdio.h, conio.h hoặc cặp dấu “ ” đối với các tập tin tiêu đề do người lập trình tạo ra
- Phần khai báo các biến toàn cục hoặc các hàm được sử dụng trong chương trình Thông thường người ta thường đặt các nguyên mẫu hàm (function prototype) ở đây còn phần mô tả hàm được đặt ở dưới cùng
Phần định nghĩa hàm chính Hàm này có tên là main và là thành phần duy nhất luôn phải có trong một chương trình C Thông thường chương trình sẽ bắt đầu bằng cách thực hiện các dòng lệnh trong hàm main này
void Nhap(int &); // Prototype hàm Nhap int
TinhTong(int, int); // Protytype ham TinhTong
tong = TinhTong(x, y);
printf(“Tong cua x va y la %d.”, tong);
}
Trang 231 Tên (định danh) nào sau đây đặt không hợp lệ, tại sao?
2 Tin hoc co SO A, 1BaiTapKHO
3 THucHaNH, NhapMon_L@pTrinH
4 Câu ghi chú dùng để làm gì? Cách sử dụng ra sao? Cho ví dụ minh họa
5 Trình bày cấu trúc của một chương trình C Giải thích ý nghĩa của từng phần trong cấu trúc
Trang 24CHƯƠNG 2: CÁC KIỂU DỮ LIỆU CƠ SỞ
Mục tiêu
− Trình bày được các kiểu dữ liệu;
− Trình bày và vận dụng đượccác loại biến, hằng biểu thức cho từng chương trình
cụ thể;
− Trình bày và vận dụng được các lệnh nhập xuất;
− Chạy được chương trình trong C;
− Thực hiện các thao tác an toàn với máy tính
Nội dung
1 Các kiểu dữ liệu cơ sở
Turbo C có 4 kiểu cơ sở như sau:
− Kiểu số nguyên: giá trị của nó là các số nguyên như 2912, -1706, …
− Kiểu số thực: giá trị của nó là các số thực như 3.1415, 29.12, -17.06, …
− Kiểu luận lý: giá trị đúng hoặc sai
− Kiểu ký tự: 256 ký tự trong bảng mã ASCII
1.1 Kiểu số nguyên - int
Ðây là các kiểu dữ liệu mà giá trị của nó là số nguyên Dữ liệu kiểu số nguyên lại chia ra thành hai loại như sau:
- Các số nguyên có dấu (signed) để chứa các số nguyên âm hoặc dương
Kiểu (Type)
Độ lớn (Byte)
Miền giá trị (Range)
Độ lớn (Byte)
Miền giá trị (Range)
Ðây là các kiểu dữ liệu mà giá trị của nó là số thực Trong C định nghĩa các kiểu
số thực chuẩn như sau:
Trang 25Kiểu (Type)
Độ lớn (Byte)
Miền giá trị (Range)
• false (sai) là giá trị 0
• true (đúng) là giá trị khác 0, thường là 1
- Tên kiểu: char
- Miền giá trị: 256 ký tự trong bảng mã ASCII
- Chính là kiểu số nguyên do:
• Lưu tất cả dữ liệu ở dạng số
• Không lưu trực tiếp ký tự mà chỉ lưu mã ASCII của ký tự đó
Ví dụ
- Lưu số 65 tương đương với ký tự ‘A’…
- Lưu số 97 tương đương với ký tự ‘a’
2 Biến, hằng, câu lệnh và biểu thức
2.1 Hằng ký tự và hằng chuỗi
Hằng số cũng giống như biến nhưng nội dung của nó không thể thay đổi trong quá trình thực hiện chương trình Trong C, ta có hai kiểu hằng số, đó là hằng thường (literal constant) và hằng ký hiệu (symbol constant)
2.1.1 Hằng thường
Cách khai báo hằng này thường được dùng để khởi tạo giá trị cho biến
Cú pháp khai báo hằng thường
Trang 26<kiểu> <tên hằng> = <giá trị>;
Những hằng số nguyên có thể được viết theo 3 dạng sau:
- Một hằng số bắt đầu với bất kỳ một ký số nào khác 0 sẽ được hiểu là một số nguyên ở hệ thập phân
- Một hằng số bắt đầu với số 0 sẽ được hiểu là một số nguyên ở hệ bát phân
- Một hằng số bắt đầu với 0x hoặc 0X sẽ đuợc hiểu là một số nguyên ở hệ thập lục phân
Cú pháp khai báo hằng ký hiệu
#define <tên hằng> <giá trị>
Ví dụ:
#define MAX 100
#define PI 3.14
Dòng #define không kết thúc bằng dấu chấm phẩy vì nó chỉ là một chỉ thị tiền xử
lý chứ không phải một câu lệnh Cách làm này thực ra là thay thế cụm từ này bằng cụm
từ kia Chỉ thị #define có thể đặt ở bất cứ đâu trong chương trình nhưng thường được nhóm lại ở phần đầu chương trình
Trang 272.2 Biến và lệnh gán giá trị cho biến
Biến là một vùng nhớ có kích thước và có một địa chỉ nhất định nằm trong bộ nhớ RAM Biến dùng để lưu giữ một dữ liệu đầu vào, đầu ra hoặc một kết quả trung gian trong quá trình làm việc Dữ liệu được lưu trong biến nên cách tổ chức thông tin trong biến là kiểu của dữ liệu Nội dung của biến có thể thay đổi trong quá trình làm việc
Ðể phân biệt các biến với nhau, mỗi biến sẽ được đặt một tên theo quy tắc đặt định danh và được gọi là định danh biến (Variable Indentifier)
Ví dụ: i, j, dem1, TONG_CONG, KetQua…
Bất kỳ một biến nào khi sử dụng trong chương trình đều phải được khai báo như sau:
Cú pháp khai báo biến
<kiểu> <tên biến>;
<kiểu> <tên biến 1>, <tên biến 2>;
Các biến có cùng kiểu có thể khai báo chung và cách nhau bằng dấu phẩy Các biến khác kiểu nhau được khai báo cách nhau bằng dấu chấm phẩy
Ví dụ:
int i, j, k;
unsigned char dem;
float ketqua, delta;
Ðể xác định độ lớn của một biến (số byte mà biến chiếm giữ trong bộ nhớ) chúng ta sử dụng toán tử sau:
Toán tử lấy độ lớn của biến
int sizeof(<Biến>)
2.3 Hàm
Trong những chương trình lớn, có thể có những đoạn chương trình viết lặp đi lặp lại nhiều lần, để tránh rườm rà và mất thời gian khi viết chương trình; người ta thường phân chia chương trình thành nhiều module, mỗi module giải quyết một công việc nào
đó Các module như vậy gọi là các hàm
Hàm có thể trả về kết quả thông qua tên hàm hay có thể không trả về kết quả
Ví dụ 1: Hàm max để tìm số lớn giữa 2 số nguyên a, b như sau:
int max(int a, int b)
Trang 28int max(int a, int b){
return (a>b) ? a:b;
thuong = a / b; // Gan bieu thuc cho bien
Trang 29Toán tử Ý nghĩa Ví dụ
Toán tử một ngôi có thể đặt trước hoặc sau toán hạng Cả hai cách này cho kết quả giống nhau nhưng cách hoạt động khác nhau Khi đặt trước toán hạng, toán hạng sẽ được tăng (hoặc giảm) trước khi sử dụng và ngược lại
Ví dụ: gán y cho x rồi mới tăng x lên
Toán tử % chỉ tác động lên hai toán hạng kiểu số nguyên
Đặc biệt, nếu các toán tử này kết hợp với phép gán, ta có thể sử dụng các toán tử gộp +=, –=, *=, /=, %=
Ví dụ:
x += y; // Tương đuơng với x = x + y;
2.4.3 Các toán tử trên bit
Tác động lên các bit của toán hạng kiểu số nguyên
& And dãy bit của hai số nguyên x & y
Trang 30Người lập trình thường hay nhầm lẫn giữa toán tử so sánh bằng là = = (hai dấu
= viết cạnh nhau) khác với toán tử gán = (một dấu =) Trong trường hợp nhầm lẫn đó, chương trình vẫn chạy bình thường nhưng thường sẽ cho kết quả sai
2.4.5 Các toán tử luận lý
Các toán tử luận lý của C cho ta khả năng tổ hợp nhiều biểu thức quan hệ thành một biểu thức đơn và có thể xác định được tính đúng–sai (true-false) của biểu thức này
&& Và hai biếu thức BT1 && BT2
Toán tử && chỉ cho kết quả true (1) nếu cả 2 biểu thức đều true Toán tử || chỉ cho kết quả false (0) nếu cả 2 biểu thức đều false
Ví dụ:
(1 == 1) && (1 != 2) // Ket qua true (1)
(2 > 1) || (6 < 1) // Ket qua true (1)
(2 == 1) && (2 == 2) // Ket qua false (0)
2.4.6 Toán tử điều kiện
Toán tử điều kiện là toán tử ba ngôi, tức là có 3 toán hạng
Toán tử điều kiện
<biểu thức 1> ? <biểu thức 1> : <biểu thức 3>; Nếu <biểu thức 1> là đúng hay true (khác 0) thì giá trị của toàn bộ biểu thức trên là giá trị của <biểu thức 2> Ngược lại, nếu <biểu thức 1> là sai hay false (bằng 0) thì giá trị của toàn bộ biểu thức trên là giá trị của <biểu thức 3>
Trang 31Ví dụ:
x = (2 > 1) ? 3 : 4 ; // x = 3 do 2 > 1 đung
y = (2 < 1) ? 3 : 4 ; // y = 4 do 2 < 1 sai
2.4.7 Toán tử dấu phẩy
Ta có thể tạo ra một biểu thức bằng cách đặt các biểu thức con cách nhau dấu phẩy Biểu thức mới này sẽ được thực hiện như sau :
- Các biểu biểu thức con tạo nên biểu thức mới sẽ được tính, và biểu thức con bên trái sẽ được tính trước
- Biểu thức mới nhận giá trị là giá trị của biểu thức bên phải
2.4.8 Độ ưu tiên của các toán tử
Các toán tử sẽ thực hiện theo thứ tự ưu tiên như sau:
Ví dụ:
n1 = 2 + 3 * 5;
n2 = (2 + 3) * 5; // Khác n1
n3 = 2 + (3 * 5); // Bằng n1
Phép nhân sẽ được ưu tiên hơn phép cộng nên n1 sẽ bằng n3
Để tránh khó hiểu (có thể dẫn đến kết quả không như mong đợi) ta nên sử dụng các cặp ngoặc đơn ( )
Ví dụ:
Ketqua = a > 1 && b < 2;
Trang 32Tuy phép so sánh thực hiện trước rồi mới tới phép && nhưng ta nên thêm các cặp ngoặc đơn để câu lệnh trở nên dễ hiểu
- Ép kiểu hay biến đổi kiểu
Toán tử là các phép toán tác động lên các dữ liệu cùng kiểu, bao gồm các loại sau:
Trình biên dịch C sẽ bỏ qua các khoảng trắng (hay tab hoặc dòng trống) chen giữa lệnh
Ví dụ: các lệnh sau đây là tương đương nhau
Trang 33Có một trường hợp trình biên dịch phải quan tâm đến khoảng trắng, đó là các khoảng trắng trong hằng chuỗi (chuỗi các ký tự)
Ví dụ: các hằng chuỗi trong các câu lệnh sau đây là khác nhau
printf(“Tin hoc co so A.”);
printf(“Tin hoc coso A.”);
Nếu chuỗi trong câu lệnh quá dài ta có thể xuống dòng nhưng phải thêm ký hiệu \n
Ví dụ:
printf(“Tin hoc co so A.”); // Cách 1
printf(“Tin hoc \n co so A.”); // Cách 2
Trong C có hai loại câu lệnh
- Câu lệnh đơn: chỉ gồm một câu lệnh
- Câu lệnh phức (còn gọi là khối lệnh): gồm nhiều câu lệnh đơn được nhóm và bao bởi cặp ngoặc nhọn { }
Ví dụ:
printf(“THCS A”); // Day la cau lenh don
// Duoi day la cau lenh phuc (hay khoi lenh)
Trang 34Hàm xuất dữ liệu ra màn hình (#include <stdio.h>)
printf(<chuỗi định dạng>[, <đối số 1>, … ]); Chuỗi định dạng (được đặt giữa cặp nháy kép “ ”) là cách trình bày thông tin sẽ được xuất Một chuỗi định dạng có ba thành phần: Văn bản thường (literal text) trong chuỗi định dạng sẽ được xuất y hệt lúc gõ
Ví dụ: Xuất chuỗi Tin hoc co so A và chuỗi Chương 7 ra màn hình Chuỗi sau xuất ngay
sau chuỗi trước
printf(“Tin hoc co so A”);
- Đặc tả (conversion specifier) gồm dấu phần % và một ký tự Phần này dùng để xác định kiểu của biến muốn xuất Biến muốn xuất sẽ được đặt ở phần đối số Nếu muốn xuất nhiều biến thì các biến sẽ được liệt kê cách nhau bằng dấu phẩy
Đặc tả Ý nghĩa Kiểu dữ liệu phù hợp
Số nguyên không dấu
char int, short, long float, double char[], char*
Trang 35Kết quả: 2912 cong 1706 bang 4618
Lưu ý, thứ tự các đối số phải tương ứng thứ tự các đặc tả và phải chính xác (nghĩa
là kiểu dữ liệu nào thì dùng đặc tả đó) nếu không kết quả xuất có thể sẽ không như ý muốn
Thông thường, khi xuất các dữ liệu kiểu số (số nguyên, số thực) ta có nhu cầu định dạng các thể hiện thông tin ra màn hình do cách xuất thông thường không đẹp mắt
Để có thể xác định số chữ số lẻ muốn xuất cũng như số ô trên màn hình để biểu diễn số,
Trang 36Kết quả (theo ô trên màn hình):
2 Trình bày khái niệm về biến và cách sử dụng lệnh gán
3 Phân biệt hằng thường và hằng ký hiệu Cho ví dụ
4 Trình bày khái niệm về biểu thức Tại sao nên sử dụng cặp ngoặc đơn ( ) trong biểu thức?
5 Trình bày cách định dạng khi xuất các số nguyên và số thực Cho ví dụ minh họa
6 Tên (định danh) nào sau đây đặt không hợp lệ, tại sao?
a Tin hoc co SO A
b 1BaiTapKHO
c THucHaNH
d TinHOC_DaiCuonG
7 Câu ghi chú dùng để làm gì? Cách sử dụng ra sao? Cho ví dụ minh họa
8 Trình bày cấu trúc của một chương trình C Giải thích ý nghĩa của từng phần trong cấu trúc
Trang 37Tới dự lễ sinh nhật của mình
In các kết quả lên màn hình
12 Viết chương trình xuất các giá trị số của các ký tự Z và z
13 Viết chương trình xuất các các ký tự có giá trị số 72 and 104
14 Sắp số nguyên thẳng hàng bên trái hoặc bên phải như hình sau:
15 Hiển thị lên màn ảnh 2 số 123 và 123.456 và xếp thẳng hàng về phía trái
16 Biểu diễn 3 số 15, 150, and 1500 dưới dạng hexa
17 Chương trình sau có lỗi gì?
Trang 38CHƯƠNG 3: CÁC CẤU TRÚC ĐIỀU KHIỂN
Mục tiêu
− Trình bày được các lệnh có cấu trúc;
− Vận dụng được các lệnh cấu trúc: cấu trúc lựa chọn, cấu trúc lặp xác định và lặp
vô định;
− Vận dụng được các lệnh bẻ vòng lặp;
− Thực hiện các thao tác an toàn với máy tính
Nội dung
1 Khái niệm về lệnh cấu trúc
Một chương trình bao gồm nhiều câu lệnh Thông thường các câu lệnh được thực hiện một cách lần lượt theo thứ tự mà chúng được viết ra Các cấu trúc điều khiển cho phép thay đổi trật tự nói trên, do đó máy có thể nhảy thực hiện một câu lệnh khác ở một
ví trí trước hoặc sau câu lệnh hiện thời
Xét về mặt công dụng, có thể chia các cấu trúc điều khiển thành các nhóm chính:
− Nhảy không có điều kiện
− Rẽ nhánh
− Tổ chức chu trình
− Ngoài ra còn một số toán tử khác có chức năng bổ trợ như break, continue
2 Các lệnh cấu trúc lựa chọn
2.1 Câu lệnh điều kiện
Thực hiện <Lệnh> nếu <điều kiện> đúng
Ngược lại,<điều kiện> sai sẽ không làm gì
Sơ đồ khối
bắt đầu
kết thúc
Trang 39Trong đó:
- <điều kiện> cho kết quả đúng hoặc sai và được đặt trong cặp dấu ngoặc đơn ( )
- <Lệnh> là câu lệnh đơn hoặc khối lệnh (kẹp các câu lệnhđơn giữa { và })
Ví dụ: Nếu a khác không thì xuất thông báo “a khác 0”
Thực hiện <Lệnh 1> nếu <điều kiện> đúng
Ngược lại, <điều kiện> sai sẽ thực hiện <Lệnh 2>
if (a!=0){
if (b>0)
bắt đầu
kết thúc