TỔNG QUAN VỀ NGÔN NGỮ C
Giới thiệu về lịch sử phát triển của ngôn ngữ, sự cần thiết phải học ngôn ngữ C hiện nay
C là ngôn ngữ lập trình cấp cao, được sử dụng rất phổ biến để lập trình hệ thống cùng với Assembler và phát triển ứng dụng
Vào cuối thập kỷ 60 và đầu thập kỷ 70 của thế kỷ XX, Dennish Ritchie tại phòng thí nghiệm Bell đã phát triển ngôn ngữ C, dựa trên ngôn ngữ BCPL do Martin Richards giới thiệu năm 1967 và ngôn ngữ B do Ken Thompson phát triển vào năm 1970 Ngôn ngữ C đã được sử dụng để viết hệ điều hành UNIX đầu tiên trên máy PDP-7 và sau đó được cài đặt trên hệ điều hành UNIX của máy DEC PDP-11 Đến nay, ngôn ngữ C vẫn là một trong những ngôn ngữ lập trình phổ biến nhất, nhờ vào việc tích hợp những thành tựu mới nhất trong lĩnh vực tin học.
Hình 1: (Dennis Ritchie(trái) và Ken Thompson trước hệ thống PDP-11với 2 text-terminal
Ngôn ngữ lập trình C và C++ hiện đang được giảng dạy rộng rãi ở các trường trung học và đại học tại các nước Âu, Mỹ Trong tương lai, ngôn ngữ C dự kiến sẽ trở thành ngôn ngữ quốc tế trong lĩnh vực tin học, tương tự như vai trò của tiếng Anh trong giao tiếp toàn cầu.
Ngôn ngữ C sở hữu một thư viện hàm phong phú mà không ngôn ngữ nào có thể so sánh Lập trình viên có thể dễ dàng sử dụng các hàm này bằng cách truyền tham số và nhận kết quả ngay lập tức, tiết kiệm thời gian so với việc viết lại chức năng tương tự.
Công việc lập trình trở nên dễ dàng và nhanh chóng, giúp tạo ra nhiều sản phẩm ứng dụng chất lượng cao trong mọi lĩnh vực Ngôn ngữ C đặc biệt phù hợp để giải quyết các bài toán kỹ thuật phức tạp nhờ vào các toán tử điều khiển mạnh mẽ của nó.
Khái niệm cấu trúc trong ngôn ngữ C cho phép mô tả các khối dữ liệu lớn, làm cho C trở thành công cụ hữu ích trong việc giải quyết các bài toán quản lý và xử lý các mô hình lựa chọn tối ưu Chương trình viết bằng C có khả năng chạy nhanh gần bằng Assembler.
Ngôn ngữ C là một ngôn ngữ lập trình dễ học, với chương trình viết ngắn gọn, súc tích và cấu trúc rõ ràng, giúp người dùng dễ dàng phát hiện lỗi Chính vì vậy, ngôn ngữ C ngày càng được ưa chuộng, đặc biệt là trong giới học sinh và sinh viên Các đặc điểm cơ bản của ngôn ngữ C bao gồm tính dễ học và khả năng phát hiện lỗi hiệu quả.
+ Tính cô động (compact): C chỉ có 32 từ khóa chuẩn và 40 toán tử chuẩn, nhưng đều được biểu diễn bằng những chuỗi ký tự ngắn gọn
Ngôn ngữ lập trình C có tính cấu trúc rõ ràng, với các chỉ thị như cấu trúc lựa chọn và lặp Nhờ đó, các chương trình viết bằng C được tổ chức một cách mạch lạc và dễ hiểu.
C có tính tương thích cao nhờ vào tiền xử lý và thư viện chuẩn phong phú, giúp các chương trình viết bằng C duy trì sự tương thích khi chuyển từ máy tính này sang máy tính khác.
Ngôn ngữ lập trình C nổi bật với tính linh động, cho phép lập trình viên sử dụng nhiều cách thể hiện khác nhau Cú pháp của C rất uyển chuyển, giúp thu gọn kích thước mã lệnh và tối ưu hóa tốc độ chạy của chương trình.
Biên dịch trong ngôn ngữ lập trình C cho phép biên dịch nhiều tập tin chương trình riêng lẻ thành các tập tin đối tượng Sau đó, quá trình liên kết các đối tượng này lại với nhau tạo thành một chương trình có thể thực thi một cách thống nhất.
Cách khởi động và thoát chương trình (Turbo C)
Giới thiệu môi trường làm việc của Turbo C:
- Turbo C do hãng Borland cung cấp.
- Gồm các chức năng sau: 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
- Đây là màn hình gọi Turbo C:
- Giao diện soạn thảo chương trình mới: vào menu File ->New
Hình 4: Giao diện soạn thảo chương trình mới
- Ghi chương trình đang soạn thảo vào đĩa:
- Sử dụng File->Save hoặc gõ phím F2
- Lệnh Save As để lưu lại chương trình với tên khác
Hình 5: Giao diện lưu chương trình mới
- Thực hiện chương trình, mở một chương trình và thoát:
+ Thực hiện chương trình: Nhấn Ctrl-F9 hoặc vào menu Run->Run
Hình 6: Giao diện thực hiện chương trình + Mở một chương trình có sẵn trên đĩa: Vào menu File->Open hoặc F3
Hình 7: Giao diện mở một chương trình có sẵn trên đĩa + Thoát khỏi Turbo C
Vào menu File->Exit hoặc Alt-X
- Các lệnh nằm trên menu Option:
Include directories: chứa các tập tin muốn đưa vào chương trình (file h trong dòng # include)
Library directories: Chứa tập tin thư viện (file lib)
Output directory: Chứa các tập tin ”đối tượng “ obj và exe sau khi chạy chương trình
Source directories: Chứa các tập tin nguồn (.obj và lib)
+ Environment: dùng để thiết lặp môi trường làm việc.
Hình 7: Giao diện thiết lặp môi trường làm việc
Để sử dụng lệnh BC tại dấu nhắc DOS, bạn cần gõ "BC" và nhấn Enter, đảm bảo rằng đường dẫn đã được cài đặt bằng lệnh path, bao gồm thư mục chứa tập tin BC.EXE Nếu đường dẫn chưa được cài đặt, hãy xác định vị trí thư mục BORLANDC trên ổ đĩa của bạn trước khi thực hiện lệnh.
< ổ đĩa>:\BORLANDC\BIN\BC (Enter)
Để khởi động BC với một tập tin có tên tùy chỉnh, bạn chỉ cần gõ lệnh: BC [đường dẫn] Nếu tập tin đã tồn tại, nó sẽ được nạp lên, còn nếu không, một tập tin mới sẽ được tạo ra.
Để khởi động tại Windows, bạn vào menu Start, chọn Run và gõ vào hộp Open các dòng lệnh giống như khi sử dụng DOS Ngoài ra, bạn cũng có thể truy cập vào Windows Explorer, chọn ổ đĩa chứa thư mục BORLANDC và vào thư mục đó.
BORLANDC, vào thư mục BIN, khởi động tập tin BC.EXE
Bạn gõ D:\BORLANDC\BIN\BC E:\BAITAP_BC\VIDU1.CPP
Câu lệnh này khởi động BC và nạp tập tin VIDU1.CPP từ thư mục BAITAP_BC trên ổ đĩa E; nếu tập tin không tồn tại, nó sẽ được tạo mới.
Màn hình sau khi khởi động thành công:
Hình 8: Màn hình sau khi khởi động thành công
- Ấn phím F10 (kích hoạt menu), chọn menu File, chọn Quit;
- Hoặc ấn tổ hợp phím Alt-X
2.3 Các ví dụ đơn giản:
Hình 09: Màn hình ví dụ 1
Kết quả in ra màn hình:
Hình 10: Màn hình kết quả ví dụ 1
/* Dòng đầu tiên bắt đầu bằng /* và kết thúc bằng */ dùng để chú thích, không được dịch và không thực thi lệnh nào Mục đích của chú thích này là làm cho chương trình rõ ràng hơn, giúp người đọc hiểu được chức năng của chương trình khi xem lại sau này */
Đoạn mã thứ hai bao gồm câu lệnh tiền xử lý #include, điều này rất quan trọng vì chương trình sử dụng hàm printf từ thư viện C Việc khai báo hàm thư viện này là cần thiết để thông báo cho trình biên dịch C, nếu không có khai báo, chương trình sẽ gặp lỗi.
+ Dòng thứ 3: hang trắng viết ra với ý đồ làm cho bảng chương trình thoáng, dễ đọc
Hàm void main(void) là thành phần chính trong chương trình C, và bạn có thể viết là main() hoặc void main() để tăng tính rõ ràng Mọi chương trình C đều bắt đầu từ hàm main(), với cặp dấu ngoặc () chỉ ra đây là khối hàm Từ khóa void đầu tiên cho biết hàm này không trả về giá trị, trong khi từ khóa void trong dấu ngoặc đơn cho biết hàm không nhận đối số.
+ Dòng thứ 4, 7: cặp dấu ngoặc nhọn {} là giới hạn thân của hàm Thân hàm bắt đầu bằng dấu { và kết thúc bằng dấu }
Dòng thứ 6 trong mã lệnh C là printf(“Bai hoc C dau tien.”);, có chức năng in ra chuỗi ký tự nằm trong dấu nháy kép (“”) Đây được gọi là một câu lệnh, và mỗi câu lệnh trong C phải kết thúc bằng dấu chấm phẩy (;).
- Các từ include, stdio.h, void, main, printf phải viết bằng chữ thường
- Chuỗi nháy kép cần in ra bạn có thể viết chữ hoa hay chữ thường tùy ý
+ Kết thúc câu lệnh phải có dấu chấm phẩy
+ Kết thúc tên hàm không có dấu chấm phẩy hay bất cứ dấu gì.
+ Ghi chú phải đặt trong dấu /*…*/
+ Thân hàm phải được bao trong cặp {}
+ Các câu lệnh trong thân hàm phải viết thụt vào
Bạn nhập đoạn chương trình trên vào máy Dịch, chạy và quan sát kết quả.
Hình 11: Màn hình dịch, chạy chương trình
Sau khi nhập đoạn chương trình vào máy, bạn hãy ấn giữ phím Ctrl và gõ F9 để dịch và chạy chương trình Lúc này, chương trình sẽ chớp rất nhanh và không hiển thị kết quả Để xem kết quả, bạn ấn giữ phím Ctrl và gõ F5 Sau khi xem xong, hãy ấn phím bất kỳ để quay lại màn hình soạn thảo chương trình.
Bây giờ bạn sửa lại dòng thứ 6 bằng câu lệnh printf(“Bai hoc C dau tien.\n”);, sau đó dịch, chạy chương trình và quan sát kết quả
Kết quả in ra màn hình
Hình 12: Màn hình kết quả chương trình hiển thị dòng bạn vừa sửa với ký hiệu xuống dòng \n, được sử dụng trong lệnh printf Dưới đây là một số ký hiệu khác.
Hình 13: Một số ký hiệu khác
Bây giờ bạn sửa lại dòng thứ 6 bằng câu lệnh printf(“\tBai hoc C dau tien.\n”); sau đó dịch, chạy chương trình và quan sát kết quả.
Kết quả in ra màn hình
Hình 14: Màn hình kết quả chương trình
Khi chạy chương trình bạn nghe tiếng bip phát ra từ loa
Khi chạy chương trình, nếu bạn cảm thấy bất tiện khi phải nhấn tổ hợp phím Alt-F5 để xem kết quả, bạn có thể sửa đổi chương trình để khắc phục tình trạng này.
Hình 15: Màn hình chương trình
Kết quả in ra màn hình
Đoạn mã thứ ba chứa câu lệnh tiền xử lý #include , cần thiết cho việc sử dụng hàm getch trong chương trình Việc khai báo thư viện này là bắt buộc để trình biên dịch C nhận diện hàm, nếu không sẽ xảy ra lỗi trong quá trình biên dịch.
Dòng thứ 8: getch(); chờ nhận một ký tự từ bàn phím mà không hiển thị trên màn hình Hàm này được sử dụng để dừng chương trình tại màn hình kết quả, cho phép người dùng ấn phím bất kỳ để quay lại màn hình soạn thảo.
+ Bạn nhập đoạn chương trình trên vào máy chạy và quan sát kết quả
Hình 16: Màn hình chương trình
Hình 17: Màn hình kết quả chương trình
Dòng thứ 7: int i; là lệnh khai báo biến, trong đó "i" là tên biến, đại diện cho một vị trí trong bộ nhớ để lưu trữ giá trị Mỗi biến có một kiểu dữ liệu cụ thể, và trong trường hợp này, biến "i" được khai báo là kiểu số nguyên (integer), viết tắt là int.
Dòng thứ 9: scanf("%d", &i) sử dụng hàm scanf để nhận dữ liệu từ người dùng Trong đó, "%d" là chuỗi định dạng, chỉ định rằng dữ liệu nhập vào phải là số nguyên Đối mục thứ hai, &i, là address operator, cho phép hàm scanf lưu giá trị nhập từ bàn phím vào biến i.
Thực hành
2 Chương 2: Các thành phần cơ bản 12 6 6
1 Từ khóa và kí hiệu 1
2 Các kiểu dữ liệu sơ cấp 1
3 Chương 3: Các lệnh có cấu trúc 20 9 10 1
1 Khái niệm về lệnh cấu trúc 2
3 Các tham số của hàm 2
4 Các lệnh đơn nhằm kết thúc hàm và nhận giá trị trả về cho tên hàm 2
CHƯƠNG 1 : TỔNG QUAN VỀ NGÔN NGỮ C
Sau khi học xong bài này sinh viên có khả năng:
- Hiểu được lịch sử phát triển của ngôn ngữ C
- Biết được ngôn ngữ này có ứng dụng như thế nào
- Biết cách khởi động được và thoát khỏi chương trình
- Sử dụng hệ thống trợ giúp từ help file
1.Giới thiệu về lịch sử phát triển của ngôn ngữ, sự cần thiết phải học ngôn ngữ C hiện nay
C là ngôn ngữ lập trình cấp cao, được sử dụng rất phổ biến để lập trình hệ thống cùng với Assembler và phát triển ứng dụng
Vào cuối thập kỷ 60 và đầu thập kỷ 70 thế kỷ XX, Dennish Ritchie tại phòng thí nghiệm Bell đã phát triển ngôn ngữ C dựa trên ngôn ngữ BCPL do Martin Richards giới thiệu năm 1967 và ngôn ngữ B do Ken Thompson phát triển từ BCPL năm 1970 khi viết hệ điều hành UNIX đầu tiên trên máy PDP-7 Ngôn ngữ C sau đó được cài đặt lần đầu tiên trên hệ điều hành UNIX của máy DEC PDP-11 Từ đó, ngôn ngữ C trở thành một trong những ngôn ngữ lập trình phổ biến nhất, nhờ vào việc tích hợp những thành tựu mới nhất trong lĩnh vực tin học.
Hình 1: (Dennis Ritchie(trái) và Ken Thompson trước hệ thống PDP-11với 2 text-terminal
Hiện nay, ngôn ngữ lập trình C và C++ đang được giảng dạy phổ biến ở các trường trung học và đại học tại các nước Âu, Mỹ Dự báo trong tương lai, ngôn ngữ C sẽ trở thành ngôn ngữ quốc tế trong lĩnh vực tin học, tương tự như vai trò của tiếng Anh trong giao tiếp toàn cầu.
Ngôn ngữ C sở hữu một thư viện hàm phong phú, vượt trội hơn hẳn so với các ngôn ngữ lập trình khác Nhờ vào việc sử dụng các hàm có sẵn, lập trình viên chỉ cần truyền tham số để nhận kết quả ngay lập tức, tiết kiệm thời gian và công sức so với việc tự viết các chức năng tương tự.
Công việc lập trình trở nên dễ dàng và nhanh chóng, giúp tạo ra nhiều chương trình ứng dụng chất lượng cao trong mọi lĩnh vực Ngôn ngữ C là lựa chọn lý tưởng để giải quyết các bài toán kỹ thuật phức tạp nhờ vào các toán tử điều khiển mạnh mẽ của nó.
Khái niệm cấu trúc trong ngôn ngữ C cho phép mô tả các khối dữ liệu lớn, giúp giải quyết hiệu quả các bài toán quản lý và xử lý mô hình lựa chọn tối ưu Chương trình viết bằng C có thể thực thi với tốc độ gần bằng Assembler.
Ngôn ngữ C là một lựa chọn dễ học với chương trình viết ngắn gọn và cấu trúc rõ ràng, giúp người dùng dễ dàng phát hiện lỗi Chính vì vậy, ngôn ngữ này ngày càng được ưa chuộng, đặc biệt trong giới học sinh và sinh viên Những đặc điểm cơ bản của ngôn ngữ C bao gồm tính đơn giản và hiệu quả trong việc lập trình.
+ Tính cô động (compact): C chỉ có 32 từ khóa chuẩn và 40 toán tử chuẩn, nhưng đều được biểu diễn bằng những chuỗi ký tự ngắn gọn
Ngôn ngữ lập trình C có tính cấu trúc rõ ràng, với các chỉ thị như cấu trúc lựa chọn và lặp, giúp tổ chức chương trình một cách mạch lạc và dễ hiểu.
C có tính tương thích cao nhờ vào tiền xử lý và thư viện chuẩn phong phú, giúp các chương trình viết bằng C vẫn hoạt động hoàn hảo khi chuyển từ máy tính này sang máy tính khác.
Ngôn ngữ C nổi bật với tính linh động, cho phép người lập trình sử dụng nhiều cách thể hiện khác nhau Cú pháp của C rất uyển chuyển, giúp thu gọn kích thước mã lệnh và tối ưu hóa tốc độ chạy của chương trình.
Biên dịch trong ngôn ngữ lập trình C cho phép chuyển đổi nhiều tập tin chương trình riêng lẻ thành các tập tin đối tượng Sau đó, các tập tin đối tượng này được liên kết với nhau để tạo thành một chương trình thực thi thống nhất.
2.Cách khởi động và thoát chương trình (Turbo C):
Giới thiệu môi trường làm việc của Turbo C:
- Turbo C do hãng Borland cung cấp.
- Gồm các chức năng sau: 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
- Đây là màn hình gọi Turbo C:
- Giao diện soạn thảo chương trình mới: vào menu File ->New
Hình 4: Giao diện soạn thảo chương trình mới
- Ghi chương trình đang soạn thảo vào đĩa:
- Sử dụng File->Save hoặc gõ phím F2
- Lệnh Save As để lưu lại chương trình với tên khác
Hình 5: Giao diện lưu chương trình mới
- Thực hiện chương trình, mở một chương trình và thoát:
+ Thực hiện chương trình: Nhấn Ctrl-F9 hoặc vào menu Run->Run
Hình 6: Giao diện thực hiện chương trình + Mở một chương trình có sẵn trên đĩa: Vào menu File->Open hoặc F3
Hình 7: Giao diện mở một chương trình có sẵn trên đĩa + Thoát khỏi Turbo C
Vào menu File->Exit hoặc Alt-X
- Các lệnh nằm trên menu Option:
Include directories: chứa các tập tin muốn đưa vào chương trình (file h trong dòng # include)
Library directories: Chứa tập tin thư viện (file lib)
Output directory: Chứa các tập tin ”đối tượng “ obj và exe sau khi chạy chương trình
Source directories: Chứa các tập tin nguồn (.obj và lib)
+ Environment: dùng để thiết lặp môi trường làm việc.
Hình 7: Giao diện thiết lặp môi trường làm việc
Để sử dụng lệnh BC tại dấu nhắc DOS, bạn cần gõ "BC" và nhấn Enter, nhưng trước đó, hãy đảm bảo rằng đường dẫn đã được cài đặt với lệnh path, bao gồm đường dẫn đến thư mục chứa tệp tin BC.EXE Nếu đường dẫn chưa được cài đặt, hãy xác định thư mục BORLANDC và vị trí ổ đĩa của nó trước khi thực hiện lệnh.
< ổ đĩa>:\BORLANDC\BIN\BC (Enter)
Để khởi động BC với một tập tin có tên do bạn đặt, hãy gõ lệnh: BC [đường dẫn] Nếu tập tin đã tồn tại, nó sẽ được nạp lên; nếu không, một tập tin mới sẽ được tạo ra.
Để khởi động tại Windows, bạn vào menu Start, chọn Run và gõ vào hộp Open các dòng lệnh giống như khi nhập tại DOS Hoặc bạn có thể mở Windows Explorer, chọn ổ đĩa chứa thư mục BORLANDC và truy cập vào thư mục đó.
BORLANDC, vào thư mục BIN, khởi động tập tin BC.EXE
Bạn gõ D:\BORLANDC\BIN\BC E:\BAITAP_BC\VIDU1.CPP
Câu lệnh trên khởi động BC và nạp tập tin VIDU1.CPP từ thư mục BAITAP_BC trên ổ đĩa E Nếu tập tin này không tồn tại, hệ thống sẽ tự động tạo mới.
Màn hình sau khi khởi động thành công:
Hình 8: Màn hình sau khi khởi động thành công
- Ấn phím F10 (kích hoạt menu), chọn menu File, chọn Quit;
- Hoặc ấn tổ hợp phím Alt-X
2.3 Các ví dụ đơn giản:
Hình 09: Màn hình ví dụ 1
Kết quả in ra màn hình:
Hình 10: Màn hình kết quả ví dụ 1
/* Dòng này bắt đầu bằng /* và kết thúc bằng */ để chỉ ra rằng đây là phần chú thích Khi dịch và chạy chương trình, phần này sẽ không được dịch hay thực thi Mục đích của chú thích là làm cho chương trình trở nên rõ ràng hơn, giúp người đọc hiểu được chức năng của chương trình khi xem lại sau này */
CÁC THÀNH PHẦN CƠ BẢN
Hệ thống từ khóa và kí hiệu được dùng trong C
Bao gồm những ký tự, những ký hiệu sau (phân biệt chữ hoa và chữ thường):
26 chữ cái la tinh lớn A,B,C Z
26 chữ cái la tinh nhỏ a,b,c z
10 chữ số thập phân 0,1,2 9.(chữ số Ả Rập)
Các ký hiệu toán học: +, -, *, /, =, , (, )
Các ký hiệu đặc biệt: : , ; " ' _ @ # $ ! ^ [ ] { }
Dấu cách hay khoảng trống
Keywords in C are reserved words that programmers can use in their code according to the specific meanings of each term They are essential for declaring data types and writing statements, and cannot be used as identifiers for user-defined names The keywords in Turbo C 3.0 include: asm, auto, break, case, cdecl, char, class, const, continue, _cs, default, delete, do, double, _ds, else, enum, _es, extern, _export, far, _fastcall, float, for, friend, goto, huge, if, inline, int, interrupt, _loadds, long, near, new, operator, pascal, private, protected, public, register, and return.
_saveregs _seg short signed sizeof _ss static struct switch template this typedef union unsigned virtual void volatile while
Khác với ngôn ngữ khác, các từ khóa của Turbo C đều viết bằng chữ thường
Ví dụ: phải viết là if, không được viết là If hoặc IF như Pascal hoặc Foxpro
Khái niệm tên trong lập trình rất quan trọng, vì nó không chỉ thể hiện rõ ý nghĩa của chương trình mà còn giúp xác định các đại lượng khác nhau trong quá trình thực hiện Tên thường được sử dụng cho hằng, biến, mảng, con trỏ, và nhãn Chiều dài tối đa của tên biến là 32 ký tự.
Tên biến hợp lệ là một chuỗi ký tự liên tục gồm: ký tự chữ, số và dấu gạch dưới
Ký tự đầu tiên phải là chữ hoặc dấu gạch dưới Khi đặt tên không được trùng từ khóa
Các tên đúng: delta, a_1, Num_ODD, Case
3a_1 (ký tự đầu là số) num-odd (sử dụng dấu gạch ngang) int (đặt tên trùng với từ khóa) del ta (có khoảng trắng) f(x) (có dấu ngoặc tròn)
Lưu ý: trong C phân biệt chữ hoa chữ thường
VD2: number khác Number case khác Case
(case là từ khóa, do đó bạn đặt tên là Case vẫn đúng)
1.4 Cặp dấu ghi chú thích:
Khi lập trình, việc thêm ghi chú vào đoạn mã là cần thiết để dễ dàng ghi nhớ, hiểu rõ và chỉnh sửa sau này Ghi chú không ảnh hưởng đến nội dung chương trình và sẽ bị bỏ qua trong quá trình biên dịch, được đặt trong cặp dấu chú thích /* và */.
Nếu bạn không viết đúng quy định trên, khi chạy chương trình sẽ bị lỗi.
{ char ten[50]; /* khai bao bien ten kieu char 50 ky tu */
Để xuất chuỗi ra màn hình trong ngôn ngữ lập trình C, bạn có thể sử dụng lệnh `printf` để yêu cầu người dùng nhập tên Sau đó, sử dụng `scanf` để đọc tên vào một chuỗi và cuối cùng, in ra lời chào với tên người dùng Câu lệnh `printf` cũng có thể chào mừng người dùng đến với ngôn ngữ lập trình C.
/*Dung chuong trinh, cho go phim*/ getch(); return 0;
} Khi biên dịch chương trình, C gặp cặp dấu ghi chú sẽ không dịch ra ngôn ngữ máy
Tóm lại, đối với ghi chú dạng // dùng ghi chú một hàng và dạng /* … */ có thể ghi chú một hàng hoặc nhiều hàng
1.5 Các ký tự điều khiển:
Turbo C cung cấp nhiều ký tự điều khiển cho việc xuất dữ liệu ra màn hình và máy in, vượt trội hơn so với các ngôn ngữ lập trình khác Bộ ký tự điều khiển này của Turbo C rất đa dạng và hữu ích.
Các kiểu dữ liệu: kiểu số, chuỗi, ký tự
Ký tự điều khiển Giá trị Ký tự được hiểu Tác dụng
Ký tự có giá trị theo mã ASCII
Ký tự có giá trị theo mã ASCII
Phát tiếng còi Xóa ký tự bên trái Sang trang
Xuống dòng, trở về đầu dòng, tab theo cột và tab theo hàng là các thao tác cơ bản trong soạn thảo văn bản Dấu backslash, dấu nháy đơn (‘), dấu nháy kép (“) và dấu chấm hỏi (?) đều có vai trò quan trọng trong việc định dạng nội dung Trong bảng mã, giá trị cơ số 8 là ddd và giá trị cơ số 16 là HHH.
Bảng 1: Bộ ký tự điều khiển của Turbo C
{ printf(“\nDay la chuong trinh \’ Turbo C\’”);
Kết quả sẽ in ra:
Day là chuong trinh ‘Turbo C’
2.Các kiểu dữ liệu: kiểu số, chuỗi, ký tự
Kiểu số nguyên là loại dữ liệu dùng để lưu trữ các giá trị nguyên, thường được gọi là kiểu đếm được Trong ngôn ngữ lập trình C, kiểu số nguyên được phân chia thành nhiều kiểu dữ liệu con, mỗi kiểu có miền giá trị riêng biệt.
2.1.1 Kiểu số nguyên 1 byte (8 bits):
Gồm có các kiểu sau:
STT Kiểu dữ liệu Miền giá trị (domain)
1 unsigned char Từ 0 đến 255 (tương đương 256 ký tự trong bảng mã ASCII)
Bảng 2: Kiểu dữ liệu số nguyên 1 byte (8 bits)
Kiểu unsigned char: lưu các số nguyên dương từ 0 đến 255
Để khai báo biến kiểu ký tự, sử dụng kiểu dữ liệu unsigned char Mỗi giá trị trong miền của unsigned char tương ứng với một ký tự trong bảng mã ASCII.
Kiểu char: lưu các số nguyên từ -128 đến 127 Kiểu char sử dụng bit trái nhất làm bit dấu
Nếu gán giá trị > 127 cho biến kiểu char thì giá trị của biến này có thể là số âm
2.1.2 Kiểu số nguyên 2 bytes (16 bits):
STT Kiểu dữ liệu Miền giá trị (domain)
Bảng 3: Kiểu dữ liệu số nguyên 2 bytes (16 bits)
Kiểu enum, short int, int : Lưu các số nguyên từ -32768 đến 32767 Sử dụng bit bên trái nhất làm bit dấu
=> Nếu gán giá trị >32767 cho biến có 1 trong 3 kiểu trên thì giá trị của biến này có thể là số âm
Kiểu unsigned int: Kiểu unsigned int lưu các số nguyên dương từ 0 đến 65535
2.1.3 Kiểu số nguyên 4 bytes (32 bit):
Kiểu số nguyên 4 bytes hay còn gọi là số nguyên dài (long) gồm có 2 kiểu sau: STT Kiểu dữ liệu Miền giá trị (Domain)
Bảng 4: Kiểu dữ liệu số nguyên 4 bytes (32 bits)
Kiểu long: Lưu tất cả các số nguyên từ -2147483648 đên 2147483647 Sử dụng bit bên trái nhất để làm bit dấu
=> Nếu gán giá trị > 2147483647 cho biến có kiểu long thì giá trị biến này có thể là số âm
Kiểu unsigned long: Lưu các số nguyên dương từ 0 đên 4294967295
Kiểu số thực dùng lưu các số thực hay các sô có dấu chấm thập phân gồm có 3 kiểu sau:
STT Kiểu dữ liệu Kích thước
(Size) Miền giá trị (domain)
3 long double 10 bytes Từ 3.4 * 10 -4932 đến 3.4 * 10 4932
Bảng 5: Kiểu dữ liệu số thực
Mỗi kiểu số thực có miền giá trị và độ chính xác khác nhau Tùy thuộc vào nhu cầu sử dụng, bạn có thể chọn khai báo biến thuộc một trong ba kiểu số thực này.
Ngoài ra ta còn có kiểu dữ liệu void, kiểu này mang ý nghĩa là kiểu rỗng không chứa giá trị nào cả.
Các loại biến, cách khai báo, sử dụng
Biến là một đại lượng do lập trình viên định nghĩa và đặt tên thông qua khai báo Nó được sử dụng để chứa dữ liệu trong quá trình thực hiện chương trình, với giá trị có thể thay đổi trong suốt quá trình đó Cách đặt tên biến tương tự như những quy tắc đã nêu ở phần trước.
Mỗi biến thuộc về một kiểu dữ liệu xác định và có giá trị thuộc kiểu đó.
Muốn biến sử dụng trong chương trình đều phải đặt tên theo các quy định như sa:
Tên biến hợp lệ trong Turbo C là chuỗi ký tự liên tục bao gồm chữ cái, số và dấu gạch dưới, với ký tự đầu tiên phải là chữ cái Khi đặt tên biến, cần tránh trùng với các từ khóa đã được định nghĩa trong Turbo C.
Ví dụ: bien_1, bien_2, temp22 hợp lê. bi&, 2ten, A b, float không hợp lệ
Turbo C phân biệt rất rõ rang giữa chữ in thường và in hoa.
BIEN, Bien, bieN: Là những tên biến khác nhau
If, Goto: Tuy trùng với từ khóa nhưng vẫn hợp lệ
Turbo C chỉ phân biệt các tên hợp lệ dựa trên n ký tự đầu tiên, với n dao động từ 8 đến 32 ký tự Điều này cho phép bạn tự do đặt tên biến, nhưng cần lưu ý rằng tên biến dài sẽ khó nhớ hơn.
Ví dụ: Hai tên biến sau đây được coi là hợp lệ và cùng tên nhau :
- Ten_bien_dai_toi_32_ky_tu_dau_tien_1
- Ten_bien_dai_toi_32_ky_tu_dau_tien_2
3.1.1 Cú p háp khai báo biến:
Danh sách các tên biến;
Kiểu dữ liệu: một trong các kiểu ở mục
Danh sách các tên biến: gồm các tên biến có cùng kiểu dữ liệu, mỗi tên biến cách nhau dấu phẩy (,), cuối cùng là dâu chấm phẩy (;)
Trong đoạn mã, có bốn biến được khai báo: a, b, và c có kiểu int, chu_vi có kiểu long int, nua_chu_vi có kiểu float, và dien_tich có kiểu double.
Khi khai báo biến nên đặt theo quy tắc Hungarian Notation
Trong đoạn mã trên, biến `ituoi` được khai báo với kiểu dữ liệu `int`, biến `fTrongluong` được khai báo với kiểu `float`, và hai biến `ckitu1` và `ckitu2` được khai báo với kiểu `char`.
Biến khai báo theo quy tắc Hungarian Notation giúp nhận diện kiểu dữ liệu dễ dàng hơn Ví dụ, biến ituoi được định nghĩa với tiền tố "i" cho kiểu int, cho phép lập trình viên nhanh chóng nhận biết kiểu dữ liệu mà không cần tra cứu phần khai báo Tương tự, biến fTrongluong với tiền tố "f" cho kiểu float cũng giúp người dùng nhận diện ngay lập tức kiểu dữ liệu của nó.
Việc khai báo biến trong Turbo C và Pascal có sự khác biệt rõ rệt, gây nhầm lẫn cho những người đã quen thuộc với Pascal khi chuyển sang Turbo C Để tránh những sai sót không đáng có, chúng tôi xin lưu ý về các điểm khác nhau trong cách khai báo biến giữa hai ngôn ngữ lập trình này.
Ví dụ: var a,b,c: integer; begin
Bảng 6: Việc khai báo biến giữa Turbo C và Pascal có sự khác nhau
Trong ngôn ngữ lập trình C, việc khai báo biến ở vị trí đúng là rất quan trọng Nếu không khai báo đúng, lập trình viên có thể gặp phải những sai sót không mong muốn, được gọi là hiệu ứng lề Có hai cách để xác định vị trí khai báo các biến trong C.
Các biến toàn cục được định nghĩa bên ngoài tất cả các hàm, ảnh hưởng đến toàn bộ chương trình.
Hình 1: Khai báo biến ngoài
Ví dụ 1: int i; /*Bien ben ngoai */ float pi; /*Bien ben ngoai*/ int main()
Ví dụ 2 : int n, tong ;/*Khai báo biến ngoài*/ main()
Các biến được định nghĩa trong hàm, chương trình chính hoặc một khối lệnh cụ thể chỉ có tác dụng trong phạm vi của chúng Khi khai báo biến, cần phải đặt chúng ở đầu khối lệnh, trước các lệnh gán và các thao tác khác.
30 int bienngoai; /*khai bao bien ngoai*/ int main ()
{ int j,i; /*khai bao bien ben trong chuong trinh chinh*/ clrscr(); i=1; j=2; bienngoai=3; printf("\n Gia tri cua i la %d",i);
/*%d là s nguyên, s bit sau */ printf("\n Gia tri cua j la %d",j); printf("\n Gia tri cua bienngoai la %d",bienngoai); getch(); return 0;
{ int i, j; /*Bien ben trong*/ clrscr(); i=4; j=5; printf("\n Gia tri cua i la %d",i); printf("\n Gia tri cua j la %d",j); if(j>i)
{ int hieu=j-i; /*Bien ben trong */ printf("\n Hieu so cua j tru i la %d",hieu);
{ int hieu=i-j ; /*Bien ben trong*/ printf("\n Gia tri cua i tru j la %d",hieu);
3.1.3 Khai báo đối số hàm:
Vị trí biến đặt trong phần định nghĩa tham số của hàm
Ví dụ: fun2(x,c) int x; /*Khai báo đối số hàm*/ char c;
Khi khai báo biến trong hàm, bạn cần đặt biến ngay sau dấu { đầu tiên và trước các câu lệnh khác Nếu bạn khai báo biến sau một lệnh khác, như lệnh gán, Turbo C sẽ báo lỗi.
/*Khai báo sai vị trí biến*/ main()
{ int a,b,c;/*khai báo đúng*/ a5; int d;/*khai bao sai vi sau cau lenh gan*/
Khi khai báo biến ở các vị trí khác nhau trong chương trình, ý nghĩa và giá trị của biến sẽ thay đổi Điều này cần được chú ý kỹ lưỡng để tránh những sai lầm không đáng có.
Với đặc điểm này, bạn có thể tận dụng việc đặt trùng tên cho các biến để tiết kiệm bộ nhớ mà không lo bị sai giá trị Để hiểu rõ hơn về tác dụng này, hãy nhập và chạy thử đoạn chương trình dưới đây.
/*Mô tả sự khác nhau về vi trí các biến*/
/*Các biến này chỉ tồn tại trong khối*/ printf(“KET QUA IN RA\n”); printf(“Gia tri i trong khoi = % d\n”,i); printf(“Gia tri j trong khoi = % d\n”,j);
} printf(“Gia tri i ngoai khoi = %d\n”,i); printf(“Gia tri j ngoai khoi = %d\n”j); getch();
Sau khi chay chương trinh ma se co ket qua nhu sau: }
3.2.Vừa khai báo vừa khởi gán:
Có thể kết hợp việc khai báo với toán tử gán để biến nhận ngay giá trị cùng lúc với khai báo
VD: Khai báo trước, gán trị sau:
Vừa khai báo vừa gán trị: void main()
Biểu thức là một sự kết hợp giữa các toán tử (operator) và các toán hạng (operand) theo đúng một trật tự nhất định
- Mỗi toán hạng có thể là một hằng, một biến hoặc một biểu thức khác
- Trong trường hợp, biểu thức có nhiều toán tử, ta dùng cặp dấu ngoặc đơn () để chỉ định toán tử nào được thực hiện trước
Biểu thức nghiệm của phương trình bậc hai:
Trong đó 2 là hằng; a, b, Delta là biến
Ví dụ 2 : a = (i = 10 * a) + sin (x = b + 1) * ( b>1) : hoặc x = y / 3 + power (i,2);
Trong ngôn ngữ lập trình C, các toán tử cơ bản như +, -, *, / hoạt động tương tự như trong các ngôn ngữ khác và có thể áp dụng cho hầu hết các kiểu dữ liệu được hỗ trợ Khi thực hiện phép chia / với số nguyên hoặc ký tự, phần dư sẽ bị loại bỏ, ví dụ như 5/2 cho kết quả là 2 trong phép chia nguyên.
Bảng 7: Các toán tử số học
Toán tử ++ thêm 1 vào toán hạng của nó và – trừ bớt 1 Nói cách khác: x = x + 1 giống như ++x x = x – 1 giống như x—
Cả 2 toán tử tăng và giảm đều có thể tiền tố (đặt trước) hay hậu tố (đặt sau) toán hạng Ví dụ: x = x + 1 có thể viết x++ (hay ++x)
Trong ngôn ngữ lập trình C, sự khác biệt giữa tiền tố và hậu tố là rất quan trọng khi sử dụng trong biểu thức Khi toán tử tăng (++) hoặc giảm ( ) đứng trước toán hạng, C sẽ thực hiện phép toán trước khi sử dụng giá trị trong biểu thức Ngược lại, nếu toán tử đứng sau toán hạng, C sẽ lấy giá trị của toán hạng trước khi thực hiện phép toán Ví dụ, với x = 10 và y = ++x, giá trị của y sẽ là 11.
Thứ tự ưu tiên của các toán tử số học:
++ sau đó là * / % rồi mới đến + -
Thực hành
3 Chương 3: Các lệnh có cấu trúc 20 9 10 1
1 Khái niệm về lệnh cấu trúc 2
3 Các tham số của hàm 2
4 Các lệnh đơn nhằm kết thúc hàm và nhận giá trị trả về cho tên hàm 2
CHƯƠNG 1 : TỔNG QUAN VỀ NGÔN NGỮ C
Sau khi học xong bài này sinh viên có khả năng:
- Hiểu được lịch sử phát triển của ngôn ngữ C
- Biết được ngôn ngữ này có ứng dụng như thế nào
- Biết cách khởi động được và thoát khỏi chương trình
- Sử dụng hệ thống trợ giúp từ help file
1.Giới thiệu về lịch sử phát triển của ngôn ngữ, sự cần thiết phải học ngôn ngữ C hiện nay
C là ngôn ngữ lập trình cấp cao, được sử dụng rất phổ biến để lập trình hệ thống cùng với Assembler và phát triển ứng dụng
Vào cuối thập kỷ 60 và đầu thập kỷ 70 thế kỷ XX, Dennish Ritchie tại phòng thí nghiệm Bell đã phát triển ngôn ngữ C, dựa trên ngôn ngữ BCPL của Martin Richards và ngôn ngữ B của Ken Thompson Ngôn ngữ C được sử dụng để viết hệ điều hành UNIX đầu tiên trên máy PDP-7 và sau đó được cài đặt trên hệ điều hành UNIX của máy DEC PDP-11 Đến nay, ngôn ngữ C vẫn là một trong những ngôn ngữ lập trình phổ biến nhất, nhờ vào việc tích hợp những thành tựu mới nhất trong lĩnh vực tin học.
Hình 1: (Dennis Ritchie(trái) và Ken Thompson trước hệ thống PDP-11với 2 text-terminal
Hiện nay, ngôn ngữ lập trình C và C++ đang được giảng dạy rộng rãi ở bậc trung học và đại học tại các nước Âu và Mỹ Trong tương lai, ngôn ngữ C dự kiến sẽ trở thành ngôn ngữ quốc tế trong lĩnh vực tin học, tương tự như việc sử dụng tiếng Anh trong giao tiếp toàn cầu.
Ngôn ngữ C sở hữu một thư viện hàm phong phú, vượt trội hơn hẳn so với các ngôn ngữ lập trình khác Nhờ vào việc chỉ cần truyền tham số, lập trình viên có thể nhanh chóng nhận được kết quả mà không cần tốn thời gian viết lại các chức năng tương tự.
Công việc lập trình trở nên dễ dàng và nhanh chóng, cho phép tạo ra nhiều sản phẩm ứng dụng chất lượng cao trong mọi lĩnh vực Ngôn ngữ C là lựa chọn lý tưởng để giải quyết các bài toán kỹ thuật phức tạp nhờ vào các toán tử điều khiển mạnh mẽ của nó.
Cấu trúc trong ngôn ngữ C cho phép mô tả các khối dữ liệu lớn, giúp giải quyết hiệu quả các bài toán quản lý và xử lý mô hình lựa chọn tối ưu Chương trình viết bằng ngôn ngữ C có khả năng chạy nhanh gần bằng ngôn ngữ Assembly.
Ngôn ngữ C được biết đến là một ngôn ngữ dễ học với chương trình viết ngắn gọn, súc tích và cấu trúc rõ ràng, giúp người dùng dễ dàng phát hiện sai sót Chính vì vậy, ngôn ngữ này ngày càng được ưa chuộng, đặc biệt là trong giới học sinh và sinh viên Một số đặc điểm cơ bản của ngôn ngữ C bao gồm tính đơn giản và hiệu quả trong việc lập trình.
+ Tính cô động (compact): C chỉ có 32 từ khóa chuẩn và 40 toán tử chuẩn, nhưng đều được biểu diễn bằng những chuỗi ký tự ngắn gọn
Ngôn ngữ lập trình C có tính cấu trúc mạnh mẽ với các chỉ thị như cấu trúc lựa chọn và lặp, giúp tổ chức chương trình một cách rõ ràng và dễ hiểu.
C có tính tương thích cao nhờ vào tiền xử lý mạnh mẽ và thư viện chuẩn phong phú, cho phép các chương trình viết bằng C vẫn hoạt động hoàn hảo khi chuyển từ máy tính này sang máy tính khác.
Ngôn ngữ C nổi bật với tính linh động và cú pháp linh hoạt, cho phép lập trình viên sử dụng nhiều cách thể hiện khác nhau Điều này không chỉ giúp thu gọn kích thước mã lệnh mà còn tối ưu hóa tốc độ chạy của chương trình.
Biên dịch (compile) là quá trình cho phép ngôn ngữ lập trình C chuyển đổi nhiều tập tin chương trình riêng lẻ thành các tập tin đối tượng (object) và liên kết chúng lại với nhau, tạo thành một chương trình có thể thực thi (executable) thống nhất.
2.Cách khởi động và thoát chương trình (Turbo C):
Giới thiệu môi trường làm việc của Turbo C:
- Turbo C do hãng Borland cung cấp.
- Gồm các chức năng sau: 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
- Đây là màn hình gọi Turbo C:
- Giao diện soạn thảo chương trình mới: vào menu File ->New
Hình 4: Giao diện soạn thảo chương trình mới
- Ghi chương trình đang soạn thảo vào đĩa:
- Sử dụng File->Save hoặc gõ phím F2
- Lệnh Save As để lưu lại chương trình với tên khác
Hình 5: Giao diện lưu chương trình mới
- Thực hiện chương trình, mở một chương trình và thoát:
+ Thực hiện chương trình: Nhấn Ctrl-F9 hoặc vào menu Run->Run
Hình 6: Giao diện thực hiện chương trình + Mở một chương trình có sẵn trên đĩa: Vào menu File->Open hoặc F3
Hình 7: Giao diện mở một chương trình có sẵn trên đĩa + Thoát khỏi Turbo C
Vào menu File->Exit hoặc Alt-X
- Các lệnh nằm trên menu Option:
Include directories: chứa các tập tin muốn đưa vào chương trình (file h trong dòng # include)
Library directories: Chứa tập tin thư viện (file lib)
Output directory: Chứa các tập tin ”đối tượng “ obj và exe sau khi chạy chương trình
Source directories: Chứa các tập tin nguồn (.obj và lib)
+ Environment: dùng để thiết lặp môi trường làm việc.
Hình 7: Giao diện thiết lặp môi trường làm việc
Để sử dụng lệnh BC tại dấu nhắc DOS, bạn cần gõ "BC" và nhấn Enter, đảm bảo rằng đường dẫn đã được cài đặt trong lệnh path, bao gồm thư mục chứa tập tin BC.EXE Nếu đường dẫn chưa được cài đặt, hãy xác định vị trí thư mục BORLANDC trên ổ đĩa của bạn và sau đó nhập lệnh thích hợp.
< ổ đĩa>:\BORLANDC\BIN\BC (Enter)
Để khởi động BC với một tập tin có tên do bạn đặt, hãy sử dụng lệnh: BC [đường dẫn] Nếu tập tin đã tồn tại, nó sẽ được nạp lên; nếu không, một tập tin mới sẽ được tạo ra.
Để khởi động tại Windows, bạn vào menu Start và chọn Run, sau đó gõ vào hộp Open một trong các dòng lệnh như trong DOS Ngoài ra, bạn cũng có thể mở Windows Explorer, chọn ổ đĩa chứa thư mục BORLANDC và truy cập vào thư mục đó.
BORLANDC, vào thư mục BIN, khởi động tập tin BC.EXE
Bạn gõ D:\BORLANDC\BIN\BC E:\BAITAP_BC\VIDU1.CPP
Câu lệnh này khởi động BC và nạp tập tin VIDU1.CPP từ thư mục BAITAP_BC trên ổ đĩa E; nếu tập tin không tồn tại, nó sẽ được tạo mới.
Màn hình sau khi khởi động thành công:
Hình 8: Màn hình sau khi khởi động thành công
- Ấn phím F10 (kích hoạt menu), chọn menu File, chọn Quit;
- Hoặc ấn tổ hợp phím Alt-X
2.3 Các ví dụ đơn giản:
Hình 09: Màn hình ví dụ 1
Kết quả in ra màn hình:
Hình 10: Màn hình kết quả ví dụ 1
/* Dòng đầu tiên bắt đầu bằng /* và kết thúc bằng */ để chỉ ra rằng đây là chú thích Khi dịch và chạy chương trình, chú thích này không được dịch và không thực thi lệnh nào Mục đích của việc ghi chú là làm cho chương trình trở nên rõ ràng hơn, giúp người đọc hiểu được chức năng của chương trình khi xem lại sau này */
CÁC LỆNH CÓ CẤU TRÚC
Khái niệm về lệnh cấu trúc
3 Các tham số của hàm 2
4 Các lệnh đơn nhằm kết thúc hàm và nhận giá trị trả về cho tên hàm 2
CHƯƠNG 1 : TỔNG QUAN VỀ NGÔN NGỮ C
Sau khi học xong bài này sinh viên có khả năng:
- Hiểu được lịch sử phát triển của ngôn ngữ C
- Biết được ngôn ngữ này có ứng dụng như thế nào
- Biết cách khởi động được và thoát khỏi chương trình
- Sử dụng hệ thống trợ giúp từ help file
1.Giới thiệu về lịch sử phát triển của ngôn ngữ, sự cần thiết phải học ngôn ngữ C hiện nay
C là ngôn ngữ lập trình cấp cao, được sử dụng rất phổ biến để lập trình hệ thống cùng với Assembler và phát triển ứng dụng
Vào cuối thập kỷ 60 và đầu thập kỷ 70 thế kỷ XX, Dennish Ritchie tại phòng thí nghiệm Bell đã phát triển ngôn ngữ C, dựa trên ngôn ngữ BCPL do Martin Richards giới thiệu năm 1967 và ngôn ngữ B do Ken Thompson phát triển năm 1970 Ngôn ngữ C được sử dụng để viết hệ điều hành UNIX đầu tiên trên máy PDP-7 và sau đó được cài đặt trên hệ điều hành UNIX của máy DEC PDP-11 Đến nay, ngôn ngữ C vẫn là một trong những ngôn ngữ lập trình phổ biến nhất, nhờ vào việc nó được xây dựng trên những thành tựu mới nhất của lĩnh vực tin học.
Hình 1: (Dennis Ritchie(trái) và Ken Thompson trước hệ thống PDP-11với 2 text-terminal
Hiện nay, ngôn ngữ lập trình C và C++ đang được giảng dạy rộng rãi ở bậc trung học và đại học tại các nước Âu, Mỹ Dự đoán trong tương lai, ngôn ngữ C sẽ trở thành ngôn ngữ quốc tế trong lĩnh vực tin học, tương tự như vai trò của tiếng Anh trong giao tiếp toàn cầu.
Ngôn ngữ C sở hữu một thư viện hàm phong phú, vượt trội hơn hẳn so với các ngôn ngữ lập trình khác Nhờ vào tính năng này, lập trình viên có thể dễ dàng sử dụng các hàm có sẵn bằng cách chỉ cần truyền tham số, giúp tiết kiệm thời gian và công sức so với việc tự viết lại chức năng tương tự.
Công việc lập trình trở nên dễ dàng và nhanh chóng, giúp tạo ra nhiều sản phẩm ứng dụng chất lượng cao Ngôn ngữ C là lựa chọn lý tưởng để giải quyết các bài toán kỹ thuật phức tạp nhờ vào các toán tử điều khiển mạnh mẽ của nó.
Cấu trúc trong ngôn ngữ C cho phép mô tả các khối dữ liệu lớn, giúp giải quyết các bài toán quản lý và xử lý các mô hình lựa chọn tối ưu Chương trình viết bằng C có thể chạy với tốc độ gần bằng Assembler.
Ngôn ngữ C là một ngôn ngữ lập trình dễ học với chương trình viết ngắn gọn, súc tích và có cấu trúc rõ ràng, giúp người dùng dễ dàng phát hiện sai sót Chính vì vậy, ngôn ngữ C ngày càng được ưa chuộng, đặc biệt trong giới học sinh và sinh viên Một số đặc điểm cơ bản của ngôn ngữ C bao gồm tính đơn giản và hiệu quả trong việc lập trình.
+ Tính cô động (compact): C chỉ có 32 từ khóa chuẩn và 40 toán tử chuẩn, nhưng đều được biểu diễn bằng những chuỗi ký tự ngắn gọn
C là một ngôn ngữ lập trình có cấu trúc rõ ràng nhờ vào các chỉ thị như cấu trúc lựa chọn và lặp Điều này giúp cho các chương trình được viết bằng C trở nên dễ hiểu và tổ chức một cách mạch lạc.
C có tính tương thích cao nhờ vào tiền xử lý và thư viện chuẩn phong phú, cho phép các chương trình viết bằng C hoạt động mượt mà trên nhiều máy tính khác nhau.
C là một ngôn ngữ lập trình linh động, cho phép nhiều cách thể hiện khác nhau trong cú pháp Điều này giúp thu gọn kích thước mã lệnh và tối ưu hóa tốc độ chạy của chương trình.
Biên dịch (compile) là quá trình cho phép ngôn ngữ lập trình C chuyển đổi nhiều tập tin chương trình riêng biệt thành các tập tin đối tượng (object) và liên kết chúng lại với nhau để tạo thành một chương trình có thể thực thi (executable) một cách thống nhất.
2.Cách khởi động và thoát chương trình (Turbo C):
Giới thiệu môi trường làm việc của Turbo C:
- Turbo C do hãng Borland cung cấp.
- Gồm các chức năng sau: 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
- Đây là màn hình gọi Turbo C:
- Giao diện soạn thảo chương trình mới: vào menu File ->New
Hình 4: Giao diện soạn thảo chương trình mới
- Ghi chương trình đang soạn thảo vào đĩa:
- Sử dụng File->Save hoặc gõ phím F2
- Lệnh Save As để lưu lại chương trình với tên khác
Hình 5: Giao diện lưu chương trình mới
- Thực hiện chương trình, mở một chương trình và thoát:
+ Thực hiện chương trình: Nhấn Ctrl-F9 hoặc vào menu Run->Run
Hình 6: Giao diện thực hiện chương trình + Mở một chương trình có sẵn trên đĩa: Vào menu File->Open hoặc F3
Hình 7: Giao diện mở một chương trình có sẵn trên đĩa + Thoát khỏi Turbo C
Vào menu File->Exit hoặc Alt-X
- Các lệnh nằm trên menu Option:
Include directories: chứa các tập tin muốn đưa vào chương trình (file h trong dòng # include)
Library directories: Chứa tập tin thư viện (file lib)
Output directory: Chứa các tập tin ”đối tượng “ obj và exe sau khi chạy chương trình
Source directories: Chứa các tập tin nguồn (.obj và lib)
+ Environment: dùng để thiết lặp môi trường làm việc.
Hình 7: Giao diện thiết lặp môi trường làm việc
Để sử dụng lệnh BC tại dấu nhắc DOS, trước tiên bạn cần gõ "BC" và nhấn Enter, đảm bảo rằng đường dẫn đã được cài đặt trong lệnh path, bao gồm thư mục chứa tệp tin BC.EXE Nếu đường dẫn chưa được cài đặt, hãy xác định vị trí thư mục BORLANDC trên ổ đĩa của bạn trước khi tiếp tục.
< ổ đĩa>:\BORLANDC\BIN\BC (Enter)
Để khởi động chương trình BC với một tập tin có tên tùy ý, bạn chỉ cần gõ lệnh: BC [đường dẫn] Nếu tập tin đã tồn tại, nó sẽ được nạp lên; nếu chưa có, một tập tin mới sẽ được tạo ra.
Để khởi động tại Windows, bạn vào menu Start, chọn Run và gõ vào hộp Open các lệnh tương tự như khi nhập tại DOS Ngoài ra, bạn cũng có thể mở Windows Explorer, chọn ổ đĩa chứa thư mục BORLANDC và truy cập vào thư mục đó.
BORLANDC, vào thư mục BIN, khởi động tập tin BC.EXE
Bạn gõ D:\BORLANDC\BIN\BC E:\BAITAP_BC\VIDU1.CPP
Câu lệnh trên khởi động BC và nạp tập tin VIDU1.CPP từ thư mục BAITAP_BC trên ổ đĩa E Nếu tập tin này không tồn tại, nó sẽ được tạo mới.
Màn hình sau khi khởi động thành công:
Hình 8: Màn hình sau khi khởi động thành công
- Ấn phím F10 (kích hoạt menu), chọn menu File, chọn Quit;
- Hoặc ấn tổ hợp phím Alt-X
2.3 Các ví dụ đơn giản:
Hình 09: Màn hình ví dụ 1
Kết quả in ra màn hình:
Hình 10: Màn hình kết quả ví dụ 1
/* Dòng đầu tiên của mã nguồn bắt đầu bằng /* và kết thúc bằng */ để chỉ rõ đây là chú thích, không được dịch hay thực thi khi chạy chương trình Mục đích của chú thích này là làm cho chương trình trở nên rõ ràng hơn, giúp người đọc dễ dàng hiểu được chức năng của mã khi xem lại sau này */
Các lệnh cấu trúc rẽ nhánh như: if, switch
Cấu trúc rẽ nhánh là một yếu tố quan trọng và phổ biến trong các ngôn ngữ lập trình Trong ngôn ngữ C, có hai loại cấu trúc rẽ nhánh: dạng không đầy đủ và dạng đầy đủ.
Quyết định sẽ thực hiện hay không thực hiện một khối lệnh
Cú pháp: if ()
Từ khóa if phải viết bằng chữ thường
kết quả công việc phải là đúng (≠0) hoặc sai (=0)
Nếu khối lệnh bao gồm 2 lệnh trở lên thì phải đặt trong dấu {}.
được thể hiện bằng 1 câu lệnh hay một khối lệnh
Kiểm tra biểu thức điều kiện trước
Nếu điều kiện đúng (!=0) thì thực hiện câu lệnh hay khối lệnh liền sau điều kiện
Nếu điều kiện không đúng, câu lệnh hoặc khối lệnh ngay sau điều kiện sẽ bị bỏ qua Tuy nhiên, các lệnh và khối lệnh phía sau vẫn được thực hiện bình thường vì chúng không phụ thuộc vào điều kiện của câu lệnh if.
Yêu cầu người thực hiện chương trình nhập vào một số thực a In ra màn hình kết quả nghịch đảo của a khi a ≠ 0
{ float a; printf("Nhap a = "); scanf("%f",&a); if (a !=0 ) printf("Nghich dao cua %f la %f",a,1/a); getch(); return 0;
Nếu chúng ta nhập vào a ≠ 0 thì câu lệnh printf ("Nghich dao cua %f la
%f",a,1/a) được thực hiện, ngược lại câu lệnh này không được thực hiện
- Lệnh getch() luôn luôn được thực hiện vì nó không phải là “lệnh liền sau” điều kiện if
Yêu cầu người dùng nhập vào hai số a và b Nếu a lớn hơn b, hãy in ra thông báo "Giá trị của a lớn hơn giá trị của b" và hiển thị giá trị cụ thể của hai số này trên màn hình.
{ int a,b; printf("Nhap vao gia tri cua 2 so a, b!"); scanf("%d%d",&a,&b); if (a>b)
{ printf("\n Gia tri cua a lon hon gia tri cua b"); printf("\n a=%d, b=%d",a,b);
Nếu chúng ta nhập vào giá trị của a lớn hơn giá trị của b thì khối lệnh:
{ printf("\n Gia tri cua a lon hon gia tri cua b"); printf("\n a=%d, b=%d",a,b);
Sẽ được thực hiện, ngược lại khối lệnh này không được thực hiện }
Không đặt dấu chấm phẩy (;) sau câu lệnh if
Ví dụ: if;
Trình bien dịch không báo lỗi nhưng khối lệnh không được thực hiện cho dù điều kiện đúng hay sai.
Cú pháp: if (
Từ khóa if, else phải viết bằng chữ thường
kết quả Công việc 1, Công việc 2 phải là đúng (≠0) hoặc sai (=0)
Hình 3: Lưu đồ cú pháp
Nếu Công việc 1 và Công việc 2 có từ 2 lệnh trở lên, cần phải đặt chúng trong dấu {} Ví dụ: Yêu cầu người thực hiện chương trình nhập vào một số thực a; in ra màn hình kết quả nghịch đảo của a khi a khác 0, và khi a bằng 0, in ra thông báo “Không thể tìm được nghịch đảo của a”.
{ float a; printf("Nhap a = "); scanf("%f",&a); if (a !=0 ) printf("Nghich dao cua %f la %f",a,1/a); else printf(“Khong the tim duoc nghich dao cua a”); getch(); return 0;
Nếu chúng ta nhập vào a ≠ 0 thì câu lệnh printf ("Nghich dao cua %f la
%f",a,1/a) được thực hiện, ngược lại câu lệnh printf ("Khong the tim duoc nghich dao cua a") được thực hiện
Lệnh getch() luôn luôn được thực hiện
Trong ví dụ này, chương trình yêu cầu người dùng nhập vào hai số a và b Nếu a lớn hơn b, chương trình sẽ hiển thị thông báo “Giá trị của a lớn hơn giá trị của b, giá trị của 2 số” Ngược lại, nếu a nhỏ hơn hoặc bằng b, chương trình sẽ in ra thông báo “Giá trị của a nhỏ hơn hoặc bằng giá trị của b, giá trị của 2 số”.
{ int a, b; printf("Nhap vao gia tri cua 2 so a va b !"); scanf("%d%d",&a,&b); if (a>b)
{ printf("\n a nho hon hoac bang b"); printf("\n a=%d b=%d",a,b);
} printf("\n Thuc hien xong lenh if"); getch(); return 0;
Nếu chúng ta nhập vào 40 30 thì kết quả hiện ra trên màn hình là a lon hon b a@ b0
Thuc hien xong lenh if
Còn nếu chúng ta nhập 40 50 thì kết quả hiện ra trên màn hình là a nho hon hoac bang b a@ bP
Thuc hien xong lenh if
Ví dụ 3: Yêu cầu người thực hiện chương trình nhập vào một số nguyên dương là tháng trong năm và in ra số ngày của tháng đó
Đoạn mã trên yêu cầu người dùng nhập vào một tháng trong năm và xác định số ngày của tháng đó Nếu tháng là 1, 3, 5, 7, 8, 10 hoặc 12, chương trình sẽ thông báo rằng tháng đó có 31 ngày Nếu tháng là 4, 6, 9 hoặc 11, chương trình sẽ cho biết tháng đó có 30 ngày Cuối cùng, nếu tháng là 2, chương trình sẽ xử lý riêng để xác định số ngày của tháng 2.
54 printf("\n Thang %d co 28 hoac 29 ngay",thg); else printf("Khong co thang %d",thg); printf("\n Thuc hien xong lenh if"); getch(); return 0;
Nếu chúng ta nhập vào một trong các số 1, 3, 5, 7, 8, 10, 12 thì kết quả xuất hiện trên màn hình sẽ là:
Thuc hien xong lenh if
Nếu chúng ta nhập vào một trong các số 4, 6, 9, 11 thì kết quả xuất hiện trên màn hình sẽ là:
Thuc hien xong lenh if
Nếu chúng ta nhập vào số 2 thì kết quả xuất hiện trên màn hình sễ là:
Thuc hien xong lenh if
Nếu chúng ta nhập vào số nhỏ hơn 0 hoặc lớn hơn 12 thì kết quả xuất hiện trên màn hình sẽ là:
Thuc hien xong lenh if
Trong đó là con số mà chúng ta đã nhập vào
Có thể sử dụng các câu lệnh if…else lồng nhau, trong đó else sẽ được kết hợp với if gần nhất mà chưa có else.
Khi câu lệnh if không có else, cần sử dụng cặp dấu {} để xác định khối lệnh, nhằm tránh sự kết hợp sai với else if.
Ví dụ 1: if ( so1>0) if (so2 > so3) a=so2; else /*else ca if (so2>so3) */ a=so3;
{ if (so2>so3) /*lenh if này không có else*/ a=so2;
} else /*else ca if (so1>0)*/ a=so3;
Sau else không có dấu chấm phẩy (;)
Trình biên dịch không báo lỗi, lệnh printf("a khac b\n"); không thuộc else
Các lệnh đơn nhằm kết thúc sớm vòng lặp
và nhận giá trị trả về cho tên hàm 2
Kiểm tra
3 Các tham số của hàm 2
4 Các lệnh đơn nhằm kết thúc hàm và nhận giá trị trả về cho tên hàm 2
CHƯƠNG 1 : TỔNG QUAN VỀ NGÔN NGỮ C
Sau khi học xong bài này sinh viên có khả năng:
- Hiểu được lịch sử phát triển của ngôn ngữ C
- Biết được ngôn ngữ này có ứng dụng như thế nào
- Biết cách khởi động được và thoát khỏi chương trình
- Sử dụng hệ thống trợ giúp từ help file
1.Giới thiệu về lịch sử phát triển của ngôn ngữ, sự cần thiết phải học ngôn ngữ C hiện nay
C là ngôn ngữ lập trình cấp cao, được sử dụng rất phổ biến để lập trình hệ thống cùng với Assembler và phát triển ứng dụng
Vào cuối thập kỷ 60 và đầu thập kỷ 70 của thế kỷ XX, Dennish Ritchie tại phòng thí nghiệm Bell đã phát triển ngôn ngữ C dựa trên ngôn ngữ BCPL của Martin Richards và ngôn ngữ B do Ken Thompson phát triển Ngôn ngữ C được sử dụng để viết hệ điều hành UNIX đầu tiên trên máy PDP-7 và sau đó được cài đặt trên hệ điều hành UNIX của máy DEC PDP-11 Đến nay, ngôn ngữ C vẫn là một trong những ngôn ngữ lập trình phổ biến nhất, nhờ vào việc tích hợp những thành tựu mới nhất trong lĩnh vực tin học.
Hình 1: (Dennis Ritchie(trái) và Ken Thompson trước hệ thống PDP-11với 2 text-terminal
Hiện nay, ngôn ngữ lập trình C và C++ đang được sử dụng rộng rãi trong giảng dạy tại các trường trung học và đại học ở Âu, Mỹ Dự đoán rằng trong tương lai, ngôn ngữ C sẽ trở thành ngôn ngữ quốc tế trong lĩnh vực tin học, tương tự như cách mà tiếng Anh được sử dụng trong giao tiếp hiện nay.
Ngôn ngữ C sở hữu một thư viện hàm phong phú, vượt trội hơn hẳn so với các ngôn ngữ khác Lập trình viên chỉ cần truyền tham số vào các hàm này để nhận kết quả ngay lập tức, giúp tiết kiệm thời gian so với việc viết lại các chức năng tương tự.
Công việc lập trình trở nên dễ dàng và nhanh chóng, giúp tạo ra nhiều ứng dụng chất lượng cao trong mọi lĩnh vực Ngôn ngữ C là lựa chọn lý tưởng cho các bài toán kỹ thuật phức tạp nhờ vào các toán tử điều khiển mạnh mẽ của nó.
Khái niệm cấu trúc trong ngôn ngữ C cho phép mô tả các khối dữ liệu lớn, giúp giải quyết hiệu quả các bài toán quản lý và xử lý mô hình lựa chọn tối ưu Chương trình viết bằng C có thể chạy nhanh gần bằng ngôn ngữ Assembler.
Ngôn ngữ C là một ngôn ngữ lập trình dễ học, với chương trình viết ngắn gọn, súc tích và cấu trúc rõ ràng, giúp người dùng dễ dàng phát hiện lỗi Chính vì vậy, ngôn ngữ C ngày càng được ưa chuộng, đặc biệt là trong cộng đồng học sinh và sinh viên Các đặc điểm cơ bản của ngôn ngữ C bao gồm tính dễ học, cấu trúc rõ ràng và khả năng phát hiện lỗi hiệu quả.
+ Tính cô động (compact): C chỉ có 32 từ khóa chuẩn và 40 toán tử chuẩn, nhưng đều được biểu diễn bằng những chuỗi ký tự ngắn gọn
Ngôn ngữ lập trình C có tính cấu trúc rõ ràng với các chỉ thị như cấu trúc lựa chọn và lặp, giúp tổ chức chương trình một cách mạch lạc và dễ hiểu.
C có tính tương thích cao nhờ vào tiền xử lý mạnh mẽ và thư viện chuẩn phong phú, giúp các chương trình viết bằng C có thể hoạt động hoàn toàn tương thích khi chuyển từ máy tính này sang máy tính khác.
Ngôn ngữ lập trình C nổi bật với tính linh động, cho phép lập trình viên sử dụng nhiều cú pháp khác nhau Điều này không chỉ giúp thu gọn kích thước mã lệnh mà còn tăng tốc độ chạy của chương trình.
Biên dịch trong ngôn ngữ C cho phép biên dịch nhiều tập tin chương trình riêng lẻ thành các tập tin đối tượng Quá trình này cũng liên kết các đối tượng lại với nhau để tạo thành một chương trình có thể thực thi thống nhất.
2.Cách khởi động và thoát chương trình (Turbo C):
Giới thiệu môi trường làm việc của Turbo C:
- Turbo C do hãng Borland cung cấp.
- Gồm các chức năng sau: 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
- Đây là màn hình gọi Turbo C:
- Giao diện soạn thảo chương trình mới: vào menu File ->New
Hình 4: Giao diện soạn thảo chương trình mới
- Ghi chương trình đang soạn thảo vào đĩa:
- Sử dụng File->Save hoặc gõ phím F2
- Lệnh Save As để lưu lại chương trình với tên khác
Hình 5: Giao diện lưu chương trình mới
- Thực hiện chương trình, mở một chương trình và thoát:
+ Thực hiện chương trình: Nhấn Ctrl-F9 hoặc vào menu Run->Run
Hình 6: Giao diện thực hiện chương trình + Mở một chương trình có sẵn trên đĩa: Vào menu File->Open hoặc F3
Hình 7: Giao diện mở một chương trình có sẵn trên đĩa + Thoát khỏi Turbo C
Vào menu File->Exit hoặc Alt-X
- Các lệnh nằm trên menu Option:
Include directories: chứa các tập tin muốn đưa vào chương trình (file h trong dòng # include)
Library directories: Chứa tập tin thư viện (file lib)
Output directory: Chứa các tập tin ”đối tượng “ obj và exe sau khi chạy chương trình
Source directories: Chứa các tập tin nguồn (.obj và lib)
+ Environment: dùng để thiết lặp môi trường làm việc.
Hình 7: Giao diện thiết lặp môi trường làm việc
Để sử dụng lệnh BC tại dấu nhắc DOS, trước tiên bạn cần gõ "BC" và nhấn Enter, đảm bảo rằng đường dẫn đã được cài đặt đúng bằng lệnh path, bao gồm thư mục chứa tập tin BC.EXE Nếu đường dẫn chưa được cài đặt, hãy kiểm tra thư mục BORLANDC trên ổ đĩa của bạn.
< ổ đĩa>:\BORLANDC\BIN\BC (Enter)
Để khởi động BC với một tập tin có tên mà bạn đã đặt, hãy sử dụng lệnh: BC [đường dẫn] Nếu tập tin đã tồn tại, nó sẽ được nạp lên; nếu không, một tập tin mới sẽ được tạo ra.
Để khởi động tại Windows, bạn mở menu Start, chọn Run và gõ vào hộp Open các dòng lệnh tương tự như trong DOS Hoặc bạn có thể vào Windows Explorer, chọn ổ đĩa chứa thư mục BORLANDC và truy cập vào thư mục đó.
BORLANDC, vào thư mục BIN, khởi động tập tin BC.EXE
Bạn gõ D:\BORLANDC\BIN\BC E:\BAITAP_BC\VIDU1.CPP
Câu lệnh này khởi động BC và nạp tệp VIDU1.CPP từ thư mục BAITAP_BC trên ổ đĩa E Nếu tệp này không tồn tại, hệ thống sẽ tự động tạo mới.
Màn hình sau khi khởi động thành công:
Hình 8: Màn hình sau khi khởi động thành công
- Ấn phím F10 (kích hoạt menu), chọn menu File, chọn Quit;
- Hoặc ấn tổ hợp phím Alt-X
2.3 Các ví dụ đơn giản:
Hình 09: Màn hình ví dụ 1
Kết quả in ra màn hình:
Hình 10: Màn hình kết quả ví dụ 1
/* Dòng đầu tiên bắt đầu bằng /* và kết thúc bằng */ để chú thích, không được dịch hay thực thi lệnh trong chương trình Mục đích của chú thích này là làm rõ ràng nội dung chương trình, giúp người đọc dễ dàng hiểu được chức năng của nó khi xem lại sau này */
HÀM
Khái niệm hàm là gì, tại sao phải xây dựng và sử dụng hàm
3 Các tham số của hàm 2
4 Các lệnh đơn nhằm kết thúc hàm và nhận giá trị trả về cho tên hàm 2
CHƯƠNG 1 : TỔNG QUAN VỀ NGÔN NGỮ C
Sau khi học xong bài này sinh viên có khả năng:
- Hiểu được lịch sử phát triển của ngôn ngữ C
- Biết được ngôn ngữ này có ứng dụng như thế nào
- Biết cách khởi động được và thoát khỏi chương trình
- Sử dụng hệ thống trợ giúp từ help file
1.Giới thiệu về lịch sử phát triển của ngôn ngữ, sự cần thiết phải học ngôn ngữ C hiện nay
C là ngôn ngữ lập trình cấp cao, được sử dụng rất phổ biến để lập trình hệ thống cùng với Assembler và phát triển ứng dụng
Vào cuối thập kỷ 60 và đầu thập kỷ 70 của thế kỷ XX, Dennish Ritchie tại phòng thí nghiệm Bell đã phát triển ngôn ngữ C dựa trên ngôn ngữ BCPL do Martin Richards giới thiệu năm 1967 và ngôn ngữ B của Ken Thompson Ngôn ngữ C được sử dụng để viết hệ điều hành UNIX đầu tiên trên máy PDP-7 và sau đó được cài đặt trên hệ điều hành UNIX của máy DEC PDP-11 Đến nay, ngôn ngữ C đã trở thành một trong những ngôn ngữ lập trình phổ biến nhất, nhờ vào việc nó được xây dựng trên những thành tựu mới nhất trong lĩnh vực tin học.
Hình 1: (Dennis Ritchie(trái) và Ken Thompson trước hệ thống PDP-11với 2 text-terminal
Ngôn ngữ lập trình C và C++ hiện đang được giảng dạy rộng rãi ở các trường trung học và đại học tại các nước Âu, Mỹ Dự đoán trong tương lai, ngôn ngữ C sẽ trở thành ngôn ngữ quốc tế trong lĩnh vực tin học, tương tự như vai trò của tiếng Anh trong giao tiếp toàn cầu.
Ngôn ngữ C sở hữu một thư viện hàm phong phú, vượt trội hơn hẳn so với các ngôn ngữ lập trình khác Nhờ vào việc chỉ cần truyền tham số, lập trình viên có thể nhanh chóng nhận được kết quả mà không tốn thời gian viết lại các chức năng tương tự.
Công việc lập trình trở nên dễ dàng và nhanh chóng, giúp tạo ra nhiều ứng dụng chất lượng cao trong mọi lĩnh vực Ngôn ngữ C rất phù hợp để giải quyết các bài toán kỹ thuật phức tạp nhờ vào các toán tử điều khiển mạnh mẽ của nó.
Khái niệm cấu trúc trong ngôn ngữ C cho phép mô tả các khối dữ liệu lớn, giúp giải quyết hiệu quả các bài toán quản lý và xử lý mô hình lựa chọn tối ưu Chương trình viết bằng C có thể chạy nhanh gần bằng mã Assembler.
Ngôn ngữ C là một lựa chọn dễ học với cú pháp ngắn gọn và rõ ràng, giúp người dùng dễ dàng phát hiện lỗi Chính vì vậy, ngôn ngữ này ngày càng được ưa chuộng, đặc biệt là trong giới học sinh và sinh viên Các đặc điểm cơ bản của ngôn ngữ C bao gồm tính đơn giản, cấu trúc mạch lạc và khả năng hỗ trợ lập trình hiệu quả.
+ Tính cô động (compact): C chỉ có 32 từ khóa chuẩn và 40 toán tử chuẩn, nhưng đều được biểu diễn bằng những chuỗi ký tự ngắn gọn
Ngôn ngữ lập trình C có tính cấu trúc cao với các chỉ thị như cấu trúc lựa chọn và lặp, giúp tổ chức chương trình một cách rõ ràng và dễ hiểu.
C có tính tương thích cao nhờ vào tiền xử lý và thư viện chuẩn phong phú, cho phép các chương trình viết bằng C hoạt động mượt mà trên nhiều máy tính khác nhau.
Ngôn ngữ lập trình C nổi bật với tính linh động, cho phép người lập trình sử dụng nhiều cách thể hiện khác nhau Cú pháp của C rất uyển chuyển, giúp thu gọn kích thước mã lệnh và tối ưu hóa tốc độ chạy của chương trình.
Biên dịch trong C cho phép chuyển đổi nhiều tập tin chương trình riêng lẻ thành các tập tin đối tượng, sau đó liên kết các đối tượng này để tạo ra một chương trình có thể thực thi.
2.Cách khởi động và thoát chương trình (Turbo C):
Giới thiệu môi trường làm việc của Turbo C:
- Turbo C do hãng Borland cung cấp.
- Gồm các chức năng sau: 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
- Đây là màn hình gọi Turbo C:
- Giao diện soạn thảo chương trình mới: vào menu File ->New
Hình 4: Giao diện soạn thảo chương trình mới
- Ghi chương trình đang soạn thảo vào đĩa:
- Sử dụng File->Save hoặc gõ phím F2
- Lệnh Save As để lưu lại chương trình với tên khác
Hình 5: Giao diện lưu chương trình mới
- Thực hiện chương trình, mở một chương trình và thoát:
+ Thực hiện chương trình: Nhấn Ctrl-F9 hoặc vào menu Run->Run
Hình 6: Giao diện thực hiện chương trình + Mở một chương trình có sẵn trên đĩa: Vào menu File->Open hoặc F3
Hình 7: Giao diện mở một chương trình có sẵn trên đĩa + Thoát khỏi Turbo C
Vào menu File->Exit hoặc Alt-X
- Các lệnh nằm trên menu Option:
Include directories: chứa các tập tin muốn đưa vào chương trình (file h trong dòng # include)
Library directories: Chứa tập tin thư viện (file lib)
Output directory: Chứa các tập tin ”đối tượng “ obj và exe sau khi chạy chương trình
Source directories: Chứa các tập tin nguồn (.obj và lib)
+ Environment: dùng để thiết lặp môi trường làm việc.
Hình 7: Giao diện thiết lặp môi trường làm việc
Để sử dụng lệnh BC tại dấu nhắc DOS, trước tiên bạn cần đảm bảo rằng đường dẫn đã được cài đặt bằng lệnh path, bao gồm thư mục chứa tập tin BC.EXE Nếu chưa được cài đặt, hãy kiểm tra vị trí của thư mục BORLANDC trên ổ đĩa của bạn và sau đó gõ lệnh tương ứng.
< ổ đĩa>:\BORLANDC\BIN\BC (Enter)
Để khởi động BC với một tập tin có tên do bạn đặt, hãy gõ lệnh: BC [đường dẫn] Nếu tập tin đã tồn tại, nó sẽ được nạp lên; nếu không, một tập tin mới sẽ được tạo ra.
Để khởi động tại Windows, bạn vào menu Start và chọn Run, sau đó nhập một trong các dòng lệnh vào hộp Open giống như khi sử dụng DOS Ngoài ra, bạn cũng có thể truy cập vào Windows Explorer, chọn ổ đĩa chứa thư mục BORLANDC và vào thư mục đó.
BORLANDC, vào thư mục BIN, khởi động tập tin BC.EXE
Bạn gõ D:\BORLANDC\BIN\BC E:\BAITAP_BC\VIDU1.CPP
Câu lệnh này khởi động BC và nạp tập tin VIDU1.CPP từ thư mục BAITAP_BC trên ổ đĩa E Nếu tập tin không tồn tại, hệ thống sẽ tự động tạo mới nó.
Màn hình sau khi khởi động thành công:
Hình 8: Màn hình sau khi khởi động thành công
- Ấn phím F10 (kích hoạt menu), chọn menu File, chọn Quit;
- Hoặc ấn tổ hợp phím Alt-X
2.3 Các ví dụ đơn giản:
Hình 09: Màn hình ví dụ 1
Kết quả in ra màn hình:
Hình 10: Màn hình kết quả ví dụ 1
Dòng đầu tiên trong mã nguồn bắt đầu bằng /* và kết thúc bằng */ để chỉ ra phần chú thích, không được dịch hay thực thi khi chạy chương trình Mục đích của chú thích này là làm cho chương trình trở nên rõ ràng hơn, giúp người đọc dễ dàng hiểu được chức năng của chương trình khi xem lại sau này.
Nguyên tắc xây dựng và phân biệt các tham số của hàm
Do người lập trình tạo ra nhằm đáp ứng nhu cầu của mình
Cấu trúc của một hàm tự thiết kế:
< Kiểu dữ liệu > Tên hàm ( [ danh sách các tham số ] ) [ Khai báo kiểu dữ liệu cho các tham số ];
{ [Khai báo biến cục bộ và các câu lệnh thực hiện hàm]
- Kiểu dữ liệu: Nếu hàm phải trả về một giá trị thì trước hết phải khai báo kiểu dữ lệu của hàm
Tên hàm hợp lệ cần có 8 ký tự liên tiếp Đặt tên hàm nên mang tính gợi nhớ để thuận tiện cho việc sử dụng và chỉnh sửa sau này.
Danh sách các tham số, hay còn gọi là biến hình thức của hàm, là những yếu tố quan trọng trong lập trình Các tham số này nhận giá trị thực thông qua việc truyền tham số khi hàm được gọi Nếu hàm có nhiều tham số, chúng sẽ được phân cách bằng dấu phẩy.
Khi khai báo hàm, cần chỉ định kiểu dữ liệu cho từng tham số hình thức, tương tự như cách khai báo cho biến Nếu hàm có nhiều tham số cùng kiểu dữ liệu, các tham số đó phải được phân cách bằng dấu phẩy (,).
Thân hàm được định nghĩa là phần được giới hạn bởi cặp dấu ngoặc nhọn {} Trong thân hàm, có hai thành phần chính: khai báo biến cục bộ và tham số hình thức Biến cục bộ chỉ có tác dụng trong phạm vi của thân hàm, không ảnh hưởng đến các biến trong các hàm khác Ngược lại, tham số hình thức được sử dụng để trao đổi dữ liệu giữa các hàm trong chương trình.
Trong thân hàm, bạn có thể sử dụng nhiều loại câu lệnh khác nhau tùy theo yêu cầu cụ thể, bao gồm từ các câu lệnh đơn giản, câu lệnh gán, biểu thức tính toán, cho đến các câu lệnh điều kiện và vòng lặp.
Trong thân hàm, bạn có thể sử dụng câu lệnh return ([biểu thức]) để trả về giá trị Nhiều câu lệnh return có thể được sử dụng ở các vị trí khác nhau trong hàm, nhưng việc sử dụng câu lệnh này là tùy chọn Giá trị của biểu thức trong câu lệnh return sẽ được gán cho hàm.
Cú pháp: return ; /*không trả về giá trị*/ return ; /*Trả về giá trị của biểu thức*/ return (); /*Trả về giá trị của biểu thức*/
Nếu hàm có kết quả trả về, ta bắt buộc phải sử dụng câu lệnh return trả về kết quả cho hàm
Ví dụ 1: Viết hàm tìm số lớn giữa 2 số nguyên a và b int max(int a, int b)
Để tìm ước chung lớn nhất (UCLN) của hai số nguyên a và b, ta có thể viết hàm như sau: Đầu tiên, xác định số nhỏ hơn giữa a và b, gọi là u Nếu a lớn hơn b, ta gán u bằng b Sau đó, sử dụng vòng lặp để giảm giá trị của u cho đến khi tìm được UCLN, tức là khi cả a và b đều chia hết cho u Hàm có thể được viết như sau: ```cint ucln(int a, int b) { int u; if (a < b) u = a; else u = b; while ((a % u != 0) || (b % u != 0)) u ; return u; }```
Sau khi tạo lập các hàm, để sử dụng chúng trong chương trình chính, ta cần thực hiện lệnh gọi hàm Lệnh gọi hàm chỉ đơn giản là tên của hàm, có thể kèm theo hoặc không có các tham số thực.
([Danh sách các tham số])
Trước khi sử dụng một hàm thì bạn phải khai báo kiểu giá trị của nó như cú pháp sau đây:
Ví dụ: Viết chương trình cho phép tìm ước số chung lớn nhất của hai số tự nhiên
#include unsigned int ucln(unsigned int a, unsigned int b)
{ unsigned int u; if (a n; printf("Tat ca cac so nguyen to nho hon %d la: \n", n); if (n >= 2) { printf("%d ", 2);
Tat ca cac so nguyen to nho hon 100 la:
Bước 1: Mở phần mềm Dev C++
Bước 3: Biên dịch và chạy chương trình
5.2 Sinh viên thực hành khảo sát
Thực hiện trình tự theo các bước và điền kết quả vào bảng sau:
Thời gian thực hiện chương trình Số lỗi Kết quả chạy chương trình
Những trọng tâm cần chú ý trong bài
- Cách viết hàm và gọi hàm
- Truyền tham số cho hàm
Bài mở rộng và nâng cao
1 Viết chương trình Cnhắc người dùng nhập 3 số nguyên và sau đó in các số nhỏ nhất và lớn nhất bởi sử dụng hàm trong C
2 Viết chương trình C để tính giai thừa của một số nguyên dương bởi sử dụng hàm trong C
Yêu cầu về đánh giá kết quả học tập chương 4
+ Về kiến thức: Trình bày được khái niệm hàm
+ Về kỹ năng: Sử dụng thành thạo hàm trong C
+ Năng lực tự chủ và trách nhiệm: Tỉ mỉ, cẩn thận, chính xác, ngăn nắp trong công việc
+ Về kiến thức: Được đánh giá bằng hình thức kiểm tra viết, trắc nghiệm, vấn đáp + Về kỹ năng: Thực hiện việc gọi hàm
+ Năng lực tự chủ và trách nhiệm: Tỉ mỉ, cẩn thận, chính xác, ngăn nắp trong công việc.
MẢNG
Trình bày khái niệm mảng trong C
Mỗi biến chỉ có thể lưu trữ một giá trị duy nhất, điều này gây khó khăn khi cần biểu diễn một dãy số hoặc bảng số Để giải quyết vấn đề này, hầu hết các ngôn ngữ lập trình đều cung cấp một kiểu dữ liệu đặc biệt gọi là kiểu mảng, giúp người dùng dễ dàng quản lý và thao tác với nhiều giá trị cùng lúc.
Mảng là tập hợp các phần tử đồng loại có cùng kiểu giá trị và tên chung Mỗi phần tử trong mảng đại diện cho một giá trị cụ thể Số lượng kiểu dữ liệu (kiểu giá trị) quyết định số loại mảng tương ứng.
Ví dụ có các mảng sau : int a[10], b[4][2]
- Mảng a[10]: Mảng 1chiều, có 10 phần tử thuộc kiểu số nguyên (int) được đánh số như sau : a[0], a[1], a[9]
Như vậy mảng a có thể biểu diễn một dãy 10 phần tử, mỗi phần tử a[1] chứa 1 trị nguyên
- Mảng b[4][1]: Mảng 2 chiều b, có 8 phần tử thuộc kiểu nguyên (int) gồm 4 dòng, 2 cột được sắp xếp như sau: b[0][0] b[0][1] b[1][0] b[1][1] b[2][0] b[2][1] b[3][0] b[3][1]
Mỗi phần tử b[i][j] biểu diễn một giá trị kiểu nguyên
- Mảng X[5]: mảng 1 chiều X, có 5 phần tử thuộc kiểu số thực (float) được đánh số như sau:
Mỗi phần tử X[i] biểu diễn một giá trị kiểu số thực (float) Mảng X biểu diễn được 5 số thực
- Mảng y[3][3]: Mảng 2 chiều Y gồm 3 dòng, 3 cột, có 9 phần tử, mỗi phần tử y[i][j] chứa một giá trị kiểu số thực (float) được sắp xếp như sau: y[0][0] y[0][1] y[0][2] y[1][0] y[1][1] y[1][2] y[2][0] y[2][1] y[2][2]
Như vậy để xác định một mảng cần phải định rõ:
+ Kiểu dữ liệu của mảng: như int, float, double
+ Tên mảng: Là các ký tự từ a đến z, viết thường hoặc viết hoa
+ Số chiều và kích thước của mỗi chiều đặt trong cặp dấu ngoặc vuông [].
Cú pháp khai báo mảng và các cách gán giá trị cho mảng
Nếu xét dưới góc độ toán học, mảng 1 chiều giống như một vector Mõi phần tử của mảng một chiều có giá trị không phải là một mảng khác
2.1.1 Khai báo mảng với số phần tử xác định (khai báo tường minh) :
; Ý nghĩa:
Tên mảng: đây là môt cái tên đặt đúng theo quy tắc đặt tên của danh biểu Tên này cũng mang ý nghĩa là tên biến mảng
Số phần tử: là một hằng số nguyên, cho bit số lượng phần tử tối đa trong mảng là bao nhiêu (hay kích thước của mảng là gì)
Mảng là một kiểu dữ liệu cho phép lưu trữ nhiều phần tử cùng loại Trong đó, phần tử đầu tiên được đánh số là tên mảng [0] và phần tử cuối cùng là tên mảng [số phần tử - 1] Việc khai báo mảng bao gồm xác định số lượng phần tử và kiểu dữ liệu của chúng.
Ví dụ: int a[10]; /* Khai báo biến mang tên a, phần tử thứ nhất là a[0], phần tử cuối cùng là a[9].*/
Ta có thể coi mảng a là một dãy liên tiếp các phần tử trong bộ nhớ như sau:
2.1.2 Khai báo mảng với số phần tử không xác định (khai báo không tường minh):
Khi khai báo mảng mà không chỉ định rõ số phần tử, kiểu khai báo này thường được sử dụng trong hai trường hợp chính: khi vừa khai báo vừa gán giá trị cho mảng, và khi khai báo mảng như là tham số hình thức trong hàm.
Vừa khai báo vừa gán trị:
[]= {Các giá trị cách nhau bởi dấu phẩy};
Khi khai báo và gán giá trị cho mảng trong C, số phần tử của mảng sẽ được xác định dựa trên số giá trị được gán trong cặp dấu {} Để lấy số phần tử của mảng, chúng ta có thể sử dụng hàm sizeof().
Số phần tử=sizeof(tên mảng)/ sizeof(kiểu)
Ví dụ: vừa khai báo vừa gán trị cho mảng
} Sau khi chạy chương trình, nhan được kết quả sau:
Khai báo mảng là tham số hình thức của hàm:
Trong trường hợp này không cần chỉ định số phần tử của mảng là bao nhiêu.
( ,…);
2.1.3 Truy xuất đến từng phần tử của mảng:
Mỗi phần tử trong mảng được truy xuất bằng cách sử dụng tên biến, theo sau là chỉ số trong dấu ngoặc vuông [ ] Ví dụ, a[0] đại diện cho phần tử đầu tiên của mảng a đã được khai báo Chỉ số của phần tử mảng là một biểu thức có giá trị kiểu số nguyên.
Tên biến mảng[Chỉ số] có thể được xem như một biến có kiểu dữ liệu tương ứng với kiểu đã được khai báo trong định nghĩa của mảng.
Trong khai báo này, việc truy xuất các phần tử được chỉ ra trong hình 1 Chẳng hạn phần tử thứ 2 (có vị trí 1) là a[1]…
Ví dụ 2: Vừa khai báo và gán trị cho 1 mảng 1 chiều các số nguyên In mảng số nguyên này lên màn hình
Để hiển thị giá trị của n số nguyên từ một mảng, ta sử dụng hàm printf() với định dạng %d Thay vì gọi hàm printf() n lần, ta có thể sử dụng một vòng lặp để in ra giá trị của từng phần tử trong mảng.
Ta có đoạn chương trình sau:
{ int n,i,j,tam; int dayso[]={66,65,69,68,67,70}; clrscr(); n=sizeof(dayso)/sizeof(int); /*Lấy số phần tử*/ printf("\n Noi dung cua mang "); for (i=0;i0); printf("Dang nhi phan la: "); for(i=K-1;i>=0;i ) printf("%d",NhiPhan[i]); getch(); return 0;
Nhập vào một dãy n số và sắp xếp chúng theo thứ tự tăng là một bài toán có ứng dụng rộng rãi Có nhiều giải thuật sắp xếp khác nhau, trong đó một phương pháp đơn giản là so sánh phần tử đầu tiên với các phần tử còn lại Nếu phần tử đầu tiên lớn hơn một phần tử đang so sánh, hai phần tử sẽ được hoán đổi vị trí Quá trình này tiếp tục với phần tử thứ hai so sánh với các phần tử từ thứ ba trở đi, và lặp lại cho đến khi phần tử thứ n-1 được so sánh.
Chương trình sẽ bao gồm ba hàm chính: Nhap (Nhập các số), SapXep (Sắp xếp) và InMang (In các số) Các hàm này sử dụng một mảng không xác định số phần tử tối đa, tuy nhiên, cần phải chỉ định số phần tử thực tế được sử dụng trong mảng, và giá trị này phải là một số nguyên.
#include void Nhap(int a[],int N)
{ printf("Phan tu thu %d: ",i);scanf("%d",&a[i]);
{ int t,i; for(i=0;iSave hoặc gõ phím F2
- Lệnh Save As để lưu lại chương trình với tên khác
Hình 5: Giao diện lưu chương trình mới
- Thực hiện chương trình, mở một chương trình và thoát:
+ Thực hiện chương trình: Nhấn Ctrl-F9 hoặc vào menu Run->Run
Hình 6: Giao diện thực hiện chương trình + Mở một chương trình có sẵn trên đĩa: Vào menu File->Open hoặc F3
Hình 7: Giao diện mở một chương trình có sẵn trên đĩa + Thoát khỏi Turbo C
Vào menu File->Exit hoặc Alt-X
- Các lệnh nằm trên menu Option:
Include directories: chứa các tập tin muốn đưa vào chương trình (file h trong dòng # include)
Library directories: Chứa tập tin thư viện (file lib)
Output directory: Chứa các tập tin ”đối tượng “ obj và exe sau khi chạy chương trình
Source directories: Chứa các tập tin nguồn (.obj và lib)
+ Environment: dùng để thiết lặp môi trường làm việc.
Hình 7: Giao diện thiết lặp môi trường làm việc
Để sử dụng lệnh BC tại dấu nhắc DOS, bạn cần gõ "BC" và nhấn Enter, nhưng chỉ khi đường dẫn đã được cài đặt đúng bằng lệnh path, bao gồm đường dẫn đến thư mục chứa tập tin BC.EXE Nếu chưa cài đặt đường dẫn, hãy xác định vị trí thư mục BORLANDC trên ổ đĩa của bạn và sau đó nhập lệnh phù hợp.
< ổ đĩa>:\BORLANDC\BIN\BC (Enter)
Để khởi động BC với một tập tin có tên mà bạn đã đặt, hãy sử dụng lệnh: BC [đường dẫn] Nếu tập tin đã tồn tại, nó sẽ được nạp lên; nếu không, một tập tin mới sẽ được tạo ra.
Để khởi động tại Windows, bạn vào menu Start, chọn Run và gõ vào hộp Open một trong các dòng lệnh như trong DOS Ngoài ra, bạn cũng có thể truy cập vào Windows Explorer, chọn ổ đĩa chứa thư mục BORLANDC và vào thư mục đó.
BORLANDC, vào thư mục BIN, khởi động tập tin BC.EXE
Bạn gõ D:\BORLANDC\BIN\BC E:\BAITAP_BC\VIDU1.CPP
Câu lệnh này khởi động BC và nạp tập tin VIDU1.CPP từ thư mục BAITAP_BC trên ổ đĩa E; nếu tập tin không tồn tại, hệ thống sẽ tự động tạo mới.
Màn hình sau khi khởi động thành công:
Hình 8: Màn hình sau khi khởi động thành công
- Ấn phím F10 (kích hoạt menu), chọn menu File, chọn Quit;
- Hoặc ấn tổ hợp phím Alt-X
2.3 Các ví dụ đơn giản:
Hình 09: Màn hình ví dụ 1
Kết quả in ra màn hình:
Hình 10: Màn hình kết quả ví dụ 1
/* Dòng đầu tiên của chương trình bắt đầu bằng /* và kết thúc bằng */ để thể hiện chú thích Chú thích này không được dịch hay thực thi khi chạy chương trình, mà chỉ nhằm mục đích làm rõ ràng hơn cho mã nguồn Điều này giúp người đọc dễ dàng hiểu chức năng của chương trình khi xem lại sau này */