Download Giáo trình Kỹ thuật Lập trình C Căn bản đến Nâng cao - NXB Bách Khoa HN

Giáo trình nghiên cứu kỹ thuật lập trình c căn bản nâng cao phần 1, trình bày lý thuyết rõ ràng, minh họa ví dụ thực tế, phù hợp sinh viên kỹ thuật.

Trường đại học

Trường Đại Học Kỹ Thuật

Chuyên ngành

Kỹ Thuật Lập Trình

Người đăng

Ẩn danh

Thể loại

Giáo Trình

2023

202
3
0

Phí lưu trữ

55 Point

Tóm tắt

I. Tổng quan giáo trình kỹ thuật lập trình C cho người mới

Giáo trình kỹ thuật lập trình C là một tài liệu nền tảng, được biên soạn dựa trên nhiều năm kinh nghiệm giảng dạy của các tác giả uy tín. Ngôn ngữ lập trình C, ra đời vào thập niên 70 tại Bell Labs, ban đầu được tạo ra để viết hệ điều hành UNIX. Tuy nhiên, với sức mạnh và sự linh hoạt, C đã nhanh chóng trở thành một trong những ngôn ngữ phổ biến nhất toàn cầu. Tại Việt Nam, C thường là ngôn ngữ lập trình đầu tiên được giảng dạy trong chương trình đào tạo công nghệ thông tin. Việc học lập trình C không chỉ giúp trang bị kiến thức cơ bản về lập trình mà còn là bước đệm vững chắc trước khi tiếp cận các ngôn ngữ bậc cao hơn như C++ hay Java. Cuốn sách này được thiết kế để phục vụ sinh viên và cả những người trong các ngành khoa học kỹ thuật khác cần một tài liệu lập trình C đáng tin cậy. Nội dung bao quát từ những khái niệm sơ đẳng nhất đến các kỹ thuật nâng cao, giúp người học xây dựng một hệ thống kiến thức toàn diện và có hệ thống. Đây là một ebook kỹ thuật lập trình C không thể thiếu cho những ai muốn bắt đầu sự nghiệp lập trình một cách bài bản. Giáo trình cung cấp một lộ trình học tập rõ ràng, bắt đầu từ việc giới thiệu môi trường lập trình, các khái niệm cơ bản như biến, kiểu dữ liệu, cho đến các cấu trúc điều khiển phức tạp hơn.

1.1. Lịch sử và tầm quan trọng của ngôn ngữ lập trình C

Ngôn ngữ lập trình C được phát triển bởi Dennis Ritchie tại Bell Labs. Theo GS. Phạm Văn Ất, mục đích ban đầu của nó là "để viết hệ điều hành UNIX". Sức mạnh của C nằm ở khả năng tương tác gần gũi với phần cứng, hiệu suất cao và cú pháp rõ ràng. Chính vì những ưu điểm này, C không chỉ giới hạn trong lập trình hệ thống mà còn được ứng dụng rộng rãi trong lập trình ứng dụng, giải quyết bài toán khoa học kỹ thuật. Tại nhiều trường đại học, C được chọn làm ngôn ngữ nhập môn lập trình vì nó giúp sinh viên hiểu sâu sắc về cách máy tính hoạt động, cách quản lý bộ nhớ và các cấu trúc dữ liệu cơ bản. Nắm vững ngôn ngữ lập trình C là một lợi thế cạnh tranh lớn, tạo nền tảng vững chắc để học các ngôn ngữ lập trình hiện đại khác. Nhiều hệ điều hành, trình biên dịch và ứng dụng hiệu năng cao ngày nay vẫn được xây dựng hoặc có lõi được viết bằng C, minh chứng cho sự bền bỉ và tầm quan trọng không thể thay thế của nó.

1.2. Cấu trúc và mục tiêu của tài liệu lập trình C này

Giáo trình được cấu trúc một cách logic, gồm 15 chương và 13 phụ lục, bao phủ toàn bộ kiến thức từ căn bản đến nâng cao. Mục tiêu chính là trang bị cho người học "những kiến thức cơ bản nhất về lập trình, các kỹ thuật tổ chức dữ liệu". Các chương đầu tập trung vào những khái niệm nền tảng như kiểu dữ liệu, biến, toán tử, và các câu lệnh vào/ra cơ bản. Các chương tiếp theo đi sâu vào các cấu trúc điều khiển, hàm trong lập trình C, con trỏ trong C, cấu trúc, và thao tác với tệp. Một điểm đặc biệt của tài liệu này là phần phụ lục vô cùng phong phú, cung cấp hướng dẫn cài đặt môi trường, tra cứu hàm chuẩn, gỡ lỗi chương trình và nhiều kỹ thuật nâng cao khác. Lộ trình này đảm bảo người học, đặc biệt là lập trình C cho người mới bắt đầu, có thể tiếp cận kiến thức một cách tuần tự, từ dễ đến khó, và xây dựng kỹ năng giải quyết vấn đề thông qua các ví dụ và bài tập thực tế.

II. Thách thức khi học lập trình C cho người mới bắt đầu

Việc tiếp cận ngôn ngữ lập trình C đặt ra không ít thách thức cho người mới. Một trong những khó khăn đầu tiên là lựa chọn và cài đặt môi trường phát triển (IDE). Giáo trình đề cập đến Turbo C 2.0 kinh điển nhưng cũng giới thiệu các môi trường hiện đại hơn như Code::Blocks để phù hợp với các hệ điều hành mới. Việc hiểu và tuân thủ các quy tắc cú pháp nghiêm ngặt của C cũng là một rào cản. Chẳng hạn, mỗi câu lệnh phải kết thúc bằng dấu chấm phẩy (;), các khối lệnh được bao trong cặp dấu ngoặc nhọn {}, và việc phân biệt chữ hoa-thường trong tên biến là bắt buộc. Khái niệm con trỏ trong C thường được xem là một trong những chủ đề khó nhất, đòi hỏi sự trừu tượng và hiểu biết sâu về quản lý bộ nhớ. Ngoài ra, việc quản lý bộ nhớ thủ công cũng là một thách thức, nếu không cẩn thận có thể gây ra lỗi rò rỉ bộ nhớ hoặc truy cập sai vùng nhớ. Đối với lập trình C cho người mới bắt đầu, việc gỡ lỗi (debug) chương trình cũng không hề đơn giản, đòi hỏi sự kiên nhẫn và tư duy logic để truy vết lỗi. Vượt qua những thách thức này là bước quan trọng để làm chủ ngôn ngữ lập trình mạnh mẽ này.

2.1. Lựa chọn trình biên dịch C Dev C Code Blocks

Một trong những quyết định đầu tiên khi học lập trình C là chọn một trình biên dịch C và môi trường phát triển tích hợp (IDE). Giáo trình giới thiệu Code::Blocks như một sự thay thế hiện đại cho Turbo C 2.0 truyền thống. Code::Blocks là "mã nguồn mở và miễn phí", có giao diện thân thiện, tích hợp sẵn trình biên dịch và chạy tốt trên các hệ điều hành Windows mới. Ngoài Code::Blocks, các lập trình viên mới cũng có thể lựa chọn Dev-C++, một IDE nhẹ và phổ biến khác. Đối với những ai muốn một công cụ mạnh mẽ và đa năng hơn, Visual Studio Code lập trình C (với các extension phù hợp) là một lựa chọn tuyệt vời. Lựa chọn đúng công cụ giúp quá trình viết mã, biên dịch và gỡ lỗi trở nên dễ dàng hơn, cho phép người học tập trung vào việc hiểu logic thuật toán thay vì vật lộn với các vấn đề kỹ thuật của môi trường.

2.2. Những quy tắc cú pháp cơ bản cần ghi nhớ khi viết code

Cú pháp trong C rất chặt chẽ. Giáo trình nhấn mạnh một số quy tắc quan trọng. Thứ nhất, "Mỗi câu lệnh có thể viết trên một hay nhiều dòng nhưng phải được kết thúc bằng dấu ; (dấu chấm phẩy)". Thứ hai, các lời chú thích (comment) được đặt trong cặp dấu /* */ để giải thích code, giúp người đọc hiểu rõ hơn về chương trình. Thứ ba, việc sử dụng các hàm chuẩn như printf() hay scanf() yêu cầu phải khai báo thư viện tương ứng ở đầu tệp bằng lệnh #include <stdio.h>. Thứ tư, một chương trình C luôn bắt đầu thực thi từ hàm main(). Việc quên một dấu chấm phẩy, viết sai tên hàm, hay không khai báo biến trước khi sử dụng đều là những lỗi phổ biến mà người mới thường gặp. Nắm vững những quy tắc này là điều kiện tiên quyết để viết được những chương trình C chạy đúng.

III. Hướng dẫn nhập môn lập trình C Biến và kiểu dữ liệu

Nền tảng của mọi chương trình máy tính là dữ liệu. Trong C, việc tổ chức và quản lý dữ liệu được thực hiện thông qua các khái niệm về hằng, biến và kiểu dữ liệu. Phần này của giáo trình kỹ thuật lập trình C tập trung vào việc giới thiệu các thành phần cơ bản này. Mọi biến trước khi sử dụng đều phải được khai báo để trình biên dịch biết kiểu dữ liệu của nó là gì và cần cấp phát bao nhiêu bộ nhớ. C cung cấp các kiểu dữ liệu cơ bản bao gồm ký tự (char), số nguyên (int), số thực (float), và số thực có độ chính xác kép (double). Hiểu rõ về biến và kiểu dữ liệu trong C là bước đầu tiên và quan trọng nhất trong hành trình nhập môn lập trình. Việc lựa chọn kiểu dữ liệu phù hợp không chỉ giúp tiết kiệm bộ nhớ mà còn đảm bảo tính chính xác trong các phép tính toán. Giáo trình cũng giải thích chi tiết về phạm vi biểu diễn của từng kiểu dữ liệu, ví dụ kiểu int trong Turbo C 2.0 có giá trị từ -32768 đến 32767. Nắm vững kiến thức này giúp tránh các lỗi tràn số không mong muốn trong quá trình thực thi chương trình.

3.1. Phân loại các kiểu dữ liệu cơ bản int float char

Trong C, dữ liệu được phân loại thành các kiểu chính. Kiểu char dùng để lưu trữ một ký tự đơn, chiếm 1 byte bộ nhớ. Kiểu int dùng cho các số nguyên, chiếm 2 byte và có thể biểu diễn các giá trị trong một khoảng xác định. Khi cần lưu trữ các số nguyên lớn hơn, C cung cấp kiểu long int. Đối với các số có phần thập phân, kiểu float (số thực độ chính xác đơn) và double (số thực độ chính xác kép) được sử dụng. Theo tài liệu, "Một giá trị kiểu char chiếm một byte (8 bit) và biểu diễn được một ký tự thông qua bảng mã ASCII". Việc hiểu rõ sự khác biệt giữa các kiểu dữ liệu này là rất quan trọng. Ví dụ, phép chia hai số nguyên (ví dụ: 11/3) sẽ cho kết quả là phần nguyên (3), trong khi phép chia có sự tham gia của số thực sẽ cho kết quả chính xác hơn.

3.2. Cách khai báo và khởi tạo hằng biến và mảng một chiều

Khai báo là quá trình đặt tên và xác định kiểu cho một đối tượng dữ liệu. Cú pháp khai báo biến rất đơn giản: kiểu_dữ_liệu tên_biến;. Ví dụ: int a, b; hoặc float x;. Biến có thể được khởi tạo giá trị ngay khi khai báo, ví dụ: int b = 20;. Hằng là các giá trị không đổi, có thể được định nghĩa bằng từ khóa const hoặc chỉ thị tiền xử lý #define. Mảng một chiều là một tập hợp các phần tử có cùng kiểu dữ liệu, được truy cập thông qua một tên chung và một chỉ số. Khai báo mảng một chiều có dạng: kiểu_dữ_liệu tên_mảng[kích_thước];. Ví dụ: int a[10]; khai báo một mảng tên a có thể chứa 10 số nguyên. Các phần tử của mảng được đánh chỉ số từ 0. Việc hiểu rõ cách khai báo và sử dụng các cấu trúc dữ liệu cơ bản này là kỹ năng cốt lõi cho mọi lập trình viên.

IV. Bí quyết thực hành với bài tập lập trình C có lời giải

Lý thuyết suông là không đủ để thành thạo lập trình. Thực hành là chìa khóa để củng cố kiến thức và phát triển tư duy giải quyết vấn đề. Giáo trình kỹ thuật lập trình C này cung cấp nhiều code ví dụ C cơ bảnbài tập lập trình C có lời giải để người học có thể áp dụng ngay những gì đã học. Việc phân tích các chương trình mẫu, từ những ví dụ đơn giản nhất như in ra màn hình dòng chữ "Hello, world!" đến các bài toán phức tạp hơn như tính chu vi, diện tích hình tròn, giúp người học làm quen với cấu trúc của một chương trình C hoàn chỉnh. Mỗi ví dụ đều đi kèm giải thích chi tiết từng dòng lệnh, từ việc khai báo thư viện, định nghĩa hàm main(), khai báo biến, cho đến việc sử dụng các hàm nhập xuất. Việc tự tay gõ lại code, biên dịch và chạy thử chương trình sẽ mang lại trải nghiệm thực tế quý báu. Sau đó, việc thử giải quyết các bài tập ở cuối mỗi chương sẽ giúp kiểm tra mức độ hiểu biết và rèn luyện kỹ năng lập trình một cách hiệu quả nhất.

4.1. Phân tích code ví dụ C cơ bản In Hello World

Chương trình "Hello, World!" là điểm khởi đầu kinh điển cho mọi ngôn ngữ lập trình. Trong C, một chương trình đơn giản để in ra dòng chữ "TURBO C HAN HANH LAM QUEN VOI BAN" được trình bày trong giáo trình như sau: #include <stdio.h>, #include <conio.h>, void main() { clrscr(); printf("\n TURBO C HAN HANH"); printf("\n LAM QUEN VOI BAN"); getch(); }. Phân tích ví dụ này, người học sẽ hiểu được cấu trúc tối thiểu của một chương trình C. Dòng #include dùng để thêm các thư viện chuẩn chứa các hàm cần thiết. void main() là hàm chính nơi chương trình bắt đầu thực thi. Hàm printf() là hàm tiêu chuẩn để in dữ liệu ra màn hình, với ký tự \n dùng để xuống dòng. Hàm getch() dùng để tạm dừng màn hình, cho phép xem kết quả trước khi chương trình kết thúc. Hiểu rõ từng thành phần trong code ví dụ C cơ bản này là viên gạch đầu tiên để xây dựng các ứng dụng phức tạp hơn.

4.2. Hướng dẫn nhập xuất dữ liệu với hàm printf và scanf

Tương tác với người dùng là một phần quan trọng của hầu hết các ứng dụng. Trong C, việc này được thực hiện chủ yếu qua hai hàm printf (xuất dữ liệu) và scanf (nhập dữ liệu). Hàm printf sử dụng một chuỗi định dạng và một danh sách các biến để hiển thị thông tin. Ví dụ, printf("\n Chu vi = %f, Dien tich = %f", cv, dt); sẽ in ra giá trị của hai biến cvdt dưới dạng số thực. Ngược lại, hàm scanf đọc dữ liệu người dùng nhập từ bàn phím và lưu vào các biến. Cần lưu ý rằng scanf yêu cầu địa chỉ của biến, do đó phải sử dụng toán tử & trước tên biến, ví dụ: scanf("%f", &r);. Nắm vững cách sử dụng các đặc tả định dạng (%d cho số nguyên, %f cho số thực, %c cho ký tự) trong cả hai hàm này là kỹ năng cơ bản nhưng cực kỳ quan trọng để xây dựng các chương trình có tính tương tác.

V. Phương pháp kiểm soát luồng Cấu trúc rẽ nhánh vòng lặp

Một chương trình không chỉ thực thi các lệnh một cách tuần tự. Để giải quyết các bài toán thực tế, chương trình cần có khả năng đưa ra quyết định và lặp lại các hành động. Đây là lúc các cấu trúc kiểm soát luồng phát huy tác dụng. Giáo trình kỹ thuật lập trình C giới thiệu hai loại cấu trúc điều khiển chính: cấu trúc rẽ nhánh và cấu trúc vòng lặp. Cấu trúc rẽ nhánh if else cho phép chương trình thực thi các khối lệnh khác nhau dựa trên một điều kiện logic là đúng hay sai. Ví dụ, kiểm tra một số là chẵn hay lẻ. Cấu trúc switch-case là một dạng rẽ nhánh khác, hiệu quả khi cần kiểm tra một biến với nhiều giá trị hằng số khác nhau. Trong khi đó, vòng lặp for while trong C được sử dụng để thực thi một khối lệnh lặp đi lặp lại nhiều lần. Vòng lặp for thích hợp khi biết trước số lần lặp. Vòng lặp whiledo-while phù hợp khi việc lặp lại phụ thuộc vào một điều kiện nào đó. Việc thành thạo các cấu trúc này cho phép lập trình viên xây dựng các thuật toán phức tạp và linh hoạt, là cốt lõi của tư duy lập trình.

5.1. Logic rẽ nhánh với câu lệnh if else và switch case

Câu lệnh if-else là công cụ cơ bản nhất để ra quyết định trong C. Nó kiểm tra một biểu thức điều kiện. Nếu biểu thức đúng (giá trị khác 0), khối lệnh bên trong if sẽ được thực thi. Ngược lại, nếu có mệnh đề else, khối lệnh tương ứng sẽ được thực thi. Cấu trúc này có thể lồng vào nhau để xử lý các điều kiện phức tạp. Ví dụ, giải phương trình bậc hai yêu cầu kiểm tra giá trị của delta (lớn hơn 0, bằng 0, hay nhỏ hơn 0) để đưa ra các kết luận khác nhau. Cấu trúc switch-case cung cấp một giải pháp thay thế gọn gàng hơn cho chuỗi if-else if khi cần so sánh một biến với nhiều giá trị cụ thể. Việc sử dụng thành thạo cấu trúc rẽ nhánh if elseswitch-case là nền tảng để tạo ra các chương trình có khả năng phản ứng động với các tình huống khác nhau.

5.2. Tối ưu lặp lại với vòng lặp for while và do while

Vòng lặp là một khái niệm cơ bản trong lập trình, giúp tự động hóa các tác vụ lặp đi lặp lại. Cung cấp ba loại vòng lặp chính: for, while, và do-while. Vòng lặp for while trong C có những đặc điểm riêng. Vòng lặp for thường được sử dụng khi số lần lặp được xác định trước, ví dụ như duyệt qua tất cả các phần tử của một mảng. Cú pháp của nó bao gồm ba phần: khởi tạo, điều kiện lặp, và bước lặp. Vòng lặp while kiểm tra điều kiện trước khi thực hiện thân vòng lặp, do đó thân vòng lặp có thể không được thực hiện lần nào. Vòng lặp do-while thì ngược lại, thực hiện thân vòng lặp ít nhất một lần rồi mới kiểm tra điều kiện. Lựa chọn đúng loại vòng lặp cho từng tình huống cụ thể giúp mã nguồn trở nên rõ ràng, hiệu quả và dễ bảo trì hơn.

VI. Lộ trình học lập trình C và các tài liệu tham khảo hữu ích

Hoàn thành phần một của giáo trình kỹ thuật lập trình C là một cột mốc quan trọng. Người học đã nắm được những khái niệm cơ bản nhất: từ cú pháp, biến, kiểu dữ liệu, toán tử, đến các cấu trúc điều khiển luồng chương trình. Đây là nền tảng vững chắc để tiếp tục khám phá những chủ đề nâng cao hơn. Lộ trình tiếp theo sẽ bao gồm các khái niệm phức tạp và mạnh mẽ như hàm, con trỏ, quản lý bộ nhớ động, cấu trúc (struct), và làm việc với tệp tin. Để quá trình học lập trình C hiệu quả, việc kết hợp giữa lý thuyết trong giáo trình và thực hành liên tục là vô cùng cần thiết. Ngoài cuốn giáo trình chính, việc tìm kiếm thêm các nguồn tài liệu bổ sung như sách, ebook kỹ thuật lập trình C khác, hay các khóa học lập trình C online sẽ giúp mở rộng kiến thức và tiếp cận các phương pháp giải thích khác nhau. Tham gia các cộng đồng lập trình, diễn đàn cũng là một cách tốt để học hỏi kinh nghiệm từ người đi trước và nhận được sự giúp đỡ khi gặp khó khăn. Sự kiên trì và đam mê là yếu tố quyết định để chinh phục ngôn ngữ lập trình đầy thử thách nhưng cũng rất giá trị này.

6.1. Tóm tắt kiến thức nền tảng trong giáo trình phần 1

Phần đầu của giáo trình đã trang bị một bộ công cụ cơ bản cho lập trình viên C. Các kiến thức cốt lõi bao gồm: cấu trúc một chương trình C hoàn chỉnh với hàm main(), cách sử dụng các chỉ thị tiền xử lý như #include#define. Người học đã làm quen với các biến và kiểu dữ liệu trong C, biết cách khai báo, khởi tạo và sử dụng chúng trong các biểu thức. Các phép toán số học, logic và so sánh cũng được giới thiệu. Quan trọng nhất, người học đã biết cách điều khiển luồng thực thi của chương trình thông qua các cấu trúc rẽ nhánh if else và các loại vòng lặp for while trong C. Khả năng nhập xuất dữ liệu cơ bản qua printfscanf cũng đã được hình thành. Đây là toàn bộ kiến thức nền tảng, là điều kiện cần để có thể bắt đầu giải quyết những bài toán lập trình đơn giản.

6.2. Gợi ý khóa học lập trình C online và ebook bổ sung

Để củng cố và đào sâu kiến thức, việc tham khảo thêm tài liệu là rất nên làm. Thị trường hiện có rất nhiều tài liệu lập trình C chất lượng. Các khóa học lập trình C online trên các nền tảng như Coursera, Udemy, hay các kênh YouTube giáo dục cung cấp các bài giảng video trực quan, dễ hiểu. Tìm kiếm các ebook kỹ thuật lập trình C kinh điển như "The C Programming Language" của Brian Kernighan và Dennis Ritchie sẽ mang lại một cái nhìn sâu sắc hơn từ chính những người tạo ra ngôn ngữ. Các trang web như GeeksforGeeks, Stack Overflow là nguồn tài nguyên vô tận cho việc tra cứu, tìm kiếm bài tập lập trình C có lời giải và giải đáp các thắc mắc kỹ thuật. Việc kết hợp nhiều nguồn học liệu sẽ giúp người học có một cái nhìn đa chiều và toàn diện hơn về ngôn ngữ lập trình C.

17/07/2025
Giáo trình kỹ thuật lập trình c căn bản nâng cao phần 1

Trích đoạn nội dung tài liệu

GIÁO TRÌNH KỸ THUẬT LẬP TRÌNH C Căn bản & Nâng cao GIÁO TRÌNH KỸ THUẬT LẬP TRÌNH C Căn bản & Nâng cao Xuất bản theo hợp đồng sử dụng hợp đồng giữa Công ty cổ phần văn hóa Huy Hoàng và tác giả. HUYHOANG Biên mục trên xuất bản phẩm của Thư viện Quốc gia Việt Nam Phạm Văn Ất | Giáo trình kỹ thuật lập trình C: Căn bản và nâng cao / Phạm Văn Ất (ch.), Nguyễn Hiếu Cường, Đỗ Văn Tuấn, Lê Trường Thông. : Bách khoa Hà Nội ; Công ty Văn hoá Huy Hoàng, 2021. Ngôn ngữ lập trình 2.

Giáo trình 005.1330711 - dc23 BKH0073p-CIP © GS. PHAM VAN AT (chi bién ThS. NGUYEN HIEU CƯỜNG © › LÊ TRƯỜNG THONG « 2 ThS. DO VANTUAN < ESE fsa cigia mega ia EEIHiIS EE3RlA“ ERM ties ie HUYHOANG SP, NHÀ XUẤT BẢN BÀCH KHOA HÀ Nội Hướng dẫn tải file Bạn đọc có thể chọn một trong các cách sau: 1.

Truy cập website Huy Hoàng tại địa chỉ huyhoangbook.vn, gõ tên sách vào mục “Nhập để tìm kiếm” và tải file theo link đính kèm. Gõ đúng theo link sau: https://www.vn/products/- giao-trinh-ky-thuat-lap-trinh-c-can-ban-nang-cao 3. Dùng smartphone quét mã QR code: Up aoael Kỹ thuật lập trình C Ngôn ngữ lập trình C (C Programming Language) ra đời vào những năm đầu của thập niên 70 trong một phòng thí nghiệm về lĩnh vực máy tính nổi tiếng vào bậc nhất thế giới - Bell Lab*. C ra đời với mục đích ban đầu rất rõ ràng, là để viết hệ điều hành ƯNIX.

Nhưng rồi, vì những ưu điểm của nó, C đã nhanh chóng vượt raa khỏi giới hạn của phòng, thí nghiệm và lan rộng ra toàn thế giới. Trên thế giới, tại nhiều nước, C được chọn là ngôn ngữ để dạy về một ngôn ngữ lập trình và cài đặt thuật toán. Ở Việt Nam, tại các trường đại học có đào tạo công nghệ thông tin, C được chọn để dạy ngôn ngữ lập trình trước khi dạy các ngôn ngữ khác, như C++, C# hay Java,. Thế nhưng, thực tế, C là một ngôn ngữ lập trình mạnh, nó được các nhà tin học chuyên nghiệp cũng như các lập trình viên, các nhà khoa học sử dụng để lập trình hệ thống, lập trình ứng dụng và giải quyết nhiều bài toán khoa học và kỹ thuật.

- Giáo trình Kỹ thuật lập trình C này được hình thành qua nhiều năm giảng dạy của các tác giả. Ngôn ngữ lập trình C là một môn học cơ sở trong chương trình đào tạo kỹ sư, cử nhân tin học. Ở đây, các sinh viên được trang bị những kiến thức cơ bản nhất về lập trình, các kỹ thuật tổ chức dữ liệu. Để đáp ứng nhu cầu học ngôn ngữ lập trình C của sinh viên cũng như nhu cầu về tài liệu cho mọi người trong nhiều ngành khoa học và kỹ thuật cần nghiên cứu C để giải quyết các bài toán của mình, chúng tôi biên soạn cuốn sách này.

Nội dung cuốn sách gồm 15 chương và 13 phụ lục. * Bell Lab la noi quy tu nhiéu nha khoa học và nghiên củu nổi tiếng, hàng đầu về lính vực máy tính như: Dennis Ritchie - tác giả của và đông tác giả Unix, Bjarne Stroustrup - tac gid C++, Ken Thompson- dong tac gid Unix. {5} Kỹ thuật lập trình C Chương mở đấu. Giới thiệu một môi trường viết mã nguồn khác với Turbo C 2.0 truyền thống, phù hợp hơn với các hệ điều hành Windows đang được dùng phổ biến nhất hiện nay, như Windows 7, Windows 8.

Giới thiệu các khái niệm cơ bản, các chương trình C đơn giản và cách thực hiện chúng trên máy. Trình bày các kiểu dữ liệu, cách biểu diễn các giá trị dữ liệu và cách tổ chức dữ liệu trong biến và mảng, cách xử lý dữ liệu đơn giản nhờ các phép toán, biểu thức và câu lệnh gán. Trình bày về biểu thức và các phép toán. Trình bày các hàm vào ra dữ liệu từ bàn phím, màn hình.

Trình bày về các toán tử rất quan trọng dùng để thể hiện các thuật toán, đó là các toán tử rẽ nhánh, toán tử tạo lập vòng lặp. Trình bày cách tổ chức chương trình thành các hàm, các quy tắc xây dựng và sử dụng hàm. Các vấn để hay và khó ở đây là con trỏ, con trỏ hàm và kỹ thuật đệ quy. Trình bày về một kiểu đữ liệu quan trọng là cấu trúc và hợp.

Cũng sẽ nói về các hàm trên cấu trúc, cấu trúc tự trỏ và danh sách liên kết. Trình bày về việc quản lý màn hình và cách xây dựng cửa sổ. Trình bày các hàm đồ họa để vẽ các hình cơ bản và kỹ thuật tạo _ ảnh chuyển động. Trình bày các thao tác trên tệp như: tạo mới một tệp, ghi đữ liệu từ bộ nhớ lên tệp, đọc dữ liệu từ tệp vào bộ nhớ.

Trình bày về cách lưu trữ dữ liệu và tổ chức bộ nhớ của chương trình. Trình bày các chỉ thị tiền xử lý giúp việc biên soạn, biên dịch chương trình hiệu quả hơn. Trình bày một số ví dụ hay như các hàm đưa thông tin trực tiếp vào bộ nhớ. Trình bày cách sử dụng các hàm viết bằng Assembler trong C.

Phụ lục 1 trình bày quy tắc xuống dòng và sử dụng các kí tự trống khi viết chương trình. Phụ lục 2 có thể dùng để tra cứu các hàm chuẩn thường dùng của C. Phụ lục 3 trình bày các bảng mã ASCH và mã quét. Phụ lục 4 hướng dẫn cách cài đặt Turbo C 2.

Phụ lục 5 giới thiệu chung về môi trường kết hợp của C. Phụ lục 6 trình bày về cách sử dụng hệ soạn thao C ding dé bién soan chương trình gốc. {6} ị Kỹ thuật lập trình C Phụ lục 7 trình bày các dùng menu Project để dịch chương trình viết trên nhiều tệp. Phụ lục 8 hướng dẫn cách dùng trình biên dịch TCC để dịch (từ môi trường DO®S) các chương trình lớn viết trên nhiều tệp.

Phương pháp này cho phép biên dịch các chương trình rất lớn viết trên vài ngàn dòng lệnh. Phụ lục 9 hướng dẫn phương pháp gỡ rối và chạy chương trình từng bước để dò tìm lỗi chương trình. Phụ lục 10 trình bày 6 mô hình bộ nhớ của C. Cũng sẽ nói cách tạo tệp chương trình đuôi COM bằng cách dịch theo mô hình Tïny trong chế độ dòng lệnh TCC, khi biên dịch thường nhận được các tệp chương trình đuôi EXE.

Phụ lục 11 trình bày tóm tắt các hàm của Turbo C theo thứ tự ABC. Phụ lục 12 trình bày cách xây dựng các hàm với số đối bất định, như các ham printf, scanf cla C. Công cụ chủ yếu được dùng là con trỏ và danh sách. Phụ lục 13 trình bày một số chương trình minh họa thuật toán đệ quy kiểu quay lui và thuật toán quy hoạch động có tính chất kinh điển.

Chương trình được tổ chức thành nhiều hàm. Trong quá trình viết, chúng tôi đã cố gắng để giáo trình được hoàn chỉnh, song chắc chắn không tránh khỏi thiếu sót, vì vậy rất mong! nhận được sự góp ý của độc giả để cuốn sách ngày một hoàn thiện hơn. Các tác giả Ghi chú: Mã nguốn các chương trình trong cuốn sách này chỉ có thể chính thức Äược tải về từ website của Nhà sách Huy Hoàng tại: www.vn {7} Kỹ thuật lập trình C_| CODE::BLOCKS Chương này sẽ giới một môi trường viết tmã nguồn khác với Turbo C 2.0 kinh điển, đó là Code::Blocks - nó có dung lượng nhỏ gọn. thân thiện trong viết md, tích hợp trình biên dịch và có giao diện bắt mắt, chạy tốt trên hệ điều hành Windows 7, Windows 8.

GIỚI THIỆU Turbo C 2.0 là môi trường kinh điển để viết mã nguồn, biên dịch và chạy các chương trình đối với lập trình ngôn ngữ C. Nó có tính lịch sử và rất tốt đối với dạy và học. Các chương trình trong cuốn sách này đều được thử nghiệm trên Turbo C 2. | Tuy nhiên, hiện nay hệ điểu hành Windows 7, Windows 8 của hãng Microsoft được sử dụng rộng rãi.

Việc chạy Turbo C 2.0 với màn hình màu xanh trên hệ điểu hành này ít nhiều có tính cổ hủ. Chính vì thế, chúng tôi chọn và giới thiệu thêm một môi trường viết mã, tích hợp biên dịch và chạy khác với Turbo C 2.0 truyền thống, đó là Code::Blocks. Các chương trình trong cuốn sách này chạy trên Code:Blocks hoàn toàn tốt, chỉ có một vài khác biệt nhỏ không đáng kể. Khi biên dịch và chạy chương trình, nếu có lỗi, chúng ta dễ dàng phát hiện và sửa, ví dụ: trong Code::Blocks lệnh clrscr(); không khả dụng, chúng ta xóa hoặc ghi chú dòng lệnh này, thì mã nguồn sẽ chạy bình thường.

Code::Blocks có đặc điểm là mã nguồn mở và miễn phí. Nó có giao diện đẹp và thân thiện hơn nhiều so với Turbo C 2.0 và nó cũng đủ nhỏ nếu so với Visual Studio của Microsoft. CAI DAT Phiên bản Code::Blocks chúng tôi sử dụng ở đây là bản 13. Các phiên bản khác, việc cài đặt hoàn toàn tương tự.

18} | Kỹ thuật lập trình C Code::Blocks The open source, cross-platform IDE 13.12 Sau khi chạy tệp cài đặt. Các hộp thoại của tiến trình cài đặt hiện ra, để mặc định các thông số, lần lượt chọn Next > I Agree > Next > Install > No > Next > Finish. SU DUNG CO BAN 1. Tạo mới một tệp chương trình - Khởi động Code::Blocks.

- Vào File > New > Empty file. Hoac kích chuột trái vào các biểu tượng tương ứng. Hoặc sử dụng tổ hợp phim Cérl + Shift + N. - Viết mã nguồn của chương trình.

- Biên địch và chạy chương trình: Vào Build > Builả and run. Hoặc kích chuột trái vào biểu tượng tương ứng trên thanh công cụ. Hoặc sử dụng phím F9. Xem hình dưới đây.

BE maincitdloweid]-CGdaBiodz1ã “File Edit -View : Search ` Build D: |. wSmith Tools -Tools+ Plugins ro fie % | 8 New file Tao tép mới “ i , ==eee | | main.c x! Projects | | Sym? aa = Dịch và chạy =”T£ 7 rojects #include <stdio.h> FH : Wortspace &)ts-" #includs <stdlib.h> : : Ww Nd ‘ HelloWorld BAH 2 Sources -. 1}a maine int main () a4 Oe print£("Hello world!\n"); return 0; Viết mã “| Lo 2. Mở một tệp chương trình có sẵn.~ Khởi động Code::Blocks.

- Vào File > Open. Hoặc kích chuột trái vào biểu tượng. Open trên thanh công cụ. Hoac ding phim tat Ctrl + O.

- Chọn đến thư mục và tệp cần mở và chon Open. {9} Kỹ thuật lập trình C ` CÁC KHÁI NIỆM CƠ BẢN Trong chương này sẽ giới thiệu những thành phan co ban cha ngôn rigfũ lập trình C (cũng như của bất kỳ ngôn ngũ lập trình nào khác) đó là: tập ký tự, từ khóa và tên.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ