NHẬP MÔN TIN HỌC CÁC CẤU TRÚC ĐIỀU KHIỂN
TS Đào Nam Anh
Tài liệu
Slides do TS.Đào Nam Anh thực hiện dựa trên tài liệu [1] và các mã nguồn [2]: 1. TS.Nguyễn Thị Thu Hà, TS.Nguyễn Hữu Quỳnh, TS.Nguyễn Thị Thanh Tân, Giáo trình Nhập môn tin học, Khoa CNTT, Đại học Điện lực, 2013
2. Programiz.com
CNTT
Nhập môn tin học
2
N
A
CÁC CẤU TRÚC ĐIỀU KHIỂN C P NH
U NG C
Y
CNTT
Nhập môn tin học
3
Nội dung
CÁC CẤU TRÚC ĐIỀU KHIỂN
Cấu trúc lựa chọn Câu lệnh if Câu lệnh if – else Câu lệnh với nhiều lệnh if Câu lệnh if lồng nhau Câu lệnh switch.
Vòng lặp
Vòng lặp „for‟ trong C Toán tử „phẩy‟ Vòng lặp lồng nhau Vòng lặp „while‟ và vòng lặp „do-while‟
Lệnh nhẩy
4
Các lệnh „break‟, „continue‟ và „goto‟ Hàm „exit()‟.
GIỚI THIỆU
CÁC CẤU TRÚC ĐIỀU KHIỂN
Các cấu trúc lựa chọn cho phép chúng ta thay đổi luồng
chương trình. Dựa trên một điều kiện nào đó, một câu lệnh hay một chuỗi các câu lệnh có thể được thực hiện hoặc không. Hầu hết các ngôn ngữ lập trình đều sử dụng lệnh if để đưa ra điều kiện. Nguyên tắc thực hiện như sau nếu điều kiện đưa ra là đúng (true), chương trình sẽ thực hiện một công việc nào đó, nếu điều kiện đưa ra là sai (false), chương trình sẽ thực hiện một công việc khác.
CNTT
Nhập môn tin học
5
1. U C A N
CÁC CẤU TRÚC ĐIỀU KHIỂN
1. U C A N
n hay số lẻ, ta thực hiện như sau:
Nhập môn tin học
CNTT
6
Ví dụ : Để xác định một số là số 1. Nhập vào một số. 2. Chia số đó cho 2 để xác định số dư. 3. Nếu số dư của phép chia là 0, đó là số “Chẵn” HOẶC nếu số dư của phép chia khác 0, đó là số “Lẻ”. Bước 2 trong giải thuật trên kiểm tra phần dư của số đó khi chia cho 2 có bằng 0 không? Nếu đúng, ta thực hiện việc hiển thị thông báo đó là số chẵn. Nếu số dư đó khác 0, ta thực hiện việc hiển thị thông báo đó là số lẻ.
CÁC CẤU TRÚC ĐIỀU KHIỂN
Trong C một điều kiện được coi là đúng (true) khi nó có giá trị khác 0, là sai (false) khi nó có giá trị bằng 0. C cung cấp hai dạng câu lệnh lựa chọn: Câu lệnh if Câu lệnh switch Sau đây chúng ta hãy tìm hiểu hai câu lệnh lựa chọn này.
CNTT
Nhập môn tin học
7
1. U C A N
CÁC CẤU TRÚC ĐIỀU KHIỂN
1. U C A N
Câu lệnh if Câu lệnh if cho phép ta đưa ra các quyết định dựa trên việc kiểm tra một điều kiện nào đó là đúng (true) hay sai (false).
Sơ đồ quy trình thực hiện
8
của câu lệnh if. Khi xét điều kiện, nếu điều kiện trong trường hợp đúng công việc sẽ được thực hiện, còn nếu điều kiện sai, chương trình sẽ không thực hiện gì cả.
CÁC CẤU TRÚC ĐIỀU KHIỂN
Dạng tổng quát của câu lệnh if: if (biểu thức) Các câu lệnh; Biểu thức phải luôn được đặt trong cặp dấu ngoặc (). Mệnh đề theo sau từ khoá if là một điều kiện (hoặc một biểu thức điều kiện) cần được kiểm tra. Tiếp đến là một lệnh hay một tập các lệnh sẽ được thực thi khi điều kiện (hoặc biểu thức điều kiện) có kết quả true.
CNTT
Nhập môn tin học
9
1. U C A N
CÁC CẤU TRÚC ĐIỀU KHIỂN
int a = 10, b = 2, max; if (a > b){ max = a ;
printf(“The max value is: %d”, max) ; }
1. U C A N
Ví dụ:
#include
void main()
{
}
CNTT
Nhập môn tin học
10
CÁC CẤU TRÚC ĐIỀU KHIỂN
Với a được gán giá trị 10, b được gán giá trị 2, biểu thức điều kiện (a>b) có giá trị đúng.
int a = 10, b = 2, max; if (a > b){ max = a ;
printf(“The max value is: %d”, max) ; }
1. U C A N
Ví dụ:
#include
void main()
{
}
CNTT
Nhập môn tin học
11
CÁC CẤU TRÚC ĐIỀU KHIỂN
int a = 10, b = 2, max; if (a > b){ max = a ;
printf(“The max value is: %d”, max) ; }
Với a được gán giá trị 10, b được gán giá trị 2, biểu thức điều kiện (a>b) có giá trị đúng. Do đó khối lệnh gắn với biểu thức if được thực thi và kết quả của chương trình như sau:
1. U C A N
Ví dụ:
#include
void main()
{
}
CNTT
Nhập môn tin học
12
The max value is: 10
CÁC CẤU TRÚC ĐIỀU KHIỂN
1. U C A N
Khối lệnh sau lệnh if được đặt trong cặp ngoặc nhọn {}. Khi có nhiều lệnh cần được thực hiện, các câu lệnh đó được coi như một khối lệnh (block) và phải được đặt trong cặp dấu {}.
int a = 10, b = 2, max; if (a > b){ max = a ;
printf(“The max value is: %d”, max) ; }
Ví dụ:
#include
void main()
{
}
CNTT
Nhập môn tin học
13
CÁC CẤU TRÚC ĐIỀU KHIỂN
1. U C A N
int a = 10, b = 2, max; if (a > b) max = a ;
Khối lệnh sau lệnh if được đặt trong cặp ngoặc nhọn {}. Khi có nhiều lệnh cần được thực hiện, các câu lệnh đó được coi như một khối lệnh (block) và phải được đặt trong cặp dấu {}.
Nếu trong ví dụ trên ta
Ví dụ:
#include
void main()
{
}
không đưa vào dấu ngoặc nhọn ở câu lệnh if, chỉ có câu lệnh đầu tiên (max = a) được thực hiện khi điều kiện trong câu lệnh if là đúng.
CNTT
Nhập môn tin học
14
CÁC CẤU TRÚC ĐIỀU KHIỂN
int a = 10, b = 2, max; if (a > b && (a>3 || b<5)) max = a ;
Nếu có nhiều biểu thức điều kiện cần kiểm tra, tùy vào trường hợp ta kết hợp các biểu thức dưới dạng phép (AND) ký hiệu &&, phép (OR) ký hiệu
||.
1. U C A N
Ví dụ:
#include
void main()
{
}
CNTT
Nhập môn tin học
15
CÁC CẤU TRÚC ĐIỀU KHIỂN
Ví dụ: kiểm tra một năm có phải là năm nhuận hay không. Năm nhuận là năm chia hết cho 4 hoặc 400 nhưng không chia hết cho 100.
CNTT
Nhập môn tin học
16
1. U C A N
CÁC CẤU TRÚC ĐIỀU KHIỂN
int y;
scanf(“%d”, &y);
Ví dụ: kiểm tra một năm có phải là năm nhuận hay không. Năm nhuận là năm chia hết cho 4 hoặc 400 nhưng không chia hết cho 100. Chúng ta sử dụng lệnh if để kiểm tra điều kiện.
CNTT
Nhập môn tin học
17
#include
1. U C A N
CÁC CẤU TRÚC ĐIỀU KHIỂN
Ví dụ: kiểm tra một năm có
phải là năm nhuận hay không.
Năm nhuận là năm chia hết
int y;
cho 4 hoặc 400 nhưng không chia hết cho 100.
Chúng ta sử dụng lệnh if để
scanf(“%d”, &y);
kiểm tra điều kiện.
Chương trình trên cho ra kết
quả như sau:
Please enter a year: 2012 2012 is a leap year!
CNTT
18
#include
Nhập môn tin học
1. U C A N
CÁC CẤU TRÚC ĐIỀU KHIỂN
int y;
scanf(“%d”, &y);
Điều kiện year % 4 == 0 && year % 100 != 0 || year % 400 == 0 trả về giá trị 1 nếu năm đó là năm nhuận. Khi đó, chương trình hiển thị thông báo gồm biến year và dòng chữ “is a leap year”. Nếu điều kiện trên không thỏa mãn, chương trình không hiển thị thông báo nào.
CNTT
19
#include
Nhập môn tin học
1. U C A N
CÁC CẤU TRÚC ĐIỀU KHIỂN
1. U C A N
Câu lệnh if...then...else Ở trên ta đã biết dạng đơn giản nhất của câu lệnh if, cho phép ta lựa chọn để thực hiện hay không một câu lệnh hoặc một chuỗi các lệnh. C cũng cho phép ta lựa
chọn trong hai khối lệnh để thực hiện bằng cách dùng cấu trúc if – else như sau:
20
CÁC CẤU TRÚC ĐIỀU KHIỂN
câu_lệnh_1;
Cú pháp câu lệnh rẽ nhánh dạng này được mô tả như sau: if (biểu thức) else
câu_lệnh_2;
CNTT
21
1. U C A N
CÁC CẤU TRÚC ĐIỀU KHIỂN
Nếu biểu thức có giá trị đúng (khác 0) thì câu lệnh 1 được thực hiện.
Nếu sai (bằng 0), câu lệnh 2
câu_lệnh_1;
được thực hiện.
câu_lệnh_2;
Cú pháp câu lệnh rẽ nhánh dạng này được mô tả như sau: if (biểu thức) else
Khi có nhiều lệnh cần được thực hiện, các câu lệnh đó được coi như một khối lệnh (block) và phải được đặt trong cặp dấu {}.
CNTT
Nhập môn tin học
22
1. U C A N
CÁC CẤU TRÚC ĐIỀU KHIỂN
Trở lại đoạn mã trong ví ở trên, dễ dàng nhận thấy biến max chỉ được gán giá trị khi a > b.
Trong trường hợp ngược
1. U C A N
int a = 10, b = 2, max; if (a > b) max = a ;
Ví dụ:
#include
void main()
{
}
lại, sẽ không có thông báo nào được sinh ra hay nói một cách khác là đoạn mã này chưa thực hiện được yêu cầu tìm số lớn nhất trong 2 số a và b bất kỳ.
CNTT
Nhập môn tin học
23
CÁC CẤU TRÚC ĐIỀU KHIỂN
Trở lại đoạn mã trong ví ở trên, dễ dàng nhận thấy biến max chỉ được gán giá trị khi a > b.
Trong trường hợp ngược
1. U C A N
max = a;
lại, sẽ không có thông báo nào được sinh ra hay nói một cách khác là đoạn mã này chưa thực hiện được yêu cầu tìm số lớn nhất trong 2 số a và b bất kỳ. Điều đó được khắc phục
max = b;
int a = 10, b = 2, max; printf(“Input a = ” ) ; scanf(“%d”, &a); printf(“Input b = ” ) ; scanf(“%d”, &b ) ; if (a > b) else printf(“The max value is: %d”, max);
24
rất đơn giản bằng cấu trúc if-else
Ví dụ:
#include
void main()
{
}
CÁC CẤU TRÚC ĐIỀU KHIỂN
Đoạn mã này chỉ hiển thị
thông báo “is a leap year” ra màn hình nếu là năm nhuận. Trong trường hợp ngược lại,
int y;
scanf(“%d”, &y);
nếu năm nhập vào không phải là năm nhuận, sẽ không có bất kỳ thông báo nào được in ra. Điều này có thể gây ra sự hiểu lầm và đôi chút khó chịu cho người sử dụng.
CNTT
Nhập môn tin học
25
1. U C A N
#include
void main()
{
printf(“\nPlease enter a year:”);
if (y% 4 == 0 && y % 100 != 0
|| y % 400 == 0)
printf(“\n%d is a leap year!”, y);
getch();
}
CÁC CẤU TRÚC ĐIỀU KHIỂN
Đoạn mã này chỉ hiển thị
thông báo “is a leap year” ra màn hình nếu là năm nhuận. Trong trường hợp ngược lại,
int y;
scanf(“%d”, &y);
1. U C A N
printf(“\n%d is a leap year!”, y);
nếu năm nhập vào không phải là năm nhuận, sẽ không có bất kỳ thông báo nào được in ra. Điều này có thể gây ra sự hiểu lầm và đôi chút khó chịu cho người sử dụng.
getch();
26
Để khắc phục điều này, thay vì sử dụng cấu trúc if đơn giản, ta sử dụng cấu trúc if-else
#include
void main()
{
printf(“\nPlease enter a year:”);
if (y% 4 == 0 && y % 100 != 0
|| y % 400 == 0)
else
printf(“\n%d is not a leap year!”, y);
}
CÁC CẤU TRÚC ĐIỀU KHIỂN
Ví dụ: đổi một ký tự hoa thành
ký tự thường.
Nếu ký tự không phải là một
ký tự hoa, nó sẽ được in ra mà không cần thay đổi.
27
1. U C A N
CÁC CẤU TRÚC ĐIỀU KHIỂN
Ví dụ: đổi một ký tự hoa thành
ký tự thường.
Nếu ký tự không phải là một
ký tự hoa, nó sẽ được in ra mà không cần thay đổi.
1. U C A N
Chương trình sử dụng cấu trúc if-else để kiểm tra xem một ký tự có phải là ký tự hoa không, rồi thực hiện các thao tác tương ứng.
c + „a‟ – „A‟);
printf(“Character Entered: %c”, c);
28
/* Convert upper case to lower case*/
#include
void main()
{
char c;
printf(“Please enter a character: ”);
scanf(“%c”, &c);
if (c >= „A‟ && c <= „Z‟)
printf(“haracter Converted: %c”,
else
}
CÁC CẤU TRÚC ĐIỀU KHIỂN
Biểu thức c >= ‘A’ && c <= ‘Z’ kiểm tra ký tự nhập vào có là ký tự hoa không.
Nếu biểu thức trả về true, ký
tự đó sẽ đổi thành ký tự thường bằng biểu thức c + ‘a’ – ‘A’, và được in ra màn hình qua hàm printf().
Nếu giá trị của biểu thức là
c + „a‟ – „A‟);
printf(“Character Entered: %c”, c);
29
1. U C A N
false, câu lệnh sau else được chạy và chương trình hiển thị tự đó ra màn hình mà không cần thực hiện bất cứ sự thay đổi nào.
/* Convert upper case to lower case*/
#include
void main()
{
char c;
printf(“Please enter a character: ”);
scanf(“%c”, &c);
if (c >= „A‟ && c <= „Z‟)
printf(“haracter Converted: %c”,
else
}
CÁC CẤU TRÚC ĐIỀU KHIỂN
1. U C A N
Nhiều lựa chọn các câu lệnh if...then...else Câu lệnh if cho phép ta lựa chọn thực hiện một hành động nào
đó hay không.
Câu lệnh if – else cho phép ta lựa chọn thực hiện giữa hai hành
động.
C cho phép ta có thể đưa ra nhiều lựa chọn hơn. Chúng ta mở rộng cấu trúc if – else bằng cách thêm vào cấu trúc else – if để thực hiện điều đó. Nghĩa là mệnh đề else trong một câu lệnh if – else lại chứa một câu lệnh if – else khác. Do đó nhiều điều kiện hơn được kiểm tra và tạo ra nhiều lựa chọn hơn.
CNTT
Nhập môn tin học
30
CÁC CẤU TRÚC ĐIỀU KHIỂN
1. U C A N
Nhiều lựa chọn các câu lệnh if...then...else Câu lệnh if cho phép ta lựa chọn thực hiện một hành động nào
đó hay không.
Câu lệnh if – else cho phép ta lựa chọn thực hiện giữa hai hành
động.
C cho phép ta có thể đưa ra nhiều lựa chọn hơn. Chúng ta mở rộng cấu trúc if – else bằng cách thêm vào cấu trúc else – if để thực hiện điều đó. Nghĩa là mệnh đề else trong một câu lệnh if – else lại chứa một câu lệnh if – else khác. Do đó nhiều điều kiện hơn được kiểm tra và tạo ra nhiều lựa chọn hơn.
Nhập môn tin học
31
CNTT
CÁC CẤU TRÚC ĐIỀU KHIỂN
if (biểu thức) câu_lệnh; …… else câu_lệnh;
1. U C A N
Nhiều lựa chọn các câu lệnh if...then...else Cú pháp tổng quát trong trường hợp này như sau: if (biểu thức) câu_lệnh; else
CNTT
Nhập môn tin học
32
CÁC CẤU TRÚC ĐIỀU KHIỂN
1. A C U
if (biểu thức) N câu_lệnh; else if (biểu thức) câu_lệnh; else if (biểu thức) câu_lệnh; . . . else
câu_lệnh;
if (biểu thức) câu_lệnh; …… else câu_lệnh;
Nhiều lựa chọn các câu lệnh if...then...else Cú pháp tổng quát if (biểu thức) câu_lệnh; else Cách canh lề (lùi vào trong) như trên giúp ta nhìn chương trình
một cách dễ dàng khi có một hoặc hai lệnh if.
Tuy nhiên khi có nhiều lệnh if hơn cách viết đó dễ gây ra
33
nhầm lẫn vì nhiều câu lệnh sẽ phải lùi vào quá sâu. Vì vậy, lệnh if-else-if thường được canh lề theo dạng hình bên phải:
CÁC CẤU TRÚC ĐIỀU KHIỂN
Ví dụ sau đây cho phép người
tự tương
dùng nhập một ứng với một phép toán bất kỳ từ bàn phím.
Xuất ra các thông báo tương ứng với mỗi phép toán được nhập.
34
#include
C A N 1. U
CÁC CẤU TRÚC ĐIỀU KHIỂN
Trong chương trình trên, Nếu
tự nhập là dấu (+), chương
trình sẽ in ra dòng thông báo “Choice Addition ”.
Nếu là dấu (-), chương trình sẽ in ra
dòng thông báo “Choice Subtraction”.
Nếu là dấu (*) chương trình sẽ in ra
dòng thông báo “Choice Multiplication”.
Nếu là dấu (/) chương trình sẽ in ra dòng thông báo “Choice Division”. Nếu
hiệu nhập vào không phải
35
phép toán thì in ra thông báo “Invalid Choice!”;
#include
C A N 1. U
CÁC CẤU TRÚC ĐIỀU KHIỂN
U C A N 1.
Muốn thực hiện nhiều hơn một lệnh sau mỗi câu lệnh if hay else, ta phải đặt các câu lệnh đó vào trong cặp dấu ngoặc nhọn {}.
printf("\nChoice Addition"); result = a + b; }
printf("\nChoice Subtraction"); result = a - b; }
Các câu lệnh đó tạo thành một nhóm gọi là lệnh phức hay một khối lệnh.
printf("\nChoice Multiplication"); result = a * b; }
printf("\nChoice Division"); result = a / b; }
36
#include
CÁC CẤU TRÚC ĐIỀU KHIỂN
1. U C A N
Các cấu trúc if lồng nhau Một cấu trúc if lồng nhau là
một lệnh if được đặt bên trong một lệnh if hoặc else khác. Trong C, lệnh else luôn gắn
if (biểu thức_2) câu_lệnh1; if (biểu thức_3) câu_lệnh_2;
câu_lệnh_3;/* với if (biểu thức_3) */
với lệnh if không có else gần nó nhất, và nằm trong cùng một khối lệnh với nó.
37
if (biểu thức–1) { else } else câu_lệnh_4; /* với if (biểu thức_1) */
CÁC CẤU TRÚC ĐIỀU KHIỂN
1. U C A N
Các cấu trúc if lồng nhau Trong cấu trúc if ở trên, nếu giá trị của biểu_thức_1 là true thì lệnh if thứ hai sẽ được kiểm tra.
Nếu biểu_thức_2 là true thì
if (biểu thức_2) câu_lệnh1; if (biểu thức_3) câu_lệnh_2;
lệnh câu_lệnh_1 sẽ được thực hiện.
Nếu biểu thức_3 là true,
câu_lệnh_3;/* với if (biểu thức_3) */
câu_lệnh_2 sẽ được thực hiện,
nếu không câu_lệnh_3 được
thực hiện.
38
if (biểu thức–1) { else } else câu_lệnh_4; /* với if (biểu thức_1) */
Nếu biểu thức_1 là false thì câu_lệnh_4 được thực hiện.
CÁC CẤU TRÚC ĐIỀU KHIỂN
1. U C A N
Các cấu trúc if lồng nhau Vì lệnh else trong cấu trúc
câu_lệnh_1;
else-if là không bắt buộc, nên có thể có một cấu trúc khác như dạng bên:
if (điều kiện_2) else câu_lệnh_2; câu_lệnh_kế_tiếp;
if (điều kiện-1)
39
CÁC CẤU TRÚC ĐIỀU KHIỂN
1. U C A N
Các cấu trúc if lồng nhau Vì lệnh else trong cấu trúc
câu_lệnh_1;
else-if là không bắt buộc, nên có thể có một cấu trúc khác như dạng bên
if (điều kiện_2) else
câu_lệnh_2;
if (điều kiện-1) câu_lệnh_kế_tiếp;
40
Trong đoạn mã trên, nếu điều kiện-1 là true, chương trình sẽ chuyển đến thực hiện lệnh if thứ hai và điều kiện-2 được kiểm tra.
CÁC CẤU TRÚC ĐIỀU KHIỂN
1. U C A N
Các cấu trúc if lồng nhau Nếu điều kiện đó là true,
câu_lệnh_1;
câu_lệnh_1 được thực hiện, nếu không câu_lệnh_2 được thực hiện, sau đó chương trình thực hiện những lệnh trong câu lệnh kế tiếp.
if (điều kiện_2) else
câu_lệnh_2;
Nếu điều kiện_1 là false,
if (điều kiện-1) câu_lệnh_kế_tiếp;
41
chương trình sẽ chuyển đến thực hiện những lệnh trong câu lệnh kế tiếp.
CÁC CẤU TRÚC ĐIỀU KHIỂN
câu_lệnh_1;
1. U C A N
Ví dụ Các cấu trúc if lồng nhau Viết chương trình phân loại sinh viên theo điểm tổng kết, cụ thể như sau: Loại xuất sắc (Excellent): Điểm
tổng kết
8.5
Loại giỏi (Good): 8.0
Điểm
if (điều kiện_2) else
câu_lệnh_2;
tổng kết < 8.5
Loại khá (Fair): 6.5
Điểm tổng
kết < 8
if (điều kiện-1) câu_lệnh_kế_tiếp;
Loại trung bình (Normal): 5
Điểm tổng kết < 6.5
42
Loại yếu (Bad): Điểm tổng kết <
5.
CÁC CẤU TRÚC ĐIỀU KHIỂN
U C A N 1.
Ví dụ Các cấu trúc if lồng nhau Viết chương trình phân loại sinh viên theo điểm tổng kết, cụ thể như sau: Loại xuất sắc (Excellent): Điểm tổng
kết
8.5
Loại giỏi (Good): 8.0
Điểm tổng
kết < 8.5
Loại khá (Fair): 6.5
Điểm tổng kết
< 8
Loại trung bình (Normal): 5
Điểm
tổng kết < 6.5
Loại yếu (Bad): Điểm tổng kết < 5.
43
CÁC CẤU TRÚC ĐIỀU KHIỂN
1. U C A N
Ví dụ Các cấu trúc if lồng nhau Viết chương trình phân loại sinh viên theo điểm tổng kết, cụ thể như sau: Loại xuất sắc (Excellent): Điểm tổng
kết
8.5
Loại giỏi (Good): 8.0
Điểm tổng
kết < 8.5
Loại khá (Fair): 6.5
Điểm tổng kết
< 8
Loại trung bình (Normal): 5
Điểm
tổng kết < 6.5
if (AvgMark >= 8.5) printf("Excellent"); else if (AvgMark >= 8.0) printf("Good"); else if (AvgMark >= 6.5) printf("Fair"); else if (AvgMark >= 5) printf("Normal"); else printf("Bad");
Loại yếu (Bad): Điểm tổng kết < 5.
44
CÁC CẤU TRÚC ĐIỀU KHIỂN
1. U C A N
Ví dụ Các cấu trúc if lồng nhau Giả sử người dùng nhập từ bàn phím giá trị AvgMark = 6.2 thì biểu thức điều kiện (AvgMark >= 8.5) sẽ nhận giá trị false.
if (AvgMark >= 8.5) printf("Excellent"); else if (AvgMark >= 8.0) printf("Good"); else if (AvgMark >= 6.5) printf("Fair"); else if (AvgMark >= 5) printf("Normal"); else printf("Bad");
45
CÁC CẤU TRÚC ĐIỀU KHIỂN
1. U C A N
Ví dụ Các cấu trúc if lồng nhau Giả sử người dùng nhập từ bàn phím giá trị AvgMark = 6.2 thì biểu thức điều kiện (AvgMark >= 8.5) sẽ nhận giá trị false.
Do vậy biểu thức điều kiện
(AvgMark >= 8.0) gắn với else sẽ được kiểm tra.
if (AvgMark >= 8.5) printf("Excellent"); else if (AvgMark >= 8.0) printf("Good"); else if (AvgMark >= 6.5) printf("Fair"); else if (AvgMark >= 5) printf("Normal"); else printf("Bad");
46
CÁC CẤU TRÚC ĐIỀU KHIỂN
1. U C A N
Ví dụ Các cấu trúc if lồng nhau Giả sử người dùng nhập từ bàn phím giá trị AvgMark = 6.2 thì biểu thức điều kiện (AvgMark >= 8.5) sẽ nhận giá trị false.
Do vậy biểu thức điều kiện
(AvgMark >= 8.0) gắn với else sẽ được kiểm tra.
if (AvgMark >= 8.5) printf("Excellent"); else if (AvgMark >= 8.0) printf("Good"); else if (AvgMark >= 6.5) printf("Fair"); else if (AvgMark >= 5) printf("Normal"); else printf("Bad");
47
Do biểu thức này có giá trị false nên biểu thức điều kiện (AvgMark >= 6.5) sẽ tiếp tục được kiểm tra, được giá trị false,
CÁC CẤU TRÚC ĐIỀU KHIỂN
1. U C A N
Ví dụ Các cấu trúc if lồng nhau Giả sử người dùng nhập từ bàn phím giá trị AvgMark = 6.2 thì biểu thức điều kiện (AvgMark >= 8.5) sẽ nhận giá trị false.
Do vậy biểu thức điều kiện
(AvgMark >= 8.0) gắn với else sẽ được kiểm tra.
Do biểu thức này có giá trị false nên biểu thức điều kiện (AvgMark >= 6.5) sẽ tiếp tục được kiểm tra, được giá trị false,
if (AvgMark >= 8.5) printf("Excellent"); else if (AvgMark >= 8.0) printf("Good"); else if (AvgMark >= 6.5) printf("Fair"); else if (AvgMark >= 5) printf("Normal"); else printf("Bad");
48
Xét biểu thức điều kiện tiếp theo (AvgMark >= 5), giá trị true nên dòng thông báo “Normal” sẽ được in ra và else cuối cùng được bỏ qua.
CÁC CẤU TRÚC ĐIỀU KHIỂN
1. U C A N
Ví dụ Các cấu trúc if lồng nhau Chúng ta cũng có thể thay cấu trúc if- else ở đoạn mã lệnh trên bằng cấu trúc if lồng nhau
if (AvgMark >= 5.0) if (AvgMark < 8.5) if (AvgMark < 8) if (AvgMark >= 6.5) printf("Fair"); else printf("Normal"); else printf("Good"); else printf("Excellent"); else printf("Bad");
49
CÁC CẤU TRÚC ĐIỀU KHIỂN
if (AvgMark >= 5.0) if (AvgMark < 8.5) if (AvgMark < 8) if (AvgMark >= 6.5) printf("Fair"); else printf("Normal"); else printf("Good"); else printf("Excellent"); else printf("Bad");
1. U C A N
Ví dụ Các cấu trúc if lồng nhau Chúng ta cũng có thể thay cấu trúc if- else ở đoạn mã lệnh trên bằng cấu trúc if lồng nhau. Với giá trị AvgMark = 6.2 được nhập từ bàn phím như trên, trước tiên điều kiện (AvgMark >= 5.0) sẽ được kiểm tra, có giá trị true.
50
CÁC CẤU TRÚC ĐIỀU KHIỂN
1. U C A N
Ví dụ Các cấu trúc if lồng nhau Chúng ta cũng có thể thay cấu trúc if- else ở đoạn mã lệnh trên bằng cấu trúc if lồng nhau. Với giá trị AvgMark = 6.2 được nhập từ bàn phím như trên, trước tiên điều kiện (AvgMark >= 5.0) sẽ được kiểm tra, có giá trị true.
Điều kiện tiếp theo (AvgMark <
if (AvgMark >= 5.0) if (AvgMark < 8.5) if (AvgMark < 8) if (AvgMark >= 6.5) printf("Fair"); else printf("Normal"); else printf("Good"); else printf("Excellent"); else printf("Bad");
51
8.5)sẽ được kiểm tra, được giá trị true
CÁC CẤU TRÚC ĐIỀU KHIỂN
1. U C A N
Ví dụ Các cấu trúc if lồng nhau Chúng ta cũng có thể thay cấu trúc if- else ở đoạn mã lệnh trên bằng cấu trúc if lồng nhau. Với giá trị AvgMark = 6.2 được nhập từ bàn phím như trên, trước tiên điều kiện (AvgMark >= 5.0) sẽ được kiểm tra, có giá trị true.
if (AvgMark >= 5.0) if (AvgMark < 8.5) if (AvgMark < 8) if (AvgMark >= 6.5) printf("Fair"); else printf("Normal"); else printf("Good"); else printf("Excellent"); else printf("Bad");
Điều kiện tiếp theo (AvgMark < 8.5) sẽ được kiểm tra, được giá trị true Điều kiện (AvgMark < 8) được true
52
CÁC CẤU TRÚC ĐIỀU KHIỂN
1. U C A N
Ví dụ Các cấu trúc if lồng nhau Chúng ta cũng có thể thay cấu trúc if- else ở đoạn mã lệnh trên bằng cấu trúc if lồng nhau. Với giá trị AvgMark = 6.2 được nhập từ bàn phím như trên, trước tiên điều kiện (AvgMark >= 5.0) sẽ được kiểm tra, có giá trị true.
if (AvgMark >= 5.0) if (AvgMark < 8.5) if (AvgMark < 8) if (AvgMark >= 6.5) printf("Fair"); else printf("Normal"); else printf("Good"); else printf("Excellent"); else printf("Bad");
Điều kiện tiếp theo (AvgMark < 8.5) sẽ được kiểm tra, được giá trị true Điều kiện (AvgMark < 8) được true Điều kiện (AvgMark >= 6.5) tiếp tục được kiểm tra, được giá trị false Câu lệnh gắn với else sẽ được thực 53
y, dòng thông báo
thi. Như “Normal” sẽ được in ra màn hình.
CÁC CẤU TRÚC ĐIỀU KHIỂN
1. U C A N
Các cấu trúc if lồng nhau Vì lệnh else trong cấu trúc if-else là không bắt buộc, nên khi có lệnh else nào đó không được đưa vào trong chuỗi cấu trúc if lồng nhau chương trình trông
không rõ ràng.
if ( b > c) min = c; else min = b;
if (a > b)
Một lệnh else luôn được gắn với lệnh if gần nó nhất mà lệnh if này chưa được kết hợp với một lệnh else nào.Ví dụ:
54
CÁC CẤU TRÚC ĐIỀU KHIỂN
min = a;
if (a > b) { if ( b > c) min = c; } else
1. U C A N
Các cấu trúc if lồng nhau Lệnh else đi với lệnh if bên trong. Việc viết lùi vào trong dòng là một cách thể hiện mối quan hệ đó. Tuy nhiên canh lề không có chức năng gắn else với lệnh if. Cặp dấu ngoặc nhọn {} giúp chúng ta thực hiện chức năng đó một cách chính xác.
55
CÁC CẤU TRÚC ĐIỀU KHIỂN
Ví dụ: đổi một ký tự hoa thành ký tự thường. Nếu ký tự không phải là một
ký tự hoa, nó sẽ được in ra mà không cần thay đổi.
1. U C A N
Chương trình sử dụng cấu trúc if-else để kiểm tra xem một ký tự có phải là ký tự hoa không, rồi thực hiện các thao tác tương ứng
if (AvgMark >= 8.5) printf("Excellent"); else if (AvgMark >= 8.0) printf("Good"); else if (AvgMark >= 6.5) printf("Fair"); else if (AvgMark >= 5) printf("Normal"); else printf("Bad");
56
Việc phân loại này có thể được biểu diễn bởi cấu trúc if-else như sau
CÁC CẤU TRÚC ĐIỀU KHIỂN
Hình bên dưới biểu diễn sự kết hợp giữa if và else trong một chuỗi các lệnh if lồng nhau.
1. U C A N
if ( b > c) min = c;
min = c;
min = b;
min = a;
if (a > b) else else kết hợp với if
gần nhất
if (a > b) { if ( b > c) } else else kết hợp với if đầu tiên, bởi vì cặp dấu ngoặc nhọn đã đặt lệnh if bên trong.
CNTT
Nhập môn tin học
57
CÁC CẤU TRÚC ĐIỀU KHIỂN
Theo chuẩn ANSI, có thể lồng nhau đến 15 mức. Tuy nhiên, hầu hết trình biên dịch cho phép nhiều hơn thế.
scanf("%f",&a); scanf("%f",&b); scanf("%f",&c);
Ví dụ sau đây sẽ tiến hành tìm số lớn nhất trong 3 số a,b,c bằng câu lệnh if-else và if lồng nhau.
if (b>c) max = b; else max = c;
58
float a,b,c,max ;
printf("input three number a,b,c\n");
printf("a=");
printf("b=");
printf("c=");
if (a < b)
else if ( a #include 1. U C A N CÁC CẤU TRÚC ĐIỀU KHIỂN Theo chuẩn ANSI, có thể lồng
nhau đến 15 mức. Tuy nhiên,
hầu hết trình biên dịch cho
phép nhiều hơn thế. scanf("%f",&a);
scanf("%f",&b);
scanf("%f",&c); Ví dụ sau đây sẽ tiến hành tìm
số lớn nhất trong 3 số a,b,c
bằng câu lệnh if-else và if lồng
nhau. if (b>c) max = b;
else max = c; 59 float a,b,c,max ;
printf("input three number a,b,c\n");
printf("a=");
printf("b=");
printf("c=");
if (a < b)
else if ( a #include 1. U C A N CÁC CẤU TRÚC ĐIỀU KHIỂN ng sau: 60 1. U C A N CÁC CẤU TRÚC ĐIỀU KHIỂN 1. U C A N Lệnh switch tính biểu thức 61 trong ngoặc và so sánh giá trị
tính được của biểu thức với
các giá trị đứng sau case.
Hay nói cách khác, công việc
sau mỗi case tương ứng với
từng trường hợp giá trị khác
nhau có thể xảy ra của biểu
thức trong ngoặc. CÁC CẤU TRÚC ĐIỀU KHIỂN 1. U C A N Nhập môn tin học 62 CÁC CẤU TRÚC ĐIỀU KHIỂN 1. U C A N switch, case và default là các từ
khoá, chuỗi_câu_lệnh có thể là
lệnh đơn hoặc lệnh ghép và
không cần đặt trong cặp dấu
ngoặc. Biểu_thức theo sau từ khóa Kiểu dữ liệu kết quả của 63 biểu_thức và kiểu dữ liệu của
các hằng theo sau từ khoá case
phải đồng nhất. CÁC CẤU TRÚC ĐIỀU KHIỂN 1. U C A N Hằng số sau case chỉ có thể là
một hằng số nguyên hoặc
hằng ký tự. Nó cũng có thể là các hằng biểu thức – những biểu thức
không chứa bất kỳ một biến
nào. Tất cả các giá trị của case phải khác nhau. 64 CÁC CẤU TRÚC ĐIỀU KHIỂN Biểu thức được xác định giá 1. U C A N Lệnh break (sẽ nói ở phần
sau) cho phép thoát ra khỏi
câu nh switch. 65 CÁC CẤU TRÚC ĐIỀU KHIỂN 1. U C A N Các câu lệnh gắn với default
sẽ được thực hiện nếu không
có case nào thỏa mãn. Lệnh default là tùy chọn. Nếu
không có lệnh default và
không có case nào thỏa mãn,
không có hành động nào được
thực hiện. Có thể thay đổi thứ tự của 66 CÁC CẤU TRÚC ĐIỀU KHIỂN char choice;
printf("Enter a choice: " ) ;
scanf("%c", &choice);
switch (choice){ 1. U C A N 67 void main()
{
case '+':
printf("\nChoice :%c", choice);
break;
case '-':
printf("\nChoice Subtraction");
break;
case '*':
printf("\nChoice Multiplication");
break;
case '/':
printf("\nChoice Division");
break;
default:
printf("\nInvalid Choice!");
break;
}
getch();
} CÁC CẤU TRÚC ĐIỀU KHIỂN char choice;
printf("Enter a choice: " ) ;
scanf("%c", &choice);
switch (choice){ 68 void main()
{
case '+':
printf("\nChoice :%c", choice);
break;
case '-':
printf("\nChoice Subtraction");
break;
case '*':
printf("\nChoice Multiplication");
break;
case '/':
printf("\nChoice Division");
break;
default:
printf("\nInvalid Choice!");
break;
}
getch();
} #include C 1. U A N CÁC CẤU TRÚC ĐIỀU KHIỂN char ch; printf(“\nCharacter not a lower cased alphabet”); Ví dụ sau yêu cầu người
tự ở
dùng nhập vào một
dạng chữ thường và hiển thị
thông báo
tự đó là nguyên
âm, là chữ z hay là một phụ
âm. printf(“\nCharacter is a vowel”);
break; printf (“\nLast Alphabet (z) was entered”);
break; printf(“\nCharacter is a consonant”); scanf(“%c”, &ch);
if (ch < „a‟ || ch > „z‟)
else switch (ch){
case „a‟:
case „e‟:
case „i‟:
case „o‟:
case „u‟:
case „z‟:
default:
break;
} 1. U C A N 69 #include CÁC CẤU TRÚC ĐIỀU KHIỂN char ch; printf(“\nCharacter not a lower cased alphabet”); A N C U 1. printf(“\nCharacter is a vowel”);
break; printf (“\nLast Alphabet (z) was entered”);
break; printf(“\nCharacter is a consonant”); scanf(“%c”, &ch);
if (ch < „a‟ || ch > „z‟)
else switch (ch){
case „a‟:
case „e‟:
case „i‟:
case „o‟:
case „u‟:
case „z‟:
default:
break;
} 70 #include Chương trình sau đây sẽ hiển
thị 5 dòng thông báo tương
ứng với 5 chức năng cho
phép người dùng lựa chọn. 71 void main()
{
CÁC CẤU TRÚC ĐIỀU KHIỂN
int choice;
printf("1.Check whether an integer is a prime number\n");
printf("2.Calculate and return area of a rectangle\n");
printf("3.Find the sum of two integer numbers\n");
printf("4.Find the maximum value in an array\n");
printf("5.Exit\n");
printf(“Enter choice [1..5]:”); scanf("%d", &choice);
switch (choice){
case 1:
printf("\nChoice :%d", choice);
break;
case 2:
printf("\nChoice: %d", choice);
break;
case 3:
printf("\nChoice: %d", choice);
break;
case 4:
printf("\nChoice: %d", choice);
break;
default:
printf("bye bye!");
break;
}
getch();
} A N C U 1. CÁC CẤU TRÚC ĐIỀU KHIỂN Một trong những điểm mạnh lớn nhất của máy tính là khả năng thực hiện một chuỗi các lệnh lặp đi lặp lại. Điều đó có
được là do sử dụng các cấu trúc lặp trong ngôn ngữ lập trình. Vòng lặp là một đoạn mã lệnh trong chương trình được thực hiện lặp đi lặp lại cho đến khi thỏa mãn một điều kiện nào đó.
Vòng lặp là một khái niệm cơ bản trong lập trình cấu trúc. CNTT Nhập môn tin học 72 2. NG P CÁC CẤU TRÚC ĐIỀU KHIỂN Một trong những điểm mạnh lớn nhất của máy tính là khả năng thực hiện một chuỗi các lệnh lặp đi lặp lại. Điều đó có
được là do sử dụng các cấu trúc lặp trong ngôn ngữ lập trình. Vòng lặp là một đoạn mã lệnh trong chương trình được thực hiện lặp đi lặp lại cho đến khi thỏa mãn một điều kiện nào đó.
Vòng lặp là một khái niệm cơ bản trong lập trình cấu trúc. Trong C có các loại vòng lặp sau:
Vòng lặp for
Vòng lặp while
Vòng lặp do…while
Ta sử dụng các toán tử quan hệ và toán tử logic trong các biểu
thức điều kiện để điều khiển sự thực hiện của vòng lặp. 73 2. NG P CÁC CẤU TRÚC ĐIỀU KHIỂN Khởi tạo giá trị
cho biến điều khiển 2. NG P Thay đổi giá trị biến điều khiển Khối lệnh Biểu thức điều kiện Điều kiện đúng Điều kiện sai 74 CÁC CẤU TRÚC ĐIỀU KHIỂN Khối lệnh; 2. NG P 75 CÁC CẤU TRÚC ĐIỀU KHIỂN Khối lệnh; 2. NG P Biểu thức điều kiện là một biểu thức quan hệ, xác định điều kiện thoát cho vòng lặp. 76 Biểu thức thay đổi giá trị của biến điều khiển xác định biến điều khiển sẽ bị thay đổi như thế nào sau mỗi lần vòng lặp được lặp lại CÁC CẤU TRÚC ĐIỀU KHIỂN Khối lệnh; 2. NG P số trường hợp đặc biệt vòng for chỉ có 2 thành phần thứ nhất và thành phần
thứ 3, còn thành phần thứ 2 mất đi. Lúc này biểu thức điều kiện luôn đúng. Vì vậy, vòng lặp for trở lại một chu 77 trình vô hạn, vì thế ta cần có những câu lệnh điều khiển vòng lặp như
break, continue, return CÁC CẤU TRÚC ĐIỀU KHIỂN 2. NG P
Quá trình thực hiện vòng lặp này như sau:
1. Khởi tạo giá trị cho biến điều khiển: i = 1.
Lệnh này được thực hiện duy nhất một lần
khi vòng lặp bắt đầu được thực hiện, và
biến i được đặt giá trị là 1. for (i = 1; i<=10; i++)
printf("%d ", i);
printf(“\nFinish!”) 78 CÁC CẤU TRÚC ĐIỀU KHIỂN 2. NG 2. Kiểm tra biểu thức điều kiện: i < =10 ? P
Quá trình thực hiện vòng lặp này như sau:
1. Khởi tạo giá trị cho biến điều khiển: i = 1.
Lệnh này được thực hiện duy nhất một lần
khi vòng lặp bắt đầu được thực hiện, và
biến i được đặt giá trị là 1. Chương trình kiểm tra xem giá trị hiện tại
của biến i có nhỏ hơn hay bằng 10 hay
không. Nếu đúng, các câu lệnh trong thân
vòng lặp sẽ được thực hiện. for (i = 1; i<=10; i++)
printf("%d ", i);
printf(“\nFinish!”) 79 CÁC CẤU TRÚC ĐIỀU KHIỂN 2. NG 2. Kiểm tra biểu thức điều kiện: i < =10 ? P
Quá trình thực hiện vòng lặp này như sau:
1. Khởi tạo giá trị cho biến điều khiển: i = 1.
Lệnh này được thực hiện duy nhất một lần
khi vòng lặp bắt đầu được thực hiện, và
biến i được đặt giá trị là 1. Chương trình kiểm tra xem giá trị hiện tại
của biến i có nhỏ hơn hay bằng 10 hay
không. Nếu đúng, các câu lệnh trong thân
vòng lặp sẽ được thực hiện. 3. Thân của vòng lặp có duy nhất một lệnh printf("%d\n", i); 80 CÁC CẤU TRÚC ĐIỀU KHIỂN 2. NG 2. Kiểm tra biểu thức điều kiện: i < =10 ? P
Quá trình thực hiện vòng lặp này như sau:
1. Khởi tạo giá trị cho biến điều khiển: i = 1.
Lệnh này được thực hiện duy nhất một lần
khi vòng lặp bắt đầu được thực hiện, và
biến i được đặt giá trị là 1. Chương trình kiểm tra xem giá trị hiện tại
của biến i có nhỏ hơn hay bằng 10 hay
không. Nếu đúng, các câu lệnh trong thân
vòng lặp sẽ được thực hiện. 3. Thân của vòng lặp có duy nhất một lệnh for (i = 1; i<=10; i++)
printf("%d ", i);
printf(“\nFinish!”) printf("%d\n", i); 4. Biểu thức thay đổi giá trị của biến điều khiển i++, tăng giá trị của biến i lên 1 cho
lần lặp kế tiếp. 81 CÁC CẤU TRÚC ĐIỀU KHIỂN 2. NG 2. Kiểm tra biểu thức điều kiện: i < =10 ? P
Quá trình thực hiện vòng lặp này như sau:
1. Khởi tạo giá trị cho biến điều khiển: i = 1.
Lệnh này được thực hiện duy nhất một lần
khi vòng lặp bắt đầu được thực hiện, và
biến i được đặt giá trị là 1. Chương trình kiểm tra xem giá trị hiện tại
của biến i có nhỏ hơn hay bằng 10 hay
không. Nếu đúng, các câu lệnh trong thân
vòng lặp sẽ được thực hiện. 3. Thân của vòng lặp có duy nhất một lệnh for (i = 1; i<=10; i++)
printf("%d ", i);
printf(“\nFinish!”) printf("%d\n", i); 4. Biểu thức thay đổi giá trị của biến điều khiển i++, tăng giá trị của biến i lên 1 cho
lần lặp kế tiếp. 5. Lặp lại các bước 2, 3, 4 cho đến khi biểu 82 thức điều kiện là sai. CÁC CẤU TRÚC ĐIỀU KHIỂN 2. NG P Như vậy, vòng lặp trên sẽ được thực hiện 10 lần với giá trị của i thay đổi từ 1 đến 10.
Khi i tăng lên 11. Do giá trị này lớn hơn 10, for (i = 1; i<=10; i++)
printf("%d ", i);
printf(“\nFinish!”) vòng lặp kết thúc và câu lệnh
printf(“Finish!”) sau vòng lặp được thực
hiện. 83 Kết quả thực hiện đoạn mã trên như sau:
1 2 3 4 5 6 7 8 9 10
Finish! CÁC CẤU TRÚC ĐIỀU KHIỂN Đoạn chương trình trên yêu cầu 2. NG P Sau khi vòng lặp kết thúc, giá trị tổng sẽ được hiển thị ra màn hình. 84 CÁC CẤU TRÚC ĐIỀU KHIỂN Đoạn chương trình trên yêu cầu 2. NG P Sau khi vòng lặp kết thúc, giá trị tổng sẽ được hiển thị ra màn hình.
Kết quả thực hiện của đoạn chương 85 trình trên như sau:
please enter a number:5
Sum of 5 first natural numbers is: 15 CÁC CẤU TRÚC ĐIỀU KHIỂN Một trong những điểm mạnh lớn nhất của máy tính là khả năng thực hiện một chuỗi các lệnh lặp đi lặp lại. Điều đó có
được là do sử dụng các cấu trúc lặp trong ngôn ngữ lập trình. Vòng lặp là một đoạn mã lệnh trong chương trình được thực hiện lặp đi lặp lại cho đến khi thỏa mãn một điều kiện nào đó.
Vòng lặp là một khái niệm cơ bản trong lập trình cấu trúc. CNTT Nhập môn tin học 86 2. NG P CÁC CẤU TRÚC ĐIỀU KHIỂN 2. NG P ng p for có thể được mở rộng để
thêm vào các lệnh khởi tạo hay các lệnh thay đổi giá trị của
biến. Cú pháp như sau: biểu_thức_1 , biểu_thức_2 Các biểu thức trên được phân cách bởi toán tử „phẩy‟ ( , ), và được thực hiện từ trái sang phải. Toán tử này có độ ưu tiên thấp nhất trong các toán tử của C. Nhập môn tin học 87 CNTT CÁC CẤU TRÚC ĐIỀU KHIỂN 2. NG P Kết quả thực hiện của đoạn
chương trình trên như sau: int i, j, max;
printf(“Please enter the maxinum value printf(“for which a table can be printed: scanf(“%d”, &max);
for (i = 0, j = max; i < = max; i++, j--)
printf(“\n%d + %d = %d”, i, j, i + j); Please enter the maxinum value
for which a table can be printed: 5
0 + 5 = 5
1 + 4 = 5
2 + 3 = 5
3 + 2 = 5
4 + 1 = 5
5 + 0 = 5 88 CÁC CẤU TRÚC ĐIỀU KHIỂN Chú ý trong vòng lặp for, phần khởi tạo giá trị là: i = 0, j = max int i, j, max;
printf(“Please enter the maxinum value Khi vòng lặp bắt đầu chạy, i được
gán giá trị 0 và j được gán giá trị
của max. printf(“for which a table can be printed: Phần thay đổi giá trị của biến điều khiển gồm hai biểu thức: i++, j-- scanf(“%d”, &max);
for (i = 0, j = max; i < = max; i++, j--)
printf(“\n%d + %d = %d”, i, j, i + j); 2. NG P 89 CÁC CẤU TRÚC ĐIỀU KHIỂN 2. NG P . . . . . .
for (j = 0; j < m; j++)
{
}
. . . 90 CÁC CẤU TRÚC ĐIỀU KHIỂN P Qúa trình thực hiện vòng lặp ở đây như sau:
1. Khởi tạo giá trị cho biến điều khiển vòng lặp ngoài cùng: i = 1. 91 2. NG CÁC CẤU TRÚC ĐIỀU KHIỂN P Qúa trình thực hiện vòng lặp ở đây như sau:
1. Khởi tạo giá trị cho biến điều khiển vòng lặp ngoài cùng: i = 1. 2. Kiểm tra biểu thức điều kiện vòng lặp ngoài cùng (i <= 10)? Do giá trị hiện tại của i = 1 nên biểu thức
điều kiện này nhận giá trị đúng và khối lệnh trong
thân vòng lặp được thực hiện. 92 2. NG CÁC CẤU TRÚC ĐIỀU KHIỂN P Qúa trình thực hiện vòng lặp ở đây như sau:
1. Khởi tạo giá trị cho biến điều khiển vòng lặp ngoài cùng: i = 1. 2. Kiểm tra biểu thức điều kiện vòng lặp ngoài cùng (i <= 10)? Do giá trị hiện tại của i = 1 nên biểu thức
điều kiện này nhận giá trị đúng và khối lệnh trong
thân vòng lặp được thực hiện. 3. Thân của vòng lặp này chứa một vòng lặp nữa (biến
j) và lệnh xuống dòng printf("%d\n", i). Thực hiện
vòng lặp bên trong hoàn toàn tương tự như vòng lặp
bên ngoài. Vòng lặp này sẽ thực hiện 5 lần với giá trị
của j thay đổi từ 1 đến 5. Khi j tăng lên 6, mỗi lần
thực hiện sẽ in ra màn hình giá trị tương ứng của j.
Do giá trị này lớn hơn 5 nên vòng lặp trong kết thúc.
Lệnh xuống dòng được thực hiện . Sau đó, thực hiện
vòng lặp bên ngoài. 93 2. NG CÁC CẤU TRÚC ĐIỀU KHIỂN P Qúa trình thực hiện vòng lặp ở đây như sau:
1. Khởi tạo giá trị cho biến điều khiển vòng lặp ngoài cùng: i = 1. 2. Kiểm tra biểu thức điều kiện vòng lặp ngoài cùng (i <= 10)? Do giá trị hiện tại của i = 1 nên biểu thức
điều kiện này nhận giá trị đúng và khối lệnh trong
thân vòng lặp được thực hiện. 3. Thân của vòng lặp này chứa một vòng lặp nữa (biến
j) và lệnh xuống dòng printf("%d\n", i). Thực hiện
vòng lặp bên trong hoàn toàn tương tự như vòng lặp
bên ngoài. Vòng lặp này sẽ thực hiện 5 lần với giá trị
của j thay đổi từ 1 đến 5. Khi j tăng lên 6, mỗi lần
thực hiện sẽ in ra màn hình giá trị tương ứng của j.
Do giá trị này lớn hơn 5 nên vòng lặp trong kết thúc.
Lệnh xuống dòng được thực hiện . Sau đó, thực hiện
vòng lặp bên ngoài. 4. Biểu thức thay đổi giá trị của biến điều khiển i++,
tăng giá trị của biến i lên 1 cho lần lặp kế tiếp. 94 2. NG CÁC CẤU TRÚC ĐIỀU KHIỂN P Qúa trình thực hiện vòng lặp ở đây như sau:
1. Khởi tạo giá trị cho biến điều khiển vòng lặp ngoài cùng: i = 1. 2. Kiểm tra biểu thức điều kiện vòng lặp ngoài cùng (i <= 10)? Do giá trị hiện tại của i = 1 nên biểu thức
điều kiện này nhận giá trị đúng và khối lệnh trong
thân vòng lặp được thực hiện. 3. Thân của vòng lặp này chứa một vòng lặp nữa (biến
j) và lệnh xuống dòng printf("%d\n", i). Thực hiện
vòng lặp bên trong hoàn toàn tương tự như vòng lặp
bên ngoài. Vòng lặp này sẽ thực hiện 5 lần với giá trị
của j thay đổi từ 1 đến 5. Khi j tăng lên 6, mỗi lần
thực hiện sẽ in ra màn hình giá trị tương ứng của j.
Do giá trị này lớn hơn 5 nên vòng lặp trong kết thúc.
Lệnh xuống dòng được thực hiện . Sau đó, thực hiện
vòng lặp bên ngoài. 95 4. Biểu thức thay đổi giá trị của biến điều khiển i++,
tăng giá trị của biến i lên 1 cho lần lặp kế tiếp.
5. Lặp lại các bước 2, 3, 4 cho đến khi biểu thức điều kiện là sai. 2. NG CÁC CẤU TRÚC ĐIỀU KHIỂN 2. NG P đủ các thành phần của nó. Ví dụ: printf(“Input i = “);
scanf(“%d”,&i);
. . . . . .
for (i = 1; i!= 10;)
{
} Đoạn mã trên sẽ yêu cầu nhập giá trị cho biến i, vòng lặp 96 không có phần thay đổi giá trị của biến điều khiển và sẽ kết
thúc khi biến i có giá trị 10. CÁC CẤU TRÚC ĐIỀU KHIỂN 2. NG P cho biến điều khiển vòng lặp như sau: 97 printf("Input i = ");
scanf("%d", &i);
for(; i < 10; )
{
}
Vòng lặp trên không có phần khởi tạo tham số và phần thay đổi giá trị của
tham số i. Tuy nhiên, giá trị của i đã được thay đổi trong thân vòng lặp để
tránh trường hợp lặp vô n. CÁC CẤU TRÚC ĐIỀU KHIỂN 2. NG P một vòng lặp vô n. . . . for ( ; ; )
{
}
Tuy nhiên, lệnh break bên trong vòng lặp sẽ cho phép 98 Vòng lặp trên sẽ được thực hiện cho đến khi người dùng nhập vào E hoặc e. CÁC CẤU TRÚC ĐIỀU KHIỂN ) có thể không có bất k 2. NG P lệnh nào trong
phần thân của nó. K
thuật này giúp tăng tính hiệu quả trong một vài giải
thuật và để tạo ra độ trễ về mặt thời gian. Chẳng hạn có thể tạo ra một độ
trễ trong khoảng thời gian MAX_TIME như sau: for (i = 0; i < MAX_TIME; i++); 99 CÁC CẤU TRÚC ĐIỀU KHIỂN 2. NG P CNTT Nhập môn tin học 100 CÁC CẤU TRÚC ĐIỀU KHIỂN 2. NG P khối lệnh. Nếu vòng lặp while chứa một tập các lệnh thì chúng phải được
n { }. điều_kiện có thể là biểu thức bất đặt trong cặp ngoặc
kỳ. 101 CÁC CẤU TRÚC ĐIỀU KHIỂN 102 2. NG P CÁC CẤU TRÚC ĐIỀU KHIỂN 1. Đầu tiên chương trình yêu cầu người dùng nhập vào một số. 2. NG P 103 CÁC CẤU TRÚC ĐIỀU KHIỂN 1. Đầu tiên chương trình yêu cầu người dùng nhập vào một số. 2. NG P 104 CÁC CẤU TRÚC ĐIỀU KHIỂN 1. Đầu tiên chương trình yêu cầu người dùng nhập vào một số. 2. NG P 5. Sau khi người dùng nhập xong, sẽ quay lại kiểm tra biểu thức điều kiện, nếu đúng vòng
lặp tiếp tục được thực hiện, nếu sai vòng lặp
kết thúc và lệnh getch()sau vòng lặp sẽ được
thực hiện. 6. Lặp lại các bước 2, 3, 4 cho đến khi biểu thức 105 điều kiện là sai. CÁC CẤU TRÚC ĐIỀU KHIỂN 2. NG P 106 Các biến trong biểu thức điều kiện
có thể bị thay đổi giá trị trong
thân vòng lặp, nhưng cuối cùng
điều kiện đó phải sai (false) nếu
không vòng lặp sẽ không bao giờ
kết thúc. CÁC CẤU TRÚC ĐIỀU KHIỂN Giá trị i luôn luôn có giá trị bằng
1 và vì vậy biểu thức điều kiện
luôn trả về giá trị đúng. Do vậy
vòng lặp không bao giờ kết thúc. 107 2. NG P CÁC CẤU TRÚC ĐIỀU KHIỂN Giá trị i luôn luôn có giá trị bằng
1 và vì vậy biểu thức điều kiện
luôn trả về giá trị đúng. Do vậy
vòng lặp không bao giờ kết thúc. Có thể khắc phục điều này một cách đơn
giản bằng cách bổ sung thêm biểu thức
thay đổi giá trị của biến điểu khiển vòng
lặp như sau: i++; 108 2. NG P void main()
{
int i = 1;
while (i < 10){
printf("\n This is iteration %d\n", i);
}
getch();
} CÁC CẤU TRÚC ĐIỀU KHIỂN Vòng lặp này sẽ thực hiện 3 lần,
lần lặp thứ nhất j sẽ là 10, lần
lặp kế tiếp j bằng 8 và lần lặp
thứ ba j sẽ bằng 6. Khi đó i vẫn nhỏ hơn 100 ( i ...
i++;
j -= 2; 109 int i, j;
i = 0;
j = 10;
while (i < 100 && j > 5)
{
}
... bằng 3), j nhận giá trị 4 và điều
kiện j > 5 trở thành false, vì vậy
vòng lặp kết thúc. 2. NG P CÁC CẤU TRÚC ĐIỀU KHIỂN 2. NG P Điều này có nghĩa là vòng lặp do ... while sẽ được thực
hiện ít nhất một lần, ngay cả
khi điều kiện là sai (false) ở
lần chạy đầu tiên. 110 CÁC CẤU TRÚC ĐIỀU KHIỂN câu_lệnh; n {} là không cần thiết khi chỉ có một câu p dấu 2. NG P lệnh hiện diện trong vòng lặp, nhưng việc sử dụng
ngoặc n {} là một thói quen tốt. • Vòng lặp do ... while lặp đến khi điều_kiện mang giá trị false.
Trong vòng lặp do ... while, câu_lệnh (khối các câu lệnh) sẽ
được thực thi trước, và sau đó điều_kiện được kiểm tra. 111 CÁC CẤU TRÚC ĐIỀU KHIỂN Đoạn chương trình trên yêu cầu người dùng nhập số bất kỳ từ bàn
phím, nếu số đó nằm ngoài
khoảng 1..10 (có nghĩa là nhỏ
hơn 1 hoặc lớn hơn 10) thì yêu
cầu nhập lại. 112 2. NG P CÁC CẤU TRÚC ĐIỀU KHIỂN Đoạn chương trình trên yêu cầu người dùng nhập số bất kỳ từ bàn
phím, nếu số đó nằm ngoài
khoảng 1..10 (có nghĩa là nhỏ
hơn 1 hoặc lớn hơn 10) thì yêu
cầu nhập lại. Kết quả thực hiện của chương trình này như sau: Please enter a number between 1 and 10: 11
The number is not between 1 and 10.
Please enter a number between 1 and 10: 12
The number is not between 1 and 10.
Please enter a number between 1 and 10: 0
The number is not between 1 and 10.
Please enter a number between 1 and 10: 2
113
You entered a 2. 2. NG P u CÁC CẤU TRÚC ĐIỀU KHIỂN dùng nhập vào một k Sau khi nhập, chương trình sẽ hỏi
người dùng có muốn nhập tiếp k
tự khác hay không (Y/N)? Nếu trả lời „n‟ hoặc „N‟, chương trình kết thúc. tự cho đến khi người dùng }while (c != 'E' && c != 'e'); scanf("%c", &x);
fflush(stdin); 114 Nếu trả lời „y‟ hoặc „Y‟ , sẽ cho
phép người dùng nhập liên tục
các k
nhập vào kí tự „e‟ hoặc „E‟.
Lúc này, chương trình sẽ hỏi lại
tự
người dùng có muốn nhập k
không và lặp lại các bước thực
hiện như trên. 2. NG u P
Chương trình trên yêu cầu người
tự bất kỳ.
Các vòng lặp „while lồng nhau‟ và „do
... while‟
int main(){
char x, c;
printf("Enter a character: "); scanf("%c", &c);
printf("Character entered: %c\n", c);
fflush(stdin);
printf("Enter more characters (Y/N)?");
scanf("%c", &x);
fflush(stdin);
while (x == 'Y' || x == 'y'){
do{
printf("Enter a character: ");
scanf("%c", &c);
fflush(stdin);
printf("Character entered: %c\n", c);
printf("Enter more characters (Y/N)?");
}
} CÁC CẤU TRÚC ĐIỀU KHIỂN Kết quả thực hiện của đoạn
chương trình trên như sau: }while (c != 'E' && c != 'e'); Enter a character: b
Character entered: b
Enter more characters (Y/N)? y
Enter a character:c
Character entered:c
Enter a character:e
Character entered:c
Enter more characters (Y/N)? n scanf("%c", &x);
fflush(stdin); 115 2. NG u P
Các vòng lặp „while lồng nhau‟ và „do
... while‟
int main(){
char x, c;
printf("Enter a character: "); scanf("%c", &c);
printf("Character entered: %c\n", c);
fflush(stdin);
printf("Enter more characters (Y/N)?");
scanf("%c", &x);
fflush(stdin);
while (x == 'Y' || x == 'y'){
do{
printf("Enter a character: ");
scanf("%c", &c);
fflush(stdin);
printf("Character entered: %c\n", c);
printf("Enter more characters (Y/N)?");
}
} CÁC CẤU TRÚC ĐIỀU KHIỂN C có bốn câu lệnh thực hiện sự rẽ nhánh không điều kiện: 3. C NH Y Sự rẽ nhánh không điều kiện nghĩa là sự chuyển điều khiển từ một điểm đến một lệnh xác định. Trong các lệnh chuyển điều khiển trên, return và goto có thể dùng bất kỳ vị trí nào trong chương trình, trong khi lệnh break
và continue được sử dụng kết hợp với các câu lệnh vòng lặp. CNTT Nhập môn tin học 116 CÁC CẤU TRÚC ĐIỀU KHIỂN 3. C NH Y Khi chương trình gặp lệnh break trong một vòng lặp, ngay lập
tức vòng lặp được kết thúc và quyền điều khiển chương trình
được chuyển đến câu lệnh theo sau vòng lặp. CNTT Nhập môn tin học 117 CÁC CẤU TRÚC ĐIỀU KHIỂN int n,i ;
printf("Input n = ");
scanf("%d",&n); ng lặp trên sẽ Đoạn chương trình trên yêu cầu
người dùng nhập một số nguyên bất
kỳ từ bàn phím (n). Sau đó sẽ in ra
dãy số theo thứ tự ngược từ n tới 1.
Về nguyên tắc,
thực hiện n lần. Tuy nhiên, do có
câu lệnh:
if (i==5) break;
nên vòng lặp này sẽ bị kết thúc
giữa chừng sau lần lặp thứ 5 (i = 5). if (i==5)
break;
printf("%d ",i) ; for (i=n;i>=1;i--)
{
} 118 3. C NH Y u CÁC CẤU TRÚC ĐIỀU KHIỂN Kết quả thực hiện của chương trình như sau: int n,i ;
printf("Input n = ");
scanf("%d",&n); Input n = 10
So vua nhap la: 10
10 9 8 7 6 if (i==5)
break;
printf("%d ",i) ; for (i=n;i>=1;i--)
{
} 119 3. C NH Y u CÁC CẤU TRÚC ĐIỀU KHIỂN 3. C NH Y CNTT Nhập môn tin học 120 CÁC CẤU TRÚC ĐIỀU KHIỂN 3. C NH Y Trong trường hợp vòng lặp for, continue thực hiện biểu thức
thay đổi giá trị của biến điều khiển và sau đó kiểm tra biểu
thức điều kiện. Trong trường hợp của lệnh while và do…while, quyền điều
khiển chương trình được chuyển đến biểu thức kiểm tra điều
kiện. CNTT Nhập môn tin học 121 CÁC CẤU TRÚC ĐIỀU KHIỂN int n,i ;
printf("Input n = ");
scanf("%d",&n); if (i%2!=0) continue;
printf("%d ",i) ; Chương trình trên yêu cầu người
dùng nhập vào một số nguyên bất
kỳ (n) và in ra mà hình tất cả
những số chẵn trong khoảng từ 1
đến n.
Tại mỗi bước lặp, nếu điều kiện
(i%2!=0) thỏa mãn lệnh continue
sẽ được thực hiện. Như vậy, câu
lệnh printf("%d ",i)- in giá trị của i
ra màn hình sẽ bị bỏ qua và vòng
lặp kế tiếp được bắt đầu 122 3. C NH Y u CÁC CẤU TRÚC ĐIỀU KHIỂN Kết quả thực hiện của chương trình trên như sau: int n,i ;
printf("Input n = ");
scanf("%d",&n); if (i%2!=0) continue;
printf("%d ",i) ; Input n = 100
So vua nhap la: 100
2 4 6 8 10 12 14 16 18 20 22 24 26
28 30 32 34 36 38 40 42 44 46 48
50 52 54 56 58 60 62 64 66 68 70
72 74 76 78 80 82 84 86 88 90 92
94 96 98 100 123 3. C NH Y u CÁC CẤU TRÚC ĐIỀU KHIỂN 3. C NH Y trong hàm đó được thực thi xong. Trong lệnh return có thể có
một giá trị gắn với nó, giá trị đó sẽ được trả về cho chương trình. return biểu_thức; Biểu_thức là một tùy chọn (không bắt buộc). Có thể có hơn một
lệnh return được sử dụng trong một hàm. Tuy nhiên, hàm sẽ
:
quay trở về vị trí gọi hàm khi gặp lệnh return đầu tiên. 124 int f(n)
{
Các công việc....
return giá trị trả về;
} Cấu trúc lựa chọn
Câu lệnh if
Câu lệnh if – else
Câu lệnh với nhiều lệnh if
Câu lệnh if lồng nhau
Câu lệnh switch. Vòng lặp Vòng lặp „for‟ trong C
Toán tử „phẩy‟
Vòng lặp lồng nhau
Vòng lặp „while‟ và vòng lặp „do-while‟ Lệnh nhẩy 125 Các lệnh „break‟, „continue‟ và „goto‟
Hàm „exit()‟. https://sites.google.com/site/daonamanhedu/intro2informatics Cám ơnToán tử ?
Toán tử điều kiện (?) được sử dụng khá hiệu quả khi biểu diễn
thay thế một câu lệnh if đơn giản theo
Biểu thức 1 ? biểu thức 2: biểu thức 3;
Ví dụ câu lệnh sau sẽ xác định số lớn nhất trong 2 số a và b để
gán cho z.
z = (a > b) ? a : b;
Câu lệnh này tương đương với:
if (a>b)
z = a;
else
z = b;
Câu lệnh switch
Thực hiện nhiều công việc
trong nhiều nhánh khác
nhau.
Cú pháp tổng quát của lệnh switch
switch (biểu_thức)
{
case
hằng_1:
chuỗi_câu_lệnh;
break;
case
hằng_2:
chuỗi_câu_lệnh;
break;
case
hằng_3:
chuỗi_câu_lệnh;
break;
default:
chuỗi_câu_lệnh;
}
CNTT
Cú pháp tổng quát của lệnh
switch
switch (biểu_thức)
{
hằng_1:
case
chuỗi_câu_lệnh;
break;
case
hằng_2:
chuỗi_câu_lệnh;
break;
case
hằng_3:
chuỗi_câu_lệnh;
switch phải được đặt trong dấu
ngoặc ( ), và toàn bộ phần thân
của lệnh switch phải được đặt
trong cặp ngoặc nhọn { }.
break;
default:
chuỗi_câu_lệnh;
}
Cú pháp tổng quát của lệnh
switch
switch (biểu_thức)
{
hằng_1:
case
chuỗi_câu_lệnh;
break;
case
hằng_2:
chuỗi_câu_lệnh;
break;
case
hằng_3:
chuỗi_câu_lệnh;
break;
default:
chuỗi_câu_lệnh;
}
Cú pháp tổng quát của lệnh
switch
switch (biểu_thức)
{
hằng_1:
case
chuỗi_câu_lệnh;
break;
case
hằng_2:
trị, giá trị của nó được so sánh
với từng giá trị gắn với từng
case theo thứ tự đã chỉ ra.
Nếu một giá trị trong một
chuỗi_câu_lệnh;
break;
case
hằng_3:
case trùng với giá trị của biểu
thức, các lệnh gắn với case đó
sẽ được thực hiện.
chuỗi_câu_lệnh;
break;
default:
chuỗi_câu_lệnh;
}
Cú pháp tổng quát của lệnh
switch
switch (biểu_thức)
{
hằng_1:
case
chuỗi_câu_lệnh;
break;
case
hằng_2:
chuỗi_câu_lệnh;
break;
case
hằng_3:
chuỗi_câu_lệnh;
break;
default:
chuỗi_câu_lệnh;
case và default.
}
Cú pháp tổng quát của lệnh
switch
switch (biểu_thức)
{
hằng_1:
case
chuỗi_câu_lệnh;
break;
case
hằng_2:
chuỗi_câu_lệnh;
break;
case
hằng_3:
chuỗi_câu_lệnh;
break;
default:
chuỗi_câu_lệnh;
}
Nếu nó không phải ba loại ở
trên, chương trình hiển thị
thông báo “Character not a
lower cased alphabet”.
cả case cuối cùng hoặc
default mặc dù về mặt logic
là không cần thiết.
Nhưng điều đó rất có ích nếu
sau này chúng ta đưa thêm
case vào cuối.
Vòng lặp for
Vòng lặp for
Cú tổng quát của vòng lặp for:
for (khởi tạo giá trị cho biến điều khiển; biểu thức điều kiện; biểu
thức thay đổi giá trị của biến điều khiển)
{
}
Vòng lặp for
Cú tổng quát của vòng lặp for:
for (khởi tạo giá trị cho biến điều khiển; biểu thức điều kiện; biểu
thức thay đổi giá trị của biến điều khiển)
{
}
Khởi tạo giá trị cho biến điều khiển là một câu lệnh gán giá trị ban đầu cho
biến điều khiển trước khi thực hiện vòng lặp. Lệnh này chỉ được thực hiện
duy nhất một lần.
Vòng lặp for
Cú tổng quát của vòng lặp for:
for (khởi tạo giá trị cho biến điều khiển; biểu thức điều kiện; biểu
thức thay đổi giá trị của biến điều khiển)
{
}
Bình thường vòng lặp for sẽ có đầy đủ 3 thành phần, tuy nhiên trong một
Vòng lặp for
Ví dụ đoạn mã lệnh sau
sẽ hiển thị các số tự
nhiên từ 1 đến 10 ra màn
hình:
Vòng lặp for
Ví dụ đoạn mã lệnh sau
sẽ hiển thị các số tự
nhiên từ 1 đến 10 ra màn
hình:
Vòng lặp for
Ví dụ đoạn mã lệnh sau
sẽ hiển thị các số tự
nhiên từ 1 đến 10 ra màn
hình:
for (i = 1; i<=10; i++)
printf("%d ", i);
printf(“\nFinish!”)
Vòng lặp for
Ví dụ đoạn mã lệnh sau
sẽ hiển thị các số tự
nhiên từ 1 đến 10 ra màn
hình:
Vòng lặp for
Ví dụ đoạn mã lệnh sau
sẽ hiển thị các số tự
nhiên từ 1 đến 10 ra màn
hình:
Vòng lặp for
Ví dụ đoạn mã lệnh sau
sẽ hiển thị các số tự
nhiên từ 1 đến 10 ra màn
hình:
người dùng nhập vào một số nguyên
bất kỳ (n), sau đó sử dụng vòng lặp
for để tính tổng n số tự nhiên đầu
tiên.
Vòng lặp for.Ví dụ
#include
người dùng nhập vào một số nguyên
bất kỳ (n), sau đó sử dụng vòng lặp
for để tính tổng n số tự nhiên đầu
tiên.
Vòng lặp for.Ví dụ
#include
Toán tử ‘phẩy (comma)’:
Phần biểu thức trong
Thứ tự của các biểu thức là quan trọng trong trường hợp giá trị
của biểu thức thứ hai phụ thuộc vào giá trị của biểu thức thứ
nhất.
Ví dụ: in ra một bảng các phép
cộng với kết quả không đổi để
minh họa khái niệm về toán tử
phẩy rõ ràng hơn.
Vòng lặp for.Ví dụ
#include
Vòng lặp for.Ví dụ
#include
Sau mỗi lần thực hiện thân vòng
lặp, i được tăng lên 1 và j giảm đi
1. Tổng của hai biến đó luôn bằng
max và được in ra màn hình.
Vòng lặp for lồng nhau:
Một vòng lặp for được gọi là lồng nhau khi nó nằm bên trong
một vòng lặp for khác. Các vòng lặp for lồng nhau sẽ có cú
pháp như sau:
for (i = 1; i < n; i++)
{
}
Vòng lặp for.Ví dụ
Chương trình sau đây sẽ in ra 10 hàng,
mỗi hàng gồm 5 chữ số từ 1 đến 5:
int main()
{
int i, j;
for (i = 1; i<=10; i++){
for (j=1; j<=5; j++)
printf("%d ", j);
printf("\n");
}
}
Vòng lặp for.Ví dụ
Chương trình sau đây sẽ in ra 10 hàng,
mỗi hàng gồm 5 chữ số từ 1 đến 5:
int main()
{
int i, j;
for (i = 1; i<=10; i++){
for (j=1; j<=5; j++)
printf("%d ", j);
printf("\n");
}
}
Vòng lặp for.Ví dụ
Chương trình sau đây sẽ in ra 10 hàng,
mỗi hàng gồm 5 chữ số từ 1 đến 5:
int main()
{
int i, j;
for (i = 1; i<=10; i++){
for (j=1; j<=5; j++)
printf("%d ", j);
printf("\n");
}
}
Vòng lặp for.Ví dụ
Chương trình sau đây sẽ in ra 10 hàng,
mỗi hàng gồm 5 chữ số từ 1 đến 5:
int main()
{
int i, j;
for (i = 1; i<=10; i++){
for (j=1; j<=5; j++)
printf("%d ", j);
printf("\n");
}
}
Vòng lặp for.Ví dụ
Chương trình sau đây sẽ in ra 10 hàng,
mỗi hàng gồm 5 chữ số từ 1 đến 5:
int main()
{
int i, j;
for (i = 1; i<=10; i++){
for (j=1; j<=5; j++)
printf("%d ", j);
printf("\n");
}
}
Các trường hợp khác của vòng lặp for:
Vòng lặp for có thể được sử dụng mà không cần phải có đầy
Các trường hợp khác của vòng lặp for:
Một dạng khác, vòng lặp for có thể thiếu phần khởi tạo giá trị
printf("%d ", i);
i++;
Các trường hợp khác của vòng lặp for:
Vòng lặp for khi không có bất kỳ thành phần nào sẽ là
thoát khỏi vòng lặp.
for ( ; ; )
{
ch = getchar();
if (ch == „E‟ || i == „e‟);
break;
}
Các trường hợp khác của vòng lặp for:
Vòng lặp for (hay vòng lặp bất k
Vòng lặp while
Cú pháp tổng quát như sau:
while (điều_kiện là đúng)
câu_lệnh;
Vòng lặp while
Cú pháp tổng quát như sau:
while (điều_kiện là đúng)
câu_lệnh;
Trong đó, câu_lệnh có thể là rỗng, hay một lệnh đơn, hay một
Vòng lặp sẽ được thực hiện lặp đi lặp lại khi điều kiện trên là
đúng (true). Chương trình sẽ chuyển đến thực hiện lệnh tiếp
sau vòng lặp khi điều kiện trên là sai (false).
Vòng lặp while.Ví dụ
Chương trình ví dụ sau đây cho phép
người dùng nhập liên tục các số nguyên
bất kỳ từ bàn phím. Việc nhập sẽ kết thúc
khi người dùng nhập vào số 0.
void main()
{
int x;
printf("Input a number: ");
scanf("%d", &x);
while (x!=0){
printf("%d\n",x);
printf("Input a next number: ");
scanf("%d", &x);
}
getch();
}
2. Nếu người dùng nhập vào số 0 thì biểu thức
điều kiện (x!=0) nhận giá trị sai, vòng lặp
while sẽ kết thúc và không thực hiện lần nào.
Vòng lặp while.Ví dụ
Chương trình ví dụ sau đây cho phép
người dùng nhập liên tục các số nguyên
bất kỳ từ bàn phím. Việc nhập sẽ kết thúc
khi người dùng nhập vào số 0.
void main()
{
int x;
printf("Input a number: ");
scanf("%d", &x);
while (x!=0){
printf("%d\n",x);
printf("Input a next number: ");
scanf("%d", &x);
}
getch();
}
2. Nếu người dùng nhập vào số 0 thì biểu thức
điều kiện (x!=0) nhận giá trị sai, vòng lặp
while sẽ kết thúc và không thực hiện lần nào.
3. Ngược lại, nếu người dùng nhập vào số khác
0 thì biểu thức điều kiện nhận giá trị đúng và
khối lệnh trong thân vòng lặp được thực hiện.
4. Trước tiên printf("%d\n",x)sẽ in giá trị của số
đã nhập ra màn hình sau đó yêu cầu người
dùng nhập vào số tiếp theo.
Vòng lặp while.Ví dụ
Chương trình ví dụ sau đây cho phép
người dùng nhập liên tục các số nguyên
bất kỳ từ bàn phím. Việc nhập sẽ kết thúc
khi người dùng nhập vào số 0.
void main()
{
int x;
printf("Input a number: ");
scanf("%d", &x);
while (x!=0){
printf("%d\n",x);
printf("Input a next number: ");
scanf("%d", &x);
}
getch();
}
2. Nếu người dùng nhập vào số 0 thì biểu thức
điều kiện (x!=0) nhận giá trị sai, vòng lặp
while sẽ kết thúc và không thực hiện lần nào.
3. Ngược lại, nếu người dùng nhập vào số khác
0 thì biểu thức điều kiện nhận giá trị đúng và
khối lệnh trong thân vòng lặp được thực hiện.
4. Trước tiên printf("%d\n",x)sẽ in giá trị của số
đã nhập ra màn hình sau đó yêu cầu người
dùng nhập vào số tiếp theo.
Vòng lặp while.Ví dụ
Chương trình ví dụ sau đây cho phép
người dùng nhập liên tục các số nguyên
bất kỳ từ bàn phím. Việc nhập sẽ kết thúc
khi người dùng nhập vào số 0.
void main()
{
int x;
printf("Input a number: ");
scanf("%d", &x);
while (x!=0){
printf("%d\n",x);
printf("Input a next number: ");
scanf("%d", &x);
}
getch();
}
Giống như vòng lặp for, vòng lặp
while kiểm tra điều kiện ngay khi
bắt đầu thực hiện vòng lặp. Do đó
các lệnh trong thân vòng lặp sẽ
không được thực hiện nếu ngay từ
ban đầu điều kiện đó là sai.
Biểu thức điều kiện trong vòng
lặp có thể phức tạp tùy theo yêu
cầu của bài toán.
Vòng lặp while.Ví dụ
Chương trình ví dụ sau đây cho phép
người dùng nhập liên tục các số nguyên
bất kỳ từ bàn phím. Việc nhập sẽ kết thúc
khi người dùng nhập vào số 0.
void main()
{
int x;
printf("Input a number: ");
scanf("%d", &x);
while (x!=0){
printf("%d\n",x);
printf("Input a next number: ");
scanf("%d", &x);
}
getch();
}
Vòng lặp while.Ví dụ
Sau đây là ví dụ về một vòng lặp while
vô hạn.
void main()
{
int i = 1;
while (i < 10){
printf("\n This is iteration %d\n", i);
}
getch();
}
Vòng lặp while.Ví dụ
Sau đây là ví dụ về một vòng lặp while
vô hạn.
void main()
{
int i = 1;
while (i < 10){
printf("\n This is iteration %d\n", i);
}
getch();
}
Vòng lặp while.Ví dụ
Nếu có hơn một điều kiện được kiểm tra
để kết thúc vòng lặp, vòng lặp sẽ kết thúc
khi có ít nhất một điều kiện trong các
điều kiện đó là false. Ví dụ sau sẽ minh
họa điều này.
#include
Vòng lặp do...while
Vòng lặp do ... while
còn được gọi là vòng lặp
do trong C.
Không giống như vòng lặp
for và while, vòng lặp này
kiểm tra điều kiện tại cuối
vòng lặp.
Vòng lặp do...while
do{
} while (điều_kiện);
• Cặp dấu ngoặc
• Nếu điều kiện là true, chương trình sẽ quay lại thực hiện lệnh
do. Nếu điều kiện là false, chương trình chuyển đến thực hiện
lệnh nằm sau vòng lặp.
Vòng lặp do..while.Ví dụ
#include
Vòng lặp do..while.Ví dụ
#include
return, goto, break, và continue.
Lệnh break
Câu lệnh break có hai cách dùng.
Nó có thể được sử dụng để kết thúc một case trong câu lệnh
switch hoặc để kết thúc ngay một vòng lặp, mà không cần
kiểm tra điều kiện vòng lặp.
Ví dụ 3.16:
#include
Ví dụ 3.16:
#include
Lệnh break
Một điểm khác cần lưu ý là việc sử dụng câu lênh break trong
các lệnh lặp lồng nhau. Khi chương trình thực thi đến một lệnh
break nằm trong một vòng lặp for lồng bên trong một vòng
lặp for khác, quyền điều khiển được chuyển trở về vòng lặp
for bên ngoài.
Lệnh continue
Lệnh continue kết thúc lần lặp hiện hành và bắt đầu lần lặp kế
tiếp. Khi gặp lệnh này trong chương trình, các câu lệnh còn lại
trong thân của vòng lặp được bỏ qua và quyền điều khiển được
chuyển đến bước đầu của vòng lặp trong lần lặp kế tiếp.
Ví dụ 3.17:
#include
Ví dụ 3.17:
#include
Lệnh return
Lệnh return dùng để quay lại vị trí gọi hàm sau khi các lệnh
CÁC CẤU TRÚC ĐIỀU KHIỂN
TÓM TẮT