Bài giảng Ngôn ngữ lập trình C - Chương 1: Các khái niệm cơ bản

Tràn số trong tính toán • Tràn số xảy ra khi kết quả tính toán trong một biểu thức vượt quá miền xác định của dữ liệu hiện tại. • Ví dụ 6: • void main() • { • int a = 1000; • int b = 50; • long c = a*b; • printf(“%ld\n”, c); //c sẽ mang giá trị âm • } • Do hai biến a và b kiểu int nên chương trình sẽ cho rằng kết quả sẽ thuộc kiểu int. Nhưng biểu thức a*b cho ra kết quả 50000 lớn hơn 32767 và như vậy lỗi tràn số sẽ xảy ra, kết quả nhận được sẽ là con số âm. Trong trường hợp này ta nên ép kiểu nhưsau: c = (long)a * b. Với thao tác ép kiểu này, biến a sẽ được hiểu là kiểu long nên biểu thức (long)a*b sẽ được hiểu thuộc kiểu long.

pdf22 trang | Chia sẻ: maiphuongtl | Lượt xem: 2530 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Bài giảng Ngôn ngữ lập trình C - Chương 1: Các khái niệm cơ bản, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
PHẦN 1: NGÔN NGỮ LẬP TRÌNH C CHƯƠNG 1: CÁC KHÁI NIỆM CƠ BẢN Nội dung Khái niêm về ngôn ngữ lập trình Lời chú thích Câu lệnh Kiểu dữ liệu Biến Hằng Phép toán Biểu thức Các hàm thư viện chuẩn của ngôn ngữ C KHÁI NIỆM VỀ NGÔN NGỮ LẬP TRÌNH  Một chương trình (CT) là một chuỗi các chỉ thị điều khiển sự hoạt động của máy tính nhằm để giải quyết một công việc hay một vấn đề nào đó.  Người ta có thể sử dụng các ngôn ngữ lập trình (NNLT) khác nhau để viết các CT. Khi một CT được viết bằng một NNLT thì các chỉ thị, câu lệnh trong CT phải tuân theo các quy tắc mà NNLT đó quy định. • Ví dụ 1: Chương trình in câu thông báo “Chào bạn” ra màn hình • #include • /*Chương trình in ra một câu thông báo*/ • void main() • { • printf(“Chao ban”); /* hàm printf() dùng in dữ liệu ra màn hình */ • } • Chú ý: hàm main() là hàm bắt buộc mọi chương trình phải có. Khi chạy chương trình máy chạy từ câu lệnh đầu tiên của hàm main() đến câu lệnh cuối cùng của nó • Ví dụ 2: CT nhắc người dùng nhập vào 2 số nguyên, tính tổng số của chúng và in giá trị tổng ra màn hình. • #include • // CT tính tổng 2 số nguyên • void main() • { • int a, b, s; // khai báo ba biến nguyên a, b, và s • printf (“Nhap so nguyen thu 1:”); • scanf(“%d”, &a); // hàm scanf() dùng nhập dữ liệu cho biến a printf (“Nhap so nguyen thu 2:”); • scanf(“%d”, &b); • s = a + b; // tính biểu thức a+b và gán kết quả cho biến s • printf(“ket qua: %d\n”, s); • } Chú ý: • ký hiệu & là toán tử lấy địa chỉ • ký hiệu %d là định dạng để in giá trị biến nguyên s. LỜI CHÚ THÍCH  Lời chú thích là nhưng lời giải thích của người viết chương trình để làm cho chương trình dễ hiểu, nó không có tác dụng gì đối với chương trình dịch.  Có hai hình thức chú thích: Lời chú thích được dặt giữa hai dấu /* và */ Lời chú thích được bắt đầu bởi dấu // CÂU LỆNH  Lệnh biểu thức bao gồm một biểu thức đơn giản và theo sau là dấu chấm phẩy. • Ví dụ 1: • a = b + 3.5; • printf(“Chao cac ban”);  Lệnh kép bao gồm một số lệnh riêng lẽ được bao trong cặp dấu {}. Những lệnh riêng lẽ này có thể là lệnh biểu thức, lệnh kép hay lệnh điều khiển. Lệnh kép không được kết thúc bởi dấu chấm phẩy. • Ví dụ 2: • { • s = r * r * PI; • printf(“Dien tich là %0.2f\n”, s); • }  Lệnh điều khiển bao gồm các câu lệnh như lệnh rẽ nhánh, lệnh lặp, lệnnh chuyển điều khiển, … • Ví dụ 3: • if(r < 0) • printf(“gia tri khong hop le\n”); • else • { • s = r * r * PI; • printf(“Dien tich là %0.2f\n”, s); • } KIỂU DỮ LIỆU  Kiểu dữ liệu là khái niệm để chỉ một tập hợp các giá trị. Có bốn kiểu dữ liệu cơ bản là char, int, float và double  Kiểu char dùng để biểu diễn một ký tự trong bảng mã ASCCI, thực chất là một số nguyên không dấu có giá trị từ 0 đến 255.  Kiểu int dùng để biểu diễn các số nguyên và có thể có 3 loại: int, long int, unsigned int.  Kiểu float dùng để biểu diễn các số thực với độ chính xác đơn.  Kiểu double dùng để biểu diễn các số thực với độ chính xác kép • Kiểu Phạm vi Kích thước • char 0 .. 255 1 byte • int -32768 .. 32767 2 bytes • long -2147483648 .. 2147483648 4 bytes • unsiged 0 .. 65535 2 bytes • float 3.4e-38 .. 3.43+38 4 bytes • double 1.7e-308 .. 1.7e+308 8 bytes Chú ý: Máy có thể lưu trữ được số kiểu float có giá trị tuyệt đối từ 3.4e-38 đến 3.43+38. Số có giá trị tuyệt đối nhỏ hơn 3.4e-38 được xem bằng 0. Phạm vi biểu diễn của số double được hiểu theo nghĩa tương tự. BIẾN  Biến là một đại lượng có giá trị thay đổi trong thời gian thực hiện chương trình.  Mỗi biến có một tên và một địa chỉ dành riêng cho nó.  Mỗi biến có thể chứa giá trị tương ứng với kiểu dữ liệu của biến đã khai báo.  Để sử dụng một biến cần khai báo biên đó. Cú pháp khai báo như sau: ; • Ví dụ: • int a; // khai báo một biến a kiểu int • long b; // khai báo một biến b kiểu long • float delta; // khai báo một biến delta kiểu float HẰNG  Hằng là đại lượng mà giá trị của nó không thay đổi trong thời gian thực hiện chương trình.  Hằng có thể được định nghĩa bởi toán tử define • #define • Ví dụ: • #define MAX 100 • #define PI 3.14159 • #define E 2.71828 • Chú ý: Cách định nghĩa này có hai điểm lợi:  Nó thay đổi một tên khó hiểu như 100 bằng một tên có nghĩa là MAX, bởi vậy chương trình trở nên sáng sủa, dễ đọc.  Nếu trong chương trình xuất hiện nhiều lần, khi muốn thay đổi giá trị của hằng ta phải sửa giá trị tại những nơi hằng đó xuất hiện, nếu dùng #define ta chỉ cần sử duy nhất dòng #define PHÉP TOÁN  Phép toán số học • Gồm có +, -, *, / , %(phép chia lấy phần dư) • Chú ý:  Phép chia hai số nguyên sẽ chặt cụt phần phân.  Phép chia hai số thực hoặc một số thực với mộ số nguyên sẽ cho ra số thực.  Phép tóan % không áp dụng cho số thực. Ví dụ 1: int a = 9, b = 2, x, y; float c = 9.0, z; x = a/b; // x = 4 y = a%b; // y = 1 z = c/a; // z = 2.5  Phép toán quan hệ • Gồm có >, >=, <, <=, ==, != (khác)  Phép toán logic • Gồm có || (hoặc), && (và), ! (phủ định) • a b a&&b a||b !a • 0 0 0 0 1 • 0 1 0 1 1 • 1 0 0 1 0 • 1 1 1 1 0  Phép toán tăng giảm • ++: cộng thêm một vào một toán hạng. • --: trừ bớt một khỏi toán hạng. • Ví dụ 2: • int n = 10; //khởi tạo giá trị cho biến n • n++; // bây giờ n có giá trị 11 • Trong C phân biệt n++ và ++n. Với n++ thì giá trị của n được dùng trước khi tăng n, ++n thì giá trị của n được dùng sau khi tăng n. Tương tự cho phép toán --. • Ví dụ 3: • int n = 10; • int m = ++n + 20; // n = 11, m = 31; • Ví dụ 4: • int n = 10; • int m = n++ + 20; // m = 30, n = 11;  Phép toán chuyển kiểu (ép kiểu) • Phép toán chuyển kiểu dùng để chuyển một kiểu bất kỳ sang một kiểu mong muốn. • () • Ví dụ 5: • float n = 2520.40; • int m = (int) n; // m = 2520  Phép toán gán • = ; • Ví dụ 6: n = 10; //gán giá trị 10 cho biến n  Phép toán gán kép • = ; • Ví dụ 8: • n = 10; //gán giá trị 10 cho biến n • n += 10; // n = n + 10 -> 20 • n -= 5; // n = n – 5 -> 15 • n *= 2; // n = n * 2 -> 30 BIỂU THỨC  Biểu thức là sự kết hợp giữa các phép toán và toán hạng để diễn đạt một công thức toán học nào đó. Toán hạng có thể xem là một đại lương có một giá trị nào đó bao gồm hằng, biến và hàm.  Biểu thức được phân loại theo kiểu giá trị nguyên và thực. Trong các mệnh đề logic, biểu thức được phân thành đúng (giá trị khác không) và sai (giá trị bằng 0). • Ví dụ 5: • p = (a + b + c) / 2; • s = sqrt(p*(p-a)*(p-b)*(p-c));  Biểu thức điều kiện • ? : • Giá trị của biểu thức điều kiện sẽ bằng E2 nếu E1 đúng, ngược lại bằng E3 • Ví dụ 7: • s = x > y ? x : y; // s sẽ bằng giá trị lớn nhất của x, y CÁC HÀM THƯ VIỆN CHUẨN C  Thư viện C chuẩn tập hợp các hàm đã định nghĩa sẳn và các phần tử khác vào trong những tập tin tiêu đề *.h (header files). Để sử dụng các hàm trong thư viện này, chúng ta đặt các chỉ thị #include ở đầu tập tin chương trình.  Các hàm toán học • Các hàm toán học được định nghĩa trong tập tin tieu đề math.h. Để dùng các hàm này cần thêm vào đầu chương trình chỉ thị #include • Tên hàm Ý nghĩa • ceil(x) Lấy phần nguyên của x cộng thêm 1 • floor(x) Lấy phần nguyên của x • abs(x) Lấy giá trị tuyệt đối của x • sprt(x) Lấy căn bậc hai của x • pow(x, p) Lấy x lũy thừa p • exp(x) exponential của x(ex) • log(x) Lấy logarithm tự nhiên của x CÁC HÀM NHẬP XUẤT DỮ LIỆU  Các hàm nhập xuất dữ liệu định nghĩa trong tập tin tiêu đề stdio.h. Để dùng các hàm này cần thêm vào đầu chương trình chỉ thị #include  Hàm nhập dữ liệu • Cú pháp • int scanf(“chuỗi định dạng”[,danh sách các đối]);  Chuỗi định dạng • %c ký tự • %d số nguyên (int) • %ld số nguyên (long) • %f số thực (float) • %lf số thực (double)  Danh sách các đối: mỗi đối trong danh sách là một con trỏ chứa địa chỉ của một biến dùng để lưu trữ giá trị đọc vào từ bàn phím.  Hàm xuất dữ liệu • cú pháp • int printf(“chuỗi định dạng”[,danh sách các đối]);  Chuỗi định dạng được đặt trong nháy kép, gồm 3 loại: + Chuỗi ký tự ghi như thế nào in ra giống như vậy. + Ký tự định dạng cho phép xuất giá trị các đối ra màn hình • %c ký tự • %s chuỗi • %d số nguyên (int) • %ld số nguyên (long) • %f số thực (float hay double) + Ký tự điều khiển • \n sang dòng mới • \t dấu tab • \r nhảy về đầu dòng, không xuống dòng  Danh sách các đối được phân cách nhau bởi dấu phẩy. Đối có thể là một hằng, một biến, một lời gọi hàm. Giá trị của đối sẽ được chuyển dạng và in ra theo cách viết ký tự định dạng. Tràn số trong tính toán • Tràn số xảy ra khi kết quả tính toán trong một biểu thức vượt quá miền xác định của dữ liệu hiện tại. • Ví dụ 6: • void main() • { • int a = 1000; • int b = 50; • long c = a*b; • printf(“%ld\n”, c); //c sẽ mang giá trị âm • } • Do hai biến a và b kiểu int nên chương trình sẽ cho rằng kết quả sẽ thuộc kiểu int. Nhưng biểu thức a*b cho ra kết quả 50000 lớn hơn 32767 và như vậy lỗi tràn số sẽ xảy ra, kết quả nhận được sẽ là con số âm. Trong trường hợp này ta nên ép kiểu như sau: c = (long)a * b. Với thao tác ép kiểu này, biến a sẽ được hiểu là kiểu long nên biểu thức (long)a*b sẽ được hiểu thuộc kiểu long.

Các file đính kèm theo tài liệu này:

  • pdfchuong_1_2976.pdf