Lập trình cơ bản: Ngôn ngữlập trình...
Transcript of Lập trình cơ bản: Ngôn ngữlập trình...
Lập trình cơ bản:Ngôn ngữ lập trình C
Đỗ Thị Mai HườngBộ môn Hệ thống thông tinKhoa Công nghệ thông tin
2-Dec-13 2
Nội dung
• Giới thiệu chung• Lệnh nhập/xuất• Lệnh điều kiện• Lệnh vòng lặp• Kiểu mảng• Xâu kí tự• Con trỏ• Hàm• Kiểu cấu trúc (struct) • Làm việc với tệp
TTàài lii liệệu hu họọc tc tậậpp
• Bài giảng Lập trình C – Đỗ Thị Mai Hường.
• Tài liệu ôn tập C
Chương 1: Giới thiệu chung về lập trình C 3
Tài liệu tham khảo
• Lập trình C – PGS Phạm Văn Ất.
2-Dec-13 5
Nội dung
• Giới thiệu chung• Lệnh nhập/xuất• Lệnh điều kiện• Lệnh vòng lặp• Kiểu mảng• Xâu kí tự• Con trỏ• Hàm• Kiểu cấu trúc (struct) và kiểu hợp (union)• Làm việc với tệp
2-Dec-13 6
Giới thiệu chung• Ngôn ngữ C ra đời năm 1972• Phát triển thành C++ vào năm 1983• Ngôn ngữ được sử dụng rất phổ biến• Có nhiều trình biên dịch C khác nhau
– Turbo C, Borland C– GCC
• Thực hành trên Turbo C– Cung cấp môi trường tích hợp cho phép soạn thảo và
biên dịch
2-Dec-13 7
Giới thiệu chung• Một số phím soạn thảo
Phím Chức năng
Di chuyển con trỏ sang trái, lên, xuống, sang phải
Home Đưa con trỏ về đầu dòng
End Đưa con trỏ về cuối dòng
PgUp Đưa con trỏ về đầu một trang màn hình
PgDw Đưa con trỏ về cuối một trang màn hình
Ctrl + Dịch con trỏ sang phải một chữ
Ctrl + Dịch con trỏ sang trái một chữ
2-Dec-13 8
Giới thiệu chung• Một số phím soạn thảo
Phím Chức năng
Enter Xuống dòng
Insert Chuyển đổi chế độ chèn/đè
Delete Xóa kí tự ngay sau vị trí con trỏ
Back space Xóa kí tự ngay trước vị trí con trỏ
Ctrl + Y Xóa dòng kí tự chứa con trỏ
Ctrl + Q + Y Xóa các kí tự từ vị trí con trỏ đến cuối dòng
2-Dec-13 9
Giới thiệu chung• Một số phím soạn thảo
Phím Chức năngCtrl + K + C Chép khối tới vị trí mới của con trỏ
Ctrl + K + V Chuyển khối tới vị trí mới của con trỏ
Ctrl + K + Y Xóa cả khối
Ctrl + K + W Ghi một khối vào một tệp trên đĩa
Ctrl + K + R Đọc một khối từ một tệp trên đĩa
Ctrl + Q + B Dịch chuyển con trỏ về đầu khốiCtrl + Q + K Dịch chuyển con trỏ về cuối khối
Ctrl + Q + F Tìm kiếm một cụm từ
Ctrl + Q + A Tìm kiếm một cụm từ và sau đó thay thế bằng một cụm từ khác
Ctrl + Q + L Lặp lại công việc Ctrl + Q + F hoặc Ctrl + Q + A cuối cùng
2-Dec-13 10
Giới thiệu chung• Từ khóa
– các từ dành riêng của ngôn ngữ C – từ khóa phải được sử dụng đúng cú pháp– một số từ khóa thông dụng
auto break case char continue defaultdo double else extern float forgoto if int long register returnshort sizeof static struct switch typedefunion unsigned void volatile while
2-Dec-13 11
Giới thiệu chung• Tên (identifier)
– Dùng để định danh các thành phần của chương trình– Tên biến, tên hàm, tên hằng, …– Tên là một dãy các kí tự gồm các chữ cái [a-z, A-Z, 0-9] và gạch
nối “_”– Lưu ý:
• tên không đuợc chứa kí tự trống, • tên không được bắt đầu bằng một chữ số,• tên không được trùng với từ khóa
– Nên đặt các tên gợi nhớ, có ý nghĩa– Tên chuẩn: một số tên có sẵn của trình biên dịch
2-Dec-13 12
Giới thiệu chung• Hằng
– là đại lượng có giá trị không thay đổi được trong chương trình– ví dụ
• 111 hằng là một số• ‘b’ hằng là một kí tự• “lap trinh” hằng là một chuỗi kí tự
• Biến– là đại lượng có thể thay đổi được giá trị trong chương trình
• Biểu thức– là một công thức tính toán để có một giá trị theo một qui tắc toán
học– ví dụ: x + y * z
2-Dec-13 13
Giới thiệu chung• Mỗi một câu lệnh C đều phải kết thúc bởi một dấu “;”• Lời chú thích được đặt giữa hai dấu “/*” và “*/”
– Ví dụ/* Đây là một chú thích */
• Khi viết chương trình nên sử dụng các lời chú thích • Trình biên dịch C phân biệt chữ in hoa và chữ in thường
2-Dec-13 14
Giới thiệu chung• Các kiểu dữ liệu chuẩn
– Kiểu kí tự– Kiểu số nguyên– Kiểu số thực
2-Dec-13 15
Giới thiệu chung• Kiểu kí tự
– Kiểu char– Chiếm một byte– Biểu diễn các kí tự trong bảng mã ASCII– Ví dụ
• ‘a’ có giá trị mã ASCII là 97• ‘0’ có giá trị mã ASCII là 48
– Kiểu kí tự đồng thời cũng là kiểu số nguyên– Có hai kiểu char: : signed char và unsinged char
Kiểu kí tự Kích thước Miền giá trị
signed char 1 byte -128 -> 127
unsigned char 1 byte 0 -> 255
2-Dec-13 16
Giới thiệu chung• Kiểu số nguyên
– Có nhiều kiểu số nguyên
Kiểu số nguyên Kích thước Miền giá trị
int, short 2 byte -32768 -> 32767
unsigned int, unsigned short
2 byte 0 -> 65535
long 4 byte -2147483648 -> 2147483647
unsigned long 4 byte 0 -> 4294967295
2-Dec-13 17
Giới thiệu chung• Kiểu số thực
– Có nhiều kiểu số thực
Kiểu số thực Kích thước Miền giá trị
float 4 byte 3.4E-38 -> 3.4E+38
double 8 byte 1.7E-308 -> 1.7E+308
long double 10 byte 3.4E-4932 -> 1.1E+4932
2-Dec-13 18
Giới thiệu chung• Kiểu số thực
– Có hai cách biểu diễn số thực• Dạng thập phân: dùng dấu chấm để ngăn cách phần nguyên và
phần thập phân– Ví dụ: -12.345672, 1203.8375
• Dạng khoa học: gồm phần định trị và phần mũ của cơ số 10, hai phần cách nhau bởi chữ E hoặc e
– Ví dụ: 6.123E+02
2-Dec-13 19
Giới thiệu chung• Các phép toán
– Các phép toán trên số nguyên• Cộng: +• Trừ: -• Nhân: *• Chia lấy phần nguyên: /• Chia lấy phần dư: %
– Các phép toán trên số thực• Cộng: +• Trừ: -• Nhân: *• Chia: /
2-Dec-13 20
Giới thiệu chung• Các phép toán
– Các phép toán quan hệ (so sánh)• So sánh bằng nhau: ==• So sánh khác nhau: !=• So sánh lớn hơn: >• So sánh nhỏ hơn: <• So sánh lớn hơn hoặc bằng: >=• So sánh nhỏ hơn hoặc bằng : <=
– Biểu thức chứa các phép toán quan hệ được gọi là biểu thứcquan hệ
– Biểu thức quan hệ có giá trị đúng hoặc sai
2-Dec-13 21
Giới thiệu chung• Các phép toán
– Các phép toán logic• Kiểu logic trong C không được định nghĩa một cách tường minh• Một giá trị khác 0 là đúng, một giá trị bằng 0 là sai
Phép toán Kí hiệu Ví dụ
Và (AND) && 2 && 0 = sai
Hoặc (OR) || 10 || 5 = đúng
Phủ định (NOT)
! !0 = đúng
2-Dec-13 22
Giới thiệu chung• Các phép toán
– Các phép toán trên bit• Phép OR từng bit: |• Phép AND từng bit: & • Phép XOR từng bit: ^• Phép đảo bit: • Phép dịch trái (nhân 2): <<• Phép dịch phải (chia 2): >>
– Ví dụ• 3 & 5 = 1• a << n /* a*(2n) */• a >> n /* a/(2n) */
ToToáánn ttửử logic logic nhnhịị phânphân
Dữ liệu chỉ được xử lý sau khi đã chuyển đổi giátrị SỐ thành giá trị NHỊ PHÂN
Mỗi vị trí của bit chỉ trả về kết quả là 1 nếu bit của một trong hai toán hạng là 1 mà khôngkhông phải cả hai toán hạng cùng là 1.
Bitwise XOR ( x ^ y)
Ðảo ngược giá trị của toán hạng (1 thành 0 vàngược lại).
Bitwise NOT( ~ x)
Mỗi vị trí của bit trả về kết quả là 1 nếu bit củamột trong hai toán hạng là 1.
Bitwise OR( x | y)
Mỗi vị trí của bit trả về kết quả là 1 nếu bit củahai toán hạng là 1.
Bitwise AND ( x & y)
Mô tảToán tử
ToToáánn ttửử logic logic nhnhịị phânphân ((tttt.).)
Ví dụ
• 10 & 15 1010 & 11111010 10
• 10 | 15 1010 | 11111111 15
• 10 ^ 15 1010 ^ 11110101 5
• ~ 10 ~10101…11110101 -11
ChuyChuyểểnn đđổổii kikiểểuuQui tắc chuyển đổi kiểu tự động trình bày dưới đây nhằm xác định giá trị biểu
thức:a. char và short được chuyển thành int và float được chuyển thành double.b. Nếu có một toán hạng là double, toán hạng còn lại sẽ được chuyển thành
double, và kết quả là double.c. Nếu có một toán hạng là long, toán hạng còn lại sẽ được chuyển thành long, và
kết quả là long. d. Nếu có một toán hạng là unsigned, toán hạng còn lại sẽ được chuyển thành
unsigned và kết quả cũng là unsigned.e. Nếu tất cả toán hạng kiểu int, kết quả là int.
Ví dụ
Operators and Expression 26
ÉÉpp kikiểểuu
Một biểu thức được ép thành một kiểu nhất định bằngcách dùng kỹ thuật ép kiểu (cast). Cú pháp :
(kiểu dữ liệu) castKiểu Bất cứ kiểu dữ liệu hợp lệ trong C
Ví dụ:
float x,f;
f = 3.14159;
x = (int) f;
Giá trị của x sẽ là 3 (số nguyên)
Giá trị số nguyên trả về bởi (int) f được chuyển thành số thực khi nóđược toán tử GÁN xử lý. Song, giá trịcủa f vẫn không đổi.
Operators and Expression 27
ĐĐộộ ưuưu tiêntiên ccủủaa totoáánn ttửử Độ ưu tiên tạo nên cấu trúc phân cấp của loại toán tử nàyso với loại toán tử khác khi tính giá trị một biểu thức số học Nó đề cập đến thứ tự thực thi các toán tử trong C Độ ưu tiên của các toán tử này được thay đổi bởi các dấungoặc đơn trong biểu thức
Phải đến trái=Hai ngôiTrái đến phải+ -Hai ngôiTrái đến phải* / %Hai ngôiTrái đến phải^Hai ngôiPhải đến trái- ++ --Một ngôiTính kết hợpToán tửLoại toán tử
Operators and Expression 28
ĐĐộộ ưuưu tiêntiên ccủủaa totoáánn ttửử ((tttt.).)
Operators and Expression 29
ĐĐộộ ưuưu tiêntiên ccủủaa totoáánn ttửử so so ssáánhnh
Độ ưu tiên của toán tử so sánh (quan hệ) luônđược tính từ trái sang phải
Operators and Expression 30
ĐĐộộ ưuưu tiêntiên ccủủaa totoáánn ttửử logiclogic
OR3AND2NOT1
Toán tửThứ tự ưu tiên
Khi có nhiều toán tử logic trong một điều kiện, ta ápdụng quy tắc tính từ phải sang trái
Operators and Expression 31
Xét biểu thức sau:False OR True AND NOT False AND True
Ðiều kiện này được tính như sau:False OR True AND [NOT False] AND True
NOT có độ ưu tiên cao nhất.False OR True AND [True AND True]
Ở đây, AND có độ ưu tiên cao nhất, những toán tửcó cùng ưu tiên được tính từ phải sang trái.
False OR [True AND True][False OR True]
ĐĐộộ ưuưu tiêntiên ccủủaa totoáánn ttửử luluậậnn lýlý ((tttt.).)
True
Logic (Logical)3So sánh (Comparison)2Số học (Arithmetic)1
Kiểu toán tửThứ tự ưu tiên
Khi một biểu thức có nhiều loại toán tử thì độ ưutiên giữa chúng phải được thiết lập.
ĐĐộộ ưuưu tiêntiên gigiữữaa ccáácc totoáánn ttửử
ĐĐộộ ưuưu tiêntiên gigiữữaa ccáácc totoáánn ttửử ((tttt.).)
Ví dụ :2*3+4/2 > 3 AND 3<5 OR 10<9
Việc tính toán như sau :[2*3+4/2] > 3 AND 3<5 OR 10<9
Toán tử số học sẽ được tính trước[[2*3]+[4/2]] > 3 AND 3<5 OR 10<9
[6+2] >3 AND 3<5 OR 10<9[8 >3] AND [3<5] OR [10<9]
Kế đến là toán tử so sánh có cùng độ ưu tiên. Ta ápdụng quy tắc tính từ trái sang phải.
True AND True OR FalseCuối cùng là toán tử kiểu logic. AND sẽ có độ ưu tiêncao hơn OR
[True AND True] OR FalseTrue OR False
True
ĐĐộộ ưuưu tiêntiên gigiữữaa ccáácc totoáánn ttửử ((tttt.).)
Thay đổi độ ưu tiên
• Dấu ngoặc đơn ( ) có độ ưu tiên cao nhất• Độ ưu tiên của các toán tử có thể được thay đổi bởidấu ngoặc đơn• Toán tử có độ ưu tiên thấp hơn nếu đặt trong dấungoặc đơn sẽ được thực thi trước• Khi các cặp ngoặc đơn lồng nhau ( ( ( ) ) ), cặp ngoặcđơn trong cùng nhất sẽ được thực thi trước• Nếu trong biểu thức có nhiều cặp ngoặc đơn thì việcthực thi sẽ theo thứ tự từ trái sang phải
Ví dụ :
5+9*3^2-4 > 10 AND (2+2^4-8/4 > 6 OR (2<6 AND 10>11))
Cách tính :1) 5+9*3^2-4 > 10 AND (2+2^4-8/4 > 6 OR (True AND False))
Dấu ngoặc đơn bên trong sẽ được tính trước2) 5+9*3^2-4 > 10 AND (2+2^4-8/4 > 6 OR False)
Thay đổi độ ưu tiên (tt.)
3) 5+9*3^2-4 >10 AND (2+16-8/4 > 6 OR False)
Kế đến dấu ngoặc đơn ở ngoài được tính đến4) 5+9*3^2-4 > 10 AND (2+16-2 > 6 OR False)
5) 5+9*3^2-4 > 10 AND (18-2 > 6 OR False)
6) 5+9*3^2-4 > 10 AND (16 > 6 OR False)
7) 5+9*3^2-4 > 10 AND (True OR False)
8) 5+9*3^2-4 > 10 AND True
Thay đổi độ ưu tiên (tt.)
9) 5+9*9-4>10 AND True
Biểu thức bên trái được tính trước10) 5+81-4>10 AND True
11) 86-4>10 AND True
12) 82>10 AND True
13) True AND True
14) True
Thay đổi độ ưu tiên (tt.)
2-Dec-13 39
Giới thiệu chung• Khái niệm hàm
– Là đoạn chương trình viết ra một lần, được sử dụng nhiều lần– Mỗi lần sử dụng chỉ cần gọi tên hàm và cung cấp các tham số
• Cấu trúc chương trình
#include <...> /* Gọi các tệp tiêu đề trong chương trình */#define ... /* Khai báo hằng số */typedef /* Định nghĩa kiểu dữ liệu *//* Nguyên mẫu các hàm: khai báo tên hằm và các tham số *//* Khai báo các biến toàn cục */
main(){
/* Khai báo biến *//* Các câu lệnh */
}
/* Định nghĩa các hàm */
2-Dec-13 40
Giới thiệu chung• Các khai báo
– #include: dùng để gọi tệp tiêu đề– Khai báo biến: muốn sử dụng biến thì phải khai báo
trước• Cú pháp: kiểu_dữ liệu danh_sách_các_biến;• Ví dụ
– int x, y;– float a = 10.5, b; /* khai báo và khởi gán */– int a, b, c = 1;
2-Dec-13 41
Giới thiệu chung• Các khai báo
– Khai báo hằng• Có hai cách để khai báo hằng, hoặc sử dụng #define hoặc sử dụng
từ khóa const– #define tên_hằng giá_trị_hằng– const kiểu_dữ_liệu tên_hằng = giá_trị_hằng;
• Ví dụ– #define PI 3.14
const float PI = 3.14;
2-Dec-13 42
Giới thiệu chung• Phép gán
– Gán giá trị cho một biến– Cú pháp: tên_biến = biểu_thức;– Ví dụ
• x = 0;• y = z + 1;
– Phép gán kép• x = y = z = 1;• x = y + (z = 2);
2-Dec-13 43
Giới thiệu chung• Phép tăng 1 (++), giảm 1 (--)
– Ngôn ngữ C cung cấp hai phép toán tăng 1 và giảm 1– Ví dụ
• x = x + 1; sẽ được viết thành: ++x; hoặc x++;• y = y – 1; sẽ được viết thành: --y; hoặc y--;
– Sự khác nhau giữa khi toán tử ++ hoặc -- đứng trước hoặc sau biến làthể hiện trong phép gán: biến = biểu_thức
• Nếu toán tử ++x (--x) xuất hiện trong biểu_thức thì x sẽ được tăng (giảm) 1 trước khi thực hiện phép gán
• Nếu toán tử x++ (x--) xuất hiện trong biểu_thức thì thực hiện phép gántrước khi x được tăng (giảm) 1
– Ví dụ• a = 5; b = ++a; kết quả ?• a = 5; b = a++; kết quả ?
2-Dec-13 44
Giới thiệu chung• Tóm lại
– Các từ khóa, tên– Các kiểu dữ liệu chuẩn– Các phép toán– Cấu trúc chung một chương trình C– Các khai báo– Phép gán– Phép tăng 1, giảm 1