Lập trình C: break; và continue;
Giải phóng thời gian, khai phóng năng lực
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("\nMoi 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("\nMoi 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("\nChuoi \"%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("\nChuoi \"%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("\nMoi 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("\nTruoc khi cat ky tu trang cuoi chuoi, ta duoc: \"%s\"",chuoi); catKyTuCachCuoiChuoi(chuoi); printf("\nSau 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("\nNhung 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; }
Giải phóng thời gian, khai phóng năng lực