Chương 3: Các toán tử 
điều khiển và hàm 
nhập xuất
Biên soạn: Trương Vĩnh Trường Duy 
(
[email protected])
Từ tài liệu trên Internet và các nguồn khác
CƠ SỞ KỸ THUẬT LẬP TRÌNH
Nội dung
 Câu lệnh và khối lệnh
 Toán tử if
 Toán tử switch
 Toán tử while và dowhile
 Toán tử for
 Các hàm nhập xuất trong stdio.h và 
conio.h
Câu lệnh – khối lệnh
 Mỗi câu lệnh thực hiện một chức năng 
nào đó được kết thúc bằng dấu ;
 Dãy các câu lệnh được đặt trong cặp dấu 
{ và } được gọi là một khối lệnh và được 
xem như một câu lệnh riêng lẻ
 Những câu lệnh của một hàm, những câu 
lệnh của một cấu trúc phải được đặt vào 
dấu {}
 Các toán tử điều khiển cho phép thay đổi 
trật tự thực hiện các câu lệnh (khối lệnh) 
do đó máy có thể đang từ một câu lệnh 
này nhảy tới thực hiện một câu lệnh ở 
trước, hoặc sau nó
Toán tử if
 if (biểu_thức_điều_kiện)
khối_lệnh;
Nếu biểu thức cho kết quả khác 0 thì thực hiện 
khối lệnh
 if (biểu_thức_điều_kiện)
khối_lệnh_1;
else
khối_lệnh_2;
Nếu biểu thức cho kết quả khác 0 thì thực hiện 
khối lệnh 1, ngược lại thực hiện khối lệnh 2
 C cho phép các cấu trúc if lồng nhau
if () 
{ 
/* cac lenh thuc hien neu dieu kien dung */
}
expression
statement(s)
Next statement
True False
Toán tử if
if ()
{ 
/* cac lenh thuc hien neu dieu kien dung */ 
}
else
{ 
/* cac lenh thuc hien neu dieu kien sai */ 
}
expression
statement1
Next statement
True False
statement2
Toán tử if
#include 
int main() { 
int b; 
printf("Enter a value:"); 
scanf("%d", &b); 
if (b < 0) 
printf("The value \
is negative\n"); 
return 0; 
} 
printf(“1/X is: “);
if(X)
printf(“ %f \n”, 
1/X);
else
printf(“ undefined
\
\n”);
Toán tử if
Toán tử switch
 switch (biểu_thức_điều_kiện)
{ case n1: khối_lệnh_1;
case n2: khối_lệnh_2;
case nk: khối_lệnh_k;
[default: khối_lệnh_default;]
}
 Nếu biểu thức điều kiện = ni (ni là các hằng số 
nguyên, ký tự) thì thực hiện khối lệnh sau case ni, 
nếu không thực hiện khối lệnh sau default nếu 
có hoặc thoát khỏi switch
 Phải dùng break cuối mỗi khối lệnh để chương 
trình thoát khỏi switch sau khi thực hiện xong 1 
trường hợp
#include 
#include 
#include 
int main(void)
{
int n;
int n_even = n_odd = n_zero = 0;
randomize();
for(int i=0; i<1000; i++)
{
n = random(1000);
switch (n%10) {
case 2:
case 4:
case 6:
case 8:
n_even++; break;
Toán tử switch
case 1:
case 3:
case 5:
case 7:
n_odd++; break;
case 0:
n_zero++; break;
}
}
// print out the summary
printf(“ Number of even_eding number: %d\n”\
Number of odd_ending number: %d\n”\
Number of zero_ending number: %d\n”,
n_even, n_odd, n_zero);
return 0;
}
Toán tử switch
Toán tử while và dowhile
 while (biểu_thức_điều_kiện)
khối_lệnh;
 Nếu biểu thức còn khác 0 thì còn thực 
hiện khối lệnh của vòng lặp
 do
khối_lệnh;
while (biểu_thức_điều_kiện)
 Thực hiện khối lệnh cho đến khi biểu 
thức có giá trị bằng 0
while (expression)
{statement(s)}
 Khi biểu thức điều kiện (expression) còn khác 0, lệnh 
(statement) tiếp tục được thực hiện. Nếu expression bằng 0, 
lệnh while dừng và chương trình sẽ gọi lệnh kế tiếp sau while
 Nếu lúc đầu expression bằng 0 thì (statement) trong while 
không bao giờ được gọi thực hiện
expression
statement(s)
Next statement
True
False
Toán tử while và dowhile
do
{statement(s)}
while (expression) ;
 Thực hiện lệnh (statement). Kiểm tra biểu thức điều kiện 
(expression). Nếu (expression) bằng 0, dừng. Nếu không, thực 
hiện (statement)
 Lệnh do while thực hiện (statement) ít nhất một lần
expression
statement(s)
Next statement
True
False
Toán tử while và dowhile
Toán tử while và dowhile
 Khi gặp câu lệnh continue bên trong thân 
của while hoặc do while, máy sẽ chuyển 
đến xác định giá trị biểu thức sau từ 
khóa while, và sau đó tiến hành kiểm tra 
điều kiện kết thúc chu trình
 Trường hợp gặp câu lệnh break, máy sẽ 
thoát khỏi vòng while hay do..while ngay 
lập tức
 In bảng đổi nhiệt độ từ độ Fahrenheit (oF) 
sang độ Celcius (oC).
#include 
int main() { 
int a; 
a = 0; 
while (a <= 100) { 
printf("%4d degrees F = %4d degrees 
C\n", a, (a - 32) * 5 / 9); 
a = a + 10; 
} 
return 0; 
} 
Toán tử while và dowhile
#include 
#include 
#define PTB1 1
#define PTB2 2
#define STOP 3
int main() 
{
int i;
do {
clrscr(); // xoa man hinh
printf(“ Chuong trinh giai phuong trinh\
bac thap \n”);
Toán tử while và dowhile
printf(“ 1. Giai phuong trinh bac 1: \
ax + b = 0 \n”);
printf(“ 2. Giai phuong trinh bac 2 : \
ax^2 + bx + c = 0 
\n”);
printf(“ 3. Thoat chuong trinh \n\n”);
printf(“ Chon muc so (1/2/3) ? “);
scanf(“%d”, &i);
if(i == PTB1)
printf(“Giai phuong trinh bac 1: \
hien chua co\n”);
else if(i == PTB2)
printf(“Giai phuong trinh bac 2: \
chua cai dat\n\n”);
} while (i != STOP);
return 0;
}
Toán tử while và dowhile
Toán tử for
 for (biểu_thức_1;biểu_thức_2;biểu_thức_3)
khối_lệnh_1;
1. Tính giá trị biểu thức 1
2. Tính giá trị biểu thức 2
3. Nếu biểu thức 2 khác 0 thì cho thực hiện các 
lệnh của vòng lặp, ngược lại cho thoát khỏi 
lệnh for
4. Tính giá trị biểu thức 3 rồi quay lại bước 2
 Khi gặp câu lệnh break bên trong thân của toán 
tử for, máy sẽ thoát khỏi vòng for ngay lập tức
 Khi gặp câu lệnh continue bên trong thân của 
toán tử for, máy sẽ chuyển đến bước khởi đầu 
lại (bước 4) 
for (initialization; test; adjustment)
{statement(s)}
 Khởi động. Sau đó, nếu điều kiện (test) khác 0: lệnh 
(statement) được thi hành, lệnh điều chỉnh lại “biến đếm” 
được gọi thi hành
test
statement(s)
Next statement
True
False
adjustment
initialization
Toán tử for
 Bài toán đổi nhiệt độ. Yêu cầu: hiển thị nhiệt độ chính xác đến 
con số thập phân sau dấu phẩy.
#include 
int main() { 
float a; 
int i;
a = 0;
for(i=0; i<=100; i+=10) {
printf("%6.2f degrees F = %6.2f degrees C\n", 
a, (a - 32.0) * 5.0 / 
9.0); 
a = a + 10; 
} 
return 0; 
} 
Toán tử for
Toán tử goto
 goto nhan;
 Khi gặp toán tử này máy sẽ nhảy tới thực 
hiện câu lệnh viết sau từ khóa goto
 Nhãn có cùng dạng như tên biến và có 
dấu : đứng sau. Nhãn có thể được gán 
cho bất kỳ câu lệnh nào trong chương 
trình. Ví dụ: t:s+=a;
int s=1,a=3; goto t; ++a; t: s+=a
 Không cho phép dùng toán tử goto nhảy 
từ ngoài vào trong một khối lệnh, tuy 
nhiên nhảy từ trong ra ngoài khối lệnh là 
hoàn toàn hợp lệ
Hàm nhập xuất trong stdio.h
 printf(“Dòng điều khiển”,[các biểu thức]);
 Dòng điều khiển gồm 3 loại:
 Chuỗi ký tự mang tính chất thông báo 
(hằng chuỗi)
 Các ký tự điều khiển( \n, \r, \t..)
 Các mã đặc tả để in các biểu thức tương 
ứng (mỗi biểu thức khi in phải có một đặc 
tả)
 printf("gia tri 92 dung truong kieu d = %d. 
\n", 92);
Hàm nhập xuất trong stdio.h
 Các đặc tả được dùng trong hàm printf như sau
Hàm nhập xuất trong stdio.h
 scanf(“các đặc tả”,<danh sách đia chỉ các biến 
tương ứng với các đặc tả>);
 Mỗi biến muốn nhập giá trị phải có một đặc tả 
tương ứng. VD: scanf("%f", &value); 
scanf(“%[^\n]”,a)) 
 Các đặc tả được dùng trong hàm scanf
Hàm nhập xuất trong stdio.h
 gets(Tên của mảng ký tự);
 Hàm này cho phép nhận một chuỗi từ bàn phím cho 
đến khi gặp ký tự \n (cho phép nhập khoảng trắng 
giữa các từ)
 VD: gets(a);
 getchar(void)
 Nhận một ký tự từ bàn phím và trả về ký tự nhận 
được
 VD: j=getchar();
 Nếu trong chương trình có sử dụng các lệnh 
scanf, getchar thì các lệnh sử dụng sau sẽ bị trôi 
(không có tác dụng) do mã phím \n còn lại trong 
stdin của lệnh scanf hoặc getchar trước đó, do 
đó phải khử ký tự \n còn trong stdin bằng lệnh 
fflush(stdin) sau lệnh scanf 
Hàm nhập xuất trong stdio.h
 int putchar(int ch) 
 Xuất một ký tự lên màn hình. Kết quả của hàm trả 
về là ký tự xuất nếu thành công, ngược lại cho kết 
quả EOF (-1)
 VD: char c=’A’; putchar(c);/*in ra màn hình ký tự 
A*/
 int puts(char *s)
 Xuất một chuỗi lên màn hình với *s là con trỏ kiểu 
char trỏ tới ô nhớ đầu của vùng nhớ chứa chuỗi ký 
tự muốn xuất. Hàm này khi xuất sẽ đưa thêm ký tự 
\n vào cuối, kết quả của hàm =\n nếu thành công 
ngược lại = EOF
Hàm nhập xuất trong conio.h
 int getch(void)
 int getche(void)
 Hai hàm này chờ nhận một ký tự trực tiếp từ bộ 
đệm bàn phím. Nếu bộ đệm rỗng thì chờ. Khi một 
phím được ấn thì nhận ngay ký tự đó mà không cần 
phải enter như các hàm nhập từ stdin
 Hàm getche() cho hiện ký tự lên màn hình còn 
getch() thì không
 Kết quả trả về của hàm là ký tự được ấn
 Với các phím đặc biệt khi được ấn thì có hai giá trị 
được gửi lên bộ đệm bàn phím. Ví dụ khi ta ấn 
phím F1 thì giá trị đầu là 0, và giá trị kế là 59 được 
gửi lên bàn phím. Vì vậy để nhận được mã của các 
phím này ta phải đọc bộ đệm bàn phím thêm một 
lần nữa
Hàm nhập xuất trong conio.h
 cprintf có cú pháp giống như printf nhưng màu 
của nội dung được in được ấn định bởi hàm 
textcolor
 cscanf có cú pháp và công dụng như hàm scanf, 
nhưng khác nhau ở hai điểm: nội dung nhập có 
màu được ấn định bởi hàm textcolor; nhận nội 
dung trực tiếp từ bộ đệm bàn phím, vì vậy với 
hàm cscanf cũng phải khử ký tự \n trong bộ đệm
 VD
textcolor(YELLOW); /*Đặt mầu chữ*/
textbackground(BLUE); /*Đặt mầu nền*/
cprintf("\nNhap mot so: "); 
cscanf("%d%*c",&a); 
Hàm nhập xuất trong conio.h
 clrscr(); là hàm xóa toàn bộ màn hình và sau khi 
xóa con trỏ sẽ ở vị trí góc phía bên trái
 gotoxy(int x, int y); là hàm đặt con trỏ màn hình 
vào tọa độ X, Y của màn hình. Tọa độ X là tọa độ 
cột, tính từ 1 đến 80, tọa độ Y là tọa độ dòng, 
tính từ 1 đến 25. Màn hình gồm 25 dòng và 80 
cột
 Ví dụ: gotoxy (30,10);
 void textbackground(int color); đặt màu nền cho 
văn bản. Color là một biểu thức nguyên có giá trị 
từ 0 đến 7
 void textcolor(int newColor); đặt màu ký tự mới 
newColor là một biểu thức nguyên có giá trị từ 0 
đến 15