Lập trình C: break; và continue;

1. Câu lệnh break;

Câu lệnh break; dùng được cho tất cả các loại vòng lặp của C (while, do-while và for).

Câu lệnh break; có tác dụng thoát khỏi vòng lặp for tức thì và bỏ qua mọi lệnh ở phía sau nó trong vòng lặp.

Cú pháp:

break;

Ví dụ 1: Hãy nhập vào một số nguyên N và kiểm tra xem N có phải số nguyên tố không?

Chương trình được viết như sau:

#include<

stdio

.h> #include<

math

.h>

int

main(){ ///Nhập vào một số N bất kỳ và kiểm tra xem N có phải ///là số nguyên tố hay không? ///Số nguyên tố là số nguyên dương >1 và chỉ chia hết cho ///1 và chính nó. Ví dụ: 2, 3, 5, 7, 11, 13, ... ///Cách thức xử lý: Cho 1 biến chạy i chạy từ 2 -> sqrt(N), ///và dùng 1 biến đánh dấu, nếu N chia hết cho i thì đánh dấu ///lại. Dựa trên giá trị của biến đánh dấu để kết luận N có ///là số nguyên tố hay không.

float

N;

int

i;

int

laNguyenTo=

1

; //Đây là biến đánh dấu, ban đầu chứa 1 với mục đích giả sử ban ban đầu N là số nguyên tố printf(

"

\n

Moi ban nhap vao mot so bat ky: "

); scanf(

"%f"

,&N);

if

(N>

1

&& N==(

int

)N){ //Nếu N>1 và N là số nguyên thì mới check nguyên tố

for

(i=

2

; i<=sqrt(N); i++){

if

((

int

)N%i==

0

){ //nếu N chia hết cho i laNguyenTo=

0

; //thì đặt biến laNguyenTo chứa 0

break;

//, đồng thời thoát khỏi vòng lặp, không cần lặp thêm nữa

} }

if

(laNguyenTo==

1

){ //Nếu biến laNguyenTo không thay đổi giá trị so với ban đầu printf(

"

\n

%g la so nguyen to"

,N); //khẳng định N là số nguyên tố }

else

{ //nếu không thì printf(

"

\n

%g khong phai la so nguyen to"

,N); //khẳng định N không phải số nguyên tố } }

else

{//Nếu N không >1 và không phải số nguyên printf(

"

\n

%g khong du dieu kien de xac dinh tinh nguyen to"

,N); //, thì khẳng định N không đủ điều kiện xác định tính nguyên tố. }

return

0

; }

Ví dụ 2: Nhập vào một chuỗi bất kỳ và kiểm tra xem chuỗi đó có chứa ký số (ký tự số, chữ số) hay không?

Solution tham khảo như sau:

#include<

stdio

.h> #include<

string

.h>

void

nhapChuoi(

char

chuoi[]){

do

{ printf(

"

\n

Moi ban nhap chuoi (0<chuoi<30): "

); gets(chuoi); }

while

(!(

0

<

strlen

(chuoi) && strlen(chuoi)<

30

)); }

void

kiemTraKySo(

char

chuoi[]){

int

i;

int

timThay=

0

;

for

(i=

0

; i<

strlen

(chuoi); i++){

if

(chuoi[i]>=

'0'

&& chuoi[i]<=

'9'

){ ///nếu một ký tự bất kỳ của chuỗi nằm ///trong đoạn ['0','9'] thì tức là chuỗi ///chứa ký số. timThay=

1

;///đánh dấu việc tìm thấy ký số ///trong chuỗi. printf(

"

\n

Chuoi

\"

%s

\"

co chua ky so"

,chuoi);

break;///thoát khỏi vòng lặp for mà không cần

///lặp thêm lần nào.

} }

if

(timThay==

0

){ printf(

"

\n

Chuoi

\"

%s

\"

khong chua ky so"

,chuoi); } }

int

main(){ ///Bài toán: Hãy kiểm tra xem có tồn tại ký số ///(ký tự số hay chữ số) trong chuỗi hay không?

char

chuoi[

30

]; nhapChuoi(chuoi); kiemTraKySo(chuoi);

return

0

; }

Ví dụ 3: Nhập vào một chuỗi bất kỳ và cắt những ký tự trắng (space) ở cuối chuỗi?

Solution tham khảo như sau:

#include<

stdio

.h> #include<

string

.h>

void

nhapChuoi(

char

chuoi[]){

do

{ printf(

"

\n

Moi ban nhap chuoi (0<chuoi<30): "

); gets(chuoi); }

while

(!(

0

<

strlen

(chuoi) && strlen(chuoi)<

30

)); }

void

catKyTuCachCuoiChuoi(

char

chuoi[]){

int

i;

for

(i=strlen(chuoi)-

1

; i>=

0

; i--){ ///cho biến chạy i chạy từ cuối chuỗi về ///đầu chuỗi.

if

(chuoi[i]!=

' '

){///nếu phát hiện ký tự nào ///không phải ký tự cách chuoi[i+

1

]=

'

\0

'

;///thì đặt vào vị trí sau ///ký tự đó '\0'

break;

///và thoát khỏi vòng lặp

} } }

int

main(){ ///Bài toán: Hãy cắt các ký tự trắng (space) ở ///cuối chuỗi? ///Phân tích bài toán: Mỗi chuỗi trong C bao giờ ///cũng có 1 ký tự kết thúc chuỗi là '\0' hoặc ///tương đương với NULL. Như vậy có nghĩa là nếu ///ta đặt ký tự '\0' ở một vị trí nào đó trong chuỗi ///thì tức là chuỗi sẽ kết thúc tại vị trí đó. ///Ví dụ như ta có chuỗi "ABCD1234" thì nếu ta đặt ///ký tự '\0' vào chuỗi là "ABCD\01234" thì chuỗi ///lúc này sẽ là "ABCD". ///Vậy nếu ta có chuỗi "ABCD " thì ta có thể cắt ///những ký tự trắng (space) ở cuối chuỗi bằng cách ///đặt ký tự '\0' vào chuỗi thành "ABCD\0 " thì ///chuỗi sẽ thành "ABCD" => tức là cắt được các ///ký tự trắng ở cuối chuỗi. ///*Thuật toán: Ta cho một biến chạy i chạy từ cuối ///chuỗi về đầu chuỗi, nếu phát hiện ký tự nào không ///phải là ký tự cách thì đặt '\0' vào sau ký tự đó. ///*Tiến hành xử lý:

char

chuoi[

30

]; nhapChuoi(chuoi); printf(

"

\n

Truoc khi cat ky tu trang cuoi chuoi, ta duoc:

\"

%s

\"

"

,chuoi); catKyTuCachCuoiChuoi(chuoi); printf(

"

\n

Sau khi cat cac ky tu trang cuoi chuoi, ta duoc:

\"

%s

\"

"

,chuoi);

return

0

; }

2. Câu lệnh continue;

Câu lệnh continue; dùng để bỏ qua những lệnh còn lại trong khối lệnh của lần lặp hiện thời.

Theo đó tất cả các câu lệnh phía sau continue; nhưng nằm trong khối lệnh của vòng lặp sẽ bị bỏ qua tại lần lặp hiện thời.

Cú pháp:

continue;

Ví dụ 1: In ra những số chẵn trong đoạn 1-100 dùng continue?

Solution tham khảo như sau:

#include<

stdio

.h>

int

main(){

int

i; printf(

"

\n

Nhung so chan trong doan 1-100:"

);

for

(i=

1

; i<=

100

; i++){//lấy từng số ra

if

(i%

2

!=

0

){//kiểm tra nếu không chia hết cho 2

continue;

//thì bỏ qua lần lặp hiện thời

} printf(

"

\n

%d"

,i);//lệnh này sẽ được thực thi //nếu i chia hết cho 2 }

return

0

; }