BÀI GIẢNG HỌC PHẦN

KỸ THUẬT LẬP TRÌNH

CHƯƠNG 3: VÀO/RA DỮ LIỆU VÀ CÁC

CẤU TRÚC ĐIỀU KHIỂN CHƯƠNG TRÌNH

Nội dung

2

3.1. Vào/ra dữ liệu 3.2. Các cấu trúc điều khiển chương trình

3.1. Vào/ra dữ liệu

3

• Khai báo thư viện chương trình • Lệnh đưa dữ liệu ra màn hình • Lệnh nhập dữ liệu vào từ bàn phím

Khai báo thư viện chương trình

báo tệp tiêu đề stdio.h (standard input/output)

• Để có thể sử dụng các lệnh vào/ra dữ liệu, cần khai

4

#include #include "stdio.h" hoặc

Lệnh đưa dữ liệu ra màn hình (1)

• Cú pháp:

printf(xâu_định_dạng, danh_sách_tham_số);

Trong đó: - xâu_định_dạng: đặt trong cặp dấu " ", quy định cách thức hiển thị dữ liệu ra màn hình máy tính, bao gồm 3 loại ký tự:

+ Ký tự văn bản thông thường + Ký tự điều khiển + Đặc tả

5

- danh_sách_tham_số: danh sách các giá trị được hiển thị theo quy định trong xâu định dạng, được viết ngăn cách nhau bởi dấu phẩy, gồm: tên biến, tên hằng, biểu thức, hàm, các giá trị cụ thể

Lệnh đưa dữ liệu ra màn hình (2)

• Lưu ý:

6

danh_sách_tham_số phải phù hợp với các đặc tả trong xâu_định_dạng cả về số lượng, kiểu dữ liệu và thứ tự

xâu_định_dạng (1)

nguyên vẹn như trong xâu_định_dạng Ví dụ: - printf("Xin chao!");

• Ký tự văn bản thông thường: Được đưa ra màn hình

- printf("a+b");

 Kết quả hiển thị trên màn hình: Xin chao!

 Kết quả hiển thị trên màn hình: a+b • Một số ký tự đặc biệt cần đặt liền sau ký hiệu \

7

\"  in ra ký tự " \\  in ra ký tự \

xâu_định_dạng (2)

\n xuống dòng \t tab \b backspace \r carriage return – đưa con trỏ màn hình về đầu dòng \f line feed – sang trang … Ví dụ:

• Ký tự điều khiển: tạo các hiệu ứng hiển thị đặc biệt

8

printf("\n"); printf("\t"); printf("\n\t");

xâu_định_dạng (3)

• Đặc tả: Xác định kiểu dữ liệu của giá trị muốn xuất

Ý nghĩa

Kiểu ký tự đơn Số nguyên hệ 10 có dấu

Đặc tả %c %i, %d

%u Số nguyên hệ 10 không dấu

Kiểu dữ liệu char int, char unsigned int/char

%o int, char

%x, %X int, char

9

Số hệ 8 không dấu (không có số 0 đứng trước) Số hệ 16 không dấu chữ thường/chữ hoa (không có 0x đứng trước)

xâu_định_dạng (4)

• Đặc tả: (tiếp)

Ý nghĩa

Kiểu dữ liệu long

long

%lo

Đặc tả %li,%ld Số nguyên hệ 10 có dấu %lu

long

%lx, %lX

10

Số nguyên hệ 10 không dấu unsigned long Số hệ 8 không dấu (không có số 0 đứng trước) Số hệ 16 không dấu chữ thường/chữ hoa (không có 0x đứng trước)

xâu_định_dạng (5)

• Đặc tả: (tiếp)

Đặc tả Kiểu dữ liệu

%s char[]

%g

float, double

Ý nghĩa Hiển thị xâu ký tự kết thúc bởi '\0' %f Số thực dấu phẩy tĩnh %e, %E Số thực dấu phẩy động float, double float, double

11

Dùng %f hoặc %e tùy thuộc loại nào ngắn hơn

xâu_định_dạng (6)

• Ví dụ:

 in ra 5  in ra 10

12

int a,b; float x; a=5; b=10; x=12.75; printf("\n%d",a); printf("\n%d",b); printf("\n%d, %d",a,b);  in ra 5, 10 printf("\n%f",x); printf("\n%f",10.0/3);  in ra 12.750000  in ra 3.333333

Độ rộng hiển thị - đối với số nguyên

%nd trong đó n là số nguyên không âm, cho biết số chỗ dùng để viết số nguyên

• Định dạng:

int a,b; a=123; b=45; printf("\n%4d",a); printf ("\n%5d",b);

• Ví dụ:

Kết quả hiển thị trên màn hình:

(˽ là ký hiệu dấu cách)

13

˽123 ˽˽˽45

Độ rộng hiển thị - đối với số thực (1)

%n.mf

• Định dạng:

Trong đó n, m là 2 số nguyên không âm:

14

n - số chỗ dùng để viết số thực m - số chỗ trong n dùng để viết phần thập phân

Độ rộng hiển thị - đối với số thực (2)

float x; x=9.125; printf("\n%f",x); printf("\n%.2f",x); printf("\n%6.2f",x);

• Ví dụ:

Kết quả hiển thị trên màn hình:

15

9.125000 9.13 ˽˽9.13

Độ rộng hiển thị - Lưu ý (1)

hiển thị tương tự như đối với số nguyên

• Đối với các ký tự và xâu ký tự, định dạng độ rộng

• Ví dụ:

printf("\n%3d%15s%3c",1,"Tran Ngoc Anh",'A'); printf("\n%3d%15s%3c",2,"Nguyen Sao Mai",'B');

16

Kết quả hiển thị trên màn hình: ˽˽1˽˽Tran Ngoc Anh˽˽A ˽˽2˽Nguyen Sao Mai˽˽B

Độ rộng hiển thị - Lưu ý (2)

• Ví dụ: a=1024; x=10.875;

• Khi số chỗ cần thiết để hiển thị nội dung dữ liệu lớn hơn trong định dạng  hệ thống tự cung cấp thêm chỗ để hiển thị dữ liệu trong các trường hợp: số nguyên, phần nguyên của số thực, ký tự, xâu ký tự

printf("\n%1d",a); printf("\n%3.2f",x); printf("\n%0c",'A'); printf("\n%1s","ABC");

17

Kết quả: 1024 10.88 A ABC

Căn lề trái/phải

• Khi có định dạng độ rộng hiển thị dữ liệu, ngôn ngữ C mặc định căn lề phải; để căn lề trái cần thêm dấu - ngay sau ký hiệu %

printf("\n%-3d%-15s%-3c",1,"Tran Ngoc Anh",'A'); printf("\n%-3d%-15s%-3c",2,"Nguyen Sao Mai",'B'); Kết quả hiển thị trên màn hình: 1˽˽Tran Ngoc Anh˽˽A˽˽ 2˽˽Nguyen Sao Mai˽B˽˽

18

• Ví dụ:

Lệnh nhập dữ liệu vào từ bàn phím (1)

scanf(xâu_định_dạng, danh_sách_tham_số);

• Cú pháp:

cho từng loại dữ liệu được nhập vào

Trong đó: - xâu_định_dạng: chỉ bao gồm các đặc tả quy định

19

- danh_sách_tham_số: bao gồm các địa chỉ của các biến được viết ngăn cách nhau bởi dấu phẩy (&tên_biến_1, &tên_biến_2, …)

Lệnh nhập dữ liệu vào từ bàn phím (2)

danh_sách_tham_số phải phù hợp với các đặc tả trong xâu_định_dạng cả về số lượng, kiểu dữ liệu, thứ tự

20

• Lưu ý:

xâu_định_dạng (1)

• Đặc tả:

Ý nghĩa

Kiểu ký tự đơn Số nguyên kiểu int Số nguyên không dấu Số hệ 8 Số hệ 16 Số nguyên kiểu long Số kiểu long hệ 8 Số kiểu long hệ 16

21

Đặc tả %c %d %u %o %x %ld %lo %lx Kiểu dữ liệu char int unsigned int int int long long long

xâu_định_dạng (2)

• Đặc tả: (tiếp)

22

Đặc tả %s %f %lf Ý nghĩa Xâu ký tự kết thúc bởi '\0' Số thực dấu phẩy tĩnh Số thực dấu phẩy tĩnh Kiểu dữ liệu char[] float double

Ví dụ (1)

int a; float x; char c; printf("Nhap so nguyen a: "); scanf("%d",&a);

23

• Chương trình nhập các dữ liệu nguyên, thực, ký tự từ bàn phím rồi hiển thị lại các kết quả đã nhập: #include int main(void) {

Ví dụ (2)

printf("Nhap so thuc x: "); scanf("%f",&x); printf("Nhap ky tu c: "); fflush(stdin); scanf("%c",&c); printf("Cac du lieu da nhap la: a = %d, x = %f, c

= '%c'",a,x,c);

• Chương trình (tiếp):

return 0;

24

}

Ví dụ (3)

25

• Chạy thử chương trình:

Lưu ý

• Khi nhập dữ liệu số: - Hàm scanf coi mọi ký tự số và ký tự dấu . được

nhập vào đều là hợp lệ

- Để kết thúc việc nhập dữ liệu cần nhấn phím Enter,

Tab, hoặc Spacebar

• Khi nhập dữ liệu dạng ký tự: - Hàm scanf coi mọi ký tự có trong bộ đệm của thiết bị vào chuẩn đều là hợp lệ, kể cả các ký tự Enter, Tab, hay Spacebar

- Trước khi nhập dữ liệu dạng ký tự/xâu ký tự, cần

26

dùng lệnh fflush(stdin); để xóa bộ đệm

Ví dụ (1)

• Chương trình tính diện tích, chu vi hình tròn:

#include const float PI=3.14; int main(void) {

27

float r,dt,cv; printf("Nhap ban kinh r: "); scanf("%f",&r); dt=PI*r*r; cv=2*PI*r;

Ví dụ (2)

• Chương trình tính diện tích, chu vi hình tròn: (tiếp)

printf("Dien tich = %6.2f\n",dt); printf("Chu vi = %6.2f",cv); return 0;

28

}

Ví dụ (3)

• Chương trình tính tổng, hiệu, tích, thương của 2 số

a,b: #include int main(void) {

29

float a,b,tong,hieu,tich,thuong; printf("Nhap a: "); scanf("%f",&a); printf("Nhap b: "); scanf("%f",&b); tong=a+b; hieu=a-b;

Ví dụ (4)

• Chương trình tính tổng, hiệu, tích, thương của 2 số

a,b: (tiếp)

tich=a*b; thuong=a/b; printf("Tong = %6.2f\n",tong); printf("Hieu = %6.2f\n",hieu); printf("Tich = %6.2f\n",tich); printf("Thuong = %6.2f\n",thuong); return 0;

30

}

3.2. Các cấu trúc điều khiển chương trình

• Cấu trúc rẽ nhánh

31

• Cấu trúc lặp

Cấu trúc rẽ nhánh

• Cấu trúc if

32

• Cấu trúc switch

Cấu trúc if

if (biểu_thức)

• Dạng 1: • Dạng 2:

câu_lệnh_1;

câu_lệnh_2;

if (biểu_thức) câu_lệnh; • Hoạt động: Máy tính xác định giá trị của Nếu biểu_thức. biểu_thức nhận giá trị đúng (khác 0) thì thực hiện câu_lệnh, nếu biểu_thức nhận giá trị sai (bằng 0) thì bỏ qua câu_lệnh

else

• Hoạt động: Máy tính xác định giá trị của biểu_thức. Nếu biểu_thức nhận giá trị đúng (khác 0) thì thực hiện câu_lệnh_1, nếu biểu_thức nhận giá trị sai (bằng 0) thì thực hiện câu_lệnh_2

33

• Lưu ý: Biểu_thức có thể nhận giá trị nguyên/thực

Ví dụ về cấu trúc if (1)

- if (a==0) - if (a==0)

printf("a la so 0"); printf("a la so 0");

printf("a khac 0");

else

- if (diem>=4) - if (diem>=4)

printf("Do"); printf("Do!");

else

printf("Truot!");

- if (b>0) - if (b>0)

else

printf("b la so duong"); printf("b la so duong");

34

printf("b khong phai la so duong");

Ví dụ về cấu trúc if (2)

#include #include int main(void) {

float a; printf("Nhap so thuc a = "); scanf("%f",&a); if (a>=0)

printf("Can bac hai cua %6.2f = %6.2f",a,sqrt(a));

else

printf("%6.2f la so am, khong co can bac hai",a);

return 0;

}

35

• Chương trình tính căn bậc hai của một số thực:

Ví dụ về cấu trúc if (3)

Bài tập: 1. Viết chương trình cho phép người dùng nhập vào 3 số thực a,b,c từ bàn phím. Kiểm tra xem a,b,c có thỏa mãn điều kiện độ dài 3 cạnh của 1 tam giác hay không, nếu có, tính diện tích và chu vi của tam giác rồi thông báo kết quả ra màn hình

36

2. Viết chương trình cho phép người dùng nhập vào một số nguyên dương n từ bàn phím, kiểm tra xem n có phải là số chính phương hay không, thông báo kết quả ra màn hình

Cấu trúc if lồng nhau (1)

• Các cấu trúc if có thể viết lồng nhau, khi đó else đi

với if gần nhất trước nó

• Ví dụ 2: if (a>0)

• Ví dụ 1: if (a!=0) if (a>0) printf("a la so duong");

printf("a la so duong"); else

printf("a la so am");

printf("a la so am");

else if (a<0)

else else

37

printf("a la so 0"); printf("a la so 0");

Cấu trúc if lồng nhau (2)

• Khi số từ khóa else ít hơn từ khóa if, để tránh nhầm lẫn, nên đưa các cấu trúc if được lồng bên trong vào trong cặp dấu ngoặc {}

• Ví dụ 2: if (a!=0)

printf("a la so duong");

if (a>0)

• Ví dụ 1: if (a!=0) if (a>0) {

else printf("a la so duong");

printf("a la so am"); else

printf("a la so am");

38

}

Cấu trúc if rẽ nhiều nhánh (1)

• Khi muốn thực hiện 1 trong n quyết định, có thể

câu_lệnh_1;

sử dụng cú pháp sau: if (biểu_thức_1)

else if (biểu_thức_2)

câu_lệnh_2;

… else if (biểu_thức_n)

câu_lệnh_n;

câu_lệnh_n+1;

39

else

Cấu trúc if rẽ nhiều nhánh (2)

• Ví dụ:

if (diem>10 || diem<0)

else if (diem>=9)

printf("Diem nhap vao khong hop le!");

printf("Xuat sac");

else if (diem>=8)

else if (diem>=6.5)

printf("Gioi");

printf("Kha");

else if (diem>=5)

else if (diem>=3.5)

printf("Trung binh");

40

printf("Yeu"); else printf("Kem");

Cấu trúc switch (1)

• Dạng 1: switch (biểu_thức) { • Dạng 2: switch (biểu_thức) {

các_câu_lệnh; break; case hằng_2:

các_câu_lệnh; break; case hằng_2:

case hằng_1: case hằng_1:

các_câu_lệnh; break; các_câu_lệnh; break;

… case hằng_n: … case hằng_n:

các_câu_lệnh;

default:

} các_câu_lệnh; break;

các_câu_lệnh;

41

}

Cấu trúc switch (2)

• Hoạt động: - Máy tính xác định giá trị của biểu_thức, giả sử bằng hằng_i (i=1..n), khi đó nó sẽ nhảy đến câu lệnh có nhãn case hằng_i và thực hiện tất cả các câu lệnh sau đó cho đến khi nào gặp break hoặc dấu } kết thúc switch

42

- Khi giá trị biểu_thức khác với mọi hằng_i, máy sẽ nhảy đến câu lệnh có nhãn default (dạng 2) hoặc ra khỏi switch (dạng 1)

Cấu trúc switch (3)

• Lưu ý: - biểu_thức, hằng_1, hằng_2, …, hằng_n phải cùng kiểu và là các kiểu số nguyên hoặc kiểu ký tự (không được là kiểu số thực)

- Từ khóa case là bắt buộc phải có trước một hằng. Nếu các_câu_lệnh là giống nhau với một số hằng (giả sử là hằng_i, j, k) thì có thể viết gọn theo cách:

… case hằng_i: case hằng_j: case hằng_k:

các_câu_lệnh; break;

43

Cấu trúc switch (4)

• Lưu ý: (tiếp) - hằng_1, hằng_2, …, hằng_n phải là các giá trị khác

nhau

- Cần đưa break (có thể thay thế bằng goto hoặc return tùy từng trường hợp) vào cuối mỗi case, trừ trường hợp case đó là case cuối cùng trong switch (dạng 1, không có default)

44

- Các cấu trúc switch có thể viết lồng nhau

Cấu trúc switch (5)

switch (thu)

• Ví dụ 1:

{

case 1: printf("Sunday"); break; case 2: printf("Monday"); break; case 3: printf("Tuesday"); break; case 4: printf("Wednesday"); break; case 5: printf("Thursday"); break; case 6: printf("Friday"); break; case 7: printf("Saturday");

45

}

Cấu trúc switch (6)

switch (thu)

• Ví dụ 2:

{

case 1: printf("Sunday"); break; case 2: printf("Monday"); break; case 3: printf("Tuesday"); break; case 4: printf("Wednesday"); break; case 5: printf("Thursday"); break; case 6: printf("Friday"); break; case 7: printf("Saturday"); break; default: printf("Nhap sai thu");

46

}

Cấu trúc switch (7)

• Chương trình cho người dùng nhập vào tháng và

47

năm, sau đó in ra số ngày tương ứng: #include int main(void) { int thang,nam; printf("Nhap thang = "); scanf("%d",&thang); printf("Nhap nam = "); scanf("%d",&nam);

Cấu trúc switch (8)

((nam%4==0 && nam%100!=0)

||

if

switch (thang) { case 2: (nam%400==0))

printf("29 ngay"); else printf("28 ngay"); break;

case 4: case 6: case 9: case 11:

printf("30 ngay"); break;

default: printf("31 ngay"); } return 0; }

48

Cấu trúc lặp

• Cấu trúc while

• Cấu trúc for

• Cấu trúc do while

• Vấn đề lặp vô hạn

• break, continue

49

• Nhãn và goto

Cấu trúc for (1)

for (biểu_thức_1;biểu_thức_2;biểu_thức_3)

• Cú pháp:

câu_lệnh;

trong đó:

khiển

- biểu_thức_1: dùng để khởi tạo giá trị cho biến điều

- biểu_thức_3: dùng để thay đổi giá trị của biến điều

- biểu_thức_2: dùng để kiểm tra giá trị của biến điều khiển xem vòng lặp có thể tiếp tục hay kết thúc (nhận giá trị đúng  tiếp tục, sai  kết thúc)

50

khiển

Cấu trúc for (2)

• Hoạt động: - Bước 1: Xác định biểu_thức_1 - Bước 2: Xác định biểu_thức_2 - Bước 3: Nếu biểu_thức_2 nhận giá trị sai, thoát khỏi cấu trúc for; ngược lại, nếu biểu_thức_2 nhận giá trị đúng, thực hiện câu_lệnh

- Bước 4: Xác định biểu_thức_3, quay lại bước 2 để

51

bắt đầu một vòng lặp mới

Cấu trúc for (3)

• Lưu ý: - Các biểu_thức_1,2,3 có thể vắng mặt nhưng phải có

dấu ;

- Mỗi biểu_thức_1,2,3 không nhất thiết phải là một biểu thức đơn mà có thể là một dãy các biểu thức được viết ngăn cách nhau bởi dấu , (khi đó các biểu thức được xác định theo chiều từ trái sang phải, tính đúng/sai của dãy biểu thức được xác định là tính đúng/sai của biểu thức cuối cùng trong dãy)

- biểu_thức_2 vắng mặt tương đương với việc nó

luôn nhận giá trị đúng  vòng lặp vô hạn

52

- Các cấu trúc for có thể viết lồng nhau

Cấu trúc for (4)

- for(i=0;;i++)

• Một số ví dụ: - for(i=0;i<10;i++)

- j=10;

{ printf("%d\n",i);

if (i>=10) break; for(;j<=99;j+=2)

printf("%d\n",i); printf("%d\n",j);

} - k=11;

{

- for(i=0;i<=9;i++) for(;k<99;)

{

for(j=0;j<=9;j++)

printf("%5d",i+j); printf("%d\n",k); k+=2;

}

53

printf("\n"); }

Cấu trúc for (5)

• Chương trình tính tổng s = 1 + 2 + … + n

{

#include int main(void)

int i,n,s; printf("Nhap n = "); scanf("%d",&n); for(s=0,i=1;i<=n;i++)

s+=i;

printf("Tong s = %d",s); return 0;

54

}

Cấu trúc for (6)

• Bài tập: 1. Viết chương trình tính tổng s:

s = 1/(2*1) + 1/(2*2) + 1/(2*3) + … + 1/(2*n) (n nhập từ bàn phím)

2. Viết chương trình tính n! (n nhập từ bàn phím) 3. Viết chương trình đếm và in ra các số chính phương

55

<= n (n nhập từ bàn phím)

Cấu trúc while (1)

• Cú pháp:

câu_lệnh;

while (biểu_thức)

• Hoạt động: - Bước 1: Xác định giá trị của biểu_thức - Bước 2: Nếu biểu_thức nhận giá trị sai, thoát khỏi while; nếu biểu_thức nhận giá trị đúng, thực hiện câu_lệnh rồi quay lại bước 1

• Ví dụ: i=0;

{

while (i<10)

printf("%d\n",i); i++;

56

}

Cấu trúc while (2)

• Lưu ý: - Biểu_thức có thể là một dãy các biểu thức được viết

ngăn cách nhau bởi dấu ,

- Nếu ngay từ đầu, biểu_thức nhận giá trị sai thì

57

không có bất kỳ lệnh nào được thực hiện - Các cấu trúc while có thể viết lồng nhau

Cấu trúc while (3)

nguyên dương a, b: #include int main(void) {

int a,b; printf("Nhap 2 so nguyen duong a, b:"); printf("\na = "); scanf("%d",&a); printf("b = "); scanf("%d",&b);

58

• Chương trình tìm ước số chung lớn nhất của 2 số

Cấu trúc while (4)

while (a!=b)

• Chương trình: (tiếp)

if (a>b)

a=a-b;

b=b-a;

else

printf("UCLN = %d",a); return 0;

59

}

Cấu trúc while (5)

• Bài tập: 1. Viết chương trình cho phép người dùng nhập vào tử số và mẫu số của phân số a/b. In ra dạng tối giản của phân số đó

lặp for (slide 55)

60

2. Dùng câu lệnh while làm lại các bài tập phần vòng

Cấu trúc do while (1)

• Cú pháp:

do

while (biểu_thức);

các_câu_lệnh;

• Hoạt động: - Bước 1: Thực hiện các_câu_lệnh - Bước 2: Xác định giá trị của biểu_thức. Nếu biểu_thức nhận giá trị sai, thoát khỏi do while; nếu biểu_thức nhận giá trị đúng, quay lại bước 1

• Ví dụ: i=0;

{

printf("%d\n",i); i++;

do

}

61

while (i<10);

Cấu trúc do while (2)

• Lưu ý: - Biểu_thức có thể là một dãy các biểu thức được viết

ngăn cách nhau bởi dấu ,

- Các cấu trúc do while có thể viết lồng nhau

62

- Nếu ngay từ đầu, biểu_thức nhận giá trị sai thì các_câu_lệnh vẫn được thực hiện 1 lần trước đó

Cấu trúc do while (3)

nguyên dương a, b: #include int main(void) {

int a,b; printf("Nhap 2 so nguyen duong a, b:"); printf("\na = "); scanf("%d",&a); printf("b = "); scanf("%d",&b);

63

• Chương trình tìm ước số chung lớn nhất của 2 số

Cấu trúc do while (4)

• Chương trình: (tiếp)

do

a=a-b;

if (a>b)

else

if (b>a)

b=b-a;

}

64

while (a!=b); printf("UCLN = %d",a); return 0;

Cấu trúc do while (5)

• Bài tập: 1. Dùng câu lệnh do while làm lại các bài tập phần

65

vòng lặp while (slide 60)

Vấn đề lặp vô hạn

• Xét các ví dụ: - for (i=0;;i++)

- for (i=0;i>=0;i++)

printf("%d\n",i);

- i=5; do {

printf("%d\n",i);

- i=5;n=10; printf("%d\n",i); i--;

while (i

} while (i<10); printf("%d\n",i);

- i=5;n=10; - …

printf("%d\n",i); i--;

while (i

}

 Khi sử dụng for, while, do while cần chú ý đến tính dừng

66

break, continue

• break: - Được

dụng sử trong các cấu trúc switch, for, while, do while

• continue: - Được sử dụng trong các cấu trúc for, while, do while, không sử dụng trong switch - Cho phép bỏ qua các câu lệnh sau continue trong lần lặp hiện tại và:

- Cho phép thoát ra khỏi cấu trúc chứa nó

+ Chuyển tới bước xác định giá trị của biểu thức đối với while và do while

67

+ Chuyển tới bước xác định biểu_thức_3 rồi quay lại vòng lặp mới đối với for

Nhãn và goto (1)

• Nhãn: - Đánh dấu câu lệnh để chương trình có thể nhảy tới

câu lệnh đó

- Cú pháp:

• goto: - Điều khiển chương trình nhảy đến câu lệnh được

nhãn: câu_lệnh;

gán nhãn tương ứng

goto nhãn;

68

- Cú pháp:

Nhãn và goto (2)

if (i

• Ví dụ: #include int main(void) {

printf("Tong s = %d",s); return 0;

}

69

int i,n,s; printf("Nhap n = "); scanf("%d",&n); s=0; i=1; lap: s+=i;

Nhãn và goto (3)

- goto không cho phép nhảy từ ngoài vào trong một khối lệnh nhưng cho phép nhảy từ trong ra ngoài khối lệnh

70

• Lưu ý: - go to và nhãn cần nằm trong một hàm; goto cho phép nhảy từ vị trí câu lệnh này tới câu lệnh khác trong thân một hàm nhưng không cho phép nhảy từ hàm này sang hàm khác