Bài giảng Lập trình C - Chương 3: Cấu trúc điều khiển trong C - Trần Minh Thái

Cấu trúc điều khiển

Mục đích: điều khiển thứ tự thực thi các lệnh của chương trình theo nhu cầu

Lệnh (statement): một biểu thức kết thúc bởi 1 dấu chấm phẩy

Khối lệnh (block): tập các lệnh được bao quanh bởi cặp dấu { }

pptx 54 trang yennguyen 1720
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình C - Chương 3: Cấu trúc điều khiển trong C - Trần Minh Thái", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Lập trình C - Chương 3: Cấu trúc điều khiển trong C - Trần Minh Thái

Bài giảng Lập trình C - Chương 3: Cấu trúc điều khiển trong C - Trần Minh Thái
Lập trình C  Chương 3. Cấu trúc điều khiển trong C(6 tiết) 
Trần Minh Thái 
Email: minhthai@huflit.edu.vn 
Website: www.minhthai.edu.vn 
Cập nhật: 09/11/2016 
Mục tiêu 
Trình bày các cấu trúc lệnh, sinh viên hiểu và cài đặt được các cấu trúc điều khiển trong viết chương trình, bao gồm: 
Cấu trúc rẽ nhánh: ifelse 
Cấu trúc lựa chọn: switchcase 
Cấu trúc lặp: while, for, dowhile 
Lệnh điều khiển: break, return, continue 
Cấu trúc điều khiển 
Mục đích: điều khiển thứ tự thực thi các lệnh của chương trình theo nhu cầu 
Lệnh (statement): một biểu thức kết thúc bởi 1 dấu chấm phẩy 
Khối lệnh (block): tập các lệnh được bao quanh bởi cặp dấu { } 
Các loại cấu trúc điều khiển 
TUẦN TỰ 
RẼ NHÁNH CÓ ĐIỀU KIỆN 
LỰA CHỌN 
LẶP 
Lệnh 1; 
Lệnh 2; 
Lệnh 3; 
. 
if 
if  else 
switch  case 
for 
while 
do  while 
Cấu trúc tuần tự (sequence) 
Tuần tự thực thi tiến trình, mỗi lệnh được thực thi theo một chuỗi từ trên xuống 
Thực hiện xong lệnh này rồi chuyển xuống lệnh kế tiếp 
Mỗi lệnh đều được thực hiện và duy nhất một lần 
#include 
#include 
#pragma warning ( disable : 4996) 
int main () 
{ 
int a, b, tong, hieu, tich; 
float thuong; 
printf ( "Nhap vao so nguyen a: " ); 
scanf ( "%d" , &a); 
printf ( "Nhap vao so nguyen b: " ); 
scanf ( "%d" , &b); 
tong = a + b; 
hieu = a - b; 
tich = a * b; 
thuong = ( float )a / b; //Ép kiểu 
printf ( "Tong: %d \n" , tong); 
printf ( "Hieu: %d \n" , hieu); 
printf ( "Tich: %d \n" , tich); 
printf ( "Thuong: %f " , thuong); 
getch (); 
return 0; 
} 
Cấu trúc rẽ nhánh 
Cấu trúc rẽ nhánh chỉ cho phép thực hiện một dãy lệnh nào đó tuỳ thuộc vào biểu thức điều kiện 
	 Dạng 1: chỉ xét trường hợp đúng 
if (biểu thức điều kiện) 
{ 
	; 
} 
 Nếu biểu thức điều kiện cho kết quả true thì thực hiện khối lệnh bên trong if 
Ví dụ: Viết chương trình nhập vào một số nguyên n, in ra giá trị tuyệt đối của n 
#include 
#include 
#pragma warning ( disable : 4996) 
int main () 
{ 
int n; 
printf ( "Nhap mot so nguyen: " ); 
scanf ( "%d" , &n); 
if (n<0) 
{ 
	n = -n; 
} 
printf ( "Gia tri tuyet doi = %d " , n); 
getch (); 
return 0; 
} 
Dạng 2: xét cả hai trường hợp đúng và sai 
if (biểu thức điều kiện) 
{ 
	; 
} 
else 
{ 
	; 
} 
 Nếu biểu thức điều kiện cho kết quả true thì thực hiện khối lệnh 1, ngược lại thực hiện khối lệnh thứ 2 
VD: Nhập vào 2 số nguyên a và b, nếu a là bội số của b thì in “a là bội số của b”, ngược lại in “a khong la boi so cua b” 
printf ( "Nhap vao a: " ); 
scanf ( "%d" , &a); 
printf ( "Nhap vao b : " ); 
scanf ( "%d" , &b); 
if (a%b == 0) 
else 
{ 
 printf ( "a khong la boi so cua b" ); 
} 
printf ( "a la boi so cua b" ); 
VD: Nhập vào 2 số nguyên a và b, nếu a là bội số của b thì in “a là bội số của b”, ngược lại in “a khong la boi so cua b” 
#include 
#include 
#pragma warning ( disable : 4996) 
int main () 
{ 
int a, b; 
printf ( "Nhap vao a: " ); 
scanf ( "%d" , &a); 
printf ( "Nhap vao b : " ); 
scanf ( "%d" , &b); 
if (a%b == 0) 
{ 
	printf ( "a la boi so cua b" ); 
} 
else 
{ 
	printf ( "a khong la boi so cua b" ); 
} 
getch (); 
return 0; 
} 
Cấu trúc ifelse lồng nhau 
Cần xét từ 3 trường hợp trở lên 
Có thể lồng ifelse vào bên trong của if hoặc else 
Phải đảm bảo trước else phải có if ( cùng cấp ) 
Nếu lồng ifelse vào trong if thì phải đặt ifelse trong cặp dấu {} 
if (bt điều kiện1) 
 if (bt điều kiện 2) 
	. 
if (bt điều kiện1) 
{ 
	 if (bt điều kiện 2) 
	. 
} 
Cấu trúc ifelse lồng nhau 
if (bt điều kiện 1){ //Nếu điều kiện 1 đúng 
	khối lệnh 1; 
} 
else if (bt điều kiện 2){ //Ngược lại, nếu điều kiện 2 đúng 
	khối lệnh 2; 
} 
else if (bt điều kiện N){ //Ngược lại, nếu điều kiện N đúng 
	khối lệnh N; 
} 
else { //Không điều kiện nào thoả 
	khối lệnh cho trường hợp còn lại; 
} 
Cấu trúc ifelse lồng nhau 
if (bt điều kiện 1){ 
	 if (bt điều kiện 2){ 
	khối lệnh 1_2; 
	} 
	 else {	 
	khối lệnh 1; 
	} 
} 
else  
VD: Giải và biện luận phương trình: ax+b=0 
#include 
#include 
#pragma warning ( disable : 4996) 
int main () 
{ 
int a, b; 
printf ( "Nhap vao a: " ); 
scanf ( "%d" , &a); 
printf ( "Nhap vao b : " ); 
scanf ( "%d" , &b); 
if (a == 0) 
{ 
	if (b == 0) 
	printf ( "PT co vo so nghiem" ); 
	else 
	printf ( "PT vo nghiem" ); 
} 
else 
	printf ( "PT co 1 nghiem: x = %f " , ( float )-b / a); 
getch (); 
return 0; 
} 
Bài tập – cho biết kết quả 
int main () 
{ 
int a = 9, b = 6; 
a++; 
a = a + b--; 
if (a % 2 == 0) 
	printf ( "Gia tri cua a la chan" ); 
printf ( "\nTong cua a va b la : %d " , a + b); 
getch (); 
return 0; 
} 
Bài tập viết chương trình 
1. Cho 3 số nguyên a, b và c, hãy tìm giá trị lớn nhất của ba số trên và in ra kết quả. 
2. Nhập vào số nguyên dương n, hãy cho biết n có phải là số chính phương không? (n được gọi là số chính phương khi căn bậc 2 của n là nguyên) 
3. Viết chương trình nhập vào một số nguyên dương n gồm 3 chữ số. Xuất ra màn hình chữ số lớn nhất ở vị trí nào? (nếu trùng nhau thì lấy chữ số ở hàng trăm) 
	 VD : n=291 Chữ số lớn nhất là 9 ở hàng chục 
4.	Nhập vào số nguyên n gồm 3 chữ số. Tạo lại số n sao cho các chữ số có thứ tự tăng dần 
	 Ví dụ : n=291 n = 129 
5.	Nhập vào giờ, phút, giây. Kiểm tra xem giờ, phút, giây đó có hợp lệ hay không? In kết quả ra màn hình. 
Bài tập viết chương trình 
1.	Tính tiền cước TAXI. Biết rằng: 
km đầu tiên là 13.000 đ 
mỗi km tiếp theo là 12.000 đ 
từ km 30 trở lên thì mỗi km thêm sẽ là 11.000 đ 
	Hãy nhập số km sau đó in ra số tiền phải trả 
2. Nhập vào 3 số nguyên dương. Kiểm tra xem 3 số đó có lập thành 3 cạnh của tam giác không? Nếu có hãy cho biết tam giác đó thuộc loại nào? (Vuông cân, cân, vuông, đều hay thường) 
3.	Nhập vào một năm (>0). Cho biết năm này có phải là năm nhuận hay không? In kết quả ra màn hình 
Bài tập về nhà – Viết các chương trình sau 
Cấu trúc lựa chọn 
switch (biểu thức) 
	 case n1: 
 các câu lệnh ; 
 break ; 
	 case n2: 
	 các câu lệnh ; 
	 break ; 
	 case nk: 
	 ; 
	 break ; 
	 [ default: các câu lệnh] 
 
Trường hợp giá trị biểu thức bằng n1 
Trường hợp giá trị biểu thức bằng n2 
Các trường hợp còn lại ( nếu có ) 
Biểu thức phải có giá trị là số nguyên hoặc ký tự 
n i là các hằng số nguyên hoặc ký tự 
Nếu giá trị của biểu thức của switch : 
= n i thì thực hiện câu lệnh sau case n i 
không thỏa tất cả các n i thì thực hiện câu lệnh sau default (nếu có) rồi kết thúc switch 
Cấu trúc lựa chọn – Lưu ý 
VD viết chương trình nhập vào số nguyên n có giá trị từ 1 đến 3. In cách đọc của số đó ra màn hình 
#include 
#include 
#pragma warning ( disable :4996) 
int main () 
{ 
int n; 
printf ( "Nhap vao mot so nguyen tu 1 den 3: " ); 
scanf ( "%d" , &n); 
switch (n) 
{ 
case 1: printf ( "So mot" ); break ; 
case 2: printf ( "So hai" ); break ; 
case 3: printf ( "So ba" ); break ; 
default : printf ( "So nhap khong hop le!" ); 
} 
getch (); 
return 0; 
} 
Một khi chương trình thực hiện lệnh của case n i , nếu không có lệnh break trong case n i thì nó sẽ thực hiện luôn các lệnh thuộc case bên dưới mà không xét lại điều kiện (do các n i được xem như các nhãn) 
Cấu trúc lựa chọn – Lưu ý 
VD xét chương trình đọc số mà không dùng lệnh break 
#include 
#include 
#pragma warning ( disable :4996) 
int main () 
{ 
int n; 
printf ( "Nhap vao mot so nguyen tu 1 den 3: " ); 
scanf ( "%d" , &n); 
switch (n) 
{ 
case 1: printf ( "So mot" ); 
case 2: printf ( "So hai" ); 
case 3: printf ( "So ba" ); 
default : printf ( "So nhap khong hop le!" ); 
} 
getch (); 
return 0; 
} 
Kết quả chạy chương trình 
Muốn thoát khỏi lệnh switch sau khi thực hiện xong một trường hợp nào đó 
 phải dùng lệnh break 
Bài tập viết chương trình 
1. Viết chương trình nhập vào 1 số nguyên dương gồm 3 chữ số, in ra cách đọc của số này 
2. Viết chương trình nhập vào ngày tháng năm, kiểm tra xem ngày tháng năm có hợp lệ không? In kết quả kiểm tra ra màn hình 
Cấu trúc lặp 
VÒNG LẶP while 
; 
while () 
	lệnh/ khối lệnh; 
	; 
 
Vòng lặp while 
Khởi gán: Dùng để khởi gán giá trị ban đầu cho vòng lặp 
Điều kiện lặp: Dùng để kiểm tra điều kiện trước khi thực hiện vòng lặp 
Cập nhật: Dùng để cập nhật vòng lặp (tăng hoặc giảm chỉ số lặp) 
Hoạt động 
Bước 1: Khởi gán 
Bước 2: Kiểm tra điều kiện lặp 
	- Nếu điều kiện bằng true thì cho thực hiện các lệnh của vòng lặp, thực hiện cập nhật vòng lặp . Quay trở lại bước 2 
	- Ngược lại thoát khỏi lặp. 
VD in ra màn hình 10 dòng chữ “Xin chao” 
#include 
#include 
#pragma warning ( disable :4996) 
int main () 
{ 
int d = 1; 
while (d<=10) 
{ 
printf ( "Dong %d - Xin chao\n" , d); 
d++; 
} 
getch (); 
return 0; 
} 
Cho biết kết quả của đoạn chương trình 
int main () 
{ 
int i = 10, s = 0; 
while (i > 0) 
{ 
if (i % 2 == 0) 
	s += i; 
else 
	if (i > 5) 
	s += 2 * i; 
i--; 
} 
printf ( "s = %d \n" , s); 
getch (); 
return 0; 
} 
VD nhập vào số nguyên dương n. In ra màn hình n dòng chữ “Xin chao” 
#include 
#include 
#pragma warning ( disable :4996) 
int main () 
{ 
int n, d = 1; 
printf ( "Nhap vao so nguyen duong n: " ); 
scanf ( "%d" , &n); 
while (d <= n) 
{ 
	printf ( "Dong %d - Xin chao\n" , d); 
	d++; 
} 
getch (); 
return 0; 
} 
Bài tập 
Viết chương trình nhập vào số nguyên dương n, in kết quả theo yêu cầu sau: 
Bài tập 
Viết chương trình cài đặt lưu đồ giải thuật 
Vòng lặp for thay thế cho while 
for ( ; ; ) 
{ 
	; 
} 
; 
while () 
	khối lệnh; 
	; 
 
int main () 
{ 
for ( int d = 1; d <= 10; d++) 
{ 
	printf ( "Dong %d - Xin chao\n" , d); 
} 
getch (); 
return 0; 
} 
int main () 
{ 
int d = 1; 
while (d <= 10) 
{ 
printf ( "Dong %d - Xin chao\n" , d); 
d++; 
} 
getch (); 
return 0; 
} 
Xác định kết quả 
int a = 18; 
for ( int i = 1; i <= a; i++) 
	if (a%i == 0) 
	printf ( " %d \t" , i); 
for ( int i = 0; i < 5; i++) 
{ 
	for ( int j = 0; j <= i; j++) 
	printf ( " %d \t" , j); 
	 printf ( "\n" ); 
} 
Bài tập 
Viết chương trình xuất ra màn hình một hình vuông đặc các dấu * với kích thước n được nhập từ bàn phím 
Bài tập 
Viết chương trình xuất ra màn hình một hình vuông rỗng các dấu * với kích thước n được nhập từ bàn phím 
Bài tập 
Viết chương trình xuất ra màn hình một hình tam giác vuông cân các dấu * với độ cao h được nhập từ bàn phím 
1. Viết chương trình đếm số ước số của số nguyên dương N 
	 Ví dụ : 	N=12 
	số ước số của 12 là 6 
2. Nhập số nguyên dương n. Kiểm tra n có phải là số nguyên tố không? 
Bài tập 
3. Nhập vào 2 số nguyên a và b. Tìm ước số chung lớn nhất của a và b 
4. In ra dãy số Fibonaci 
f 1 = f 0 =1;	 
f n = f n-1 + f n-2­ ;	(n>1) 
Bài tập 
Vòng lặp do  while 
; 
do 
{ 
	; 
	; 
} while (điều kiện lặp); 
Vòng lặp do  while 
 Thực hiện khối lệnh trước khi kiểm tra điều kiện 
 Thực hiện khối lệnh cho đến khi biểu thức có giá trị bằng false . 
 Cấu trúc lặp dowhile thường được dùng cho trường hợp nhập dữ liệu có kiểm tra điều kiện 
VD nhập vào một số nguyên dương, nếu nhập sai thì thông báo lỗi và yêu cầu nhập lại 
int main () 
{ 
int n; 
do { 
printf ( "Nhap vao so nguyen duong n: " ); 
scanf ( "%d" , &n); 
if (n <= 0) 
printf ( ">>Gia tri n khong hop le, nhap lai!\n" ); 
} while (n <= 0); 
printf ( "\nGia tri n vua nhap: %d \n" , n); 
getch (); 
return 0; 
} 
Bài tập 
Viết chương trình nhập vào số nguyên k sao cho: 
Giá trị k thuộc khoảng [1..100]. Nếu nhập không đúng miền giá trị thì thông báo lỗi và yêu cầu nhập lại 
Nếu người dùng nhập sai quá 3 lần thì báo lỗi và kết thúc chương trình 
Ngược lại với cấu trúc lặp for và while ( kiểm tra điều kiện trước khi thực hiện lặp), vòng lặp dowhile thực hiện lệnh lặp rồi mới kiểm tra điều kiện 
Do đó vòng lặp do...while thực hiện lệnh ít nhất một lần 
Vòng lặp do  while 
Lệnh break, return và continue 
Lệnh break: thoát khỏi các cấu trúc switch, while, for, dowhile chứa nó 
Lệnh return: Kết thúc hàm 
Lệnh continue: bỏ qua các lệnh còn lại của vòng lặp 
VD cho phép người dùng nhập liên tục số nguyên dương, nếu nhập số âm thì dừng 
int main () 
{ 
int n; 
while ( true ) 
{ 
printf ( "Nhap gia tri n (nhap <=0 ket thuc): " ); 
scanf ( "%d" , &n); 
if (n <= 0) 
{ 
printf ( "Ket thuc vong lap\n" ); 
break ; 
} 
} 
getch (); 
return 0; 
} 
VD in ra màn hình giá trị từ 10 đến 20 trừ đi số 13 và số 17 
int main () 
{ 
for ( int k = 10; k <= 20; k++) 
{ 
if (k == 13 || k == 17) 
	continue ; 
printf ( " %d \t" , k); 
} 
getch(); 
return 0; 
} 
Bài tập về nhà 
Viết các chương trình: 
Tính n! 
Tính x y (y>=0) 
Tính 
Tính 
Tính 
Q&A 

File đính kèm:

  • pptxbai_giang_lap_trinh_c_chuong_3_cau_truc_dieu_khien_trong_c_t.pptx