1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Giáo trình kỹ thuật lập trình (nghề công nghệ thông tin trình độ cao đẳng)

122 6 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Giáo Trình Kỹ Thuật Lập Trình (nghề công nghệ thông tin trình độ cao đẳng)
Trường học Trường Cao Đẳng Công Nghệ Thành phố Hồ Chí Minh
Chuyên ngành Công nghệ Thông Tin
Thể loại Giáo trình
Năm xuất bản 2021
Thành phố TP.Hồ Chí Minh
Định dạng
Số trang 122
Dung lượng 1,19 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • I. Vị trí, tính chất môn học (7)
  • II. Mục tiêu môn học (7)
  • III. Nội dung môn học (7)
  • Chương 1: GIỚI THIỆU NGÔN NGỮ C (8)
    • I. GIỚI THIỆU (8)
      • 1. Phương pháp tổng quát để giải một bài toán trên máy tính (8)
      • 2. Xác định bài toán (8)
      • 3. Cấu trúc dữ liệu và Giải thuật (9)
      • 4. Chương trình (15)
    • II. KHỞI ĐỘNG VÀ THOÁT CHƯƠNG TRÌNH (16)
      • 1. Ngôn ngữ lập trình (16)
      • 2. Ngôn ngữ lập trình C (17)
      • 3. Công cụ lập trình (18)
      • 4. Công cụ lập trình Dev-C++, C-Free Pro 5 (20)
      • 5. Làm quen môi trường Dev-C++ (20)
  • Chương 2: CÁC THÀNH PHẦN TRONG NGÔN NGỮ C (23)
    • I. TỪ KHÓA (23)
    • II. TÊN (23)
      • 1. Tên (23)
      • 2. Biến (24)
      • 3. Hằng (26)
    • III. KIỂU DỮ LIỆU (27)
      • 1. Kiểu số nguyên (27)
      • 2. Kiểu số thực (28)
    • IV. CHÚ THÍCH (29)
    • VI. KHAI BÁO BIẾN (29)
      • 1. Khai báo (định nghĩa) Hằng (29)
      • 2. Khai báo (định nghĩa) Biến (29)
      • 3. Biểu thức (29)
    • VI. NHẬP / XUẤT DỮ LIỆU (33)
      • 1. Nhập dữ liệu từ bàn phím – Hàm scanf() (33)
      • 2. Xuất dữ liệu ra màn hình - Hàm printf() (35)
      • 3. Cấu trúc một chương trình (36)
      • 3. Ví dụ (40)
  • Chương 3: CẤU TRệC RẼ NHÁNH Cể ĐIỀU KIỆN (0)
    • I. LỆNH VÀ KHỐI LỆNH (44)
    • II. LỆNH IF (45)
      • 1. Cú pháp (45)
      • 2. Lưu đồ (46)
      • 3. Giải thích (46)
    • III. LỆNH SWITCH (49)
      • 4. Biểu thức (50)
  • Chương 4: CẤU TRệC LẶP (0)
    • I. LỆNH FOR (57)
    • II. LỆNH BREAK (59)
    • III. LỆNH CONTINUE (60)
    • IV. LỆNH WHILE (61)
    • V. LỆNH DO .. WHILE (63)
    • VI. VÒNG LẶP LỒNG NHAU (0)
      • 1. Cú pháp để lồng vòng lặp for (66)
      • 2. Cú pháp để lồng vòng lặp while (67)
      • 3. Cú pháp để lồng vòng lặp do...while (68)
      • 4. Cú pháp để lồng vòng lặp kết hợp (69)
    • VII. SO SÁNH SỰ KHÁC NHAU CỦA CÁC VÒNG LẶP (70)
      • 1. Vòng lặp for, while (70)
      • 2. Vòng lặp do…while (70)
  • Chương 5: HÀM (78)
    • I. CÁC VÍ DỤ VỀ HÀM (78)
      • 1. Ví dụ về hàm (78)
      • 2. Khai báo và định nghĩa Hàm (78)
      • 2. Lời gọi Hàm (81)
    • II. THAM SỐ DẠNG THAM BIẾN VÀ THAM TRỊ (84)
      • 1. Truyền theo tham trị (84)
      • 2. Truyền theo tham biến (85)
      • 3. Truyền theo dẫn trỏ (87)
    • III. SỬ DỤNG BIẾN TOÀN CỤC (90)
      • 1. Biến cục bộ là gì? (90)
      • 2. Biến toàn cục là gì? (91)
    • IV. SỬ DỤNG TIẾN XỬ LÝ #DEFINE (92)
      • 1. Các chỉ thị tiền xử lý (92)
      • 2. Định nghĩa kiểu dữ liệu (92)
      • 3. Khai báo các prototype (94)
      • 4. Khai báo các biến ngoài (các biến toàn cục) (94)
      • 5. Chương trình chính (92)
      • 6. Cài đặt các hàm (94)
      • 7. Hàm xây dựng sẵn (94)
  • Chương 6: MẢNG VÀ CHUỖI (101)
    • I. MẢNG (101)
      • 1. Mảng trong C (101)
      • 2. Mảng một chiều (101)
      • 3. Mảng nhiều chiều (106)
    • II. CHUỖI (109)
      • 1. Khai báo (109)
      • 2. Nhập xuất chuỗi (110)
      • 3. Một số hàm xử lý chuỗi (111)

Nội dung

C không gắn với bất kỳ một hệ điều hành hay máy nào, và mặc dầu nó đã được gọi là " ngôn ngữ lập trình hệ thống" vì nó được dùng cho việc viết hệ điều hành, nó cũng tiện lợi cho cả việc

Vị trí, tính chất môn học

- Vị trí: môn học đƣợc bố trí vào học kỳ 1

- Tính chất: là môn học cơ sở ngành.

Mục tiêu môn học

 Trình bày đƣợc các quy tắc, cú pháp của ngôn ngữ, các hoạt động vào/ra, lựa chọn biểu thức lồng nhau (đệ quy), tuần tự và tuyến tính

 Trình bày đƣợc các điều khiển áp dụng cho việc nhập dữ liệu đảm bảo chính xác, có chu trình xử lý dữ liệu

 Mô tả được chức năng và cách viết chương trình logic (pseudo code) của từng mô đun xử lý của hệ thống

 Trình bày đƣợc các cấu trúc rẽ nhánh, cấu trúc lặp, hàm, mảng và chuỗi

 Xác định được môi trường hoạt động của hệ thống (các điều khiển, công cụ, các thành phần, tập hợp dữ liệu, nhập dữ liệu, in kết quả )

 Giải đƣợc các bài toán sử dụng cấu trúc rẽ nhánh, cấu trúc lặp

 Sử dụng đƣợc biến cục bộ, toàn cục trong hàm

 Giải đƣợc các bài toán sử dụng mảng và chuỗi

- Về năng lực tự chủ và trách nhiệm:

 Rèn luyện tƣ duy logic để phân tích, tổng hợp

 Thao tác cẩn thận, tỉ mỉ.

GIỚI THIỆU NGÔN NGỮ C

GIỚI THIỆU

1 Phương pháp tổng quát để giải một bài toán trên máy tính Để giải một bài toán trên máy tính cần thực hiện các bước sau:

- Xác định cấu trúc dữ liệu để mô tả bài toán;

- Soạn thảo văn bản chương trình, kiểm tra và hoàn thiện chương trình

2.1 Khái quát về bài toán

Trong quá trình tồn tại và phát triển, mọi cá nhân đều phải giải quyết nhiều bài toán đòi hỏi sự thích nghi và xử lý linh hoạt Cuộc sống giống như một chuỗi các thử thách và câu hỏi cần được giải quyết để tiến bộ và phát triển bản thân Theo các nhà nghiên cứu, tất cả các bài toán đều có thể được mô tả theo một sơ đồ chung, giúp hiểu rõ hơn về quá trình tìm kiếm giải pháp.

- A là giả thiết, điều kiện ban đầu, thông tin đã cho, đã biết;

- B là kết luận, là mục tiêu cần đạt hoặc cái phải tìm, phải làm ra khi kết thúc bài toán;

 là suy luận, giải pháp cần xác định hoặc chuỗi các thao tác cần thực hiện để có đƣợc kết quả B từ cái đã có A

Việc xác định bài toán theo sơ đồ trên đồng nghĩa với việc làm rõ các yếu tố A và B cần đạt được, đồng thời xác định các bước cần thiết để đi từ A đến B một cách hiệu quả Đây là bước quan trọng giúp định hướng quá trình giải quyết vấn đề và đảm bảo kết quả cuối cùng phù hợp mục tiêu đề ra.

2.3 Bài toán trên máy tính

- A gọi là đầu vào (INPUT);

- B gọi là đầu ra (OUTPUT);

 là CHƯƠNG TRÌNH MÁY TÍNH cho kết quả B với đầu vào A

Việc xác định một bài toán trên máy tính thường gặp khó khăn sau:

- Thông tin về A, B thường không rõ ràng và không đầy đủ;

- Thông báo về điều kiện đặt ra cho cách giải (=>) thường không được nêu ra một cách minh bạch;

Hãy viết chương trình cho phép giải phương trình bậc 2

Người A gửi số tiền X vào gửi tiết kiệm với lãi suất tháng L%, sau T tháng sẽ tích lũy được số tiền cuối cùng Lãi suất được cộng vào gốc mỗi 3 tháng, tức là lãi suất hàng tháng sẽ được tính theo phương pháp lãi ghép theo chu kỳ 3 tháng Công thức tính số tiền sau T tháng giúp người gửi dự đoán chính xác số tiền có trong tay, tối đa hóa lợi nhuận từ khoản tiết kiệm của mình Việc hiểu rõ cách tính lãi suất theo chu kỳ 3 tháng giúp đảm bảo việc quản lý tài chính hiệu quả và tối ưu hóa khoản tiết kiệm của người gửi.

Bài toán 8 hậu - Hãy tìm cách đặt 8 con hậu trên một bàn cờ vua sao cho không có quân hậu nào có thể ăn quân hậu khác

Cho dãy số a1, a2, , an hãy sắp xếp dãy trên theo thứ tự giảm dần

Hãy xây dựng hệ thống quản lý hồ sơ và kết quả học tập của sinh viên

Việc xác định bài toán là rất rất quan trọng, nó ảnh hưởng tới cách thức và chất lƣợng của việc giải quyết bài toán;

Trong quá trình giải quyết bài toán, dù mô tả có chi tiết và rõ ràng, vẫn cần giả định rằng phần lớn thông tin về A và B đều chứa đựng trong trí óc người giải Thông tin về A hoặc B thường chỉ đóng vai trò như những biểu tượng để gợi nhớ các kiến thức tiềm ẩn, giúp người giải suy luận và liên kết các dữ liệu một cách hiệu quả.

Bước đầu tiên để giải quyết một bài toán là xác định rõ ràng vấn đề bằng cách phát biểu lại bài toán một cách chính xác theo ngôn ngữ của riêng bạn Việc này giúp bạn hiểu rõ bản chất của vấn đề và hình thành cách tiếp cận phù hợp Phân tích kỹ lưỡng và diễn đạt rõ ràng là bước quan trọng để đảm bảo rằng bạn đã nhận diện đúng yêu cầu của bài toán Chính nhờ việc phát biểu chính xác này, bạn có thể xác định các yếu tố then chốt và thiết lập chiến lược giải quyết hiệu quả.

- Bước tiếp là tìm hiểu thông tin Input A, Output B và các mối liên hệ giữa chúng;

Trong quá trình giải quyết các bài toán về tin học, nên xem xét một số trường hợp cụ thể để hiểu rõ bài toán và xác định các thao tác cần thực hiện Thực tế cho thấy, một số bài toán chỉ có thể được mô tả rõ nét thông qua các ví dụ thực tế, giúp người học dễ hiểu hơn về phương pháp tiếp cận và giải pháp phù hợp Việc phân tích các trường hợp cụ thể không những giúp làm rõ các bước xử lý mà còn nâng cao khả năng ứng dụng kiến thức vào thực tế.

3 Cấu trúc dữ liệu và Giải thuật

Trong khoa học máy tính, cấu trúc dữ liệu đóng vai trò quan trọng trong việc tổ chức lưu trữ và truy cập dữ liệu một cách hiệu quả Cấu trúc dữ liệu giúp tối ưu hoá quá trình xử lý dữ liệu, nâng cao hiệu suất của các ứng dụng phần mềm Việc lựa chọn cấu trúc dữ liệu phù hợp còn phụ thuộc vào công cụ lập trình được sử dụng, nhằm đảm bảo tính tối ưu và linh hoạt trong phát triển phần mềm.

- Ví dụ (trong C): Mảng (Array), Con trỏ (Pointer), Xâu ký tự (String), File, Stack, Queue

- Thông thường, một cấu trúc dữ liệu được chọn cẩn thận sẽ cho phép thực hiện thuật toán hiệu quả hơn

Việc chọn cấu trúc dữ liệu phù hợp bắt đầu từ việc xác định một cấu trúc dữ liệu trừu tượng phù hợp với yêu cầu của bài toán Một cấu trúc dữ liệu được thiết kế tối ưu sẽ giúp thực hiện các phép toán hiệu quả hơn, tiết kiệm tài nguyên, giảm thời gian xử lý và tối đa hóa không gian bộ nhớ sử dụng Việc lựa chọn đúng cấu trúc dữ liệu đóng vai trò quan trọng trong việc nâng cao hiệu suất và tối ưu hóa quá trình xử lý dữ liệu.

502 Bad GatewayUnable to reach the origin service The service may be down or it may not be responding to traffic from cloudflared

502 Bad GatewayUnable to reach the origin service The service may be down or it may not be responding to traffic from cloudflared

502 Bad GatewayUnable to reach the origin service The service may be down or it may not be responding to traffic from cloudflared

Giả sử có hai bình A và B chứa hai loại chất lỏng khác nhau, trong đó bình A chứa dung dịch Da còn bình B chứa dung dịch Db Thuật toán hoán đổi dung dịch giữa hai bình A và B nhằm đảm bảo quá trình trao đổi diễn ra chính xác và hiệu quả Quá trình này gồm các bước truyền dung dịch từ bình A sang bình B và ngược lại, nhằm đảm bảo mỗi bình chứa đúng loại dung dịch ban đầu sau khi hoàn tất Phương pháp này giúp tối ưu hóa quá trình đổi chỗ dung dịch, phù hợp với các yêu cầu về kỹ thuật và an toàn trong xử lý chất lỏng.

Yêu cầu phải có thêm một bình thứ ba gọi là bình C

Bước 1: Đổ dung dịch Db vào bình C;

Bước 2: Đổ dung dịch Da vào bình B; Bước 3: Đổ dung dịch Db vào bình A

Một trong những giải thuật tìm ƣớc chung lớn nhất của hai số a và b là:

Bước 1: Nhập vào hai số a và b

Bước 2: So sánh 2 số a,b chọn số nhỏ nhất gán cho UCLN

Bước 3: Nếu hai số a và b chia hết cho UCLN thì

Bước 4: Giảm UCLN một đơn vị và quay lại bước 3

Bước 5: In UCLN - Kết thúc.

3.3 Một thuật toán có các tính chất sau:

- Tính chính xác: để đảm bảo kết quả tính toán hay các thao tác mà máy tính thực hiện đƣợc là chính xác

- Tính rõ ràng: Thuật toán phải đƣợc thể hiện bằng các câu lệnh minh bạch; các câu lệnh đƣợc sắp xếp theo thứ tự nhất định

- Tính khách quan: Một thuật toán dù được viết bởi nhiều người trên nhiều máy tính vẫn phải cho kết quả nhƣ nhau

Thuật toán có tính phổ dụng cao, nghĩa là nó không chỉ phù hợp với một bài toán cụ thể mà còn có thể được áp dụng cho nhiều loại bài toán khác có cấu trúc đầu vào tương tự nhau, giúp nâng cao hiệu quả giải quyết các vấn đề đa dạng trong lập trình và phân tích dữ liệu.

- Tính kết thúc: Thuật toán phải gồm một số hữu hạn các bước tính toán 3.4 Trình tự thực hiện các bước của thuật toán

Giải thuật đƣợc thiết kế theo ba cấu trúc suy luận cơ bản sau đây:

Các công việc đƣợcthực hiện một cách tuần tự, công việc này nối tiếp công việc kia

3.4.2 Cấu trúc lựa chọn (Selection):

Lựa chọn một công việc để thực hiện căn cứ vào một điều kiện nào đó Có một số dạng nhƣ sau:

- Cấu trúc 1: Nếu < điều kiện> (đúng) thì thực hiện

- Cấu trúc 2: Nếu < điều kiện> (đúng) thì thực hiện , ngƣợc lại (điều kiện sai) thì thực hiện

- Cấu trúc 3: Trường hợp < i> thực hiện

Thực hiện lặp lại một công việc không hoặc nhiều lần căn cứ vào một điều kiện nào đó Có hai dạng nhƣ sau:

- Lặp xác định: là loại lặp mà khi viết chương trình, người lập trình đã xác định đƣợc công việc sẽ lặp bao nhiêu lần

Lặp không xác định là loại lặp trong lập trình mà số lần lặp chưa được xác định từ trước, vì người lập trình không biết chính xác công việc sẽ lặp bao nhiêu lần Thay vào đó, số lần lặp sẽ được xác định trong quá trình thực thi của chương trình, giúp chương trình linh hoạt xử lý các nhiệm vụ có số lần lặp không cố định.

Ngôn ngữ tự nhiên chính là ngôn ngữ hàng ngày mà chúng ta đang sử dụng để giao tiếp và mô tả các giải thuật Sử dụng ngôn ngữ tự nhiên giúp dễ dàng truyền đạt ý tưởng về các thuật toán phức tạp một cách rõ ràng và trực quan Điều này giúp chúng ta mô tả giải thuật một cách dễ hiểu, tương tự như các ví dụ đã trình bày Việc ứng dụng ngôn ngữ tự nhiên trong lập trình và phân tích giải thuật góp phần nâng cao khả năng truyền đạt kiến thức kỹ thuật một cách hiệu quả.

Ta có giải thuật giải phương trình bậc nhất dạng ax + b = 0 như sau:

Bước 1: Nhận giá trị của các tham số a, b

Bước 2: Xét giá trị của a xem có bằng 0 hay không?

Nếu a=0 thì làm bước 3, nếu a khác không thì làm bước 4

Bước 3: (a bằng 0) Nếu b bằng 0 thì ta kết luận phương trình vô số nghiệm, nếu b khác 0 thì ta kết luận phương trình vô nghiệm

Bước 4: ( a khác 0) Ta kết luận phương trình có nghiệm x = -b/a

KHỞI ĐỘNG VÀ THOÁT CHƯƠNG TRÌNH

Ngôn ngữ lập trình là một ngôn ngữ dùng để viết chương trình cho máy tính, giúp máy hiểu và thực thi các lệnh Các loại ngôn ngữ lập trình phổ biến gồm có ngôn ngữ máy, hợp ngữ và ngôn ngữ cấp cao, phù hợp với các mục đích và mức độ phức tạp khác nhau Hiểu rõ các loại ngôn ngữ lập trình giúp nhà phát triển lựa chọn công cụ phù hợp để tối ưu hóa quá trình lập trình và hiệu quả làm việc.

Ngôn ngữ máy là các chỉ thị dưới dạng nhị phân, can thiệp trực tiếp vào các mạch điện tử và có thể được thực hiện ngay lập tức mà không cần qua bước trung gian nào Tuy nhiên, chương trình viết bằng ngôn ngữ máy thường dễ sai sót, cồng kềnh và khó đọc, vì toàn là các chuỗi số 0 và 1, làm cho việc hiểu và chỉnh sửa trở nên phức tạp.

Hợp ngữ (assembly language) là ngôn ngữ lập trình cấp thấp gồm các câu lệnh và quy tắc viết các câu lệnh đó Mỗi câu lệnh trong hợp ngữ gồm có hai phần chính: tên câu lệnh (viết bằng tiếng Anh) thể hiện phép toán cần thực hiện và địa chỉ chứa toán hạng của phép toán đó Ví dụ, các câu lệnh hợp ngữ thường mô tả các phép tính, truy cập bộ nhớ hoặc điều chỉnh luồng thực thi chương trình một cách chính xác, phù hợp với kiến trúc phần cứng của máy tính.

INPUT a ; Nhập giá trị cho a từ bàn phím LOAD a ; Đọc giá trị a vào thanh ghi tổng A PRINT a;

Hiển thị giá trị của a ra màn hình INPUT b

Cộng giá trị của thanh ghi tổng A với giá trị b

Trong các lệnh như INPUT, LOAD, PRINT, ADD, những mã lệnh này thể hiện các thao tác chính của chương trình, trong khi a và b là các địa chỉ bộ nhớ liên quan Để máy tính có thể thực hiện một chương trình viết bằng hợp ngữ, chương trình đó cần được dịch sang ngôn ngữ máy Công cụ chịu trách nhiệm dịch chuyển đổi này chính là Assembler, giúp biến mã hợp ngữ thành mã máy dễ hiểu cho máy tính thực thi.

Ngôn ngữ lập trình cấp cao ra đời và phát triển để phản ánh cách tư duy của người lập trình, gần gũi với ngôn ngữ tự nhiên như tiếng Anh nhưng đảm bảo độ chính xác như ngôn ngữ toán học Sự tiến bộ của các thế hệ máy tính đã thúc đẩy sự đa dạng và phong phú trong các loại ngôn ngữ lập trình cấp cao Điều này đã mở ra nhiều hướng phát triển trong lập trình máy tính, bao gồm lập trình cấu trúc, lập trình hướng đối tượng, lập trình logic, và lập trình hàm, giúp nền công nghiệp phần mềm ngày càng đa dạng và linh hoạt hơn.

Chương trình viết bằng ngôn ngữ cấp cao được gọi là chương trình nguồn (source program) Để máy tính có thể hiểu và thực thi các lệnh trong chương trình nguồn, cần có một chương trình dịch (compiler hoặc interpreter) để chuyển đổi mã nguồn thành dạng mã máy có khả năng thực thi Quá trình dịch này giúp đảm bảo rằng các lệnh trong chương trình nguồn được chuyển đổi chính xác, giúp máy tính hoạt động hiệu quả và đúng chức năng.

Để chuyển đổi từ chương trình nguồn sang chương trình đích, cần có một chương trình dịch phù hợp Mặc dù mỗi ngôn ngữ lập trình cấp cao thường có một chương trình dịch riêng, nhưng về cơ bản có hai phương pháp dịch chính là thông dịch và biên dịch.

- Thông dịch (interpreter): Là cách dịch từng lệnh một, dịch tới đâu thực hiện tới đó Chẳng hạn ngôn ngữ LISP sử dụng trình thông dịch

- Biên dịch (compiler): Dịch toàn bộ chương trình nguồn thành chương trình đích rồi sau đó mới thực hiện Các ngôn ngữ sử dụng trình biên dịch nhƣ Pascal, C

Thông dịch (interpretation) và biên dịch (compilation) khác nhau ở chỗ, thông dịch thực thi mã nguồn ngay khi dịch, còn biên dịch dịch toàn bộ chương trình trước khi thực thi Do đó, các chương trình viết bằng ngôn ngữ biên dịch thường có hiệu suất thực thi nhanh hơn so với các chương trình viết bằng ngôn ngữ thông dịch.

Java là một ngôn ngữ lập trình sử dụng kết hợp giữa biên dịch và thông dịch Quá trình biên dịch mã nguồn Java tạo thành một chương trình đối tượng (mã trung gian), giúp tối ưu hóa quá trình thực thi Khi chạy, từng lệnh trong chương trình đối tượng được thông dịch thành mã máy, giúp thực thi linh hoạt và hiệu quả hơn Phương pháp này mang lại lợi ích trong việc nâng cao hiệu suất và khả năng di động của các ứng dụng Java.

- 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 các ứng dụng

Vào cuối thập kỷ 60 và đầu thập kỷ 70 của thế kỷ XX, Dennis Ritchie tại phòng thí nghiệm Bell đã phát triển ngôn ngữ lập trình C dựa trên ngôn ngữ BCPL của Martin Richards ra đời năm 1967 Ngôn ngữ C đã trở thành một trong những ngôn ngữ lập trình quan trọng nhất, góp phần cách mạng hóa lĩnh vực phần mềm và hệ điều hành Sự ra đời của C mở ra nhiều khả năng mới trong lập trình, thúc đẩy sự phát triển của các hệ điều hành như UNIX Nhờ tính linh hoạt và hiệu suất cao, ngôn ngữ C vẫn giữ vững vị trí trung tâm trong lĩnh vực công nghệ thông tin.

B là ngôn ngữ lập trình được phát triển bởi Ken Thompson dựa trên nền tảng của ngôn ngữ BCPL vào năm 1970 để viết hệ điều hành UNIX đầu tiên Ngôn ngữ B đã được cài đặt lần đầu tiên trên hệ điều hành UNIX chạy trên máy DEC PDP-11, mở ra bước đột phá trong phát triển phần mềm hệ thống.

- Năm 1978, Dennish Ritchie và B.W Kernighan đã cho xuất bản quyển

―Ngôn ngữ lập trình C‖ và đƣợc phổ biến rộng rãi đến nay

Ban đầu, ngôn ngữ lập trình C được thiết kế để hoạt động trong môi trường Unix nhằm hỗ trợ các công việc lập trình phức tạp Sau này, với sự phát triển nhanh chóng của ngành lập trình, C vượt ra khỏi giới hạn của phòng thí nghiệm Bell và trở thành ngôn ngữ phổ biến trong cộng đồng lập trình Các công ty phần mềm đã liên tục ra mắt các phiên bản hỗ trợ lập trình bằng C, đồng thời chuẩn ANSI C cũng được ra đời nhằm nâng cao tiêu chuẩn và khả năng tương thích của ngôn ngữ này.

- Ngôn ngữ lập trình C là một ngôn ngữ lập trình hệ thống rất mạnh và rất

Ngôn ngữ C cung cấp một thư viện phong phú với nhiều hàm đã được xây dựng sẵn, giúp lập trình viên tiết kiệm thời gian và công sức giải quyết các bài toán phổ biến Nhờ vào khả năng hỗ trợ đa dạng phép toán, C phù hợp để xử lý các bài toán kỹ thuật đòi hỏi các công thức phức tạp Ngoài ra, C còn cho phép người lập trình tự định nghĩa các kiểu dữ liệu trừu tượng để mở rộng khả năng ứng dụng Tuy nhiên, các người mới học lập trình C thường gặp phải những rắc rối ban đầu trong quá trình học tập và làm quen với các khái niệm của ngôn ngữ này.

C vẫn còn khá "hơi khó hiểu" do tính "mềm dẻo" đặc trưng của nó, nhưng đã được phổ biến rộng rãi và trở thành một công cụ lập trình mạnh mẽ Ngôn ngữ này được sử dụng phổ biến như là ngôn ngữ chính để xây dựng các phần mềm hiện nay, đóng vai trò quan trọng trong lĩnh vực công nghệ thông tin.

- Ngôn ngữ C có những đặc điểm cơ bản sau:

+ Tính cô đọng (compact): C chỉ có 32 từ khóa chuẩn và 40 toán tử chuẩn, nhƣng hầu hết đều đƣợc biểu diễn bằng những chuỗi ký tự ngắn gọn

Trong lập trình C, tính cấu trúc đóng vai trò quan trọng, nhờ vào việc sử dụng các chỉ thị như cấu trúc lựa chọn và lặp Điều này giúp các chương trình viết bằng C trở nên rõ ràng, dễ hiểu và dễ bảo trì hơn Việc tổ chức mã nguồn theo cấu trúc hợp lý góp phần nâng cao hiệu quả và khả năng mở rộng của phần mềm Chính nhờ đặc điểm này, lập trình C trở thành một ngôn ngữ mạnh mẽ trong việc xây dựng các ứng dụng phức tạp một cách có hệ thống và dễ quản lý.

CÁC THÀNH PHẦN TRONG NGÔN NGỮ C

TỪ KHÓA

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):

- 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

Từ khóa là các từ dành riêng (reserved words) của C với mục đích đã đƣợc xác định trước

-Từ khóa int dùng để khai báo biến hoặc hàm với kiểu dữ liệu số nguyên;

-Từ khóa if dùng để xây dựng câu lệnh cấu trúc chọn;

-Từ khóa for dùng để xây dựng câu lệnh cấu trúc lặp

Danh sách các từ khóa:

Các từ khóa phải viết bằng chữ thường để đảm bảo tính nhất quán và dễ nhận diện trong nội dung Tránh sử dụng từ khóa vào mục đích khác hoặc để đặt tên cho các đối tượng như biến, hằng số, tên hàm trùng với từ khóa nhằm tránh nhầm lẫn và tăng cường tối ưu hóa công cụ tìm kiếm Việc tuân thủ quy tắc này giúp cải thiện hiệu quả SEO và đảm bảo nội dung rõ ràng, chuyên nghiệp hơn.

TÊN

Tên trong lập trình, còn gọi là danh biểu (identifier), được sử dụng để đặt cho các thành phần như chương trình, hằng số, kiểu dữ liệu, biến, hàm, v.v Tên có hai loại chính là tên chuẩn do hệ thống cung cấp và tên do người lập trình tự đặt, nhằm giúp phân biệt và quản lý các thành phần trong mã nguồn một cách rõ ràng và dễ dàng.

- 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 để dùng trong chương trình của mình

Sử dụng bộ chữ cái, chữ số và dấu gạch dưới ( _ ) để đặt tên, nhưng phải tuân thủ quy tắc:

- 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à không giới hạn, tuy nhiên chỉ có 31 ký tự đầu tiên là có ý nghĩa;

- 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

Ví dụ: tên do người lập trình đặt:

Chieu_dai, Chieu_Rong, Chu_Vi, Dien_Tich Tên không hợp lệ: Do Dai, 12A2,…

Trong lập trình, biến là đại lượng được định nghĩa và đặt tên thông qua việc khai báo biến, giúp chứa dữ liệu trong quá trình thực thi chương trình Giá trị của biến có thể thay đổi trong suốt quá trình chạy của chương trình, phù hợp với mục đích xử lý Mỗi biến phải thuộc một kiểu dữ liệu xác định, đảm bảo giá trị của biến nằm trong miền giá trị của kiểu đó.

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

Danh sách các tên biến cách nhau bởi dấu phẩy;

Trong ví dụ này, chúng ta có các biến được khai báo với các kiểu dữ liệu khác nhau như int, long int, float và double Cụ thể, biến a, b, c có kiểu int, biến chu_vi có kiểu long int, biến nua_chu_vi có kiểu float, và biến dien_tich có kiểu double Việc chọn kiểu dữ liệu phù hợp giúp tối ưu hóa bộ nhớ và đảm bảo tính chính xác khi xử lý các phép tính Đó là lý do quan trọng của việc hiểu rõ đặc điểm của từng kiểu dữ liệu trong lập trình C để viết mã hiệu quả và chính xác.

Lưu ý: Để kết thúc 1 lệnh phải có dấu chấm phẩy (;) ở cuối lệnh

2.2 Vị trí khai báo biến trong C

Trong ngôn ngữ lập trình C, việc khai báo biến đúng vị trí là yếu tố quan trọng để tránh các lỗi ngoài ý muốn Việc đặt biến không chính xác có thể dẫn đến hiệu ứng lề gây khó kiểm soát mã nguồn và gây ra các sai sót không mong muốn Có hai cách đặt vị trí khai báo biến trong C giúp lập trình viên đảm bảo mã nguồn rõ ràng và dễ bảo trì.

Trong lập trình, khai báo biến ngoài (biến toàn cục) được đặt bên ngoài tất cả các hàm, có tác dụng ảnh hưởng đến toàn bộ chương trình Ví dụ về biến toàn cục gồm: int i; và float pi;, giúp các hàm có thể truy cập và chỉnh sửa giá trị của các biến này dễ dàng hơn Việc sử dụng biến toàn cục cần được cân nhắc để tránh gây xung đột hoặc lỗi trong quá trình phát triển phần mềm.

Trong lập trình, biến được khai báo bên trong hàm, chương trình chính hoặc một khối lệnh, và chỉ có tác dụng hoặc ảnh hưởng đến phần mã chứa nó Khi khai báo biến, cần đặt chúng ở đầu của khối lệnh, trước các lệnh gán hoặc lệnh thực thi khác, để đảm bảo đối tượng biến được xác định rõ ràng và tránh lỗi không mong muốn trong quá trình thực thi.

#include int bienngoai; /*khai bao bien ngoai*/ int main ()

{ int j,i; /*khai bao bien ben trong chuong trinh chinh*/ i=1; j=2; bienngoai=3; printf("\n Gia tri cua i la %d",i);

/*%d là số nguyên, sẽ biết sau */ printf("\n Gia tri cua j la %d",j); printf("\n Gia tri cua bien ngoai la %d",bienngoai); getch(); return 0;

This code demonstrates variable declaration and scope in C programming It initializes two integer variables, i and j, with values 4 and 5, respectively, and displays their values using printf statements The program then compares j and i; if j is greater than i, it calculates and prints their difference Otherwise, it computes and outputs the difference between i and j The use of inner variables within the if-else blocks highlights the concept of variable scope in C Proper understanding of variable scope and comparison operations is essential for writing effective conditional statements in C programming.

Là đại lượng không đổi trong suốt quá trình thực thi của chương trình

Cú pháp: const = Giá_trị;

Ví dụ: const int heso;

Số thực bao gồm các giá trị kiểu float, double, long double đƣợc thể hiện theo 2 cách sau:

Cách 1 để viết số thập phân là sử dụng phương pháp thông thường mà chúng ta đã quen thuộc từ các môn Toán, Lý, Hóa học Trong đó, điều quan trọng cần nhớ là sử dụng dấu chấm (.) làm dấu thập phân để đảm bảo tính chính xác và rõ ràng trong quá trình trình bày.

- Cách 2 : Sử dụng cách viết theo số mũ hay số khoa học Một số thực đƣợc tách làm 2 phần, cách nhau bằng ký tự e hay E

 Phần giá trị: là một số nguyên hay số thực đƣợc viết theo cách 1

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

Giá trị của số thực là: Phần giá trị nhân với 10 mũ phần mũ

Số nguyên gồm các kiểu int (2 bytes) , long (4 bytes) đƣợc thể hiện theo những cách sau :

Hằng số nguyên 2 bytes (int) trong hệ thập phân là kiểu số được sử dụng phổ biến trong lập trình, biểu diễn các giá trị nguyên bằng cách sử dụng các ký số từ 0 đến 9 Đây là kiểu dữ liệu giúp lưu trữ các số nguyên có phạm vi phù hợp cho những ứng dụng thông thường Việc hiểu rõ về hằng số nguyên 2 bytes (int) sẽ giúp bạn dễ dàng quản lý và xử lý dữ liệu số trong các chương trình phần mềm.

- Hằng số nguyên 2 byte (int) hệ bát phân: Là kiểu số nguyên sử dụng 8 ký số từ 0 đến 7 để biểu diễn một số nguyên

Cách biểu diễn: 0 < các ký số từ 0 đến 7 >

Ví dụ 4: 0345, -020 (số 345, -20 trong hệ bát phân)

- Hằng số nguyên 2 byte (int) hệ thập lục phân: Là kiểu số nguyên sử dụng 10 ký số từ 0 đến 9 và 6 ký tự A, B, C, D, E ,F để biểu diễn một số nguyên

Cách biểu diễn: 0x < các ký số từ 0 đến 9 và 6 ký tự từ A đến F >

Hằng số nguyên 4 byte (long) trong lập trình được biểu diễn dưới dạng số nguyên dài (long), có dạng giống như số int trong hệ thập phân kèm theo ký tự l hoặc L để phân biệt Số long được sử dụng để biểu diễn các số nguyên nằm ngoài phạm vi của kiểu int (2 bytes), giúp xử lý các giá trị lớn hơn trong quá trình lập trình.

- Các hằng số còn lại: Viết như cách viết thông thường (không có dấu phân cách giữa 3 số)

Hằng ký tự là một ký tự riêng biệt được viết trong cặp dấu nháy đơn (‗), mỗi ký tự này tương ứng với một giá trị trong bảng mã ASCII Điều đặc biệt là, hằng ký tự còn được xem như một trị số nguyên, giúp mở rộng khả năng xử lý dữ liệu và lập trình trong các ngữ cảnh khác nhau Việc hiểu rõ về hằng ký tự không những giúp tối ưu hóa mã nguồn mà còn cải thiện khả năng áp dụng trong các lĩnh vực lập trình và công nghệ thông tin.

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

Hằng chuỗi ký tự là một chuỗi hay một xâu ký tự đƣợc đặt trong cặp dấu nháy kép (―)

―Ngon ngu lap trinh C‖, ―CD CONG NGHE TP HCM‖.

- Một chuỗi không có nội dung ― ‖ đƣợc gọi là chuỗi rỗng;

- 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

―I‘m a student‖ phải viết ―I\‘m a student‖; ―Day la ky tu ―dac biet‖‖ phải viết

―Day la ky tu \‖dac biet\‖―.

KIỂU DỮ LIỆU

Các kiểu dữ liệu sơ cấp chuẩn trong C có thể đƣợc chia làm 2 dạng : kiểu số nguyên, kiểu số thực.

Kiểu số nguyên là kiểu dữ liệu dùng để lưu các giá trị nguyên hoặc kiểu đếm được trong lập trình C Trong ngôn ngữ C, kiểu số nguyên được chia thành nhiều kiểu con với miền giá trị riêng biệt, giúp tối ưu hóa bộ nhớ và tăng khả năng xử lý dữ liệu hiệu quả Các kiểu số nguyên phổ biến như int, short, long đều đóng vai trò quan trọng trong việc quản lý dữ liệu số nguyên, phù hợp với các yêu cầu khác nhau của các ứng dụng phần mềm Sử dụng đúng kiểu số nguyên phù hợp giúp tối ưu hóa hiệu suất và đảm bảo tính chính xác khi xử lý dữ liệu số trong lập trình C.

1.1 Kiểu số nguyên 1 byte (8 bits): Kiểu số nguyên một byte gồm có 2 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ã

1.2 Kiểu unsigned char: lưu các số nguyên dương từ 0 đến 255. Để khai báo một biến là kiểu ký tự thì ta khai báo biến kiểu unsigned char Mỗi số trong miền giá trị của kiểu unsigned char tương ứng với một ký tự trong bảng mã ASCII

1.3 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 (?)

1.4 Kiểu số nguyên 2 bytes (16 bits): Kiểu số nguyên 2 bytes gồm có 4 kiểu sau:

STT Kiểu dữ liệu Miền giá trị (Domain)

1.5 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

1.6 Kiểu unsigned int: Kiểu unsigned int lưu các số nguyên dương từ 0 đến

1.7 Kiểu số nguyên 4 byte (32 bits): 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)

1.8 Kiểu long : Lưu các số nguyên từ -2147483658 đế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ị của biến này có thể là số âm

1.9 Kiểu unsigned long: Kiểu unsigned long lưu các số nguyên dương từ 0 đến

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 1.1 *10 4932

Mỗi kiểu số thực đều có miền giá trị và độ chính xác riêng, đặc biệt là số lẻ Tùy thuộc vào nhu cầu sử dụng, người lập trình có thể lựa chọn khai báo biến thuộc một trong ba kiểu số thực phù hợp Việc lựa chọn kiểu số thực đúng giúp tối ưu hiệu suất và đảm bảo độ chính xác của dữ liệu trong lập trình.

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ị gì cả.

CHÚ THÍCH

Trong lập trình, các dòng bắt đầu bằng hai dấu sổ (//) được xem là chú thích, không ảnh hưởng đến hoạt động của chương trình Chú thích giúp các lập trình viên giải thích hoặc bình luận về mã nguồn một cách dễ hiểu hơn Chúng thường được sử dụng để ghi chú ngắn gọn về mục đích hoặc chức năng của các phần trong mã nguồn, hỗ trợ quá trình phát triển và bảo trì phần mềm.

Trong ngôn ngữ lập trình C, nội dung chú thích phải đƣợc viết trong cặp dấu /* và */.

KHAI BÁO BIẾN

1 Khai báo (định nghĩa) Hằng

#define Tên_Hằng Giá_tri

2 Khai báo (định nghĩa) Biến

Kiểu_Dữ_liệu Danh_sách_Tên_Biến;

Biểu thức là sự kết hợp giữa các toán tử (operator) và các toán hạng (operand) theo một trật tự nhất định, giúp thực hiện các phép tính và logic trong lập trì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, tạo thành cấu trúc phức tạp và đa dạng Hiểu rõ về biểu thức là nền tảng quan trọng để viết mã nguồn chính xác và hiệu quả trong lập trình.

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: (-b + sqrt(Delta))/(2*a)

Trong đó 2 là hằng; a, b, Delta là biến

3.1 Các toán tử số học

Trong ngôn ngữ C, các toán tử +, -, *, / hoạt động giống như trong các ngôn ngữ lập trình khác, có thể được áp dụng cho hầu hết các kiểu dữ liệu có sẵn Khi thực hiện phép chia / với số nguyên hoặc ký tự, phần dư sẽ bị bỏ đi, ví dụ như 5/2 sẽ cho kết quả là 2 trong phép chia nguyên.

% Chia lấy phần dƣ Giảm 1 đơn vị ++ Tăng 1 đơn vị Tăng và giảm (++ & )

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 +

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 lập trình, tiền tố và hậu tố có sự khác biệt quan trọng khi sử dụng trong các biểu thức Khi toán tử tăng hoặc giảm đứng trước toán hạng, C thực hiện phép tăng hoặc giảm trước khi lấy giá trị để sử dụng 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 rồi mới thực hiện phép tăng hoặc giảm Điều này ảnh hưởng đến cách các biểu thức được tính toán trong các ngôn ngữ lập trình như C.

Thứ tự ƣu tiên của các toán tử số học: ++ sau đó là * / % rồi mới đến + -

3.2 Các toán tử quan hệ và các toán tử Logic Ý tưởng chính của toán tử quan hệ và toán tử Logic là đúng hoặc sai Trong C mọi giá trị khác 0 đƣợc gọi là đúng, còn sai là 0 Các biểu thức sử dụng các toán tử quan hệ và Logic trả về 0 nếu sai và trả về 1 nếu đúng

Toán tử Ý nghĩa Các toán tử quan hệ

Bảng chân trị cho các toán tử Logic:

Trong lập trình, các toán tử quan hệ và toán tử Logic có độ ưu tiên thấp hơn các toán tử số học, vì vậy trong một biểu thức như 10 > 1 + 12, phép tính sẽ được thực hiện theo thứ tự: 10 > (1 + 12) Kết quả của biểu thức này là sai (0), do phép tính cộng diễn ra trước phép so sánh.

Ta có thể kết hợp vài toán tử lại với nhau thành biểu thức nhƣ sau: 10>5&&!(10

Ngày đăng: 29/12/2022, 15:01

🧩 Sản phẩm bạn có thể quan tâm