Chương 1: Khái niệm cơ bản về C

Là kỹ thuật cài đặt một hoặc nhiều thuật toán (giải thuật) có liên quan với nhau bằng một hoặc nhiều ngôn ngữ lập trình để tạo ra một chương trình máy tính. Có 2 loại lập trình: 1. Lập trình thủ tục. 2. Lập trình hướng đối tượng.

pdf36 trang | Chia sẻ: lylyngoc | Lượt xem: 1651 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Chương 1: Khái niệm cơ bản về C, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
TIN HỌC ĐẠI CƯƠNG Lý thuyết: 6 buổi Thực hành: 8 buổi GVHD: Dương Khai Phong Email: khaiphong@gmail.com Ngôn ngữ lập trình: C NỘI DUNG CÁC BUỔI HỌC 1. Tổng quan về C (chương 1,2) 2. Các cấu trúc điều khiển trong C (chương 3) 3. Hàm và cấu trúc chương trình (chương 4) 4. Mảng, chuỗi và con trỏ (chương 5) 5. Kiểu cấu trúc, đệ qui, tập tin (chương 6,7,8) 6. Ôn tập CHƯƠNG 1: KHÁI NIỆM CƠ BẢN VỀ C 1. Lập trình là gì? 2. Cấu trúc cơ bản của một chương trình C 3. Các kiểu dữ liệu cơ sở 4. Hằng, biến 5. Nhập / xuất dữ liệu 6. Tìm hiểu một số chương trình mẫu 1. LẬP TRÌNH LÀ GÌ? Là kỹ thuật cài đặt một hoặc nhiều thuật toán (giải thuật) có liên quan với nhau bằng một hoặc nhiều ngôn ngữ lập trình để tạo ra một chương trình máy tính. Có 2 loại lập trình: 1. Lập trình thủ tục. 2. Lập trình hướng đối tượng. 1. LẬP TRÌNH LÀ GÌ? BÀI TOÁN THUẬT GIẢI NGÔN NGỮ LẬP TRÌNH MÁY TÍNH Ngôn ngữ lập trình? Dùng ngôn ngữ lập trình nào? 1. LẬP TRÌNH LÀ GÌ? Ngôn ngữ lập trình: là một hệ thống được ký hiệu hóa theo một dạng nào đó mà cả người và máy đều hiểu được. Phân loại: 1. Ngôn ngữ Pascal 2. Ngôn ngữ Visual Basic 3. Ngôn ngữ C 4. Ngôn ngữ Java 5. … 1. LẬP TRÌNH LÀ GÌ? Ngôn ngữ lập trình C: là phương tiện để mô tả thuật giải có nhiều đặc điểm:  Linh động về cú pháp.  Một chương trình C chia thành một hoặc nhiều hàm rời nhau.  Kiểu dữ liệu phong phú. 2. CẤU TRÚC CƠ BẢN CỦA MỘT CHƯƠNG TRÌNH C: < Khai báo hằng, biến toàn cục > #include #include #define PI 3.14 void Giai_PT_Bac_I(); void main() { … } void Giai_PT_Bac_I() { … } 3. CÁC KIỂU DỮ LIỆU CƠ SỞ: KÝ TỰ SỐ CHUỖI SỐ NGUYÊN SỐ THỰC (DẤU PHẨY ĐỘNG) Nhu cầu KIỂU KHÔNG GIÁ TRỊ: VOID 3. CÁC KIỂU DỮ LIỆU CƠ SỞ: Kiểu ký tự: (char) là kiểu dữ liệu dùng để biểu diễn ký tự thông qua bảng mã ASCII.  Bảng mã ASCII: là bảng mã máy tính dùng để biểu diễn các kí tự (có 256 kí tự trong bảng mã này).  Chiếm 1 byte trong bộ nhớ.  Phân loại: Kiểu ký tự Phạm vi biểu diễn Số ký tự Kích thước bộ nhớ char (signed char) -128 -> 127 256 1 byte unsigned char 0 -> 256 256 1 byte 3. CÁC KIỂU DỮ LIỆU CƠ SỞ: Kiểu số nguyên: là kiểu dữ liệu dùng để biểu diễn các con số nguyên (không có phần thập phân)  Phân loại: Kiểu số Phạm vi biểu diễn Kích thước bộ nhớ int -32768-> 32767 2 byte unsigned int 0 -> 65535 2 byte long (int) -2 tỷ.. -> +2 tỷ.. 4 byte unsigned long (int) 0 -> 4 tỷ.. 4 byte 3. CÁC KIỂU DỮ LIỆU CƠ SỞ: Kiểu dấu phẩy động: là kiểu dữ liệu dùng để biểu diễn các con số dạng số thực (có phần thập phân)  Phân loại: Kiểu số Phạm vi biểu diễn Số chữ Số có nghĩa Kích thước bộ nhớ float -3.4E-38 -> 3.4E+38 7-8 4 byte double -1.7E-308 -> 1.7E+308 15-16 8 byte long double --3.4E-4932 -> 3.4E+4932 17-18 10 byte 4. HẰNG – BIẾN : Hằng: là một giá trị bất biến trong suốt quá trình thực thi chương trình. Hằng tương ứng với các kiểu dữ liệu nhất định.  Phân loại: • Hằng số • Hằng ký tự • Hằng chuỗi 4. HẰNG – BIẾN : Hằng số: là một giá trị số đã xác định (có thể là số nguyên hay số thực).  Cách định nghĩa một hằng trong chương trình: #include #include #define PI 3.14 #define LUONGCANBAN 300000 void main() { … } Định nghĩa một hằng PI có giá trị 3.14 4. HẰNG – BIẾN : Hằng ký tự: là một giá trị ký tự đã xác định được viết trong cặp dấu ngoặc đơn (‘’) (giá trị này tương ứng với một giá trị trong bảng mã ASCII).  Cách định nghĩa một hằng trong chương trình: #include #include #define MY_LETTER ‘A’ const int my_letter=‘a’; void main() { … } Định nghĩa hằng bằng từ khóa const 4. HẰNG – BIẾN : Hằng chuỗi: là một giá trị chuỗi ký tự đã xác định được viết trong cặp dấu ngoặc kép(“…”). Một hằng chuỗi được lưu trữ tận cùng bằng ký tự null (\0). Ví dụ: hằng chuỗi “Turbo C” sẽ được lưu như sau:  Cách định nghĩa một hằng trong chương trình: #include #include #define MY_STR “Chao cac ban” void main() {… } T U R B O C \0 4. HẰNG – BIẾN : Biến: là một giá trị có thể thay đổi được khi thực thi chương trình.  Trước khi sử dụng biến ta cần phải khai báo biến theo cú pháp sau: #include #include #define MY_STR “Chao cac ban” void main() { float x; int a,b; } Khi có nhiều tên biến thì giữa các biến ta phải dùng dấu phẩy ‘,’ 4. HẰNG – BIẾN : Khởi tạo giá trị cho Biến: ta có thể gán cho biến một giá trị ngay khi khai báo #include #include #define MY_STR “Chao cac ban” void main() { float x=5.2; int a,b; char kytu=‘D’; a=15; } 5. NHẬP / XUẤT DỮ LIỆU: Các hàm nhập / xuất trong thư viện chuẩn stdio.h:  Xuất / nhập cơ bản: printf / scanf  Nhập / xuất chuỗi: gets / puts  Nhập / xuất ký tự: getchar / putchar 5. NHẬP / XUẤT DỮ LIỆU CƠ BẢN:  Công dụng: dùng để xuất nội dung, thông tin các hằng, biến ra màn hình.  Cú pháp: printf(“dòng điều khiển”,[các biểu thức]); Trong đó: dòng điều khiển có thể là:  Nội dung thông báo: chuỗi, số, …  Các ký tự điều khiển: \n, \t, \r, … (xem trang 15)  Các mã đặc tả để in các biểu thức tương ứng (mỗi biểu thức khi in phải có một đặc tả). (xem trang 39) printf 5. NHẬP / XUẤT DỮ LIỆU CƠ BẢN: Bảng mô tả ý nghĩa các ký tự đặc tả: printf Kiểu dữ liệu Mã đặc tả Tác dụng char %c In một ký tự có mã ASCII tương ứng. int long int %[n]d %[n]ld In một số nguyên có chiều dài n số. float double %[n.m]f %[n.m]lf In một số thực có chiều dài n số và m số thập phân Chuỗi char[n] %s In một chuỗi ký tự \n Xuống hàng \t Cách một khoảng Tab 5. NHẬP / XUẤT DỮ LIỆU CƠ BẢN:  Ví dụ 1: xuất thông báo “Chào bạn, bạn khỏe không?” printf(“Chao ban, ban khoe khong?”);  Ví dụ 2: xuất thông báo “Giá trị của PI là ….” với PI là một hằng số có giá trị là 3.14 printf(“Gia tri cua PI la %f ”,PI);  Ví dụ 3: xuất thông báo “Dien tich HCN có dai=… và rong=… la …” với dai,rong,DT là các biến số nguyên printf(“Dien tich HCN có dai=%d và rong=%d la %d ”, dai,rong,DT); printf 5. NHẬP / XUẤT DỮ LIỆU CƠ BẢN:  Công dụng: dùng để nhập nội dung, thông tin cho các biến, mảng.  Cú pháp chung: scanf(“Mã đặc tả”,<Danh sách địa chỉ các biến tương ứng với mã đặc tả>);  Ví dụ: 1. Nhập giá trị cho tuổi (tuổi là một biến số nguyên) scanf(“%d”,&tuoi); 2. Nhập giá trị cho chiều dài, rộng của hình chữ nhật (dai,rong là các biến số thực). scanf(“%f%f”,&dai,&rong); scanf 5. NHẬP / XUẤT DỮ LIỆU CƠ BẢN:  Lưu ý: khi dùng lệnh scanf để nhập dữ liệu là chuỗi theo mã đặc tả là %s thì chuỗi nhập phải không có khoảng trắng. (xem trang 44) Để nhập chuỗi có khoảng trắng ta phải dùng theo cú pháp sau: scanf(“%[^\n]”,Tên_biến_kiểu_chuỗi); Ví dụ: nhập hoten cho sinh viên char hoten[30]; scanf(“%[^\n]”,hoten); scanf 5. NHẬP / XUẤT CHUỖI:  Để giải quyết vấn đề nhập chuỗi: ngôn ngữ C cung cấp cho ta 2 hàm để nhập / xuất chuỗi.  Hàm gets: nhận một chuỗi từ bàn phím cho đến khi gặp ký tự \n (tức nhấn phím Enter). (cho phép nhập khoảng trắng giữa các từ). Cú pháp: gets(Tên_mảng_ký_tự);  Hàm puts: xuất một chuỗi ra màn hình, hàm tự động thêm ký tự \n vào cuối chuỗi khi xuất. Nếu xuất thành công thì hàm trả về =\n , ngược lại =EOF (-1).(xem trang 48) Cú pháp: int puts(char *Tên_biến); gets/puts 5. NHẬP / XUẤT KÝ TỰ:  Ngôn ngữ C cung cấp cho ta 2 hàm để nhập / xuất một ký tự:  Hàm getchar: nhận một ký tự từ bàn phím và trả về mã ASCII của ký tự nhận được. Cú pháp: int getchar(void);  Hàm putchar: xuất một ký tự ra màn hình. Nếu xuất thành công thì hàm trả về mã ASCII của ký tự xuất , ngược lại =EOF (-1).(xem trang 47) Cú pháp: int putchar(int Tên_biến); getchar/putchar MỘT SỐ LƯU Ý VỚI CÁC HÀM NHẬP:  Các lệnh này chỉ nhận dữ liệu sau khi nhấn phím Enter.  Khi sử dụng các lệnh scanf, getchar để nhập các chuỗi, ký tự liên tiếp thì cần lưu ý đến khả năng bị trôi lệnh của các lệnh theo sau nó do mã phím \n còn lại trong vùng nhớ chuẩn stdin. (xem trang 46) => Khắc phục: khử ký tự \n còn trong stdin bằng lệnh fflush(stdin) sau lệnh scanf hoặc dùng ký tự đặc tả %*c trong lệnh scanf.  Ngoài ra, ta có thể sử dụng một số hàm nhập / xuất khác trong thư viện conio.h cho chương trình (xem trang 49)  Xuất chuỗi có màu sắc: cprintf  Nhập ký tự không cần chờ nhấn phím Enter: getch,getche scanf, gets, getchar CHƯƠNG 2: BIỂU THỨC, TOÁN TỬ TRONG C 1. Biểu thức là gì? 2. Các phép toán trong C 3. Phép gán 4. Phép toán tăng giảm một giá trị ++,-- 5. Chuyển đổi kiểu dữ liệu 6. Toán tử phẩy (“,”), toán tử điều kiện (?) 1. BIỂU THỨC LÀ GÌ? Là sự kết hợp hợp lệ của những phép toán thực hiện trên các biến, hằng hoặc các giá trị của hàm. Ví dụ: trong chương trình ta khai báo các biến số nguyên như: a,b,c và Tổng, ta có một số biểu thức sau:  a+b-c  (a+b)*5  Tong=(a+b)*c 2. CÁC PHÉP TOÁN TRONG C PHÉP TOÁN SỐ HỌC QUAN HỆ & LOGIC TRÊN BIT + - * / Phép toán quan hệ == , != > , < >= , <= Phép toán logic AND : && OR : || NOT : ! AND : & OR : | XOR : ^ Bù : ~ Dịch trái : << Dịch phải : >>% 3. PHÉP GÁN Trong C có 2 loại phép gán:  Dạng 1: Biến=Biểu_thức int c,a=3,b=5; c=a+b; // KQ: c=8  Dạng 2: phép gán phức hợp Biến=Biểu_thức int c,a=3,b=6; b+=a; // tương đương b=b+a; => KQ: b=9 c=b/=a; // tương đương c=b=b/a; => KQ: c=b=3 4. PHÉP TOÁN TĂNG, GIẢM: ++ , -- Có 2 loại dạng tăng / giảm:  Dạng 1: (Toán tử đứng trước) ++Biến; (--Biến;) int c,a=3; ++a; // tương đương a=a+1; => KQ: a=4 c=++a; // tương đương a=a+1, rồi gán c=a => KQ: c=a=5  Dạng 2: (Toán tử đứng sau) Biến ++; (Biến--;) int c,a=3; a++; // tương đương a=a+1; => KQ: b=4 c=a++; // tương đương gán c=a, rồi thực hiện a=a+1 => KQ: c=4 và a=5 5. CHUYỂN ĐỔI KIỂU DỮ LIỆU Xét ví dụ sau: int a=5,b=2,c; float f,f1=7.5,f2=5; Cùng kiểu dữ liệu TH1: c=a+b; c=a/b; c=a%b; // c=7 // c=2 // c=1 Kiểu dữ liệu thấp -> cao TH3: f=a+b; f=a/b; f=a%b; // c=7.0 // c=2.0 // c=1.0 ??? Khác kiểu dữ liệu TH2: f=f1+a; f=a/f1; f=f1/a; // c=12.5 // c=0.66667 // c=1.5 Kiểu dữ liệu cao -> thấp TH4: a=f1+f2; a=f1/f2; // c=12 // c=1 ??? 5. CHUYỂN ĐỔI KIỂU DỮ LIỆU Nhận xét 1: TH1: không có vấn đề. TH2: khi 2 toán hạng trong một phép toán khác kiểu dữ liệu thì kiểu dữ liệu thấp được nâng thành kiểu dữ liệu cao trước khi tính toán. (intlongfloatdouble). TH3: cần phải ép kiểu trong khi tính toán để có kết quả chính xác theo cú pháp sau: f=()a/b; TH4: nếu kết quả tính toán của biểu thức bên phải phép gán có kiểu dữ liệu cao hơn bên trái thì phép gán có khả năng mất dữ liệu khi gán cho biến bên trái. 6. TOÁN TỬ PHẨY “,” , TOÁN TỬ ĐIỀU KIỆN “?” a/ Toán tử phẩy “,”: (xem trang 33) Là toán tử kết hợp giữa phép gán và các biểu thức cách nhau bởi dấu phẩy “,”. Kết quả của biểu thức bên phải nhất được gán cho biến bên trái b/ Toán tử (biểu thức) điều kiện “?”: (xem trang 33) Cú pháp: ?: Biểu_thức_1 thực hiện khi Biểu_thức_điều_kiện có kết quả khác 0, ngược lại biểu_thức_2 thực hiện. Ví dụ: char c,t=‘D’; c=(t>=‘A’) && (t<=‘Z’)?t:‘A’; // KQ: c=‘D’ BÀI TẬP YÊU CẦU: Sinh viên hoàn thành các Bài tập chương 2 (từ trang 54 đến hết trang 59)