Thứ Năm, 4 tháng 4, 2024

4.Cú pháp ngôn ngữ lập trình C

Cú pháp (syntax) ngôn ngữ lập trình C là tập hợp các quy tắc nhằm xác định cách thức để viết và dịch trong ngôn ngữ lập trình C.

Tiếng Việt có ngữ pháp tiếng Việt, tiếng Anh có ngữ pháp tiếng Anh.

Ví dụ 1:

Đây là một cái nhà đẹp...là câu đúng ngữ pháp tiếng Việt.

Là nhà đẹp đây cái...là một câu vô nghĩa và có phần sai ngữ pháp

Ví dụ 2:

This is a beautiful house...là câu đúng ngữ pháp tiếng Anh.

A this beautiful is house...là câu vô nghĩa và sai ngữ pháp.

Tất cả ngôn ngữ lập trình, bao gồm ngôn ngữ C, đều có những quy tắc "ngữ pháp" riêng và chúng ta phải tuân thủ các quy tắc đó.

Nói cách khác, cú pháp của ngôn ngữ C chính là "ngữ pháp" của ngôn ngữ C.

Để tiện theo dõi, chúng ta sẽ điểm qua một số vấn đề chính liên quan đến cú pháp (syntax) trong C, sau đó, trong các bài tiếp theo chúng ta mới phân tích từng vấn đề cụ thể.

Đây là chương trình đơn giản mà chúng ta tạo ra trong bài trước:

#include <stdio.h>

int main()
{

    int so = 2024;


    printf("Xin Chào ! \n");
    printf("Rất vui gặp bạn!");
    printf("Năm nay là %d \n", so);
   
    return 0;
}

 

Chúng ta sẽ thêm 2 dòng để tiện cho việc thảo luận về cú pháp. Dưới biến int so = 2024, ta thêm một biến nữa char namtoi[] = "Năm 2025"; 

Sau đó ta thêm một lệnh printf: printf("Năm tới là %s", namtoi); 

Ngoài ra ta thêm  một số chú thích. Chương trình của chúng ta sẽ "hoành tráng" tương tự thế này:


/* Đây là chương trình tào lao */

#include <stdio.h>

int main()
{

    int so = 2024; // Đây là biến số

    char namtoi[] = "Năm 2025";  // Đây là biến chuỗi

 
    printf("Xin Chào ! \n);
    printf("Rất vui gặp bạn!");
    printf("Năm nay là %d \n", so);
    printf("Năm tới là %s", namtoi);


    return 0;
}

Bấm Run để chạy thử (chúng ta tạm sử dụng IDE online cho tiện), "chương trình tào lao" của chúng ta sẽ in ra kết quả như mong đợi:

Xin Chào !
Rất vui gặp bạn!Năm nay là 2024
Năm tới là Năm 2025

 

Trước khi phân tích "chương trình tào lao" của chúng ta, hãy tưởng tượng một vài tình huống thực tế:

Chúng ta cần dạy cho một bé lớp 1, lớp 2 nào đó về trọng lượng và chiều dài. Chúng ta sẽ cho bé biết rằng trọng lượng thì đo bằng kilogram và chiều dài đo bằng mét. Sau đó để kiểm tra kiến thức của bé, ta có thể hỏi:

Bao bột này nặng bao nhiêu kilogram?

Cánh cổng này rộng bao nhiêu mét?

Chúng ta không thể hỏi bé một câu kiểu như:

Bao bột này nặng bao nhiêu...mét ?

Tóm lại, trong ngôn ngữ thông thường để BIỂU DIỄN  về mặt lượng (khối lượng, trọng lượng, kích thước…) chúng ta sử dụng các đơn vị đo lường khác nhau như mét, kilogram, mét khối.

Một ví dụ khác vừa thực tế vừa gần với ngôn ngữ lập trình. Cô giáo ra bài cho học sinh:

Hãy viết một câu tả mùa thu gồm 10 từ.

Cô không thể ra bài "khó hiểu" tương tự thế này:

Hãy viết một câu tả mùa thu gồm 10 mét.

Từ, hay câu, hay chữ là những  đơn vị ngôn ngữ để BIỂU DIỄN từng chữ cái, vài chữ cái hay một tập hợp nhiều chữ cái.

Ta thấy mét, kilogram, mét khối, chữ cái, từ, câu...tất cả những cái đó là một cách mô tả và phân loại rõ ràng thông tin: dài bao nhiêu, nặng bao nhiêu, to bao nhiêu, gồm mấy chữ cái...


Trong ngôn ngữ lập trình cũng vậy, chúng ta cần một hệ thống tương tự nhằm mô tả và phân loại rõ ràng thông tin, và ta gọi đó là kiểu dữ liệu. 


Kiểu dữ liệu (data type) là cách để phân loại và mô tả cách dữ liệu được lưu trữ và xử lý trong ngôn ngữ lập trình. Nó giúp trình biên dịch hoặc trình thông dịch hiểu và quản lý cách lập trình viên muốn sử dụng dữ liệu.

Có 4 kiểu dữ liệu trong lập trình C là: Kiểu dữ liệu cơ bản, kiểu dữ liệu enum, kiểu void và kiểu dữ liệu nâng cao.

Ngoài ra, nếu bạn có một máy xay đa năng, có thể xay đậu đen, đậu xanh, gạo, bắp...thì ở đầu vào cũng như đầu ra bạn cần có cách nào đó để xác định đó là gạo hay đậu xanh hay bắp...


Hoặc trong ví dụ xây nhà của chúng ta,trong một kho lớn có nhiều khu vực: khu điện, khu nước, khu mộc, khu nề...cần có cách để mọi người có thể biết khu nào để dụng cụ vật liệu mộc, khu nào để dụng cụ vật liệu của điện...

Trong lập trình C người ta cũng cần một công cụ tương tự để phân biệt dữ liệu loại nào đang xử lý, gọi là Công cụ xác định định dạng (Format Specifiers)
Công cụ xác định định dạng trong C được sử dụng để thông báo cho trình biên dịch về loại dữ liệu sẽ được in hoặc quét trong các hoạt động đầu vào và đầu ra. Chúng luôn bắt đầu bằng ký hiệu % và được sử dụng trong chuỗi được định dạng trong các hàm như printf(), scanf, sprintf(), ...

Sau một hồi vòng vo tạm cho rằng chúng ta đã hiểu hai khái niệm:

  • Kiểu dữ liệu (data type)
  • Công cụ xác định định dạng (Format Specifiers)

Bây giờ ta sẽ phân tích "chương trình tào lao" để hiểu về hai khái niệm đó trong thực tế lập trình C.

Ba dòng này của chương trình là những chú thích, trình biên dịch sẽ bỏ qua, nói cách khác các chú thích không ảnh hưởng gì tới chương trình. Có hai cách để chú thích: bắt đầu với /* và kết thúc với ký tự */ hoặc hai dấu gạch chéo //

/* Đây là chương trình tào lao */ 

// Đây là biến số  

// Đây là biến chuỗi

Trong bài trước, bạn đã biết hàm trong C là một tập hợp những đoạn mã dùng để thực hiện một nhiệm vụ nào đó. Nhiều hàm bạn phải tự viết, nhưng trong C người ta cũng đã có những hàm được viết sẵn và nằm trong Thư viện của C. Ngôn ngữ lập trình C chứa các thư viện có sẵn, các thư viện này sẽ cung cấp cho bạn các công cụ giúp các bạn có thể lập trình dễ dàng hơn. Trong chương trình bạn thêm thư viện vào chương trình của mình bằng cách sử dụng cụm #include và theo sau là tên thư viện mà bạn muốn thêm.  

Trong "chương trình tào lao" của chúng ta thì một thư viện có tên stdio.h đã được thêm vào chương trình, từ đó chúng ta có thể sử dụng các công cụ có sẵn mà thư viện này cung cấp.


Hàm main : Đây là nơi chương trình C bắt đầu được thực thi, chúng ta viết code ở bên trong hàm main này và các câu lệnh sẽ được kết thúc bởi dấu chấm phẩy (;). Khai báo hàm chúng ta cần dấu () sau tên hàm. Một hàm thường "trả về" một cái gì đó vì vậy trước tên hàm ta cần ghi Kiểu dữ liệu (data type) mà hàm sẽ trả về, trong ví dụ của chúng ta kiểu dữ liệu trả về là int (Tạm coi như là một con số, ta sẽ bàn sau)

Chương trình sử dụng hàm printf để in ra nội dung text hiển thị lên màn hình, ta cần đặt nội dung cần in vào trong dấu nháy kép ("").

Bạn có thể hiển thị nhiều nội dung bằng nhiều câu lệnh printf ngoài ra để xuống dòng khi in bạn sử dụng thêm ký hiệu "\n" ở vị trí bạn muốn xuống dòng mới.

Câu lệnh return 0;  được đặt ở vị trí cuối cùng trong hàm main, đây là giá trị trả về của hàm main sau khi thực thi xong chương trình nếu chương trình hoạt động một cách chính xác.
Bạn cũng có thể trả về giá trị khác 0, miễn là một con số vì hàm main trong ví dụ của chúng ta là int main(), tuy nhiên thông thường trả về 0 có nghĩa là chương trình sẽ thực thi thành công và thực hiện những gì nó dự định làm. Chú ý rằng khi câu lệnh return 0; trong hàm main() được thực thi, chương trình của bạn sẽ kết thúc ngay lập tức

Câu lệnh int so = 2024; nhằm khai báo một biến dạng số (tạm thời chúng ta dùng từ số cho dễ hiểu, sẽ thảo luận chi tiết ở phần sau) và khởi tạo cho nó một giá trị là 2024.

Câu lệnh char namtoi[] = "Năm 2025"; nhằm khai báo một chuỗi các ký tự và cho nó một giá trị là Năm 2025.

Khi muốn đầu vào và đầu ra chương trình C nhận đúng kiểu dữ liệu, ta phải dùng Công cụ xác định định dạng (Format Specifiers)
%d xác định kiểu dữ liệu là int.
%s xác định kiểu dữ liệu là chuỗi ký tự.


Phần tiếp theo.

Phần trước





Không có nhận xét nào:

Đăng nhận xét