Thứ Ba, 29 tháng 5, 2012

Hướng dẫn lập trình C cơ bản

1. Về tiểu sử ngôn ngữ lập trình C:

- C là một ngôn ngữ lập trình có cấu trúc và được coi là ngôn ngữ lập trình bậc cao vì nó cho phép lập trình viên tập trung vào giải quyết vấn dề trực tiếp mà không phải quan tâm đến cỗ máy xử lý mà chương trình được áp dụng. Vì thế, ngôn ngữ C được sử dụng nhiều và rộng rãi với ứng dụng chạy trên nhiều platform.
- Giống như đa số các ngôn ngữ lập trình hiện đại, C được phát triển dựa trên nền tảng của ALGOL, ngôn ngữ lập trình cấu trúc khối đầu tiên trong lịch sử.

- Ngôn ngữ C truyền thống là phiên bản năm 1972, sau đó được ưa chuộng và được biết đến qua một cuốn sách được viết bởi Brian Ư. Kerninghan và Dennis Ritchie xuất bản năm 1978. Năm 1983, Hiệp Hội Tiêu Chuẩn Quốc Gia Mỹ (American National Standards Institute - ANSI) bắt đầu đưa ra tiêu chuẩn cho ngôn ngữ lập trình C. Sau đó được công nhận vào năm 1989. Vào năm 1990, Tổ Chức Tiêu Chuẩn Quốc Tế (International Standard Organization - ISO) chấp nhận tiêu chuẩn này của ANSI. Phiên bản này của ngôn ngữ lập trình C còn được biết đến với tên gọi là C89.
- Năm 1995, một số chỉnh sửa nhỏ thay đổi trong tiêu chuẩn của C, được biết với tên gọi C95. Sau đó lại được sửa đổi thêm vào năm 1999 và nay được biết tới với tên gọi C99, là tiêu chuẩn mà đa số còn được sử dụng hiện nay trên thế giới.


2. Cấu trúc chương trình C:

A - Cấu trúc:

- Mọi chương trình C bắt đầu với các chỉ thị tiền xử lý (preprocessor commands) trong khai báo toàn cục tại điểm bắt đầu của chương trình.
- Sau đó chương trình tiếp nối với các định nghĩa hàm cùng các khối lệnh để thực hiện công việc được sử dụng trong chương trình.
- Sau đó là hàm "main()", một chương trình C luôn luôn có một và chỉ một hàm "main()". Hàm "main()" là điểm khởi động bắt đầu của ứng dụng.
- Các hàm trong chương trình bao gồm của hàm "main()" luôn luôn có một dòng khai báo và khối lệnh thực hiện quy trình xử lý của hàm.
- Để sử dụng các thư viện trong C, từ khóa #include được sử dụng ở trong mục khai báo chỉ thị tiền xử lý.

Đây là cấu trúc một chương trình C về cơ bản:

CHỈ THỊ TIỀN XỬ LÝ (PREPROCESSOR DIRECTIVES)
[bao gồm: #if, #endif, #pragma .....]
+ KHAI BÁO THƯ VIỆN SỬ DỤNG (#include)

KHAI BÁO TOÀN CỤC

HÀM MAIN()
int main(void)
{
Khai báo nội bộ

Các câu lệnh
} // main

B - Chương trình C đầu tiên:
Như bao ngôn ngữ lập trình khác, chúng ta bắt đầu với một bài quen thuộc "Hello World!"

1: #include
2:
3: int main(void)
4: {
5: printf("Hello World!\n");
6: return 0;
7: } // main

Theo ở trên bạn có thể phân tích bố cục chương trình.
1: chỉ thị tiền xử lý
3: khai báo hàm "main()"
5: dùng hàm printf() để output một chuỗi ra màn hình
6: gửi signal thông báo kết thúc chương trình

Bây giờ chúng ta đi sâu một chút vào chương trình trên:

a. Chỉ thị tiền xử lý:
- Các chỉ thị tiền xử lý luôn luôn bắt đầu với kí hiệu # ở trước (#include). Các chỉ thị này đã được tạo sẵn trong C, vì thế bạn chỉ cần khai báo và sử dụng hợp lý.
Ví dụ ở chương trình trên sử dụng #include để sử dụng thư viện stdio.h - thư viện quản lý xuất/nhập trong C vì chúng ta có xuất chuỗi ra màn hình dùng printf()
Các thư viện được được trong cặp dấu <>
Ví dụ: #include , #include ....

b. Hàm "main()"
- Điểm bắt đầu thực thi chương trình của bạn là tại hàm "main()"
- Đầu tiên ta khai báo định nghĩa kiểu cho hàm main(): int main(void)
Điều bạn cần hiểu và sử dụng là luôn luôn để hàm main() kiểu int và trả về một số nguyên, điều này liên quan đến hệ điều hành trong quá trình xử lý chương trình.
Chú ý: rất nhiều bạn học lập trình C trên Borland 3.01 hoặc nhỏ hơn hay để khai báo là: void main(void), đây là tiêu chuẩn cũ của C và đã bị bỏ năm 1999 với chuẩn mới C99. Nếu bạn lập trình C trên Borland thì mình khuyên các bạn nên sử dụng version 5.02 hoặc 2006.
- Sau đó là cặp dấu ngoặc nhọn {} với khối lệnh bên trong diễn tả quá trình thực hiện của ứng dụng. Cụ thể ở ví dụ là xuất ra màn hình chuỗi "Hello World!";

c. Các chú thích (comment)
- Có 2 kiểu chú thích code trong C.
+ Chú thích theo khối : /* */
Nếu có nhiều chú thích và bạn muốn giải thích rõ trong đó, bạn sử dụng cặp chú thích /* */
Ví dụ:

/*
* @author bvKim
* @date 30-Mar-2009
* @file hello_world.c
*/

+ Chú thích theo dòng: //
Nếu bạn muốn có một chú thích nhanh ngắn gọn trên một dòng bạn dùng //
Ví du:

printf("Hello world!\n"); // dòng này xuất hello world ra màn hình đó
 


3. Kiểu dữ liệu:

A - Kiểu void

- Kiểu void là kiểu không có giá trị và cũng chẳng có toán tử nào. Tuy vậy kiểu void có rất nhiều tác dụng, ví dụ như là thông báo truyền không đối số vào hàm main() chẳng hạn. Hoặc với cấu trúc dữ liệu có thể sử dụng con trỏ kiểu void tới kiểu dữ liệu chung.

B - Kiểu nguyên

a. Kiểu boolean
- Nó là kiểu logic đúng (true) và sai (false).
- Theo chuẩn C99 thì bất cứ một số nguyên nào cũng đều thể hiện giá trị bool, với số 0 là false và các số khác 0 là true.

b. Kiểu character
- Kí tự có thể hiểu là một chữ cái trong bảng chữ cái. Trong máy tính, kí tự được định nghĩa bao quát và rộng hơn.
- Trong C có 2 kiểu char được sử dụng đó là: char và wchar_t
- Đa phần các máy tính sử dụng tiểu chuẩn ANSI. Trong đó 1 biến kiểu char sử dụng 8 bits để lưu trữ, hay 1 byte. Tuy nhiên, kích thước này còn phụ thuộc vào nhiều nơi và các loại máy.
- Để hỗ trợ những ngôn ngữ không sử dụng tiếng Anh hay sử dụng chữ cái Latin, chuẩn C99 tạo nên kiểu kí tự mở (wchar_t)

c. Kiểu số nguyên
- C cung cấp 4 kiểu số nguyên: short int, int, long int, long long int
- short int hay còn gọi là short
- long int hay còn gọi là long
- long long int còn gọi là long long
- Về kích thước kiểu dữ liệu theo thứ tự từ nhỏ tới lớn:
sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
Trong hệ thống 32bits kích thước tiêu chuẩn của kiểu dữ liệu này là:

short int | 2 bytes
int | 4 bytes
long int | 4 bytes
long long int | 8 bytes

Để đơn giản hóa việc lấy kích thước max, min của từng kiểu dữ liệu, C cung cấp thư viện limits.h chứa thông tin kích thước về số nguyên, được định nghĩa qua các giá trị như: INT_MIN, INT_MAX...

B - Kiểu thập phân (dấu chấm phẩy động)
- Có 3 loại chính: số thực, số ảo và số phức. Các giá trị giới hạn của kiểu thâp phân lưu trữ trong thư viện float.h

a. Số thực
- Là số có phần nguyên và phần dư.
- gồm 3 loại chính: float, double, long double
- Sắp xếp theo thứ tự từ nhỏ tới lớn về kích thước
sizeof(float) <= sizeof(double) <= sizeof(long double)

b. Số ảo
- Là số biểu diễn dưới dạng kết hợp với căn bậc hai của -1
- Gồm 3 loại: float imaginary, double imaginary, long double imaginary
- Loại số này ít được sử dụng, nên nhiều nơi người ta bỏ.

c. Số phức
- Là số có thể hiện dưới tổng của phần thực và phần ảo (chi tiết hơn thì xem toán học nha )
- Gồm 3 kiểu: float complex, double complex. và long double complex.

4. Biến trong C

A - Khai báo biến
- Biến là một giá trị để sử dụng trong chương trình của bạn với các giá trị mà bạn gán cho biến.
- Muốn sử dụng một biến trong chương trình bạn cần phải khai báo trước khi sử dụng.
- Kiểu dữ liệu của biến có thể là: kiểu kí tự (char), kiểu số nguyên (integer) hay kiểu số thực (real). Kiểu void không thể sử dụng được (chỉ áp dụng với con trỏ).
- Cách khai báo biến như sau:

[var type] [var identifier]

Ví dụ:
char code;
int i;
long long money_lend;
float finalGrade;
double rate;

- Bạn có thể khai báo nhiều biến cùng một lúc. Ví dụ: int i, j, k, m; .... Nhưng nên hạn chế khai báo nhiều biến cùng một lúc thể này vì sẽ gây cảm giác khó nhìn và compiler phải xử lý hơi phức tạp một chút về đoạn khai báo (kết quả thì không có gì thay đổi).

B - Khởi tạo biến:
- Khởi tạo biến tức là đặt một giá trị ban đầu cho biến trước khi sử dụng.
- Bạn có thể vừa khai báo vừa khởi tạo biến.
Ví dụ: int count = 0;

C - Chương trình đơn giản:

/* Chương trình tính tổng của 2 số nguyên nhập vào từ bàn phím
@author: bvKim
@date: 30-Mar-2009
@file: sum.c
*/
#include

int main(void)
{
// Khai báo biến
int a;
int b;
int sum = 0;

print("Nhap so thu nhat: "); scanf("%d", &a);
printf("Nhap so thu hai: "); scanf("%d", &b);

sum = a + b; // quá trình tính tổng

// In ra kết quả
print("Ket qua: %d + %d = %d", a, b, sum);

print("Chuong trinh ket thuc!\n");
return 0;
}

1 nhận xét: