Please enable JavaScript.
Coggle requires JavaScript to display documents.
(2.3. Các thành phần cơ bản của ngôn ngữ lập trình C, 2.2. Môi trường lập…
2.3. Các thành phần cơ bản của ngôn ngữ lập trình C
Tập ký tự
Là phần tử cơ bản, bắt buộc phải có để tạo nên chương trình:
Tổ hợp các ký tự từ
Liên kết các từ theo cú pháp câu lệnh
Tổ chức các câu lệnh chương trình
Tập ký tự của ngôn ngữ C gồm:
26 chữ cái in hoa: A, B, …, Z
26 chữ cái in thường: a, b, ..., z
10 chữ số: 0, 1, …, 9
Các ký hiệu toán học: + - * / = < > …
Ký tự gạch nối _
Dấu cách
Các ký hiệu đặc biệt: . , ; : ? ! \ & | % # $ () [] {} …
Từ khóa
Là các từ dành riêng của ngôn ngữ lập trình, được sử dụng với mục đích xác định
Người lập trình không được phép sử dụng các từ khóa vào các mục đích khác như đặt tên cho các đối tượng mới: biến, hàm, hằng, …
Các từ khóa trong C được viết bằng chữ thường
Một số từ khóa thông dụng:
typedef, const, signed, unsigned, struct, enum, void, sizeof, static
char, int, short, long, float, double
default, if, else, case, switch, for, while, do
break, continue, goto, return, interrupt
Tên
Tên (định danh): là dãy các ký tự dùng để xác định các đối tượng trong chương trình như: biến, hằng, hàm, kiểu dữ liệu, …
Quy tắc đặt tên:
Không được trùng với các từ khóa
Tên được đặt có tính gợi nhớ
Gồm các ký tự chữ, số và dấu gạch nối, ký tự đầu tiên phải là ký tự chữ hoặc dấu gạch nối
Ví dụ đặt tên đúng: a, b, x, y, PI, …
Ví dụ đặt tên sai: int, char, tinh giai thua
Hằng
Là đại lượng không đổi trong suốt quá trình thực thi chương trình
Cú pháp khai báo 1:
define tên_hằng giá_trị
Ví dụ:
define MAX 100
define PI 3.14
Cú pháp khai báo 2:
const kiểu_dữ_liệu tên_hằng = giá_trị;
Ví dụ:
const int MAX=100;
const float PI=3.14;
Không thể thay đổi giá trị của hằng trong quá trình thực hiện chương trình
Giá trị của hằng phải được xác định ngay khi khai báo
define là chỉ thị tiền xử lý (preprocessing directive). Ưu điểm của cú ptextháp khai báo này:
Dễ đọc, dễ thay đổi
Dễ chuyển đổi giữa các nền tảng phần cứng
Tốc độ nhanh
Biến
Là đại lượng do người lập trình định nghĩa, được đặt tên thông qua việc khai báo biến
Dùng để chứa dữ liệu, giá trị của biến có thể bị thay đổi trong quá trình thực thi chương trình
Cú pháp khai báo:
kiểu_dữ_liệu tên_biến;
hoặc
kiểu_dữ_liệu tên_biến1, …, tên_biếnn;
Ví dụ:
int a,b;
float x,y,z;
char c;
Cần khai báo tất cả các biến trước khi sử dụng
Có thể kết hợp khai báo biến với việc khởi tạo giá trị cho biến theo cú pháp:
kiểu_dữ_liệu tên_biến=giá_trị;
Ví dụ:
int a=4,b=5;
float x,y,z=10.9;
Tùy mục đích sử dụng, biến có thể được khai báo ở ngoài hàm, đầu hàm (ngay sau ký hiệu { để bắt đầu thân hàm) hoặc đầu khối lệnh (ngay sau ký hiệu { bắt đầu khối lệnh)
Hàm
Là một đơn vị độc lập của chương trình, cho phép nhận dữ liệu vào, xử lý dữ liệu và trả về kết quả
Một chương trình có thể có nhiều hàm
Hàm main() là bắt buộc phải có, chương trình bắt đầu thực hiện từ câu lệnh đầu tiên của hàm main()
Ngôn ngữ C không cho phép xây dựng hàm bên trong một hàm khác; tuy nhiên có thể truyền dữ liệu/kết quả từ hàm này sang hàm khác qua các tham số/biến ngoài
Biểu thức
Được tạo thành từ sự kết hợp các toán tử (operater) và các toán hạng (operand) để thể hiện một công thức tính toán
Toán tử: tác động lên các toán hạng và trả về giá trị thuộc một kiểu nhất định. Các toán tử : +, -, *, /, …
Toán hạng: hằng, biến, phần tử mảng, lời gọi hàm, …
Mỗi biểu thức có một giá trị thuộc kiểu xác định
Có 3 dạng biểu thức cơ bản:
Biểu thức số học
Ví dụ: 9/3-1, 2*a+5, …
Biểu thức logic
Ví dụ: !1, a && b || c, …
Biểu thức quan hệ (một trường hợp riêng của biểu thức logic)
Sử dụng biểu thức:
Dùng làm vế phải trong các lệnh gán giá trị
Dùng làm toán hạng trong các biểu thức khác
Dùng làm tham số thực sự trong các lời gọi hàm
Dùng làm chỉ số trong các cấu trúc lặp for, while, do while
Dùng làm biểu thức kiểm tra trong các cấu trúc rẽ nhánh if, switch
Toán tử
Các toán tử số học
Các toán tử 2 ngôi
Gồm các toán tử:
Các phép thao tác trên bit
Đối với các phép dịch chuyển số học, nếu thực hiện trên giá trị thuộc kiểu số nguyên có dấu thì bảo toàn bit dấu (bit cực trái), nếu thực hiện trên các giá trị thuộc kiểu số nguyên không dấu (unsigned) thì bit dấu không có ý nghĩa và cũng bị dịch chuyển như các bit khác
Gồm các toán tử
2.2. Môi trường lập trình với ngôn ngữ C
Môi trường phát triển tích hợp (IDE – Integrated Development Evironment):
Soạn thảo (biên tập chương trình nguồn – edit)
Biên dịch (compile)
Thực thi (runtime)
Sửa lỗi (gỡ rối - debug)
Các môi trường điển hình:
Turbo C++ và Borland C++ của Borland, Inc
MSC và VC của Microsoft Corp
GCC của GNU project
…
Lập trình viên không bắt buộc phải lập trình trong môi trường IDE
Có thể sử dụng một phần mềm soạn thảo chuyên dụng để tạo file nguồn (ví dụ: Notepad++), sau đó sử dụng trình biên dịch thích hợp (ví dụ: BCC 5.5) để biên dịch và tạo file thực thi
Lập trình trên máy chủ cài đặt hệ điều hành Linux (máy chủ Linux) với mcedit và g++
2.4. Cấu trúc chương trình viết bằng ngôn ngữ C
Cấu trúc chương trình
Gồm các phần theo thứ tự sau:
Khai báo các tệp tiêu đề
Khai báo các macro
Định nghĩa các kiểu dữ liệu mới
Khai báo nguyên mẫu của các hàm
Khai báo các biến toàn cục
Hàm main()
Định nghĩa các hàm (đã khai báo nguyên mẫu)
Khai báo các tệp tiêu đề
Thư viện chuẩn:
Gồm nhiều tệp tiêu đề chứa các chương trình con (hàm) được xây dựng sẵn. Muốn sử dụng hàm nào cần khai báo tệp tiêu đề của thư viện chứa hàm đó
Cú pháp khai báo tệp tiêu đề:
include <tên_tệp_tiêu_đề>
hoặc #include "tên_tệp
tiêu
đề "
Các tệp tiêu đề cơ bản
Người lập trình cũng có thể xây dựng sẵn các hàm và đặt vào trong thư viện để dùng khi cần thiết
Một số trình biên dịch cho phép thêm hàm do người lập trình xây dựng vào thư viện chuẩn. Một số trình biên dịch yêu cầu người lập trình phải tạo thư viện riêng
Khai báo các macro
Cú pháp:
define tên giá_trị
Định nghĩa các kiểu dữ liệu mới
cú pháp:
typedef khai báo kiểu dữ liệu mới
Khai báo nguyên mẫu của các hàm
Cú pháp:
kiểu_dữ_liệu_trả_về tên_hàm(danh sách kiểu_dữ _liệu tên_tham_số);
Ví dụ: int tong(int a,int b);
float max(float a,float b,float c);
Lưu ý:
Không bắt buộc phải khai báo nguyên mẫu các hàm
Việc khai báo nguyên mẫu cho phép trình biên dịch phát hiện lỗi khi gọi hàm (số lượng tham số không đúng) hoặc tự động chuyển đổi kiểu dữ liệu (ví dụ: chuyển từ kiểu int trong lời gọi hàm sang kiểu float của tham số)
Trong nguyên mẫu có thể bỏ qua tên các tham số
Khai báo các biến toàn cục
Cú pháp:
kiểu_dữ_liệu tên_biến;
Ví dụ:
int a,b;
float x,y;
Lưu ý: Có thể khởi tạo giá trị cho các biến ngay khi khai báo biến
Ví dụ:
int a=4, b=5;
float x, y=9.25;
Định nghĩa các hàm
Các hàm đã được khai báo nguyên mẫu cần được định nghĩa ở đây
Ví dụ:
int tong(int a,int b)
{
int s;
s=a+b;
printf("Tong la: %d", s);
return s;
}
Ví dụ (tiếp):
float max(float a,float b,float c)
{
float m;
m=a>b?a:b;
return (m>c?m:c);
}
Một vài chương trình đơn giản
Chương trình viết câu thông báo ra màn hình:
include <stdio.h>
int main(void)
{
printf("Xin chao!");
printf("\nDay la chuong trinh thu nghiem.");
return 0;
}
Chương trình tính tổng 2 số nguyên a, b:
include <stdio.h>
int main(void)
{
int a,b,tong;
printf("Hay nhap 2 so nguyen a, b:\n");
scanf("%d%d",&a,&b);
tong = a+b;
printf("Tong a + b = %d",tong);
return 0;
}
Các quy tắc xây dựng chương trình
Quy tắc viết lệnh:
Mỗi câu lệnh phải được kết thúc bằng dấu ;
Mỗi câu lệnh nên đặt trên một dòng
Khối lệnh gồm nhiều lệnh đơn phải đặt trong cặp dấu { }
Quy tắc viết chú thích:
Trên một dòng: //Lời chú thích
Viết trên nhiều dòng: /
Lời chú thích
/
Căn lề
2.1. Lịch sử phát triển và các đặc điểm của ngôn ngữ lập trình C
Lịch sử phát triển ngôn ngữ lập trình C
Được phát triển bởi Dennis MacAlistair Ritchie và các cộng sự tại phòng thí nghiệm Bell của tập đoàn AT&T (Mỹ)
C được phát triển dựa trên nền ngôn ngữ B và BCPL. Tên ngôn ngữ C được xem là sự tiếp nối của ngôn ngữ B
Năm 1973, Ritchie & Thompson đã viết lại hệ điều hành UNIX bằng ngôn ngữ C - phiên bản phổ biến và là cơ sở quan trọng nhất để phát triển các hệ điều hành phổ biến hiện nay, điển hình là Linux và Mac OS của Apple
Năm 1978, Ritchie và Brian Kernighan xuất bản cuốn “The C programming language”
Sau 1978, C được bổ sung thêm những tính năng mới trong nhiều phiên bản khác nhau nhưng không tương thích với nhau
Năm 1989, Viện tiêu chuẩn quốc gia Hoa Kỳ (ANSI - American National Standards Institue) đã công bố phiên bản chuẩn hóa của ngôn ngữ C: “Programming Language C” ANSI X3.159-1989, phiên bản này thường được nhắc đến với tên gọi ANSI C, còn gọi là C “chuẩn” hay C89. ANSI C được hỗ trợ bởi hầu hết các chương trình dịch
Cuối thập niên 1990, tiêu chuẩn ANSI C đã được tiêu chuẩn hóa bởi Tổ chức Quốc tế về Tiêu chuẩn hóa (ISO): phiên bản ISO/IEC 9899:1999, còn gọi là ISO C hay C90. Phiên bản này được hỗ trợ bởi GCC và nhiều chương trình dịch khác, tuy nhiên không được hỗ trợ bởi các chương trình dịch của Microsoft và Borland
C hiện là một trong những ngôn ngữ lập trình thông dụng và là nguồn gốc xây dựng các ngôn ngữ lập trình “mạnh” và phổ biến khác như C++, Java
Đặc điểm của ngôn ngữ lập trình C
Là một ngôn ngữ lập trình có cấu trúc:
Cho phép tập hợp mã lệnh và cấu trúc
Cho phép ẩn lệnh, thông tin khỏi phần còn lại của chương trình để dùng cho tác vụ riêng
Chương trình có thể chia nhỏ thành các hàm (functions) hoặc các khối lệnh (code blocks)
Có tính khả chuyển, linh hoạt cao
Có thế mạnh trong việc xử lý dữ liệu số, văn bản, cơ sở dữ liệu, …
Được xem như ngôn ngữ lập trình hệ thống, sử dụng để xây dựng các chương trình hệ thống, trình điều khiển thiết bị, xử lý ảnh, …
mang100 c;