Giáo trình Kỹ thuật lập trình Phần 1 - HV Công nghệ Bưu chính Viễn thông

Giáo trình kỹ thuật lập trình phần 1 cung cấp kiến thức cơ bản và nâng cao về lập trình, giúp người học phát triển kỹ năng lập trình hiệu quả.

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

178
1
0

Phí lưu trữ

45 Point

Tóm tắt

I. Tổng quan giáo trình kỹ thuật lập trình phần 1 của PTIT

Giáo trình Kỹ thuật lập trình phần 1, do TS. Lê Hữu Lập và ThS. Nguyễn Duy Phương biên soạn, là một tài liệu nền tảng dành cho sinh viên ngành Công nghệ thông tin và Điện tử viễn thông. Xuất bản bởi Học viện Công nghệ Bưu chính Viễn thông (PTIT), cuốn sách này tập trung vào việc xây dựng kỹ năng lập trình cấu trúc thông qua các thuật toán quan trọng. Đây không chỉ là một bài giảng kỹ thuật lập trình thông thường, mà còn là kim chỉ nam giúp người học hình thành tư duy lập trình một cách có hệ thống, chuẩn bị cho các môn học chuyên ngành phức tạp hơn. Nội dung giáo trình được thiết kế để dễ tiếp cận, chỉ yêu cầu kiến thức "Tin học cơ bản", giúp sinh viên tự tin bước vào thế giới lập trình chuyên nghiệp.

1.1. Mục tiêu cốt lõi của tài liệu kỹ thuật lập trình

Mục tiêu chính của tài liệu kỹ thuật lập trình này là trang bị cho sinh viên những kiến thức cơ bản và có hệ thống nhất. Giáo trình không chỉ dừng lại ở việc giới thiệu một ngôn ngữ lập trình cụ thể, mà tập trung vào các nguyên lý và phương pháp luận. Cụ thể, cuốn sách nhấn mạnh vào việc làm chủ các cấu trúc lệnh, cấu trúc dữ liệu cơ bản, và các nguyên lý thiết kế chương trình như nguyên lý tối thiểu, nhất quán, và an toàn. Thông qua việc phân tích các ví dụ và bài tập kỹ thuật lập trình có lời giải, người học sẽ hiểu sâu sắc về cách thức hoạt động của chương trình, từ đó có khả năng tự xây dựng và phát triển các sản phẩm phần mềm. Theo lời giới thiệu, mục đích là "cung cấp cho sinh viên những kiến thức cơ bản nhất, có tính hệ thống liên quan tới môn học".

1.2. Đối tượng phù hợp với bài giảng kỹ thuật lập trình này

Giáo trình này được thiết kế chủ yếu cho sinh viên năm đầu thuộc chuyên ngành điện tử viễn thông và công nghệ thông tin. Đây là môn học cơ sở bắt buộc, là bước đệm cho các môn học nâng cao hơn như cấu trúc dữ liệu và giải thuật hay lập trình hướng đối tượng. Tuy nhiên, với cách trình bày rõ ràng và hệ thống, cuốn sách cũng là một ebook kỹ thuật lập trình pdf hữu ích cho bất kỳ ai muốn bắt đầu con đường nhập môn lập trình. Những người tự học, sinh viên các ngành kỹ thuật khác, hoặc lập trình viên muốn củng cố lại kiến thức nền tảng về lập trình C/C++ cơ bản đều có thể tìm thấy giá trị trong tài liệu này. Điều kiện tiên quyết duy nhất là đã hoàn thành môn "Tin học cơ bản", đảm bảo người học có những khái niệm sơ đẳng nhất về máy tính.

II. Thách thức lớn khi tự học kỹ thuật lập trình cho người mới

Việc nhập môn lập trình luôn đi kèm với nhiều thách thức, đặc biệt với những người tự học. Khó khăn không chỉ nằm ở việc ghi nhớ cú pháp của một ngôn ngữ mà còn ở việc xây dựng một tư duy giải quyết vấn đề hoàn toàn mới. Giáo trình kỹ thuật lập trình của PTIT nhận diện rõ những rào cản này và cố gắng giải quyết chúng một cách có hệ thống. Nhiều người học thường bị "khớp" trước sự trừu tượng của các khái niệm, dẫn đến việc học vẹt, sao chép code mà không thực sự hiểu bản chất. Điều này tạo ra một nền tảng kiến thức yếu, gây khó khăn khi phải đối mặt với các bài toán phức tạp trong thực tế.

2.1. Rào cản trong việc xây dựng tư duy lập trình logic

Thách thức lớn nhất là hình thành tư duy lập trình. Đây là khả năng phân rã một bài toán lớn thành các bước nhỏ, logic và tuần tự mà máy tính có thể hiểu được. Người mới bắt đầu thường có xu hướng suy nghĩ theo cách của con người, vốn linh hoạt và đôi khi mơ hồ. Trong khi đó, lập trình đòi hỏi sự chính xác tuyệt đối. Giáo trình đề cập đến vấn đề này qua lịch sử lập trình, khi các phương pháp tuyến tính và việc lạm dụng lệnh GOTO gây ra vô số lỗi khó gỡ. Dijkstra đã khẳng định: "Tay nghề của một lập trình viên tỉ lệ nghịch với số lượng toán tử GOTO mà anh ta sử dụng". Việc nắm vững các cấu trúc điều khiển (tuần tự, rẽ nhánh, lặp) chính là bước đầu tiên để vượt qua rào cản này, xây dựng một lối tư duy mạch lạc và khoa học.

2.2. Sự phức tạp của mảng chuỗi và con trỏ trong C

Các khái niệm về mảng và chuỗi trong lập trình, đặc biệt là con trỏ trong C++, thường là "cơn ác mộng" đối với người mới. Không giống như các biến thông thường lưu trữ giá trị, con trỏ lưu trữ địa chỉ bộ nhớ. Việc thao tác sai với con trỏ có thể dẫn đến các lỗi nghiêm trọng như rò rỉ bộ nhớ hoặc chương trình bị sập mà không có thông báo rõ ràng. Chương 2 của giáo trình tập trung giải quyết vấn đề này bằng cách giới thiệu chi tiết về cấu trúc lưu trữ của mảng, các phép toán trên con trỏ, và mối quan hệ mật thiết giữa con trỏ và mảng. Việc hiểu rõ cách cấp phát bộ nhớ động và giải phóng bộ nhớ là kỹ năng sống còn, giúp lập trình viên quản lý tài nguyên hệ thống một cách hiệu quả.

III. Phương pháp lập trình cấu trúc Nền tảng kỹ thuật cốt lõi

Để giải quyết những thách thức trong lập trình, phương pháp lập trình cấu trúc ra đời như một cuộc cách mạng. Giáo trình kỹ thuật lập trình này dành toàn bộ chương đầu tiên để làm rõ các nguyên lý và phương pháp luận của nó. Cốt lõi của lập trình cấu trúc là việc tổ chức chương trình thành các khối logic, dễ đọc, dễ hiểu và dễ bảo trì, thay vì một chuỗi lệnh tuyến tính hỗn loạn. Việc áp dụng phương pháp này giúp giảm thiểu đáng kể các lỗi logic, đặc biệt là các lỗi phát sinh từ việc sử dụng lệnh nhảy không điều kiện GOTO. Đây là nền tảng vững chắc để tiếp cận các mô hình lập trình phức tạp hơn sau này.

3.1. Các nguyên lý thiết kế Tối thiểu Nhất quán An toàn

Giáo trình nhấn mạnh ba nguyên lý quan trọng. Nguyên lý Tối thiểu khuyên rằng nên bắt đầu với một tập tối thiểu các cấu trúc lệnh và kiểu dữ liệu, nắm vững chúng trước khi mở rộng. Nguyên lý Nhất quán yêu cầu "Dữ liệu thế nào thì phải thao tác thế ấy", tránh các mâu thuẫn giữa cấu trúc dữ liệu và phép toán. Ví dụ kinh điển là phép chia hai số nguyên trong C sẽ cho kết quả là số nguyên, cần ép kiểu tường minh để có kết quả số thực. Nguyên lý An toàn chỉ ra rằng lỗi phải được phát hiện và xử lý sớm, tránh để chúng gây hậu quả nghiêm trọng. Việc hiểu và tuân thủ các nguyên lý này giúp tạo ra mã nguồn chất lượng cao và đáng tin cậy.

3.2. Tư duy thiết kế Top Down và cài đặt Bottom Up

Hai phương pháp này là trụ cột của việc phát triển phần mềm có cấu trúc. Phương pháp Top-Down (Từ trên xuống) là quá trình phân tích bài toán từ tổng thể đến chi tiết. Bắt đầu từ chức năng chính của hệ thống, sau đó phân rã thành các chức năng nhỏ hơn cho đến khi đạt được các đơn vị chương trình (hàm, thủ tục) có thể cài đặt được. Ngược lại, phương pháp Bottom-Up (Từ dưới lên) được áp dụng trong quá trình cài đặt. Lập trình viên sẽ xây dựng và kiểm thử các đơn vị chương trình nhỏ nhất trước, sau đó tích hợp chúng lại thành các module lớn hơn và cuối cùng là toàn bộ hệ thống. Sự kết hợp này đảm bảo cả tính đúng đắn trong thiết kế và tính ổn định trong quá trình hiện thực hóa bài giảng kỹ thuật lập trình.

IV. Hướng dẫn các cấu trúc dữ liệu và giải thuật lập trình C C

Một khi đã nắm vững tư duy lập trình cấu trúc, bước tiếp theo là làm chủ các công cụ để tổ chức và xử lý dữ liệu. Giáo trình kỹ thuật lập trình của PTIT giới thiệu một cách hệ thống các cấu trúc dữ liệu và giải thuật cơ bản, là xương sống của mọi chương trình máy tính. Từ những cấu trúc đơn giản như mảng, ngăn xếp, hàng đợi đến các cấu trúc phức tạp hơn như danh sách liên kết, cây và đồ thị, mỗi chương đều đi kèm với định nghĩa, các thao tác cơ bản và ứng dụng thực tiễn. Việc hiểu rõ ưu và nhược điểm của từng cấu trúc dữ liệu sẽ giúp lập trình viên lựa chọn công cụ phù hợp nhất để giải quyết bài toán một cách tối ưu.

4.1. Khám phá Ngăn xếp Stack Hàng đợi Queue và Danh sách

Chương 4 giới thiệu ba cấu trúc dữ liệu tuyến tính quan trọng. Ngăn xếp (Stack) hoạt động theo nguyên lý LIFO (Last-In, First-Out), giống như một chồng đĩa, rất hữu ích trong các bài toán khử đệ quy, kiểm tra cú pháp biểu thức. Hàng đợi (Queue) hoạt động theo nguyên lý FIFO (First-In, First-Out), mô phỏng một hàng người xếp hàng, được ứng dụng trong lập lịch tiến trình, bộ đệm dữ liệu. Danh sách liên kết (Linked List) cung cấp khả năng lưu trữ động, linh hoạt hơn mảng tĩnh. Mỗi phần tử (node) chứa dữ liệu và một con trỏ trong C++ trỏ tới phần tử tiếp theo, cho phép thêm/xóa phần tử dễ dàng mà không cần dịch chuyển các phần tử khác.

4.2. Tìm hiểu về hàm và đệ quy qua các thuật toán duyệt

Khái niệm hàm và đệ quy là một công cụ mạnh mẽ trong lập trình, được trình bày chi tiết trong Chương 3. Đệ quy là hiện tượng một hàm tự gọi lại chính nó, giúp giải quyết các bài toán có tính chất tự lặp lại một cách thanh lịch, ví dụ như tính giai thừa, dãy Fibonacci. Tuy nhiên, đệ quy có thể tốn bộ nhớ và khó gỡ lỗi. Giáo trình cũng giới thiệu các thuật toán duyệt kinh điển sử dụng đệ quy như thuật toán quay lui (Backtracking). Kỹ thuật này được dùng để giải quyết các bài toán liệt kê tất cả các cấu hình thỏa mãn một điều kiện nào đó, ví dụ như bài toán 8 quân hậu, liệt kê hoán vị. Nắm vững đệ quy là một bước quan trọng để nâng cao khả năng giải quyết vấn đề.

4.3. Giới thiệu Cây nhị phân và các phép duyệt cây cơ bản

Chương 5 mở ra thế giới của các cấu trúc dữ liệu phi tuyến với Cây (Tree), đặc biệt là cây nhị phân. Cây nhị phân là một cấu trúc dữ liệu phân cấp, mỗi nút có tối đa hai nút con, được ứng dụng rộng rãi trong việc lưu trữ dữ liệu có thứ tự (cây nhị phân tìm kiếm), biểu diễn các biểu thức toán học. Tài liệu trình bày chi tiết cách biểu diễn cây bằng mảng và danh sách liên kết. Ba phép duyệt cây cơ bản gồm: duyệt thứ tự trước (Preorder), thứ tự giữa (Inorder), và thứ tự sau (Postorder) là những thuật toán nền tảng. Việc duyệt cây theo thứ tự giữa trên một cây nhị phân tìm kiếm sẽ cho ra một danh sách các phần tử đã được sắp xếp, đây là một ứng dụng quan trọng của cấu trúc dữ liệu và giải thuật.

V. Bí quyết giải bài tập và ôn thi kỹ thuật lập trình hiệu quả

Lý thuyết chỉ là một nửa chặng đường; thực hành mới là chìa khóa để trở thành một lập trình viên giỏi. Giáo trình kỹ thuật lập trình này cung cấp một hệ thống bài tập kỹ thuật lập trình có lời giải phong phú sau mỗi chương, giúp người học củng cố kiến thức và rèn luyện kỹ năng. Việc giải bài tập thường xuyên không chỉ giúp nhớ cú pháp mà còn cải thiện khả năng phân tích vấn đề và lựa chọn giải thuật phù hợp. Quá trình này giúp chuyển hóa kiến thức từ bị động (đọc, nghe) sang chủ động (suy nghĩ, viết code), là bước chuẩn bị quan trọng nhất cho các kỳ thi và các dự án thực tế.

5.1. Phân tích các dạng bài tập lập trình C C cơ bản

Các bài tập trong giáo trình được phân loại rõ ràng theo từng chủ đề. Các dạng bài tập phổ biến bao gồm: bài toán số học (kiểm tra số nguyên tố, phân tích thừa số), bài toán xử lý mảng và chuỗi, bài toán sử dụng con trỏ và cấp phát động, bài toán cài đặt các cấu trúc dữ liệu (Stack, Queue, Linked List), và các bài toán duyệt sử dụng đệ quy (quay lui, nhánh cận). Để giải quyết hiệu quả, người học cần đọc kỹ đề bài, xác định dữ liệu vào (Input) và kết quả ra (Output), sau đó chọn cấu trúc dữ liệu và giải thuật phù hợp. Việc bắt đầu với những bài tập đơn giản rồi tăng dần độ khó là một chiến lược học tập thông minh, giúp xây dựng sự tự tin và tránh cảm giác nản lòng.

5.2. Chiến lược ôn thi kỹ thuật lập trình bách khoa hiệu quả

Để ôn thi kỹ thuật lập trình thành công, một chiến lược hệ thống là rất cần thiết. Đầu tiên, hãy hệ thống hóa lại toàn bộ kiến thức lý thuyết theo từng chương, có thể sử dụng sơ đồ tư duy. Thứ hai, thực hành lại tất cả các ví dụ và bài tập trong giáo trình, cố gắng tự code lại mà không nhìn giải. Thứ ba, tìm kiếm thêm các bộ đề thi từ các năm trước của kỹ thuật lập trình bách khoa hoặc các trường kỹ thuật khác để làm quen với cấu trúc đề và áp lực thời gian. Đặc biệt, hãy chú trọng vào các chủ đề cốt lõi thường xuất hiện trong đề thi như con trỏ trong C++, đệ quy, và cài đặt cấu trúc dữ liệu và giải thuật cơ bản. Luyện tập viết code trên giấy cũng là một kỹ năng quan trọng vì nhiều kỳ thi vẫn được tổ chức theo hình thức này.

VI. Tải Ebook kỹ thuật lập trình PDF và định hướng học tiếp

Hoàn thành giáo trình kỹ thuật lập trình phần 1 là một cột mốc quan trọng, đánh dấu việc bạn đã xây dựng được một nền tảng vững chắc. Tuy nhiên, thế giới lập trình vô cùng rộng lớn và luôn thay đổi. Việc có trong tay các tài liệu chất lượng như slide kỹ thuật lập trình hay các bản ebook kỹ thuật lập trình pdf sẽ giúp quá trình học tập và ôn luyện trở nên thuận tiện hơn. Đây là lúc để nhìn lại chặng đường đã qua và vạch ra một lộ trình học tập rõ ràng cho tương lai, hướng tới việc trở thành một kỹ sư phần mềm chuyên nghiệp.

6.1. Tổng hợp link tải tài liệu slide kỹ thuật lập trình

Để hỗ trợ việc học tập, nhiều nguồn tài liệu quý giá đã được số hóa. Sinh viên và người tự học có thể dễ dàng tìm thấy bản PDF của Giáo trình Kỹ thuật Lập trình của PTIT, cũng như các bài giảng kỹ thuật lập trình dưới dạng slide từ các giảng viên. Các diễn đàn công nghệ, thư viện số của các trường đại học, và các kho Github là những nơi tuyệt vời để tìm kiếm. Việc kết hợp đọc giáo trình, xem slide và tham khảo mã nguồn từ các dự án mở sẽ tạo ra một môi trường học tập đa chiều, giúp hiểu sâu hơn về cách áp dụng lý thuyết vào thực tiễn. Luôn kiểm tra tính xác thực và chất lượng của tài liệu trước khi sử dụng để đảm bảo kiến thức được tiếp thu một cách chính xác.

6.2. Lộ trình tiếp theo Lập trình hướng đối tượng và xa hơn

Sau khi thành thạo lập trình C/C++ cơ bản và lập trình cấu trúc, lộ trình tự nhiên tiếp theo là lập trình hướng đối tượng (OOP). Đây là một mô hình lập trình mạnh mẽ, giúp quản lý các dự án lớn và phức tạp thông qua các khái niệm như Lớp (Class), Đối tượng (Object), Kế thừa, và Đa hình. Các ngôn ngữ như C++, Java, Python đều hỗ trợ mạnh mẽ OOP. Song song đó, việc học sâu hơn về cấu trúc dữ liệu và giải thuật nâng cao (cây cân bằng, bảng băm, đồ thị phức tạp) và các mẫu thiết kế (Design Patterns) sẽ nâng cao đáng kể năng lực của một lập trình viên. Từ đó, bạn có thể đi sâu vào các lĩnh vực chuyên biệt như phát triển web, ứng dụng di động, trí tuệ nhân tạo hay khoa học dữ liệu.

14/07/2025

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

đặt vấn đề mở rộng sang hệ thống thư viện tiện ích của ngôn ngữ. Khi làm quen với một ngôn ngữ lập trình nào đó, không nhất thiết phải lệ thuộc quá nhiều vào hệ thống thư viện hàm của ngôn ngữ, mà điều quan trọng hơn là trước một bài toán cụ thể, chúng ta sử dụng ngôn ngữ để giải quyết nó thế nào, và phương án tốt nhất là lập trình bằng chính hệ thống thư viện hàm của riêng mình. Do vậy, đối với các ngôn ngữ lập trình, chúng ta chỉ cần nắm vững một số các công cụ tối thiểu như sau; 1. Tập các phép toán Tập các phép toán số học: + (cộng); - (trừ); * (nhân); % (lấy phần du); / (chia).

Táp các phép toán số học mở rộng: ++a ®a=a+l; _ //tăng giá trị biến nguyên a lên một đơn vị; -a @a=a-l; // giảm giá trị biến nguyên a xuống một đơn vị; a+=n$®a=a+n; //tăng giá trị biến nguyên a lên n đơn vị; a-=n%®a=a-n; // giảm giá t rị biến nguyên a xuống n đơn vị; a% =n & a=a%n; // lay gid tri biến a modul với n; a/=n®a=a/n; //lấy giá trị biến a chia cho n; a*=n%®a=a*n; //lấy giá trị biến a nhân với n; Chương 1: Đại cương về kỹ thuật lập trình cấu trúc 21 Tập các phép toán so sánh: > (lớn hơn), < (nhỏ hơn), > = (lớn hơn hoặc bằng), <= (nhỏ hơn hoặc bằng), == (đúng bằng), != (khác). | - Qui tắc viết được thể hiện như sau: if(a>b){.} /J nếu a lớn hơn b if(a<b){.} // nếu a nhỏ hơn b if(a>=b) {.} // nếu a lớn hơn hoặc bằng b if(a<=b) {.} // néu a nho hon hoac bang b if(a==b){.} // néu a đúng bằng b if(al=b) {.} // néu a khac b Tp cdc phép toan logic: && (va), |l (hoac), ! (phủ định) &&: Phép và logic chỉ cho giá trị đúng khi hai biểu thức tham gia đều có giá trị đúng (giá trị đúng của một biển thức trong ngôn ngữ lập trình C được hiểu là biểu thức có giá trị khác 0). ll: Phép hoặc logic chỉ cho giá trị sai khi cả hai biểu thức tham gia đều có giá trị sai. !: Phép phủ định cho giá trị đúng nếu biểu thức có giá trị sai và ngược lại cho giá trị sai khi biểu thức có giá trị đúng.

Ngữ nghĩa của các phép toán được minh họa thông qua các câu lệnh sau: Inta=3,b= 5; if((a !=0) && (b !=0)) // néu a khac 0 va b khác 0 if((a != 0) Il (b !=0)) // néu a khac 0 hoac b khac 0 if(a) /¡ phủ định a khác 0 if(a == b) //néu a ding bang b Các toán tử thao tác bit (Không sử dụng cho float và double): &: Phép hội các bịt. |: Phép tuyển các bit. 22 Giáo trình Kỹ thuật lập trình ^: Phép tuyển các bit có loại trừ. << : Phép dịch trái (dịch sang trái n bit gia tri 0) >> : Phép dịch phải (dịch sang phải n bit có giá trị 0) ~: Phép lấy phần bù.

Viết chương trình kiểm tra các toán tử thao tác bit #include <stdio.h> void main(void) { unsigned int a = 3, b = 5, c; clrser(); ec=a&b; printf(\nc =a & b = %d”, c); c=a|b; printf“n e = a |b = %d”, c); c=a^b;printf(*nc=a^b = %d”, c); c¢ = ~a; printf(‘\n c = ~a = %d”, c); c=a <<b; printf(‘\n c =a << b = %d”, c); c=a>>b; printf(\nc=a>>b=%d’",c); getch(); Toán tử chuyển đổi kiểu: Ta có thể dùng toán tử chuyển đồi kiểu để nhận được kết quả tính toán như mong muốn. Qui tác chuyển đổi kiểu được thực hiện theo qui tắc: (kiểu) biến. Tính giá trị phép chia hai số nguyên a và b #include <stdio.h> Chương 1: Đại cương về kỹ thuật lập trình cấu trúc 23 void main(void) int'a = 3, b = 5; float c; Cc = (float) a/ (float) b; printf(\n thương c = a/b = %8.2f”, c); getch(); Thứ tự ưu tiên các phép toán: Khi viết một biểu thức, chúng ta cần lưu ý tới thứ tự ưu tiên tính toán các phép toán, các bảng tổng hợp sau đây phản ánh trật tự ưu tiên tính toán của các phép toán số học và phép toán so sánh. Bảng dưới đây tổng hợp thứ tự ưu tiên tính toán các phép toán số học và so sánh.

Tên toán tử Chiều tính toán 0. 24 i Giáo trình Kỹ thuật lập trình 1. Tập các lệnh vào ra cơ bản Nhập dữ liệu từ bàn phím: scanf(“format_string, .); Nhập dữ liệu từ tệp (file): fscanf(file pointer, 'format_string, &parameter, .); Nhận một ký tự từ bàn phím: getch(); getchar(); Nhận một ký tự từ tệp: fgetc(file_pointer, character_name); Nhập một string (xâu) từ bàn phím: gets(string_name); Nhận một string từ tệp text (văn bản): fgets(string name, number_character, file_ pointer); Xuất dữ liệu ra màn hình: printf('format_string.); Xuất dữ liệu ra tệp: fprintf(file_pointer, “format_string .”, parameter an, Xuất một ký tự ra màn hình: putch(character_name); Xuất một ký tự ra tệp: fputc(file_pointer, character_name); Xuất một string ra màn hình: puts(const_string_name); Xuất một string ra t€p: fputs(file_pointer, const_string_name), 1. Thao tác trên các kiểu dữ liệu có cấu trúc 1.

Tập thao tác trên string + Cách tổ chức string và các thao tác trén string: char *strchr(const char *s, int c): tìm ký tự c đầu tiên xuất hiện trong Xxâu S; char *stpcpy(char *dest, const char *src): copy xâu src vào dest; int stremp(const char *s1, const char *s2): so sánh hai xâu s1 và s2 theo thứ tự từ điển, nếu s1 < s2 thì hàm trả lại giá trị nhỏ hơn 0. Nếu sl > s2 ham tra lại giá trị dương. Nếu sI == s2 ham tra lại giá trị 0. Chương 1: Đại cương về kỹ thuật lập trình cấu trúc 25 char *strcat(char *dest, const char *src): thêm xâu src vào sau xâu dest, char *strlwr(char *s): chuyển xâu s từ ký tự in hoa thành ký tự in thường.

char *strupr(char *s): chuyển xâu s từ ký tự thường hoa thành ký tự in hoa. char *strrev(char *s): dao nguoc xau s. char *strstr(const char *s1, const char *s2): tìm vị trí đầu tiên của xâu s2 trong xau s1. int strlen(char *s): cho độ dài của xâu ký tự s.

Tập thao tác trên con trỏ Thao tác lấy địa chỉ của biến: &parameter_name; Thao tác lấy nội dung biến (biến có kiểu cơ bản): *bointer_name; Thao tác trỏ tới phần tử tiếp theo: ++pointer_name; Thao tác trỏ tới phần tử thứ n kể từ vị trí hiện tại: pointer_name = pointer_name +n; Thao tác trỏ tới phần tử sau con trỏ kể từ vị trí hiện tại: --pointer_ name; Thao tác trỏ tới phần tử sau n phần tử kể từ vị trí hiện tại: pointer_name = pointer_name - n; Thao tác cấp phát bộ nhớ cho con trỏ: void *malloc(size_t size); void *calloc(size_t nitems, size_t size); Thao tác cấp phát lại bộ nhớ cho con trỏ: void *realloc(void *block, size_t size); Thao tác giải phóng b6 nhé cho con tro: void free(void *block); 3. Táp thao tác trên cấu trúc Định nghĩa cấu trúc: 26 Giáo trình Kỹ thuật lập trình struct struct_name { type_ 1 parameter_name_ 1; type_2 parameter_name_2; type_k parameter_name_k; } struct_parameter_name; Phép truy nhập tới thành phần cấu trúc: stiuct_parameter_name. Phép gán hai cấu trúc cùng kiểu: struct_parameter_name_1 = struct_parameter_name_2; Phép tham chiếu tới thành phần của con tro cấu trúc: pointer_struct_parameter_name - > struct_parameter_name. Tập thao tác trên tệp Khai báo con trỏ tệp: FILE * file_pointer; Thao tác mở tệp theo mode: FILE *fopen(const char *filename, const char *mode); Thao tác đóng tệp: int fclose(FILE *stream); Thao tác đọc từng dòng trong tệp: char *fgets(char ˆs, int n, FILE *stream); Thao tác đọc từng khối trong tệp: size_tfread(void *ptr, size_t size, size_t n, FILE “stream); Thao tác ghi từng dòng vào tệp: int fputs(const char *s, FILE *stream); Thao tác ghi từng khối vào tệp: size_t fwrite(const void “ptr, size_t size, size_tn, FILE *stream); Thao tác kiểm tra sự tồn tại của tệp: int access(const char “filename, int amode); Thao tác đổi tên tệp: int rename(const char *oldname, const char = “newname); Thao tác loại bỏ tệp: int unlink(const char *filename); Chương 1: Đại cương về kỹ thuật lập trình cấu trúc 27 1.

NGUYÊN LÝ ĐỊA PHƯƠNG Các biến địa phương trong hàm, thủ tục hoặc chu trình cho dù có trùng tên với biến toàn cục thì khi xử lý biến đó trong hàm hoặc thủ tục vẫn không làm thay đổi giá trị của biến toàn cục. Tên của các biến trong đối của hàm hoặc thủ tục đêu là hình thức. Mọi biến hình thức truyền theo trị cho hàm hoặc thủ tục đêu là các biến địa phương. Các biến khai báo bên trong các chương trình con, hàm hoặc thủi tục đều là biến địa phương.

Khi phải sử dụng biến phụ nên dùng biến địa phương và hạn chế tối đa việc sử dụng biến toàn cục để tránh xảy ra các hiệu ứng phụ. Ví dụ hoán đổi giá trị của hai số a và b sau đây sẽ minh họa rõ hơn về nguyên lý địa phương. Hoán đổi giá trị của hai biến a và b.h> int a, b; /J khai báo a, b là hai biến toàn cục. : Giáo trình Kỹ thuật lập trình } void main(void) { a=1;b=8; /I khởi đầu giá tri cho biến toàn cục a, b.

Swap(); printf(“n Kết quả sau khi thực hiện thủ tục a = %5d b = %5d”, a, b); getch(); Két qua thuc hién chuong trinh: Kết quả thực hiện trong thủ tục a = 5 b = 3 Kết quả sau khi thực hiện thủ tục a = 1b =8 Trong ví dụ trên a, b là hai biến toàn cục, hai biến a, b trong thủ tục Swap là hai biến cục bộ. Các thao tác trong thủ tục Swap gán cho a giá trị 3 và b giá trị 5 sau đó thực hiện đổi giá trị của a = 5 và b = 3 là công việc xử lý nội bộ của thủ tục mà không làm thay đổi giá trị của biến toàn cục của a, b sau thi thực hiện xong thủ tục Swap. Do vậy, kết quả sau khi thực hiện Swap a = 1, b = 8; điều đó chứng tỏ trong thủ tục Swap chưa bao giờ sử dụng tới hai biến toàn cục a và b. Tuy nhiên, trong ví dụ sau, thủ tục Swap lai lam thay đổi giá trị của biến toàn cục a và b vì nó thao tác trực tiếp trên biến toàn cục.

Đổi giá trị của hai biến a và b #include <stdio.h> int a, b; II khai báo a, b là hai biến toàn cục. void Swap(void) { int temp; /! khai báo a, b là hai biến địa phương a=3;b=5; // gan gia trị cho a và b Chương 1: Đại cương về kỹ thuật lập trình cấu trúc 29 temp = a; a = b; b = temp; 1I đổi giá trị của a và b printf("n Kết quả thực hiện trong thủ tục a = %5d b = %5d", a, b); } void main(void){ a=1; be 8; JJ khởi đầu giá trị cho biến toàn cục a, b.

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