The c programming language bản dịch

136 2.2K 22
The c programming language   bản dịch

Đ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

MỞ ĐẦU Ngôn ngữ lập trình C Dennis Ritchie phát triển lần vào năm 1972 phòng thí nghiệm Bell thuộc hãng AT&T (Mỹ) có nguồn gốc từ ngôn ngữ BCPL (do Martin Richards đƣa năm 1967) ngôn ngữ B (do Ken Thompson phát triển từ ngôn ngữ BCPL vào năm 1969) Ngôn ngữ C thức đời từ năm 1978 "Ngôn ngữ lập trình C”do tác giả Dennis Ritchie Brian Kernighan đƣợc xuất Ngôn ngữ lập trình C đƣợc đánh giá cao nhiều nguyên nhân, là:  Ngôn ngữ C thể đặc trƣng ngôn ngữ lập trình bậc cao nhƣng có khả ngôn ngữ lập trình bậc thấp  Ngôn ngữ C súc tích cô đọng Chƣơng trình viết C thƣờng ngắn gọn, có cấu trúc rõ ràng Thƣ viện hàm mẫu C phong phú Hiện ngôn ngữ C thƣờng đƣợc sử dụng rộng rãi để giải toán khoa học kỹ thuật, toán xử lý tín hiệu số, đồ họa, âm thanh, Tuy nhiên ngôn ngữ C có khía cạnh độc đáo mà sinh viên không dễ nắm vững không nghiên cứu cách nghiêm túc Chính vậy, sách đƣợc biên soạn với mục đích cung cấp cách hệ thống đầy đủ vấn đề cốt yếu ngôn ngữ lập trình C dùng làm tài liệu học tập cho sinh viên thuộc chuyên ngành Tin học, Toán Tin học chuyên ngành khoa học kỹ thuật khác Nội dung sách bao gồm chƣơng:  Chƣơng đề cập đến yếu tố ngôn ngữ C, bao gồm ký tự, từ khoá, kiểu liệu, hằng, biến, biểu thức, toán tử  Chƣơng trình bày việc xuất nhập liệu lệnh có cấu trúc, bao gồm lệnh cấu trúc rẽ nhánh (if), cấu trúc lựa chọn (switch), cấu trúc lặp (for, while, while)  Chƣơng nói hàm, quy tắc xây dựng hàm, cách sử dụng hàm thƣ viện hàm tự tạo  Chƣơng 4,5 trình bày mảng, trỏ chuỗi C  Chƣơng đề cập đến kiểu liệu có cấu trúc (struct union)  Chƣơng trình bày thao tác xuất nhập, truy xuất tập tin C Trong chƣơng có nhiều ví dụ minh họa, cuối chƣơng phần câu hỏi tập để bạn luyện tập thêm Hiện nay, ngôn ngữ lập trình C đƣợc mở rộng thành ngôn ngữ lập trình C++ hỗ trợ cho lập trình hƣớng đối tƣợng, chƣơng, số phần mở rộng C++ đƣợc đƣa vào Mặc dầu tác giả cố gắng để sách đƣợc hoàn chỉnh, song chắn không tránh khỏi thiếu sót, mong nhận đƣợc góp ý độc giả Chƣơng CÁC THÀNH PHẦN CƠ BẢN CỦA NGÔN NGỮ C Trƣớc tìm hiểu thành phần ngôn ngữ lập trình C, xem chƣơng trình C đơn giản sau đây: #include void main() { printf("\n Chào mừng bạn đến với NNLT C! "); } Giải thích sơ ý nghĩa câu lệnh: #include Đây dòng lệnh tiền xử lý, dùng để mở tập tin thƣ viện stdio.h, có cài đặt hàm nhập xuất chuẩn (ở hàm printf) void main() Dòng tƣơng ứng với phần bắt đầu khai báo hàm main Hàm main điểm mà tất chƣơng trình C bắt đầu thực Không phụ thuộc vào vị trí hàm main, nội dung hàm đƣợc thực chƣơng trình bắt đầu Mọi chƣơng trình C phải tồn hàm main Theo sau main cặp dấu ngoặc đơn () Nội dung hàm main tiếp sau phần khai báo đƣợc đặt dấu ngoặc nhọn { } printf("Chào mừng bạn đến với NNLT C!\n"); Dòng lệnh nhằm mục đích in hình dòng chữ Chào mừng bạn đến với NNLT C! Hàm printf dùng để in liệu nằm cặp dấu ngoặc đơn thiết bị xuất chuẩn (ở hình) Chú ý dòng lệnh kết thúc dấu chấm phẩy (;) Ký tự đƣợc dùng để kết thúc lệnh bắt buộc phải có sau lệnh chƣơng trình C 1.1 BỘ KÝ TỰ VÀ TỪ KHOÁ 1.1.1 BỘ ký tự Ngôn ngữ lập trình C đƣợc xây dựng ký tự sau:  Các chữ cái: a, b, , z, A, B, C, , Z  Các chữ số: bao gồm 10 chữ số 0, 1, 2, ,  Các ký hiệu: bao gồm ký hiệu có bàn phím nhƣ: , ;: [ ] { } ? ! \ _ % & ^ | () + - * / < > 1.1.2 Từ khóa Từ khoá từ dùng riêng ngôn ngữ C có ý nghĩa hoàn toàn xác định Từ khóa đƣợc viết chữ thƣờng Sau từ khoá thông dụng C: auto break Case char typedef const continue Default union double Else Extern float unsigned for goto If int Void long register Return short While sizeof static Struct switch 1.1.3 Tên Tên dãy ký tự bắt đầu chữ ký tự gạch dƣới (_), theo sau chữ cái, chữ số ký tự gạch dƣới Chú ý:  Trong lập trình, nên đặt tên mang đầy đủ ý nghĩa mang tính gợi nhớ đến mục đích mà bạn dùng  Đối với tên dài nên dùng thêm dấu gạch nối để dễ đọc  Các tên C có phân biệt chữ hoa thƣờng Chẳng hạn, tên aBc, abc hay ABC khác 1.2 LỜI CHÚ THÍCH Các thích C lời giải thích để làm cho chƣơng trình đƣợc dễ hiểu sáng sủa Lời thích đặt cặp ký tự /* */ Dòng thích nhiều dòng Ví dụ: /* Bắt đầu lặp */ /* Đây đoạn Chƣơng trình nhập liệu */ Trong C++ lời thích đặt sau hai dấu gạch chéo //, để tạo thích dòng Ví dụ: // Bắt đầu lặp Khi gặp thích chƣơng trình dịch bỏ qua chúng mà không dịch dòng 1.3 CÁC KIỂU DỮ LIỆU CƠ BẢN Khi lập trình, lƣu trữ biến nhớ máy tính nhƣng máy tính phải biết ta muốn lƣu trữ chúng kiểu liệu khác cần lƣợng nhớ khác Bộ nhớ máy tính đƣợc tổ chức thành byte Một byte dùng để lƣu trữ loại liệu nhỏ nhƣ kiểu số nguyên từ đến 255 hay ký tự Nhƣng máy tính xử lý kiểu liệu phức tạp cách gộp nhiều byte lại với nhau, nhƣ số nguyên dài hay số thập phân 1.3.1 Kiểu char Kiểu char có kích thƣớc byte biểu diễn đƣợc ký tự bảng mã ASCII Kiểu char thực chất kiểu số nguyên Có hai kiểu char signed char (char có dấu) unsigned char (char không dấu) Kiểu signed char (mặc định) biểu diễn số nguyên từ -128 đến 127 unsigned char biểu diễn số nguyên từ đến 255 1.3.2 Kiểu số nguyên C có nhiều kiểu số nguyên đƣợc cho bảng sau: Tên kiểu Kích cỡ (byte) Phạm vi biểu diễn int short long unsigned int unsigned long 2 4 -32768  32767 -32768  32767 -2147483648  -2147483647  65535  4294967295 Chú ý: Đối với hầu hết ngôn ngữ lập trình liệu kiểu số kiểu ký tự luôn phân biệt nhau, chẳng hạn số A ký tự Trong C việc phân biệt ký tự số cách tƣơng đối Thực C xem xét ký tự xem xét đến mã ASCII Từ khoá char dùng để khai báo kiểu số nguyên byte đƣợc dùng để lƣu trữ vừa ký tự vừa số nguyên Chẳng hạn, sau ta khai báo: char c; ta thực phép gán: c = 'A'; c = 127; 1.3.3 Kiểu số thực Các kiểu số thực C đƣợc cho bảng: Tên kiểu float double long double Kích cỡ (byte) 10 Phạm vi biểu diễn 3.4E-38  3.4E+38 1.7E-308  1.7E+308 3.4E-4932  1.1E+4932 Kiểu float có độ xác đơn (7 chữ số sau dấu chấm thập phân) kiểu double có độ xác kép (15 chữ số sau dấu chấm thập phân) Chú ý: Ta dùng từ khóa typedef để đặt lại tên cho kiểu liệu có Tên kiểu đƣợc dùng để khai báo liệu sau Cú pháp nhƣ sau: typedef ; đó, từ khoá kiểu liệu cần định nghĩa, tên đƣợc đặt ngƣời lập trình Ví dụ: typedef int SN; 1.4 BIẾN Biến đại lƣợng có giá trị thay đổi trình thực chƣơng trình Mỗi biến chƣơng trình có tên gọi tên biến giá trị đƣợc lƣu trữ vị trí nhớ Mỗi biến sử dụng chƣơng trình phải đƣợc đặt tên theo quy định nhƣ quy tắc đặt tên đề cập Tên biến không đƣợc đặt trùng tên với từ khoá C Mọi biến phải đƣợc khai báo trƣớc sử dụng Việc khai báo biến thực theo cú pháp sau đây: Kiểu liệu Danh sách biến; đó: Kiểu liệu tên kiểu liệu hay nhiều biến cần khai báo Danh sách biến danh sách tên biến đƣợc ngăn cách dấu phẩy Ví dụ: int j; /* khai báo biến j có kiểu nguyên */ float x, y; /* khai báo hai biến x, y có kiểu thực*/ Chú ý: Tất biến mà sử dụng phải đƣợc khai báo trƣớc Một điểm khác biệt C C++ C++ khai báo biến nơi chƣơng trình, chí lệnh thực không đầu khối lệnh nhƣ C Mặc dù ta nên theo cách ngôn ngữ C khai báo biến hữu dụng cần sửa chữa chƣơng trình có tất phần khai báo đƣợc gộp lại với 10 Cách thông dụng để khai báo biến đặt phần bắt đầu hàm (biến cục bộ) hay trực tiếp thân chƣơng trình, tất hàm (biến toàn cục) Phạm vi hoạt động biến phụ thuộc vào vị trí mà đƣợc khai báo Ta có cách khai báo vị trí biến nhƣ sau:  Vị trí khai báo biến đặt bên tất hàm, lúc biến tác động đến toàn chƣơng trình Ví dụ: int a, b; /* a,b tác động đến toàn chương trình */ void main() { a = a + b; }  Các khai báo biến đặt bên thân hàm, lúc biến tác động bên hàm Ví dụ: void main() { int a, b; /* a,b tác động main */ a = 1; }  Có thể đặt khai báo biến khối lệnh ({ }) Lúc biến hoạt động khối mà Ví dụ: void main() { int a, b; /* a,b tác động main */ a = b = 5; { int c, d; c = 1; d = 2; } } Trong khai báo biến, ta đồng thời gán cho biến giá trị Các giá trị đƣợc gọi giá trị khởi gán Cú pháp để khởi gán giá trị cho hay nhiều biến là: Kiểu liệu Danh sách phép gán; chứa phép gán giá trị cho biến đƣợc khai báo Chúng có dạng Tên biến = Giá trị khởi gán đƣợc ngăn cách dấu phẩy biểu thức C không chấp nhận hàm biến làm giá trị khởi gán Ví dụ: char c = 65; /* khởi gán c 65 */ int a = 6, b = 7; /* khởi gán cho a b */ float x = y = 6.5; /* khởi gán cho x y 6.5 */ 11 Chú ý: Mỗi biến đƣợc khai báo đƣợc trình biên dịch cấp phát vùng nhớ gồm số byte liên tiếp có kích thƣớc kích thƣớc kiểu Để lấy địa biến (tức địa vùng nhớ chứa giá trị biến) ta dùng toán tử &, cú pháp nhƣ sau: &tên biến 1.5 HẰNG Hằng đại lƣợng mà giá trị không thay đổi thực chƣơng trình 1.5.1 Định nghĩa Có thể định nghĩa với tên để sử dụng thƣờng xuyên cách sử dụng thị #define nhƣ sau: #define Tên giá trị Ví dụ: #define NEWLINE '\n' #define N 100 Trong thực tế việc mà trình biên dịch làm tìm thấy thị #define thay tên chỗ chúng xuất giá trị mà chúng đƣợc định nghĩa Vì định nghĩa #define đƣợc xem macro Chỉ thị #define lệnh thực thi, thị tiền xử lý (preprocessor), lý trình biên dịch xem dòng thị dòng không cần kết thúc dấu chấm phẩy Nếu bạn thêm dấu chấm phẩy vào cuối dòng, đƣợc xem phần giá trị định nghĩa 1.5.2 Khai báo Cú pháp khai báo hằng: const Kiểu liệu giá trị biểu thức Ví dụ: const float R = 10.5; Tên = giá trị; 1.5.3 Các loại Hằng nguyên: Là số nguyên có giá trị khoảng từ -32768 đến 32767 Ta phân biệt loại nguyên sau đây:  Hằng nguyên hệ 10: dãy ký tự số không bắt đầu số  Hằng nguyên hệ 8: dãy ký tự số từ đến bắt đầu số Ví dụ: const int i = 010; /* i = */  Hằng nguyên hệ 16: dãy ký tự số từ đến 9, chữ từ A đến F bắt đầu 0x (hoặc 0X) Ví dụ: const int i = 0x10; /* i = 16 */ const int j = 0xFF; /* j = 255 */  Hằng nguyên có định trƣớc kiểu: Là số đƣợc viết cách thêm ký tự vào cuối dãy số: L cho kiểu long, U cho kiểu unsigned int, UL cho kiểu unsigned long Ví dụ: 123456789L số nguyên kiểu long Hằng thực: Đƣợc viết theo hai cách:  Dạng dấu chấm tĩnh: Số bao gồm phần nguyên, dấu chấm thập phân phần lẻ Ví dụ: 23.45, -12.34  Dạng khoa học: Số gồm hai phần: - Phần định trị: số nguyên thực hệ 10, - Phần bậc: số nguyên 12 - Hai phần cách ký tự e E, lũy thừa 10 Ví dụ: 12e+3 (số 12000) 12e-2 (số 0.12) Hằng ký tự: Là ký tự đƣợc viết hai dấu nháy đơn ‟ ‟ Chẳng hạn, ‟a‟ ký tự Hằng ký tự đƣợc xem trị nguyên ký tự đƣợc gán giá trị nguyên tƣơng ứng với mã bảng mã ASCII Vì ký tự tham gia vào biểu thức nhƣ số nguyên khác Chẳng hạn ‟a‟ - ‟A‟ cho kết 32 Hằng ký tự có cách viết khác nhƣ sau: ‟\x1x2x3‟ x1x2x3 số hệ mà giá trị mã ASCII ký tự biểu diễn Ví dụ: Hằng ký tự ‟a‟ có mã ASCII 97, đổi sang số hệ 0141, ký tự ‟a‟ viết cách khác ‟\141‟ Chú ý: Có ký tự mang tính chất riêng biệt đƣợc gọi mã điều khiển Sau số mã điều khiển: \n \r \t \v \b \f \a \' \" \? \\ Xuống dòng Lùi đầu dòng Ký tự tab Căn thẳng theo chiều dọc Backspace Sang trang Tiếng kêu bíp Dấu nháy đơn Dấu nháy kép Dấu hỏi Ký tự xổ ngƣợc Hằng chuỗi: Là dãy ký tự đặt hai dấu nháy kép “" Chẳng hạn, "Trung tâm” hay "“(chuỗi rỗng) chuỗi Chuỗi ký tự đƣợc lƣu trữ máy dƣới dạng mảng có phần tử ký tự riêng biệt Trình biên dịch tự động thêm ký tự null (‟\0‟) vào cuối chuỗi (ký tự ‟\0‟ đƣợc xem dấu hiệu kết thúc chuỗi) Chú ý: Cần phân biệt 'a' "a", 'a' ký tự lƣu trữ byte "a”là chuỗi lƣu trữ mảng chiều gồm phần tử: phần tử thứ chứa 'a' phần tử thứ hai ‟\0‟ 1.6 KIỂU enum Kiểu enum có kích thƣớc byte viết theo hai dạng sau đây: Dạng 1: enum {} ,, ; Dạng 2: enum {} ,, ; đó: tên kiểu liệt kê đƣợc đặt theo quy tắc tên ,, , tên tên biến kiểu enum danh sách tên đƣợc đặt quy tắc tên Các tên dùng để đại diện cho giá trị kiểu đƣợc viết cách dấu phẩy (,) phải không trùng tên Chúng hoạt động nhƣ giá trị kiểu enum 13 Câu lệnh dạng định nghĩa kiểu enum có tên Sau dùng cụm từ enum để khai báo biến enum Câu lệnh dạng khai báo biến enum có tên , , Các biến nhận giá trị từ Kích thƣớc kiểu enum mặc định số nguyên byte có dấu (int) Các biến kiểu enum thực biến kiểu int, chúng nhận giá trị nguyên khác Ví dụ: Câu lệnh sau tạo kiểu liệt kê có tên mang giá trị hai, ba, tu, nam, sau, bay, chunhat d1, d2 biến thuộc kiểu liệt kê enum {hai,ba,tu,nam,sau,bay,chunhat} d1,d2; Câu lệnh tƣơng đƣơng lệnh sau: enum {hai,ba,tu,nam,sau,bay,chunhat}; enum d1,d2; Chú ý: Các giá trị tên đƣợc liệt kê kiểu liệt kê đƣợc C tự động gán theo thứ tự 0, 1, 2, Tuy nhiên thay đổi giá trị cách gán cho chúng giá trị Lúc tên không đƣợc gán giá trị sau nhận giá trị giá trị mà tên trƣớc nhận Ví dụ: Nếu có khai báo nhƣ sau: enum xe_may {honda, suzuki= 4, yamaha= -4, vmep }; giá trị lần lƣợt là: honda 0, suzuki 4, yamaha -4, vmep -3 1.7 BIỂU THỨC VÀ CÁC TOÁN TỬ Biểu thức dãy toán hạng đƣợc nối với toán tử cho kết giá trị gọi giá trị biểu thức Có thể sử dụng cặp dấu ngoặc đơn () biểu thức  Toán hạng gồm biến, hằng, lời gọi hàm  Toán tử toán tử số học, logic, quan hệ, Ví dụ: Các dãy biểu diễn dƣới biểu thức: + j 5*j + f()/(4*x) 1.7.1 Toán tử số học  Các toán tử hai ngôi: Toán tử Ý nghĩa + Cộng - Trừ * Nhân / Chia % Lấy phần dƣ  Toán tử ngôi: Toán tử - đứng trƣớc toán hạng, giá trị trái dấu với toán hạng, chẳng hạn -5 14 1.7.2 Toán tử quan hệ Toán tử Ý nghĩa > Lớn >= Lớn < Bé , >=, >=, [...]... quả th c hiện c a chƣơng trình này là: Trư c khi hoán vị x=10, y=30 Sau khi hoán vị x=10, y=30 2 Truyền theo địa chỉ: Trong c ch truyền tham số này, c c tham số đƣ c truyền theo địa chỉ C c tham số hình th c đƣ c khai báo là c c con trỏ Ta tận dụng một đ c tính c a c c tham số trong c c hàm c a C khi chúng là c c con trỏ: sau lời gọi hàm thì giá trị c c con trỏ không thay đổi mà chỉ thay đổi c c giá... báo c c tham số> ]) { ; } trong đó: là c c kiểu dữ liệu c a C đƣ c dùng làm kiểu trả về c a hàm Nó thu c c c kiểu dữ liệu c bản ho c c c kiểu đƣ c định nghĩa : C c tham số c a hàm đƣ c gọi là c c tham số hình th c Nếu hàm c c c tham số hình th c thì phải khai báo kiểu dữ liệu cho mỗi tham số (tƣơng tự nhƣ khai báo kiểu dữ liệu cho c c biến) Khi c c tham... nó chỉ c hiệu l c cho một giá trị đƣ c hiển thị gần nhất C c giá trị hiển thị tiếp theo sẽ c độ rộng tối thiểu m c định là 0, nhƣ vậy c u lệnh: cout

Ngày đăng: 29/05/2016, 23:58

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan