Cấu trúc rẽ nhánh

phanhieubl - 18/04/2023

 

- Cấu trúc if

+ Dạng thiếu

if (biểu thức

Khối lệnh

Trong đó biểu thức có thể có giá trị nguyên hoặc giá trị thực. 

Ý nghĩa: nếu biểu thức đúng (hoặc khác 0) thì Khối lệnh sẽ được thực hiện; nếu biểu thức sai (hoặc bằng 0) thì Khối lệnh sẽ bị bỏ qua và chuyển đến các lệnh viết sau nó. 

Ví dụ

       if (delta < 0) 

       cout << “phuong trinh vo nghiem”; 

Ta có thể để câu lệnh trong cặp { }

if(delta < 0)

cout << “phuong trinh vo nghiem”; 

Lưu ý: Thường thì sau câu lệnh if nếu thực hiện nhiều lệnh với cùng một điều kiện của hàm if thì mới cần phải để trong cặp {}.

 

Các ví dụ khác: 

if(true) 

cout << “Lệnh if được thực hiện”;

if(false) 

cout << “Lệnh if không được thực hiện

 

if(0) 

cout << “Lệnh if không được thực hiện

if(1) 

cout << “Lệnh if được thực hiện”; 

 

Ví dụ 1. Nhập vào 1 số nguyên dương (n <=10). Hãy ghi ra từ “chan” nếu n là số chẵn, ghi ra từ “le” nếu n là số lẻ. Chương trình 

#include <bits/stdc++.h> 

using namespace std; 

int n; 

int main()

cin >> n; 

if (n%2==0)    cout << "chan"; 

if (n%2==1)    cout << "le"; 

return 0;

 

Ví dụ 2. Cho 3 số nguyên a, b, c. Các số này thuộc phạm vi long long. Yêu cầu: tìm số lớn nhất của ba số trên và in ra số lớn nhất. 

Chương trình: 

#include <bits/stdc++.h> 

using namespace std; 

long long a, b, c, ln; 

int main()

cin>> a >> b >> c; 

ln = a; 

if(ln <b) 

  ln = b

    if(ln < c) 

 ln = c; 

cout << ln; return 0;

}

+ Dạng đủ: 

if(Biểu thức

Khối lệnh 1

else 

Khối lệnh 2

Ý nghĩa: Nếu Biểu thức đúng (hoặc có giá trị khác 0) thì Khối lệnh 1 sẽ được thực hiện. Ngược lại, nếu Biểu thức sai (hoặc có giá trị bằng 0) thì Khối lệnh 2 sẽ được thực hiện:

 

Khi dùng lệnh dạng đủ ví dụ 1 ở trên sẽ được viết như sau: 

#include <bits/stdc++.h> 

using namespace std; 

int n; 

int main()

cin >> n; 

  if (n%2==0) 

       cout << "chan"; 

  else 

    cout <<n<< “le”; 

return 0;

Chú ý: trong Khối lệnh có thể có nhiều câu lệnh if (người ta gọi là if lồng nhau)

Ví dụ 2. Cho phương trình a*x+b=0; với a, b là các số nguyên (|a| <=10, |b|<=109). Hãy giải phương trình trên. Nhập 2 số a b. In ra kết quả là vn nếu như phương trình vô nghiệm, là vsn nếu phương trình vô số nghiệm, nếu có 1 nghiệm thì ghi ra nghiệm đó với chính xác đến 2 phần thập phân. 

Chương trình: 

#include <bits/stdc++.h> 

using namespace std; 

int a, b; 

int main()

cin>> a >> b

if(a == 0) 

      if(b ==0) cout<<"vsn"; 

      else 

         cout << "vn"; 

else 

 cout << fixed << setprecision(2) << (double) (-b)/a;

return 0;

}

Chú ý: khi dùng else phải biết của if nào, nếu cần thiết thì ta thêm cặp dấu ngoặc {} vào để cho dễ phân biệt hơn. Chúng ta nên chú ý đến phong cách lập trình, cái nào là con thì phải viết thụt vào; cái nào ngang hàng nhau thì phải viết thẳng cột. 

Ta có thể sử dụng cặp dấu ngoặc {} để chương trình được rõ ràng hơn như sau:

#include <bits/stdc++.h>

using namespace std;

int a, b;

int main(){

cin>> a >> b;

if(a == 0)

  {

   if(b ==0) cout<<"vsn";

    else

       cout << "vn";

  }

else

    cout << fixed << setprecision(2) << (double) (-b)/a;

return 0;

}

Ví dụ 3.  Viết một chương trình đánh giá xếp loại học sinh dựa vào điểm trung bình (dtb) các môn (0<=dtb<=10). Công thức tính xếp loại học sinh như sau:

  • Nếu dtb  lớn hơn hoặc bằng 8, xếp loại giỏi
  • Nếu dtb  nhỏ hơn 8 và lớn hơn hoặc bằng 6.5, xếp loại khá
  • Nếu dtb nhỏ hơn 6.5 và lớn hơn hoặc bằng 5, xếp loại trung bình
  • Nếu dtb nhỏ hơn 5 và lớn hơn hoặc bằng 3.5, xếp loại yếu
  • Nếu dtb nhỏ hơn 3.5 xếp loại yếu.

Ta có thể viết chương trình chỉ dùng lệnh rẽ nhánh dạng thiếu. Trường hợp này cần phải dùng điều kiện chặn trên và chặn dưới như sau:

#include <bits/stdc++.h>

using namespace std;

int main () {

double dtb;

   cin >> dtb;

   if(dtb >= 8) cout<<"Gioi";
   if((dtb >= 6.5) && (dtb < 8))   cout << "Kha";
   if((dtb >= 5  ) && (dtb < 6.5)) cout << "Trung binh";
   if((dtb >= 3.5) && (dtb < 5))   cout << "Yeu";
   if(dtb < 3.5) cout << "Kem";

return 0;

}

Hoặc chương trình dùng lệnh rẽ nhánh dạng đủ thì chỉ dùng điều kiện chặn dưới còn điều kiện chặn trên đã có else gánh vác.

Ví dụ:

if (dtb>=8) cout<<"Gioi";

     else if (dtb>=6.5) cout<<"Kha";

Sau lệnh else này là các giá trị ngược lại của điều kiện dtb>=8 nên không cần thêm điều kiện này vào câu lệnh nữa.

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

#include <bits/stdc++.h>

using namespace std;

int main()

{

    double dtb;

    cin>>dtb;

     if (dtb>=8) cout<<"Gioi";

     else if (dtb>=6.5) cout<<"Kha"; //Sau lệnh else này là các giá trị nhỏ hơn 8

            else if (dtb>=5) cout<<"Trung binh

                    else if (dtb>=3.5) cout<<"Yeu";

                           else cout<<"Kem";

    return 0;

}

CÁC PHẢN HỒI

Back to Top