Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 36 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
36
Dung lượng
451 KB
Nội dung
Giáo trình C của Aptech [Elementary Programming With C] Introduction • Hôm nọ thấy có bạn yêu cầu giáo trình của Aptech, tớ sẽ post lên từ từ mỗi ngày một ít. Nhưng vì quyển sách đó rất nhiều nên tớ sẽ cố gắng tóm gọm kiến thức lại có gì thiếu xót một người đóng góp để bổ sung thêm. • Chương trình dạy sẽ bao gồm 22 tiết, cứ 1 bài lý thuyết sẽ kèm theo một bài thực hành và bài tập đi kèm để làm. Và đây là phiên bản tiếng Việt , shinichi_haha stick lên hộ tớ nha • Ở Aptech họ xài borland C version 5, vì chủ yếu là học thuật toán và tư duy của lập trình viên, còn mọi người thích dùng (trình biên dịch)compiler nào là tùy. Session 1. Những khái niệm cơ bản về ngôn ngữ C 2. Biến và Kiểu dữ liệu - Lý Thuyết 3. Biến và kiểu dữ liệu - Thực hành 4. Toán tử và biểu thức - Lý thuyết 5. Toán tử và biểu thức - Thực hành 6. Nhập xuất trong C - Lý thuyết 7. Điều kiện - Lý thuyết 8. Điều kiện - Thực hành 9. Vòng lặp - Lý thuyết 10. Vòng lặp - Thực hành 11. Mảng - Lý thuyết 12. Mảng - Thực hành 13. Con trỏ - Lý thuyết 14. Con trỏ - Thực hành 15. Hàm - Lý thuyết 16. Hàm - Thực hành 17. Chuỗi - Lý thuyết 18. Chuỗi - Thực hành 19. Các kiểu dữ liệu Nâng cao và sắp xếp - Lý thuyết 20. Các kiểu dữ liệu Nâng cao và sắp xếp - Thực hành 21. Quản lý tệp tin - Lý thuyết 22. Quản lý tệp tin - Thực hành Những khái niệm cơ bản về ngôn ngữ C Bài 1 : Những khái niệm cơ bản về ngôn ngữ C Giới thiệu: - Ngày nay, khoa học máy tính thâm nhập vào mọi lĩnh vực. Tự động hóa hiện đang là nghành chủ chốt điều hướng sự phát triển thế giới. Bất cứ nghành nghề nào cũng cần phải hiểu biết ít nhiều về Công nghệ Thông tin và lập trình nói chung. Cụ thể, C là một ngôn ngữ lập trình cấp cao mà mọi lập trình viên cần phải biết. Vì thế, trong giáo trình này, chúng ta sẽ nghiên cứu chi tiết cấu trúc ngôn ngữ C. Đầu tiên chúng ta tìm hiểu sự khác nhau của những khái niệm: Lệnh (Command), Chương trình (Program) và phần mềm (Software). 1 Ra lênh cho máy tính làm việc - Khi một máy tính được khởi động, nó sẽ tự động thực thi một số tiến trình và xuất kết quả ra màn hình. Điều này diễn ra như thế nào? Câu trả lời đơn giản là nhờ vào Hệ điều hành cài đặt bên trong máy tính. Hệ điều hành (operating system) được xem như phần mềm hệ thống. Phần mềm này khởi động máy tính và thiết lập các thông số ban đầu trước khi chuyển giao quyền cho người dùng. Để làm điều đó, hệ điều hành phải được cấu tạo từ một tập hợp các chương trình. Mọi chương trình đều cố gắng đưa ra lời giải cho một hay nhiều vài toán nào đó. Mọi chương trình cố gắng giải quyết một bài toán cụ thể. Một nhóm lệnh tạo thành một chương trình, một nhóm chương trình tạo thành phần mêm - Sơ đồ mối quan hệ giữa 3 khái niệm : câu lênh, chương trình và phần mềm 2 Ngôn ngữ C - Giới thiệu xuât xứ của ngôn ngữ C, cái này có lẽ không quan trọng bỏ qua, ai thích tự tìm hiểu nha 3 Cấu trúc chương trình C - C có một số từ khóa, chính xác là 32. Những từ khóa này kết hợp với cú pháp của C hình thành ngôn ngữ C. Nhưng nhiều trình biên dịch cho C đã thêm vào những từ khóa dùng cho viêc tổ chức bộ nhớ ở những giai đoạn xử lý nhất định. - Vài quy tắc khi lập trình C như sau : + Tất cả các từ khóa là chữ thường. + Đoạn mã trong chương trình C có phân biệt chữ hoa và chữ thường. + Từ khóa không thể dùng cho mục đích khác như đặt tên biến (variable name) hoặc tên hàm (function). + Hàm main() luôn là hàm đầu tiên được gọi đến khi một chương trình bắt đầu chạy. a. Định nghĩa hàm trong C - Chương trình C được chia thành từng đơn vị gọi là hàm. Tên của hàm luôn được theo sau bằng cặp "(" và ")". Trong dấu ngoặc đơn có thể có hay không có những tham số (parameters) b. Dấu phân cách (Delimiter) - Sau định nghĩa hàm sẽ là dấu mở ngoặc xoắn "{". Nó thông báo điểm bắt đầu của hàm. Tương tự, dấu ngoặc xoắn đóng "}" sau cậu lênh cuối trong hàm sẽ chỉ ra điểm kết thúc của hàm. Khối dấu "{" và "}" còn dùng để bao quanh các đoạn mã lênh ở các câu lênh vòng lặp và rẽ nhánh. c. Dấu kêt thúc câu lệnh (Terminator) - Kết thúc mỗi câu lênh trong C luôn phải là dấu chấm phẩy ";". d. Dòng chú thích (Comment) - Trong C cho phép bạn viết những dòng chú thích và nó được đặt trong cặp dấu "/*" và "*/" e. Thư viện C (Library) - Tất cả các trình biên dịch C đều chức một thư viện hàm chuẩn dùng cho những tác vụ chung. Khi lập trình các hàm trong thư viện sẽ được dùng cho nhiều loại tác vụ khác nhau. Một hàm có thể được viết bởi lập trình viên và đặt trong thư viện để tái xử dụng cho nhiều chương trình khác nhau. 4. Biên dịch và thực thi một chương trình (Compiling and Running) - Các bước thực hiện : + Soạn thảo và xử lý từ : dùng một chương trình xử lý văn bản đơn giản để làm, thường thì trình biên dịch có tích hợp sẵn luôn cho ta. + Mã nguồn : chính là đoạn văn bản mà lập trình viên viết ra, nó là đầu vào của trình biên dịch. + Bộ tiền xử lý C : bộ tiền xử lý C khai triển các chỉ thị tiền biên dịch và đưa ra kết quả. Nó gọi là mã nguồn mở rộng, sau đó nó sẽ chuyển qua cho trình biên dịch. + Trình biên dịch C :chương trình sẽ biên dịch mã nguồn mở rộng ở bộ tiền xử lý C. + Bộ liên kết : khi biên dịch một trình lớn trình biên dịch sẽ xử lý từ cái và liên kết lại với nhau để cho ra mã thực thi (chính là chương trình đã lập trình xong) + Bộ nạp (Loader) : mã thực thi sẽ được thi hành bới bộ nạp của hệ thống. - Sơ đồ chi tiết : Biện dich và thưc thi một chương trình. 5. Các bước lập trình giải quyết vấn đề - Chính la giải thuật đó, tìm hiểu thêm trong diễn đàn nha 6. Mã giả (pseudo code) - Tóm lược ngắn gọn thế này nha, mã giả không phải là mã thật. Nó được viết trên giấy để trình bày giải thuật của lập trình viên. Có thể nói nôm là nó là ngôn ngữ trung để trình bảy giải thuật. Nó thường được viết bằng một số từ ngữ tiếng anh thông dụng như (BEGIN, END, DISPLAY, DO, WHILE, FOR, IF, ELSE, ) 7. Lưu đồ (Flowcharts) - Cũng tương tự như mã giả nhưng thay vì trình bày bằng văn bản, ở đây ta trình bày theo các hình vẽ được quy đinh sẵn. Cùng với các ký hiệu riếng chuyên cho việc vẽ lưu đồ giải thuật lập trình. - Một số hình vẽ lưu đồ : Sẽ cập nhập ảnh sau Kết thúc bài 1 Bài tập tự làm 1. Viết chương trình mã giả và vẽ một lưu đồ để nhập một giá trị là độ *C (Celsius) và chuyển nó sang độ *F (Fahrenheit) [Hướng dẫn C/5 = (F-32)/9] 2. Viết một đoạn mã giả và vẽ lưu đồ để nhập điểm của một sinh viên cho các môn : vật lý, hóa học và sinh học. Sau đó hiển thị điểm trung bình của tổng điểm này Bài 2 : Biến và Kiểu dữ liệu - Lý Thuyết Giới thiệu: - Bất cứ chương trình ứng dụng nào cần xử lý dữ liệu cũng cần có nơi để lưu trữ tạm thời dữ liệu ấy. Nơi mà dữ liệu được lưu trữ gọi là bộ nhớ. Những vị trí khác nhau trong bộ nhớ có thể được xác định bởi các địa chỉ duy nhất. Những ngôn ngữ lập trình trước đây yêu cầu các lập trình viên quản lý mỗi vị trí ô nhớ thông qua địa chỉ, cũng như giá trị lưu trong nó. Các lập trình viên dùng những địa chỉ này để truy cập hoặc thay đổi nội dung của các ô nhớ. Khí ngôn ngữ lập trình phát triển, việc truy cập hay thay đổi giá trị ô nhớ đã được đơn giản hóa nhờ sự ra đời của khái niệm biến. 1. Biến (variable) - Một chương trình ứng dụng có thể quản lý nhiều loại dữ liệu. Trong trường hợp này, chương trình phải chỉ định bộ nhớ cho mỗi đơn vị dữ liệu. Khi chỉ định bộ nhớ, có hai điểm cần lưu ý như sau : + Bao nhiêu bộ nhớ sẽ được gán. + Mỗi đơn vị dữ liệu được lưu trữ ở đâu trong bộ nhớ. - Trước đây, các lập trình viên phải viết chương trình theo ngôn ngữ máy 1 và 0. Nếu muốn lưu giữ một giá trị tạm thồi, vị trí chính xác nơi mà dữ liệu được lưu trữ trong bộ nhớ máy tính phải được chỉ định. Vị trí này là một con số cụ thể, gọi là địa chỉ bộ nhớ. - Các ngôn ngữ lập trình hiện đại cho phép chúng ta sử dụng các tên tượng trưng gọi là biên (variable), chỉ để một vùng bộ nhớ nơi mà các giá trị cụ thể được lưu trữ. - Kiểu dữ liệu quyết định tổng số bộ nhớ được chỉ định. Những tên được gán cho biên giúp chúng ta sử dụng lại dữ liệu khi cần đến. Không giới hạn về số vị trí bộ nhớ mà một chương trình có thể dùng. - Trong khi một số ngôn ngữ lập trình cho phép hệ điều hành xóa nội dung trong ô nhớ và cấp phát bộ nhớ này để dùng lại thì những ngôn ngữ khác như C yêu cầu lập trình viên xóa vùng nhớ không sử dụng thông qua mã chương trình. Trong cả hai trường hợp hệ điều hành sẽ lo việc cấp phát và thu hồi ô nhớ. 2. Hằng (constant) - Trong trường hợp ta dùng biến, giá trị được lưu sẽ thay đổi. Một biến tồn tại từ lúc khai báo đến khi thoát khỏi phạm vi dùng nó. Những câu lênh trong phạm vi khối mã này có thể truy cập giá trị của biến, và thậm chí có thể thay đổi giá trị của biến. Trong thực tế, đôi khi cần sử dụng môt vài khoản mục mà giá trị của chúng không bao giờ bị thay đổi. - Và một hằng là một giá trị không bao giờ bị thay đổi. 3. Định danh (Identifier) - Tên của các biến (variable), các hàm (functions), các nhãn (labels) và các đổi tượng khác nhau do người dùng định nghĩa gọi là đinh danh. Những định danh này có thể chứa một hay nhiều ký tự. Ký tự đầu tiên của định danh phải là một chữ cái hay một dấu gạch dưới "_". Các ký tự tiếp theo có thể là các chữ cái, các con số hay dấu gạch chân. - Các nguyên tắc cho việc đặt tên : + Tên biến phải bắt đầu bằng một ký tự chữ cái. + Các ký tự theo sau ký tự đầu bằng một chuỗi các chữ cái hoặc con số và cũng có thể bao gồm ký tự đặc biệt như dấu gạch dưới. + Tránh dùng ký tự O tại những vị trí mà có thể gây nhầm lẫn với số 0 và tương tự chữ cái l (chữ thường của chữ hoa L) có thể nhầm lẫn với số 1. + Tên riêng tránh đặt cho biến. + Theo tiêu chuẩn của C các chữ cái thường và hoa thi xem như khác nhau. + Việc phân biệt chữ hoa chữ thường khác nhau tùy theo ngôn ngữ lập trình. Do đó, tốt nhất nên đặt tên cho biến theo cách thức chuẩn. + Tên một biến nên có ý nghĩa, gợi tả và mô tả rõ kiểu dữ liệu của nó. 4. Từ khóa (keywords) - Tất cả các ngôn ngữ dành một số từ nhất định cho mục đích riêng. Những từ này có một ý nghĩa đặc biệt trong ngữ cảnh của từng ngôn ngữ, và được xem là "từ khóa". Khi đặt tên cho các biến, chúng ta cầm bảo đảm rằng không dùng bất cứ từ khóa nào làm tên biến. - Tên kiểu dữ liệu tất cả được coi là từ khóa. 5. Các kiểu dữ liệu (Data types) - Có các loại kiểu dữ sau được lưu trữ trong biến ở trong C là : + int là một số nguyên, về cơ bản nó biểu thị kich cỡ tự nhiên của các số nguyên (integers). + float và double được dùng cho các số có dấu chấm động. Kiểu float (số thực) chiếm 4 bytes và có thể có tới 6 con số phần sau dấu thập phân, trong khi double chiếm 8 bytes và có thể có tới 10 con số phần thập phân. + char chiếm 1 byte và có khả năng lưu một ký tự đơn (character). + void được dùng điển hình để khai báo biến một hàm không trả về giá trị. Điều này sẽ được nói rõ hơn trong phần hàm. - Dung lượng nhớ và phạm vi giá trị của những kiểu này thay đổi theo mỗi loại bộ xử lý và việc cài đặt các trình biên dịch C khác nhau. - Những kiểu dữ liệu cơ bản và dẫn xuất. Đó là những bổ từ (modifier) được sử dụng để thay đổi kiểu dữ liệu cơ bản nhằm phù hợp với các tình huống đa dạng. Ngoại trừ kiểu void, tất cả các kiểu dữ liệu khác có thể cho phép những bổ tự đứng trước chúng. Bổ từ được sử dụng với C là: + signed, unsigned, long và short, long, double. + signed : có dấu, unsigned : không dấu + long : tăng chiều *** của miền giá trị, double : gấp đôi miền giá trị. - Các kiểu dữ liệu và pham vi. 6. Các toán tử số học (Arithmetic Operators) - Những toán tử số học được sử dụng để thức hiện những thao tác mang tính số học. Chúng được chia thành hai lớp : Toán tử số học một ngôi (unary) và toán tử số học hai ngôi (binary). - Các toán tử số học và chức năng của chúng. Hết bài thứ 2 Bài tập tự làm - Tính giá trị của các biến sau mỗi câu lệnh dưới đây. a. int a = 4^4 b. int a = 23.34 c. a = 10 b = a + a++ d. a = -5 b = -a Bài 3 : Biến và kiểu dữ liệu - Thực hành Ví dụ 1: Code: #include <stdio.h> void main() { int principal, period; float rate, si; principal = 1000; period = 3; rate = 8.5; si = principal * period * rate / 100; printf("%f", si); } Ví dụ 2: Code: #include <stdio.h> void main() { int a, b, c, sum; printf("\nEnter any three numbers: "); scanf("%d %d %d", &a, &b, &c); sum = a + b + c; printf("\n Sum = %d", sum); } Bắt buộc - Viết một chương trình nhập vào một số và tính bình phương của số đó. - Hướng dẫn: + Nhập vào một số. + Nhân số đố với chính nó và hiển thị kết quả đó. Kết thúc bài 3 Bài tập tự làm 1. Viết chương trình tính diện tích và chu vi của một vòng tròn. 2. Viết chương trình nhập lương và tuổi của mỗi ngừoi và hiển thị các số vừa nhập đó ra màn hình. Bài 4 : Toán tử và biểu thức - Lý thuyết Giới thiệu - C có một tập các toán tử phong phú. Toán tử là công cụ để thao tác dữ liệu. Một toán tử là một ký hiệu dùng để đại diện cho một thao tác cụ thể nào đó được thực hiện trên dữ liệu. C định nghĩa bốn loại toán tử: + Toán tử số học (arithmetec). + Toán tử quan hệ (relational). + Toán tử luận lý (logical). + Toán tử luận lý nhị phân (bitwise). - Toán tử thao tác trên hằng hoặc biến. Hằng hoặc biến này được gọi là toán hạng (operands). Toán tử được phân loại theo toán tử một ngôi, hai ngôi và ba ngôi. Toán tử một ngôi chỉ thao tác trên một phần tử dữ liệu, toán tử hai ngôi trên hai phần tử dữ liệu và ba ngôi trên ba phần tử dữ liệu. 1. Biểu thức (Expressions) - Một biểu thức là tổ hợp các toán tử và toán hạng. Toán tử thực hiện các thao tác như cộng, trừ, so sánh Toán hạng là những biến hay những giá trị mà các phép toán được thực hiện trên nó. [...]... c u lệnh ho c một chuỗi c c lệnh C cũng cho phép ta lựa chọn trong hai khối lệnh để th c hiện bằng c ch dùng c u tr c if else C pháp như sau: Code: if (biểu th c) { c u lệnh 1; } else { c u lệnh 2; } - Nếu biểu th c điều kiện trên đúng (kh c 0), c u lệnh 1 đư c th c hiện Nếu nó sai (kh c 0) c u lệnh 2 đư c th c hiện C u lệnh sau if và else c thể là lệnh đơn ho c lệnh ph c C c câu lệnh đó nên đư c. .. danh sách trùng với giá trị c a biểu th c điều kiện, c c câu lệnh gắn với giá trị đó sẽ đư c th c hiện C pháp tổng quát c a lệnh switch như sau: Code: switch (biểu th c) { case hằng 1: chuỗi c u lệnh; break; case hằng 2: chuỗi c u lệnh; break; case hằng 2: chuỗi c u lệnh; break; default: chuỗi c u lệnh; } - Ở đó, switch, case và default là c c từ khóa, "chuỗi c u lệnh" c thể là lệnh đơn ho c lện ghép... lệnh khởi tạo hay c c lệnh thay đổi giá trị c a biến C pháp như sau: Code: Biểu_th c_ 1, Biểu_th c_ 2 - C c biểu th c trên đư c phân tách bởi toán tử phẩy ",", và đư c th c hiên từ trái sang phải Thứ tự c a c c biểu th c là quan trọng trong trường hợp giá trị c a biểu th c thứ hai ph c thu c vào giá trị c a biểu th c thứ nhất Toán tử này c độ ưu tiên thấp nhất trong c c toán tử c a C 3 Vòng lặp "for"... biểu th c số h c sẽ đư c th c hiện từ trái sang phải cho c c toán tử c ng độ ưu tiên Toán tử *, / , và % c c ng độ ưu tiên và cao hơn + và - (hai ngôi) - Độ ưu tiên c a những toán tử này c thể đư c thay đổi bằng c ch sử dụng dấu ngo c đơn Một biểu th c trong ngo c luôn luôn đư c tính toán trư c C c cặp dấu ngo c đơn c thể đư c bao *****g nhau, và vi c tính toán đư c th c hiện ở những c p trong c ng... 555.55); } 4 scanf() - Hàm scanf() đư c sử dụng để nhập dữ liệu Khuôn dạng chung c a hàm scanf() như sau: Code: scanf("Chuỗi c c định dạng","Danh sách c c tham số"); - Định dạng đư c sử dụng bên trong c u lệnh printf() c ng đư c sử dụng c ng c pháp trong c c câu lệnh scanf() Những lệnh định dạng, bao gồm bổ từ và danh sách tham số đư c bàn luận cho printf() thì c ng hợp lệ cho scanf(), chúng tuân theo... và không c n đặt trong c p dấu ngo c "biểu th c" theo sau từ khóa switch phải đư c đặt trong dấu ngo c (), và toàn bộ phần thân c a lệnh switch phải đư c đặt trong c p ngo c nhọn {} Kiểu dữ liệu kết quả c a "biểu th c" và kiểu dữ liệu c a c c hằng theo sau từ khóa case phải đồng nhất Chú ý, hằng số sau case chỉ c thể là một hằng số nguyên ho c hằng ký tự Nó c ng c thể là c c hằng biểu th c - những... trình nào Để tạo tính hữu ích, chương trình c a bạn c n c khả năng nhập dữ liệu vào và hiển thị lại những kết quả c a nó - Trong C, thư viện chuẩn cung c p những thủ t c cho vi c nhập xuất Thư viện chuẩn c những hàm quản lý c c thao t c nhập/ xuất c ng như c c thao t c trên ký tự và chuỗi Trong bài h c này, tất c những hàm dùng để đ c dữ liệu vào từ thiết bị nhập chuẩn và tất c những hàm xuất dùng... t c giống nhau, theo c ch th c giông nhau Trong khi đó, chúng ta thường xuyên chỉ cho phép th c hiện c c thao t c nhất định nếu nó thỏa mãn điều kiện đặt ra 1 C u lênh điều kiện là gì? - C c câu lện điều kiện cho phép chúng ta thay đổi luồng chương trình Dựa trên một điều kiện đó, một c u lệnh hay một chuỗi c c câu lệnh c thể đư c th c hiện ho c không Hầu hết c c ngôn ngữ lập trình đều sử dụng lênh... biểu th c với c c giá trị sau: z = a*b+ (c/ d) -c* f; a = 10 b=7 c = 15.75 d=4 e=2 f = 5.6 3 Viết một chương trình tính diện tích và chu vi c a hình chữ nhật 4 Viết một chương trình tính thể tích hình trụ 5 Viết một chương trình tính lương th c lãnh c a một nhân viên theo c ng th c dưới đây Lương c bản : $ 12000 DA : 12% lương c bản HRA : $150 TA : $120 C c m c kh c : $450 Thuế : PF: 14% lương c bản... đ c điểm sau: + Sự kh c nhau trong danh sách tham số giữa printf() và scanf(): Hàm printf() dùng c c tên biến, hằng số, hằng chuỗi và c c biểu th c, nhưng scanf() sử dụng những con trỏ tới c c biến Một con trỏ tới một biến là một m c dữ liệu ch c đựng địa chỉ c a nơi mà biến đư c cất giữ trong bộ nhớ Những con trỏ sẽ đư c bàn luận chi tiết ở chương sau Khi sử dụng scanf() c n tuân theo những quy tắc . tự đầu tiên c a định danh phải là một chữ c i hay một dấu gạch dưới "_". C c ký tự tiếp theo c thể là c c chữ c i, c c con số hay dấu gạch chân. - C c nguyên t c cho vi c đặt tên : +. tự chữ c i l (chữ thường c a chữ hoa L) c thể nhầm lẫn với số 1. + Tên riêng tránh đặt cho biến. + Theo tiêu chuẩn c a C c c chữ c i thường và hoa thi xem như kh c nhau. + Vi c phân biệt chữ. Giáo trình C của Aptech [Elementary Programming With C] Introduction • Hôm nọ thấy c bạn yêu c u giáo trình c a Aptech, tớ sẽ post lên từ từ mỗi ngày một ít. Nhưng vì quyển sách đó rất