Bài giảng môn Ngôn ngữ lập trình C - Chương 2: Các yếu tố cơ bản của ngôn ngữ C - Nguyễn Thị Hiền

Từ vựng trong C  Tên/Định danh (Identifier)  Một dãy ký tự dùng để chỉ tên một hằng số, hằng ký tự, tên một biến, một kiểu dữ liệu, một hàm một hay thủ tục.  Quy tắc đặt tên:  Ký tự đầu tiên có thể là chữ cái hoặc dấu gạch dưới _  Các ký tự sau đó (nếu có) có thể là chữ cái, dấu gạch dưới hoặc số.  VD: x1, temp, _bien1 là những tên hợp lệ; 1abc, bai 1 la những tên không hợp lệTừ vựng trong C  Đối tượng dữ liệu: gồm các thuộc tính  Kiểu dữ liệu: chỉ ra loại dữ liệu có thể được lưu trữ  Giá trị: hiện đang được lưu trong đối tượng dữ liệu  Địa chỉ: vị trí của đối tượng dữ liệu trong bộ nhớ  Tên: dùng để xác định đối tượng dữ liệu  Kiểu dữ liệu  Mỗi kiểu dữ liệu có tên và kích thước nhất định.  Có miền giá trị xác định

pdf54 trang | Chia sẻ: thanhle95 | Lượt xem: 396 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Bài giảng môn Ngôn ngữ lập trình C - Chương 2: Các yếu tố cơ bản của ngôn ngữ C - Nguyễn Thị Hiền, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 2 Các yếu tố cơ bản của ngôn ngữ C Chương 2 - Các yếu tố cơ bản của ngôn ngữ C  Từ vựng trong C  Biểu thức  Hàm vào/ra dữ liệu chuẩn  Các câu lệnh điều khiển Từ vựng trong C  Tập ký tự  Tên  Từ khóa  Các kiểu dữ liệu  Hằng  Biến Từ vựng trong C  Tập ký tự  26 chữ cái hoa: A, B, , Z  26 chữ cái thường: a, b, , z  10 chữ số: 0, 1, 9  Các ký tự đồ họa: +, -, *, /, =, !, #, %, ^, &, _, ~, [, ],\, |, ; , :, ‘, “, {, }, ,, ., , ?, (, )  Các ký tự không hiển thị ra màn hình: space, tab, enter Từ vựng trong C  Từ khóa  Là những từ dành riêng cho một ngôn ngữ lập trình  Một số từ khóa thường dung: const, enum, signed, struct, typedef, unsigned char, double, float, int, long, short, void case, default, else, if, switch do, for, while break, continue, goto, return Từ vựng trong C  Tên/Định danh (Identifier)  Một dãy ký tự dùng để chỉ tên một hằng số, hằng ký tự, tên một biến, một kiểu dữ liệu, một hàm một hay thủ tục.  Quy tắc đặt tên:  Ký tự đầu tiên có thể là chữ cái hoặc dấu gạch dưới _  Các ký tự sau đó (nếu có) có thể là chữ cái, dấu gạch dưới hoặc số.  VD: x1, temp, _bien1 là những tên hợp lệ; 1abc, bai 1 la những tên không hợp lệ Từ vựng trong C  Đối tượng dữ liệu: gồm các thuộc tính  Kiểu dữ liệu: chỉ ra loại dữ liệu có thể được lưu trữ  Giá trị: hiện đang được lưu trong đối tượng dữ liệu  Địa chỉ: vị trí của đối tượng dữ liệu trong bộ nhớ  Tên: dùng để xác định đối tượng dữ liệu  Kiểu dữ liệu  Mỗi kiểu dữ liệu có tên và kích thước nhất định.  Có miền giá trị xác định Từ vựng trong C  Kiểu dữ liệu  Kiểu ký tự  Tên: char và unsigned char  Kích thước: 1 byte  Miền giá trị  Một ký tự được biểu diễn thông qua bảng mã ASCII ( Kiểu Phạm vi biểu diễn Số ký tự char -128 đến 127 256 unsigned char 0 đến 255 256 Từ vựng trong C  Kiểu dữ liệu Kiểu ký tự  Phân nhóm ký tự: 3 nhóm  Nhóm các ký tự điều khiển: từ 0÷31 và 127  Nhóm các ký tự văn bản: 32÷126  Nhóm các ký tự đồ họa: 128÷255 Từ vựng trong C  Kiểu dữ liệu  Kiểu nguyên  short, int, long  Kích thước và phạ vi biểu diễn: Kiểu Phạm vi biểu diễn Kích thước int/ signed int -32768 đến 32767 2/4 bytes unsigned int 0 đến 65535 2/4 bytes short/ signed short -32768 đến 32767 2 bytes unsigned short 0 đến 65535 2 bytes long/ signed long -2147483648 đến 2147483647 4 bytes unsigned long 0 đến 4294967295 4 bytes Từ vựng trong C  Kiểu dữ liệu  Kiểu số phẩy động  float, double, long double  Kích thước và phạm vi biểu diễn: Kiểu Phạm vi biểu diễn Kích thước float 3.4E-38 đến 3.4E+38 4 bytes double 1.7E-308 đến 1.7E+308 8 bytes long double 3.4E-4932 đến 1.1E4932 10 bytes Từ vựng trong C  Kiểu dữ liệu  Định nghĩa kiểu dữ liệu mới bằng typedef  Cú pháp: typedef ;  Ví dụ: typedef int nguyen typedef float m50[50] typedef int m_20x30[20][30] Từ vựng trong C  Hằng  Là đại lượng mà giá trị của nó không thay đổi trong suốt quá trình hoạt động của chương trình  Cú pháp khai báo #define  Ví dụ: #define MAX 1000 #define PI 3.141593  Hằng số học:  Hằng số nguyên  Hằng số thực  Hằng ký tự: ký tự đơn được viết trong dấu nháy đơn  Hằng kiểu chuỗi: một dãy các ký tự liên tục được đặt trong dấu nháy kép Từ vựng trong C  Biến  Là một đối tượng dữ liệu có giá trị thay đổi trong quá trình hoạt động của chương trình  Cú pháp khai báo: ;  Ví dụ int a,b,c; Khai báo ba biến int là a,b,c long dai,mn; Khai báo hai biến long là dai và mn char kt1,kt2; Khai báo hai biến ký tự là kt1 và kt2 float x,y Khai báo hai biến float là x và y double canh1,canh2; Khai báo hai biến double là canh1 và canh2 Từ vựng trong C  Biến (t.) Vị trí khai báo biến:  Các biến ngoài:  Là các biến được khai báo bên ngoài hàm  Phạm vi sử dụng được tính từ vị trí khai báo đến cuối chương trình  Các biến cục bộ:  Là các biến được khai báo bên trong hàm, hoặc bên trong các khối lệnh  Phạm vi sử dụng: được tính từ vị trí khai báo đến cuối hàm hoặc cuối khối lệnh Biểu thức  Biểu thức trong C  Các toán tử  Phép toán chuyển đổi kiểu dữ liệu Biểu thức  Là sự kết hợp giữa toán tử và toán hạng để diễn đạt một công thức toán học nào đó  Mỗi biểu thức có một giá trị trả về  Biểu thức thường được dùng trong:  Vế phải của câu lệnh gán  Đối số của hàm  Làm chỉ số cho phần tử của mảng  Trong các biểu thức điều kiện Biểu thức  Toán tử:  Là các phép toán được ngôn ngữ lập trình hỗ trợ trực tiếp  Được biểu diễn thông qua các ký hiệu  Phân loại: 1 ngôi, 2 ngôi, 3 ngôi  Một số toán tử thông dụng  Toán tử số học: + - * / %  Toán tử quan hệ: == > = <= !=  Toán tử gán: = += -= *= /=  Toán tử tăng, giảm trị: ++ --  Toán tử logic: && || !  Toán tử trên bit gồm: & | ~ ^ Biểu thức  Các loại biểu thức  Biểu thức số học  Biểu thức so sánh  Biểu thức logic  Biểu thức gán Biểu thức  Phép toán chuyển đổi kiểu dữ liệu:  Trong biểu thức gồm các toán hạng khác kiểu, kiểu thấp hơn sẽ được tự động nâng thành kiểu cao hơn trước khi thực hiện phép toán. Điều này được gọi là tăng cấp kiểu. Cấp của kiểu dữ liệu theo thứ tự:char < int < long < float < double  Giá trị của kiểu dữ liệu này được gán cho 1 biến có kiểu dữ liệu khác. Việc này xảy ra trong lệnh gán hoặc truyền giá trị các tham số, kiểu dữ liệu được tự động đổi kiểu như sau:  Giá trị của vế phải được chuyển sang kiểu của vế trái đó là kiểu của kết quả.  Kiểu int có thể được chuyển thành float.  Kiểu float có thể chuyển thành int do chặt đi phần sau dấu phảy.  Kiểu double chuyển thành float bằng cách làm tròn.  Kiểu long được chuyển thành int. Biểu thức  Phép toán chuyển đổi kiểu dữ liệu:  Ngoài ra, có thể thực hiện chuyển kiểu giá trị bằng phép chuyển kiểu (ép kiểu) Cú pháp: (Kiểu_dữ_liệu_mới) ; Biểu thức  Ví dụ : #include #define Max 100 const int m = 40; int bt; int main() { int a = 15; a=1; // co so 10 int b = 015; // co so 8 int c = 0x15; // co so 16 float d = 1.2e-6; // 15.06*10^-3 bt = a + b + c/m + (a>b); } 0 1 2 3 4 5 6 7 8 9 10 11 Nhập/xuất dữ liệu  Thư viện #include (standard input/output)  Cú pháp printf([, , , ]);  là cách trình bày thông tin xuất và được đặt trong cặp nháy kép “ ”, có thể bao gồm các thành phần sau:  Văn bản thường (literal text)  Ký tự điều khiển (escape sequence)  Đặc tả (conversion specifier) Nhập/xuất dữ liệu  Văn bản thường (literal text)  Được xuất y hệt như lúc gõ trong chuỗi định dạng.  Ví dụ  Xuất chuỗi Hello World  printf(“Hello ”); printf(“World”);  printf(“Hello World”);  Xuất chuỗi a + b  printf(“a + b”); Nhập/xuất dữ liệu  Ký tự điều khiển (escape sequence)  Gồm dấu \ và một ký tự như trong bảng sau:  Ví dụ  printf(“\t”); printf(“\n”);  printf(“\t\n”); Ký tự điều khiển Ý nghĩa \a \b \n \t \\ \? \” Tiếng chuông Lùi lại một bước Xuống dòng Dấu tab In dấu \ In dấu ? In dấu “ Nhập/xuất dữ liệu  Đặc tả (conversion specifier): %[-][fw][.pp]  Ý nghĩa:  Dấu -: căn lề cho dữ liệu  Có dấu -: kết quả in ra được căn trái  Không có dấu -: kết quả được căn theo bên phải  fw: xác định kích thước tối thiểu để in  pp:  Đối số kiểu double/float: pp là độ chính xác của giá trị in ra  Đối số là xâu ký tự:  pp nhỏ hơn độ dài của xâu: in ra pp ký tự đầu tiên của xâu  Không có pp hoặc pp lớn hơn độ dài xâu: in ra toàn bộ xâu  Đối số là số nguyên: số ký tự được in ra (điền thêm số 0 nếu cần) Nhập/xuất dữ liệu  Đặc tả (conversion specifier):  Ký tự định dạng: Dùng để xác định quy tắc chuyển dạng và dạng in ra của đối số tương ứng. Đặc tả Ý nghĩa %c %d, %ld %f, %lf %s %u Ký tự Số nguyên có dấu Số thực Chuỗi ký tự Số nguyên không dấu char char, int, short, long float, double char[], char* unsigned int/short/long Nhập/xuất dữ liệu  Ví dụ: int a = 1706; float x = 176.85; printf(“%10d”, a);printf(“\n”); printf(“%10.2f”, x);printf(“\n”); printf(“%.2f”, x);printf(“\n”); printf(“%f\n”,x) Nhập/xuất dữ liệu  Thư viện  #include (standard input/output)  Cú pháp  scanf([, , , ]);  giống định dạng xuất nhưng chỉ có các đặc tả.  Các đối số là tên các biến sẽ chứa giá trị nhập và được đặt trước dấu & Nhập/xuất dữ liệu  Ví dụ: cho a và b kiểu số nguyên  Các câu lệnh sau đây sai scanf(“%d”, &a); // Nhập giá trị cho biến a scanf(“%d”, &b); // Nhập giá trị cho biến b //scanf(“%d%d”, &a, &b); scanf(“%d”, a); // Thiếu dấu & scanf(“%d”, &a, &b);// Thiếu %d cho biến b scanf(“%f”, &a); // a là biến kiểu số nguyên scanf(“%9d”, &a); // không được định dạng scanf(“a = %d, b = %d”, &a, &b”); //chứa ký tự khác Các câu lệnh điều khiển  Câu lệnh điều khiển rẽ nhánh  Câu lệnh if else  Câu lệnh switch case  Câu lệnh điều khiển lặp Câu lệnh for Câu lệnh while Câu lệnh do while Các câu lệnh điều khiển  Câu lệnh if else  Bài toán: Xác định 1 năm có phải là năm nhuận  Lệnh if là lệnh cho phép thực hiện hay không thực hiện một khối lệnh nào đó tùy thuộc vào tính đúng của biểu thức.  Có 2 dạng: Dạng 1 Dạng 2 if (biểu thức) khối lệnh (1) if (biểu thức) khối lệnh (1) else khối lệnh (2) Các câu lệnh điều khiển  Câu lệnh if else Các câu lệnh điều khiển  Câu lệnh if else  Trong C, cho phép sử dụng nhiều câu lệnh if lồng nhau  Máy sẽ ghép lệnh else với lệnh if không có else gần nhất  Chú ý: nên sử dụng dấu {} để tránh nhầm lẫn if-else của câu lệnh này với câu lệnh khác  Khi muốn thực hiện 1 trong n quyết định if (biểu thức 1) khối lệnh 1 else if (biểu thức 2) khối lệnh 2 ...... else khối lệnh n Các câu lệnh điều khiển Câu lệnh if else Ví dụ: Viết chương trình nhập vào hai số nguyên n, k. Kiểm tra xem n có chia hết cho k hay không, nếu có in ra màn hình dưới định dạng: n chia het cho k (Ví dụ: 6 chia hết cho 3), nếu không in ra màn hình dòng chữ “khong chia het”. Viết chương trình giải phương trình bậc nhất. Viết chương trình giải phương trình bậc 2 (kể cả trường hợp có nghiệm phức) Các câu lệnh điều khiển  Câu lệnh if else  Một số lỗi đơn giản thường gặp: #include #include main() { int b; printf("Nhap b =“);scanf("%d",&b); if (b=0) printf("b bang 0"); getch(); } 0 1 2 3 4 5 6 7 8 9 10 11 Các câu lệnh điều khiển  Câu lệnh if else  Một số lỗi đơn giản thường gặp: #include #include main() { int b; printf("Nhap b =“);scanf("%d",&b); if (b%5==0) printf("b la chia het cho5\n"); printf("b = 5*%d",b/5); else } 0 1 2 3 4 5 6 7 8 9 10 Các câu lệnh điều khiển  Câu lệnh if else  Một số lỗi đơn giản thường gặp: #include #include main() { int b; printf("Nhap b = );scanf("%d",&b); if (b%5==0); printf("b la uoc cua 5\n"); getch(); } 0 1 2 3 4 5 6 7 8 9 Các câu lệnh điều khiển  Câu lệnh switch case  Có thể sử dụng câu lệnh switch để chọn 1 trong nhiều quyết định switch (biểu thức nguyên ) { case n1: khối lệnh 1 break; case n2: khối lệnh 2 break; ....... case nk: khối lệnh k break; [ default: khối lệnh k+1 break;] }  ni là các số nguyên, hằng ký tự hoặc biểu thức hằng.  default là một thành phần không bắt buộc phải có trong thân của switch.  Sự hoạt động của switch: • Giá trị biểu thức bằng ni, chương trình hoạt động tại nhãn case ni, cho đến khi gặp break. • Nếu giá trị biểu thức khác với tất cả các ni, sẽ thực hiện lệnh sau default, hoặc thoát khỏi switch. Các câu lệnh điều khiển  Câu lệnh switch case Các câu lệnh điều khiển  Câu lệnh switch case  Ví dụ:  Viết chương trình đọc các số từ 0 đến 9. Nếu nằm ngoài khoảng đó, in ra dòng thông báo: “Khong doc duoc”.  Viết chương trình in ra số ngày trong tháng, nếu là tháng 2 yêu cầu nhập thêm năm để tính ngày. Các câu lệnh điều khiển  Câu lệnh for  Bài toán: in ra bảng cửu chương của 3?  Lệnh for cho phép thực hiện lặp lại 1 số câu lệnh tuân theo một số quy luật nào đó. Đ S <Đ/K lặp> for (; ; ) ; Các câu lệnh điều khiển  Câu lệnh for  Ví dụ  Một số lưu ý: 1. Câu lệnh for là câu lệnh đơn, và có thể lồng nhau 2. Các phần khởi đầu, bước nhảy, điều kiện lặp có thể không xuất hiện 3. Lệnh break làm kết thúc câu lệnh. 4. Lệnh continue bỏ qua lần lặp hiện tại. 5. Các thành phần , , cách nhau bằng dấu ; (bắt buộc phải có!) 6. Nếu có nhiều thành phần trong mỗi phần thì được cách nhau bằng dấu , int i; for(i = 1; i <= 9; i++) printf("3x%d = %d\n", i, i*3); Các câu lệnh điều khiển  Câu lệnh for  Ví dụ:  Viết chương trình nhập vào số nguyên n, tính tổng bình phương các số từ 1 đến n (n nhập từ bàn phím)  Viết chương trình tính n! (n nhập từ bàn phím)  Viết chương trình tính và in ra màn hình giá trị biểu thức: (n nhập từ bàn phím)  Viết chương trình in ra bảng cửu chương Các câu lệnh điều khiển  Câu lệnh for  Một số lỗi thường gặp #include #include main() { int n,s; n = 10; s = 0; for(int i = 1;i<10;i++); s += i; printf("Tong cac so tu nhien tu 1 den 10: %d",s); getch(); } Các câu lệnh điều khiển  Câu lệnh for  Một số lỗi thường gặp #include #include main() { int i,j; for(i = 1,j = 1;j<5,i<3;i++,j++) printf("i = %d; j = %d\n",i,j); getch(); } Các câu lệnh điều khiển  Câu lệnh while  Btoán: in ra các bội số (nhỏ hơn 20) của 2?  Lệnh while là lệnh thực hiện 1 số câu lệnh khi thỏa mãn một điều kiện nào đó. Đ S while (Điều kiện) Hành_động_cần_lặp; Các câu lệnh điều khiển  Câu lệnh while  Một số lưu ý:  Câu lệnh while là câu lệnh đơn, có thể đặt lồng nhau  Câu lệnh while có thể không thực hiện lần nào  Câu lệnh while có thể lặp vô tận  Có thể sử dụng các lệnh break, continue trong các vòng lặp Các câu lệnh điều khiển do Hành_động_cần_lặp ; while (Điều kiện); S Đ  Câu lệnh dowhile  Lệnh do while là lệnh cho phép thực hiện 1 số câu lệnh khi còn thỏa mãn một điều kiện nào đó. Các câu lệnh điều khiển  Câu lệnh dowhile  Một số lưu ý:  Câu lệnh do while là câu lệnh đơn, có thể đặt lồng nhau  Câu lệnh do while thực hiện ít nhất 1 lần  Câu lệnh do while có thể lặp vô tận  Có thể sử dụng các lệnh break, continue trong các vòng lặp Các câu lệnh điều khiển  So sánh 3 câu lệnh lặp  Đều có khả năng lặp lại một (hoặc nhiều) hành động nhiều lần.  Câu lệnh for có số vòng lặp được xác định trước  while có thể không thực hiện lần nào.  do while sẽ được thực hiện ít nhất 1 lần. Các câu lệnh điều khiển  Bài tập trên lớp: Sử dụng các câu lệnh điều khiển thực hiện các bài sau  Viết chương trình nhập vào một số nguyên dương không lớn hơn 10000, in ra màn hình tổng các chữ số của số đó (ví dụ nhập n = 1356 in ra 15). Chương trình chỉ cho phép người dùng nhập các giá trị từ 1 – 10000, nếu nằm ngoài vùng giá trị trên yêu cầu nhập lại.  Viết chương trình in ra 3 số hoàn thiện bé nhất. Số hoàn thiện n là số nguyên dương mà tổng các ước nguyên dương (nhỏ hơn n) bằng n. VD: 28 = 1+2+4+7+14; Các câu lệnh điều khiển  Viết chương trình C thực hiện thuật toán theo sơ đồ khối hình bên Bài tập về nhà  Tìm hiểu các bài toán sau và cài đặt chương trình tương ứng:  Tính gần đúng tích phân xác định (phương pháp hình chữ nhật, hình thang)  Tìm nghiệm gần đúng của phương trình (phương pháp chia đôi)  Tính căn bậc hai theo phép lặp Newton