[Ngôn ngữ lập trình C] Các phần tử cơ bản của ngôn ngữ C

Các thành phần cơ bản 


Bộ chữ viết trong C

Bộ chữ viết trong ngôn ngữ C bao gồm những ký tự, ký hiệu sau: (phân biệt chữ in hoa và in thường):
  • 26 chữ cái latinh hoa A,B,C...Z
  • 26 chữ cái latinh thường a,b,c ...z.
  • 10 chữ số thập phân 0,1,2...9.
  • 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, xuống hàng (\n) và tab (\t)

Các từ khoá trong C

Từ khóa là các từ dành riêng (reserved words) của C mà người lập trình có thể sử dụng nó trong chương trình tùy theo ý nghĩa của từng từ. Ta không được dùng từ khóa để đặt cho các tên của riêng mình. Các từ khóa của Turbo C 3.0 bao gồm:

asm  • auto  • break  • case  • cdecl  • char  • class  • const  • continue  • _cs  • default  • delete  • 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  • return  • _saveregs  • _seg  • short  • signed  • sizeof  • _ss  • static  • struct  • switch  • template  • this  • typedef  • union  • unsigned  • virtual  • void  • volatile  • while

Cú pháp

- Là bộ quy tắc để viết chương trình, gồm những quy định viết từ và tổ hợp từ của mỗi ngôn ngữ

- Dựa vào cú pháp người lập trình và chương trình dịch biết tổ hợp nào của các kí tự trong bảng chữ cái là hợp lệ, nhờ đó có thể mô tả chính xác thuật toán để máy thực hiện

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

Một chương trình C khi soạn thảo được chia thành các thành phần chính sau: Các chỉ thị tiền xử lý, Định nghĩa mới, Prototype, Khai báo biến ngoài, Chương trình chính, Cài đặt các hàm.



Các kiểu dữ liệu cơ sở

Được dùng để lưu các giá trị nguyên hay còn gọi là kiểu đếm được.



Kiểu số thực

Được dùng để lưu các số thực hay các số có dấu chấm thập phân

Kiểu void

Mang ý nghĩa là kiểu rỗng không chứa giá trị gì cả

Ví dụ:   void main(){

                ….}

Kích thước của các kiểu dùng sizeof

Kích thước 1 kiểu có thể được xác định lúc chạy chương trình (runtime), dùng sizeof:

Ví dụ:

            sizeof(double)           =>8(byte)

            sizeof(long double)=>10(byte)

Tên và hằng trong C

Tên (identifier): Được dùng để đặt cho chương trình, hằng, kiểu, biến, chương trình con, ... Có 2 loại:

§  Tên chuẩn: là tên do C đặt sẵn như tên kiểu: int, char, float,…; tên hàm: sin, cos...

§  Tên do người lập trình tự đặt.



 Ví dụ:

Tên đặt hợp lệ:  Chieu_dai, Chieu_Rong, Chu_Vi

Tên không hợp lệ: Do Dai, 1D101

Phải tuân thủ quy tắc:

Ø  Sử dụng bộ chữ cái, chữ số và dấu gạch dưới (_)

Ø  Bắt đầu bằng một chữ cái hoặc dấu gạch dưới.

Ø  Không có khoảng trống ở giữa tên.

Ø  Không được trùng với từ khóa.

Ø  Độ dài tối đa của tên là 32 ký tự, tuy nhiên cần đặt sao cho rõ ràng, dễ nhận biết và dễ nhớ.

Ø  Không cấm việc đặt tên trùng với tên chuẩn nhưng khi đó ý nghĩa của tên chuẩn không còn giá trị nữa.

Hằng (Constant): đại lượng không đổi trong suốt quá trình thực thi chương trình

Ví dụ về hằng trong C - tinhoccoban.net

Hằng có thể là: 1 con số, 1 ký tự, 1 chuỗi ký tự.

Hằng số thực: float, double, long double, 2 cách thể hiện

Cách 1: viết thông thường

§  Ví dụ: 123.34             -223.333  3.00  -56.0

Cách 2: viết theo số mũ hay số khoa học

§  Một số thực được tách làm 2 phần (phân cách bởi e/E)

Phần giá trị: như cách 1

Phần mũ: là một số nguyên

§  Ví dụ:

                                    1234.56e-3 = 1.23456 (là số 1234.56*10-3)

                                    -123.45E4 = -1234500 ( là -123.45*104)

Hằng số nguyên: Hằng số nguyên 2 byte (int) hệ thập phân. Sử dụng 10 ký số 0..9. Ví dụ:

                                    123 (một trăm hai mươi ba)

                                    -242 (trừ hai trăm bốn mươi hai)

Hằng số nguyên 2 byte (int) hệ bát phân Sử dụng 8 ký số 0..7. Cách biểu diễn: 0<các ký số từ 0 đến 7>.Số bát phân : 0dndn-1dn-2…d1d0  ( di có giá trị từ 0..7) => giá trị. Ví dụ:                020=2*81 + 0*80 =(16)10

 Hằng số nguyên 2 byte (int) hệ thập lục phân. Là kiểu số nguyên dùng:

§  10 ký số 0..9 và

§  6 ký tự A, B, C, D, E ,F

Cách biểu diễn:

            0x<các ký số từ 0 đến 9 và 6 ký tự từ A đến F>

Số thập lục phân : 0xdndn-1dn-2…d1d0    => Giá trị thập phân. Ví dụ:

            0x345=3*162 + 4*161 + 5*160 = (837)10

            0x2A9= 2*162 + 10*161 + 9*160= (681)10

Ví dụ về hằng số nguyên - tinhoccoban.net

Hằng số nguyên 4 byte (long). Được biểu diễn như số int trong hệ thập phân nhưng kèm theo ký tự l hoặc L. 

Ví dụ: 

                                    45345L   hay  45345l   hay 45345

Hằng ký tự (char) 

Ø  Ví dụ:   ‘a’, ‘A’,  ‘0’, ‘9’

Ø  Là 1 ký tự được viết trong cặp dấu nháy đơn (‘).

Ø  Mỗi một ký tự tương ứng với 1 giá trị trong bảng mã ASCII. ằng ký tự cũng được xem như trị số nguyên.

Ø  Chúng ta có thể thực hiện các phép toán số học trên 2 ký tự (dùng giá trị ASCII của chúng)

Ø  ASCII = American Standard Code for Information Interchange

Bảng mã ASII - tinhoccoban.net


Hằng chuỗi ký tự :

Ví dụ:  “Ngon ngu lap trinh C” Là 1 chuỗi hay 1 xâu ký tự được đặt trong cặp dấu nháy kép (“).

Chú ý:

§  “” :  chuỗi rỗng - không có nội dung

§  Khi lưu trữ trong bộ nhớ, một chuỗi được kết thúc bằng ký tự NULL (‘\0’: mã Ascii là 0).

§  Để biểu diễn ký tự đặc biệt bên trong chuỗi ta phải thêm dấu \ phía trước. Ví dụ: 

Viết “I\’m a student” cho “I’m a student”

Viết “Day la ky tu \“dac biet\”” cho “Day la ky tu “dac biet””

Câu lệnh – Biểu thức

Định nghĩa Biến: Biến dùng để chứa dữ liệu trong quá trình thực hiện chương trình. Giá trị của biến có thể bị thay đổi. Về bản chất, biến là một vùng nhớ được đặt tên.

Cú pháp khai báo biến:

<Kiểu dữ liệu> Danh sách các tên biến cách nhau bởi dấu phẩy;

Cách khai báo biến - tinhoccoban.net


Ví dụ:

Khởi tạo giá trị cho biến lúc khai báo

Cách viết giá trị cho biết luôn kiểu.

Viết giá trị cho biết luôn kiểu giá trị - tinhoccoban.net


Chú ý: 8864L có kiểu long, còn 8864 có kiểu int

Vị trí khai báo biến

Biến ngoài: Được đặt bên ngoài tất cả các hàm, ảnh hưởng đến toàn bộ chương trình (biến toàn cục)

Vị trí khai báo biến - tinhoccoban.net


Biến trong : Được đặt bên trong hàm, chương trình chính hay một khối lệnh. Nó ảnh hưởng đến hàm, chương trình hay khối lệnh chứa nó (biến cục bộ).


Biểu thức: 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)

Ví dụ:    (-b + sqrt(Delta))/(2*a)

Các loại toán tử trong C: Toán tử số học, Toán tử quan hệ và logic, Toán tử Bitwise, Toán tử?, Toán tử con trỏ & và *, Toán tử dấu phẩy

Các toán tử số học - tinhoccoban.net

Minh họa  các phép toán số học. - tinhoccoban.net



Tăng và giảm (++ & --)

   ++x hay x++ giống x = x + 1

    --x hay x-- giống x = x – 1

Tuy nhiên:

            x = 10;

            y = ++x;  //y = 11, x=11

            x = 10;

            y = x++;  //y = 10, x=11

Sự khác nhau giữa toán tử tăng/giảm đặt trước và sau toán hạng - tinhoccoban.net


Sự khác nhau giữa toán tử tăng/giảm đặt trước toán hạng và sau toán hạng

·        x++ trả về giá trị hiện hành của x và sau đó tăng x

·        ++x tăng x trước và sau đó trả về giá trị mới của x

Biểu thức Boolean (boolean expression)

Chú ý! Không có kiểu Boolean rõ ràng trong C. Thay vào đó C dùng các giá trị nguyên để tượng trưng cho giá trị Boolean, với qui ước:

false               Giá trị 0

true                 Bất kỳ giá trị nào ngoại trừ 0

Chú ý! C dùng “=” cho phép gán, và dùng “==“ cho phép so sánh. Nó trả về 1 nếu bằng và 0 nếu ngược lại

Các toán tử quan hệ và các toán tử Logic

Các phép so sánh sau tạo ra các biểu thức logic có giá trị kiểu Boolean

Toán tử quan hệ và các toán tử Logic - tinhoccoban.net


Các biểu thức logic trả về

            0 nếu false(sai)

            1 nếu true(đúng)

Các toán tử quan hệ và các toán tử Logic - tinhoccoban.net

Bảng chân trị cho các toán tử Logic - tinhoccoban.net


Thứ tự ưu tiên của các toán tử logic - tinhoccoban.net



Các toán tử Bitwise

Toán tử Bitwise giúp kiểm tra, gán hay thay đổi các bit thật sự trong 1 byte của word. Chỉ dùng cho kiểu charint.

Bảng chân lý toán tử AND -tinhoccoban.net



Trong lập trình máy tính kỹ thuật số. Phép toán bitwise hoạt động trên một hoặc nhiều số nhị phân (binary numerals), hoặc các chuỗi giống số nhị phân. Đây là một phép toán đơn giản và nhanh, được hỗ trợ trực tiếp bởi bộ xử lý (processor). Thông thường các phép tính bitwise nhanh hơn rất nhiều so với phép nhân, phép chia, đôi khi nhanh hơn đáng kể so với phép cộng. Các phép tính bitwise sử dụng ít năng lượng hơn bởi nó ít sử dụng tài nguyên.

Các toán tử Bitwise - tinhoccoban.net


Toán tử ?

Toán tử ? thực hiện như lệnh if-else. Cú pháp: E1 ? E2 : E3.

Ví dụ : X = (10 > 9) ? 100 : 200;    =>X=100

X = (10 >15 )? 100 : 200; =>X=200

Toán tử con trỏ & và *

Toán tử * trả về nội dung của ô nhớ mà một con trỏ đang chỉ vào.

Ví dụ 1:         

int *p;              //con tro so nguyen

int count=5, x;

p = &count;//  =>Đặt vào biến m địa chỉ bộ nhớ của biến count

Ví dụ 2: x = *p;         // x=5

Toán tử dấu phẩy

Được sử dụng để kết hợp các biểu thức với nhau.

Bên trái của dấu (,) luôn được xem là kiểu void. Biểu thức bên phải trở thành giá trị của tổng các biểu thức được phân cách bởi dấu phẩy.

Ví dụ 1 :        

x = (y=3,y+1);

Trước hết  gán 3 cho y rồi gán 4 cho x.

Ví dụ 2, kết quả in ra màn hình là 2.

#include <stdio.h>

#include <stdlib.h>

void main(int argc, char *argv[]) {

   int a;

   a=(1, 2),3;

   printf("%d", a);

   return 0;      

}

Phép toán được viết gọn. - tinhoccoban.net

Vào – ra dữ liệu trong C 

• C cung cấp 2 hàm vào ra cơ bản: – printf() – scanf() • Muốn sử dụng 2 hàm printf() và scanf() ta cần khai báo tệp tiêu đề stdio.h: #include Hoặc #include “stdio.h”
In dữ liệu ra màn hình:
printf("Xin chao cac ban!");
Một số đặc tả định dạng cơ bản:
%d: số nguyên hệ 10 có dấu
%u: số nguyên hệ 10 không dấu
%x: số nguyên hệ 16
%o: số nguyên hệ bát phân
%s: xâu kí tự
%c: một kí tự đơn
%f: số chấm động cố định
%e: số chấm động (ký hiệu có số mũ)
l : Tiền tố dùng kèm với %d, %x, %o để chỉ số nguyên dài (ví dụ %ld)

Cú pháp: printf(“xâu kí tự…”, <các biến và các số>);

Việc sử dụng đơn giản nhất là in ra một xâu kí tự: “Xin chao cac ban!”:

Để in giá trị của các biến, số ra màn hình, ta phải sử dụng các đặc tả định dạng bắt đầu với % như trên nhằm đại diện cho các biến, số (%d đại diện cho biến số nguyên number).  Các đặc tả định dạng này không được in ra màn hình mà được thay thế bởi các biến, các số đằng sau.

Nhập dữ liệu từ bàn phím:
Cú pháp: scanf (“xâu kí tự…”, <các con trỏ>);

Ví dụ ta muốn nhập một số nguyên vào biến a:

int a; scanf("%d", &a);
Lưu ý:ở đây &a là con trỏ trỏ tới biến a.

Chú ý khi nhập xâu kí tự chứa dấu cách (space):

Trước khi đọc xâu, chúng ta phải làm sạch bộ đệm bàn phím vì có thể quá trình đọc dữ liệu trước còn lưu lại. Trên Windows chúng ta có lệnh fflush(stdin); , tuy nhiên nó đã bộc lộ khá nhiều hạn chế, nhất là không thể dùng trên Linux nên tôi không sử dụng ở đây. Chúng ta sẽ dùng đoạn lệnh sau trước lệnh nhập vào một chuỗi:

int c;
while ( ( c = getchar() ) != EOF && c != '\n' );
Hoặc

scanf ( "%*[^\n]" );
scanf ( "%*c" );
Cách 1: Ta dùng lệnh:

fgets (name, 100, stdin);
với 100 là độ dài lớn nhất của xâu kí tự bạn muốn nhập vào (bạn có thể thay đổi nó) và name là tên biến xâu kí tự. Việc đọc này sẽ lưu vào biến name cả kí tự xuống dòng ở cuối xâu (khi bạn ấn enter để kết thúc nhập xâu là truyền vào bộ đệm kí tự xuống dòng).

Cách 2: Ta dùng lệnh:

scanf ("%[^\n]%*c", name);


Bài tập



Mới hơn Cũ hơn

Biểu mẫu liên hệ