Tài liệu Bài giảng Kỹ thuật lập trình - Bài 3: Câu lệnh và biểu thức - Đào Trung Kiên: EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Bài 3: Câu lệnh và biểu thức
1
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Câu lệnh
(statements)
2
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Khái niệm
 Câu lệnh được dùng để thực hiện một nhiệm vụ
trong chương trình: gán, tính toán, đọc/ghi dữ liệu, 
gọi hàm,
 Phân loại:
 Câu lệnh đơn
 printf("Xin chao!");
 x = PI*R*R;
 Khối lệnh trong dấu {  }
 Các lệnh rẽ nhánh và điều kiện: for, if, while, switch,
 Đặc biệt: câu lệnh trống, câu lệnh biểu thức, tạo nhãn, 
return,
3
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Câu lệnh if
 Rẽ nhánh theo điều kiện
 Cú pháp:
 if () 
[else ]
 Ví dụ:
 if (x != 0.)
printf("Nghich dao = %f",1/x);
else printf("Khong co gia tri nghich dao");
 if (score > current_record)
NewRecord(score);
4
EE3490: Kỹ thu...
                
              
                                            
                                
            
 
            
                 22 trang
22 trang | 
Chia sẻ: putihuynh11 | Lượt xem: 799 | Lượt tải: 0 
              
            Bạn đang xem trước 20 trang mẫu tài liệu Bài giảng Kỹ thuật lập trình - Bài 3: Câu lệnh và biểu thức - Đào Trung Kiên, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Bài 3: Câu lệnh và biểu thức
1
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Câu lệnh
(statements)
2
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Khái niệm
 Câu lệnh được dùng để thực hiện một nhiệm vụ
trong chương trình: gán, tính toán, đọc/ghi dữ liệu, 
gọi hàm,
 Phân loại:
 Câu lệnh đơn
 printf("Xin chao!");
 x = PI*R*R;
 Khối lệnh trong dấu {  }
 Các lệnh rẽ nhánh và điều kiện: for, if, while, switch,
 Đặc biệt: câu lệnh trống, câu lệnh biểu thức, tạo nhãn, 
return,
3
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Câu lệnh if
 Rẽ nhánh theo điều kiện
 Cú pháp:
 if () 
[else ]
 Ví dụ:
 if (x != 0.)
printf("Nghich dao = %f",1/x);
else printf("Khong co gia tri nghich dao");
 if (score > current_record)
NewRecord(score);
4
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Câu lệnh if lồng nhau
 Câu lệnh if thường được dùng lồng nhau để kiểm tra
nhiều điều kiện khác nhau
 Ví dụ:
 if (diem >= 8.)
printf("Xep loai gioi");
else if (diem >= 7.)
printf("Xep loai kha");
else if (diem >= 5.)
printf("Xep loai trung binh");
else
printf("Khong dat");
5
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Biểu thức logic
 Là biểu thức chứa các toán tử logic, biến/hằng logic
 Trả về kết quả 1 (true) hoặc 0 (false)
 Trong C, kiểu int có thể được ngầm hiểu là kiểu logic với
việc chuyển đổi: 0  false, khác 0  true
 Hệ quả: so sánh một số nguyên với 0 có thể bỏ qua trong trong
các biểu thức logic:
 if (x != 0)   if (x) 
 Ví dụ:
 8*4 >= 10
 x != y
 b*b > 4*a*c
 (a>2) && ((b4)))
 2-3 /* được ngầm chuyển thành true */
6
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Câu lệnh switch
 Rẽ nhiều nhánh theo điều kiện
 Cú pháp:
 switch () {
case : 
case : 
...
[default: ]
}
 Tuỳ giá trị của biểu thức phân nhánh bằng giá trị của trường hợp
nào, sẽ nhảy tới chạy các câu lệnh ở trường hợp đó
 default là trường hợp còn lại nếu không trường hợp nào thoả mãn
 Các câu lệnh thực hiện xong sẽ chạy tiếp case tiếp theo  dùng
break để ngắt nếu không muốn
 Chỉ dùng điều kiện được với các kiểu tương đương số nguyên (char, 
int, enum,) và các giá trị phải là hằng
7
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Câu lệnh switch (tiếp)
8
 switch (x) {
case 0:
printf("x is 0");
break;
case 1:
printf("x is 1");
break;
default:
printf("x is something else");
}
 switch (day) {
case Thu7:
case ChuNhat:
printf("Duoc nghi");
break;
default:
printf("Di lam");
}
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Vòng lặp do và while
 Lặp đi lặp lại việc thực hiện một câu lệnh
 Cú pháp:
 while() 
Kiểm tra điều kiện trước khi thực hiện mỗi lần lặp
 do while();
Kiểm tra điều kiện sau khi thực hiện mỗi lần lặp
 Ví dụ:
 x = 0;
do
printf("%d ", x++);
while (x < 10);
 x = 0;
while (x < 10)
printf("%d ", x++);
Kết quả chạy:
0 1 2 3 4 5 6 7 8 9
9
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Vòng lặp for
 Rất phổ biến trong C vì cú pháp ngắn gọn và linh hoạt
 Cú pháp:
 for (; ; )
 Mỗi câu lệnh đều có thể được để trống nếu không dùng
 Điều kiện được kiểm tra trước
 Ví dụ:
 for (x = 0; x < 10; x++)
printf("%d ", x);
Kết quả chạy:
0 1 2 3 4 5 6 7 8 9
 for (i = 0; i < N; i++)
for (j = 0; j < M; j++)
a[i][j] = i + j;
10
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
break và continue
 break dùng để ngắt giữa chừng một vòng lặp mà
không cần kiểm tra điều kiện
 for (x = 1; x <= 10; x++) {
if (x == 8) break;
printf ("%d ", x);
}
 continue dùng để kết thúc lần lặp đang chạy và nhảy
sang lần lặp mới
 for (x = 1; x <= 10; x++) {
if (x == 8) continue;
printf ("%d ", x);
}
11
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Khối lệnh
 Gộp các lệnh đơn lại bằng {  }
 Thường được dùng với các câu lệnh rẽ nhánh/lặp
 Ví dụ:
 if (delta > 0) {
d = sqrt(delta);
x1 = (-b+d)/2.;
x2 = (-b-d)/2.;
printf("x1 = %.3f, x2 = %.3f", x1, x2);
}
 tong_le = 0;
tong = 0;
for (i = 0; i < N; i++) {
if (i%2 == 1) tong_le += a[i];
tong += a[i];
}
12
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Câu lệnh rỗng (null statement)
 Không có gì, chỉ dùng “;” để kết thúc
 Câu lệnh rỗng không thực hiện gì, không gây ra hiệu
ứng gì và không mất thời gian chạy của máy
 Đôi khi cần dùng để kết thúc câu lệnh một cách hợp
lệ: vòng lặp, điều kiện, nhãn,
 Ví dụ:
 for (i=0; i<N; a[i]=b[i++]) ;
 for (i=0; i<10; printf("%d ",i++)) ;
 if (x==y) ;
else x=y;
13
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Câu lệnh goto và nhãn
 Nhãn: dùng để đánh dấu một vị trí trong mã nguồn
 Câu lệnh goto: nhảy tới vị trí của nhãn và chạy tiếp
 printf("Nhap ngay: ");
scanf("%d", &ngay);
if (ngay31) goto error;
printf("Nhap thang: ");
scanf("%d", &thang);
if (thang12) goto error;
/*  */
error:
printf("Loi nhap du lieu!");
 Sau nhãn phải có ít nhất một câu lệnh (có thể dùng câu lệnh rỗng
nếu cần)
 Lệnh goto phá vỡ tính cấu trúc, nên hạn chế sử dụng
14
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Biểu thức
(expressions)
15
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Khái niệm
 Một biểu thức có chứa ít nhất một toán hạng và 0 hoặc nhiều toán tử
 Toán hạng có thể là: giá trị hằng, hằng, biến, kết quả của một hàm
hay biểu thức con
 Các toán tử có độ ưu tiên khác nhau, nhưng có thể bị thay đổi bằng
cách dùng ngoặc (  )
 Các toán tử có cùng độ ưu tiên được thực hiện tử trái sang phải: 
sin(x) + cos(x)  hàm sin(x) được gọi trước cos(x)
 Ví dụ:
 47
 i
 x++
 sin(x+2)
 ( 2 * log( ( 3 + 10 ) - ( 2 * 6 ) ) )
16
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Toán tử số học
 Cơ bản: a+b a-b a*b a/b
 Nhân/chia ưu tiên cao hơn cộng/trừ: 2+3*4+1
 Phép toán giữa 2 số nguyên  kết quả là số nguyên
 Phép toán có ít nhất 1 số thực  kết quả là số thực
 Modulo (chia lấy số dư): a%b
 Tăng, giảm 1 đơn vị: a++ a-- ++a --a
 Toán hạng phải là một biến kiểu số nguyên
 a++ và a-- thực hiện phép tính với giá trị của a rồi mới
tăng/giảm giá trị của a, trong khi ++a và --a thì ngược lại
 a++ * 2
 ++a * 2
 a++ + a++ /* nên tránh dùng */
17
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Toán tử logic và so sánh
 Logic:
 and: A && B
 or: A || B
 not: !A
 So sánh:
 x == y
 x != y
 x > y
 x < y
 x >= y
 x <= y
18
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Toán tử bit
 Bao gồm:
 and: a & b
 or: a | b
 xor: a ^ b
 not: ~a
 Dịch trái, phải: a>b
 Chỉ áp dụng với kiểu số nguyên
 Chú ý tránh nhầm lẫn với các toán tử logic
19
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Toán tử gán
 Cơ bản: a = b
 Các toán tử gộp:
 Toán tử gán có trả về giá trị đúng bằng giá trị được gán
 x = y = 15;
 if ((c = getchar()) == 'y' || c == 'n') {  }
 if (a = b) {  } /* vẫn dịch được dù viết nhầm */
20
Toán tử gán Tương đương Toán tử gán Tương đương
a += b a = a + b a &= b a = a & b
a -= b a = a – b a |= b a = a | b
a *= b a = a * b a ^= b a = a ^ b
a /= b a = a / b a <<= b a = a << b
a %= b a = a % b a >>= b a = a >> b
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Các toán tử đặc biệt khác
 Cộng, trừ đơn hạng: +a, -a
 sizeof: trả về kích thước của kiểu/biến/hằng
 Toán tử ngoặc (): (a+b)*c
 Toán tử phảy “,”: không làm gì, chỉ bỏ qua giá trị thứ nhất
 x++, y = x*2;
 for (i=2, j=3, x=1; i<10; i+=2, j+=3, x++) {}
 Phần tử mảng: a[4]
 Con trỏ: *a
 Địa chỉ: &a
 Lấy thành phần: sv.ten, b->tuoi
 Ép kiểu: (int)a
 Gọi hàm (): sin(x), pow(x, 3)
 Điều kiện: ? : 
 biggest = a > b ? a : b;
21
EE3490: Kỹ thuật lập trình – HK1 2017/2018
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Bài tập
1. Nhập các hệ số a, b, c và giải phương trình bậc 2
2. Tính tổng nghịch đảo các số chẵn từ 2 tới 100: 
1/2+1/4+1/6++1/100
3. Nhập một dãy số và tính giá trị trung bình
4. Viết lại câu lệnh sau dùng while
for (A; B; C) do_something();
5. In ra màn hình một menu và đọc lựa chọn của người
dùng bằng 2 cách: dùng lệnh rẽ nhánh hoặc dùng mảng
6. Tính quãng đường đi được của một vật rơi tự do tại các
thời điểm t = 1, 2, 3,, 20s
7. Vẫn bài toán trên, nhập thêm độ cao ban đầu, chỉ tính tới
thời điểm mà vật chạm đất
22
            Các file đính kèm theo tài liệu này:
 bai_giang_ky_thuat_lap_trinh_ts_dao_trung_kien_03_c_statements_and_expressions_3652_1985315.pdf bai_giang_ky_thuat_lap_trinh_ts_dao_trung_kien_03_c_statements_and_expressions_3652_1985315.pdf