1. Trang chủ
  2. » Tất cả

[Giao trinh] Ngon ngu C

137 2 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

Định dạng
Số trang 137
Dung lượng 474,7 KB

Nội dung

90 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 xuất Ngôn ngữ lập trình 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 có khả ngơn ngữ lập trình bậc thấp • Ngơn ngữ C súc tích đọ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 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 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, tố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 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++ đưa vào Mặc dầu tác giả cố gắng để sách hoàn chỉnh, song chắn khơng tránh khỏi thiếu sót, mong nhận góp ý độc giả 1 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 ln 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 đặ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ự 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Ừ KHỐ 1.1.1 BỘ ký tự Ngơn ngữ lập trình 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ừ khố từ dùng riêng ngơn ngữ C có ý nghĩa hồn tồn xác định Từ khóa viết chữ thường Sau từ khoá thông dụng C: Auto Const Double For Long Sizeof break continue Else goto register static Case Default Extern If Return Struct char float int short switch typedef union unsigned Void While 1.1.3 Tên Tên dãy ký tự bắt đầu chữ ký tự gạch (_), theo sau chữ cái, chữ số ký tự gạch 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 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 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 tổ chức thành byte Một byte dùng để lưu trữ loại liệu 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, 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 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 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 -32768 ÷ 32767 -32768 ÷ 32767 -2147483648 ÷ -2147483647 ÷ 65535 ÷ 4294967295 2 4 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ừ khố char dùng để khai báo kiểu số nguyên byte 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 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 dùng để khai báo liệu sau Cú pháp sau: typedef ; đó, từ khố kiểu liệu cần định nghĩa, tên đặ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 q 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ị lưu trữ vị trí nhớ Mỗi biến sử dụng chương trình phải đặt tên theo quy định quy tắc đặt tên đề cập Tên biến không đặt trùng tên với từ khoá C Mọi biến phải 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 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 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 C Mặc dù ta nên theo cách ngôn ngữ C khai báo biến 4 hữu dụng cần sửa chữa chương trình có tất phần khai báo gộp lại với 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, ngồi 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à khai báo Ta có cách khai báo vị trí biến sau: • Vị trí khai báo biến đặt bên tất hàm, lúc biến tác động đến tồn chương trình Ví dụ: int a, b; /* a,b tác động đến tồ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à thơi 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ị 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 khai báo Chúng có dạng Tên biến = Giá trị khởi gán 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 */ 5 float x = y = 6.5; /* khởi gán cho x y 6.5 */ Chú ý: Mỗi biến khai báo 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 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 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 định nghĩa Vì định nghĩa #define 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, 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 ngun có định trước kiểu: Là số 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: 6 - Phần định trị: số nguyên thực hệ 10, - Phần bậc: số nguyên - 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ự viết hai dấu nháy đơn ’ ’ Chẳng hạn, ’a’ ký tự Hằng ký tự xem trị nguyên ký tự 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 số nguyên khác Chẳng hạn ’a’ - ’A’ cho kết 32 Hằng ký tự cịn có cách viết khác 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 gọi mã điều khiển Sau số mã điều khiển: \n Xuống dòng \r Lùi đầu dòng \t Ký tự tab \v Căn thẳng theo chiều dọc \b Backspace \f Sang trang \a 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ự lưu trữ máy 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’ 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ê đặt theo quy tắc tên 7 ,, , tên tên biến kiểu enum danh sách tên đặt quy tắc tên Các tên dùng để đại diện cho giá trị kiểu viết cách dấu phẩy (,) phải không trùng tên Chúng hoạt động giá trị kiểu enum 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 liệt kê kiểu liệt kê 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 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 sau: enum xe_may {honda, suzuki= 4, yamaha= -4, vmep }; giá trị 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 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  Tốn hạng gồm biến, hằng, lời gọi hàm  Tốn tử tốn tử số học, logic, quan hệ, Ví dụ: Các dãy biểu diễn biểu thức: + j 5*j + f()/(4*x) 1.7.1 Toán tử số học  Các tốn tử hai ngơi: Tốn tử Ý nghĩa + Cộng - Trừ * Nhân / Chia %  Lấy phần dư Tố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 1.7.2 Toán tử quan hệ Toán tử Ý nghĩa > Lớn >= Lớn < Bé , >=,

Ngày đăng: 01/10/2016, 13:47

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w