24/05/2018, 22:24

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

Cấu trúc rẽ nhánh if dạng khuyết - Cú pháp câu lệnh if (btđk) công_việc; Trong đó: - if là từ khoá - btđk là một biểu thức cho giá trị logic ...

Cấu trúc rẽ nhánh if dạng khuyết

- Cú pháp câu lệnh

if (btđk)

công_việc;

Trong đó:

- if là từ khoá

- btđk là một biểu thức cho giá trị logic

- Công_việc có thể là một lệnh đơn, một khối lệnh hay một cấu trúc điều khiển nào đó

- Sơ đồ cú pháp

- Nguyên tắc hoạt động: Đầu tiên máy tính toán giá trị của btđk. Nếu btđk có giá trị True thì máy tiến hành thực hiện Công_việc sau đó tiến hành thực hiện các câu lệnh tiếp theo sau câu lệnh if. Nếu btđk có giá trị là False thì máy bỏ qua việc thực hiện Công_việc trong câu lệnh if mà tiến hành thực hiện ngay các câu lệnh sau câu lệnh if.

Cấu trúc rẽ nhánh if dạng đầy đủ

- Cú pháp câu lệnh

if (btđk)

công_việc1;

else

công_việc2;

Trong đó:

- if, else là từ khoá

- btđk là một biểu thức cho giá trị logic

- Công_việc1,Công_việc2 có thể là một lệnh đơn, một cấu trúc điều khiển nào đó hay một khối lệnh

- Sơ đồ thực hiện

- Nguyên tắc hoạt động: Đầu tiên máy tính toán giá trị của btđk. Nếu btđk có giá trị True thì máy tiến hành thực hiện Công_việc1 sau đó tiến hành thực hiện các câu lệnh tiếp theo sau câu lệnh if. Nếu btđk có giá trị là False thì máy tiến hành thực hiện công_việc2 sau đó tiến hành thực hiện các câu lệnh tiếp theo sau câu lệnh if.

Ví dụ: Lập chương trình giải phương trình bậc hai ax2+bx+c=0

-----------------------------------------------------------------------------------------------

using System;

class PTB2

{

static void Main()

{

float a, b, c, delta;

Console.WriteLine("Ban hay nhap vao ba so");

Console.Write("a="); a = float.Parse(Console.ReadLine());

Console.Write("b="); b = float.Parse(Console.ReadLine());

Console.Write("c="); c = float.Parse(Console.ReadLine());

if (a == 0)

{

Console.Write("Day la phuong trinh bac nhat Ax+C=0 ");

if (b != 0)

Console.WriteLine("Phuong trinh co nghien duy nhat x={0}", -b / c);

else

if (c == 0)

Console.WriteLine("Phuong trinh vo so nghiem");

else

Console.WriteLine("phuong trinh vo nghiem");

}

else

{

Console.WriteLine("Day la phuong trinh bac hai Ax^2+Bx+C=0");

delta = b * b - 4 * a * c;

if (delta < 0)

Console.Write(" Phuong trinh vo nghiem trong truong so thuc");

if (delta == 0)

Console.Write("Phuong trinh co nghiem kep x1=x2={0,8:N2",

-b / (2 * a));

if (delta > 0)

{

Console.WriteLine("Phuong trinh co hai nghiem phan biet:");

Console.WriteLine("x1={0,8:N2} x2={1,8:N2}",

(-b - Math.Sqrt(delta)) / (2 * a), (-b + Math.Sqrt(delta)) / (2 * a));

}

}

Console.ReadKey();

}

}

-----------------------------------------------------------------------------------------------

- Cú pháp câu lệnh

switch ( bieu_thuc)

{ case e1:Khối_lệnh_1;[break;]

case e2: Khối_lệnh_2;[break;]

.......................

case en: Khối_lệnh_n;[break;]

[default: Khối_lệnh_n+1; break;]

}

Trong đó: + switch, case, default là các từ khoá

+ bieu_thuc: là một biểu thức cho giá trị nguyên hoặc là xâu

+ ei:là giá trị nguyên mà biểu thức có thể nhận được.

+ Những phần đặt trong hai dấu [ và ] có thể có hoặc không

- Sự hoạt động của cấu trúc điều khiển switch phụ thuộc vào giá trị của bieu_thuc

* Khi giá trị này bằng ei máy sẽ nhảy tới khối lệnh có nhãn case ei và thực hiện Khối_lệnh_i. Nếu Khối_lệnh_i là rỗng thì ta có thể đặt break sau Khối_lệnh_i hoặc không, với trường hợp không có break thì máy sẽ tiến hành nhảy xuống thực hiện Khối_lệnh_(i+1). Nếu Khối_lệnh_i khác rỗng(tức là có công việc phải thực hiện) thì sau Khối_lệnh_i ta phải đặt câu lệnh break. Khi máy gặp câu lệnh break thì máy sẽ thoát khỏi cấu trúc switch và thực hiện các câu lệnh tiếp theo sau cấu trúc lệnh này.

* Khi giá trị của bieu_thuc khác tất cả các giá trị ei thì cách làm việc của máy lại phụ thuộc vào sự có mặt hay không có mặt của default. Khi có default máy nhảy tới câu lệnh có nhãn default. Khi không có default máy tiến hành thực hiện các câu lệnh sau cấu trúc này.

- Ví dụ áp dụng: Nhập vào một tháng của một năm bất ký sau đó cho biết tháng đó có bao nhiêu ngày:

-----------------------------------------------------------------------------------------------

using System;

class Songay

{

static void Main()

{

int month, year,sumday;

Console.Write("Nhap thang="); month = int.Parse(Console.ReadLine());

Console.Write("Nhap year="); year = int.Parse(Console.ReadLine());

switch (month)

{

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12: sumday=31;break;

case 4:

case 6:

case 9:

case 11: sumday = 30; break;

case 2: if (year % 400==0 || (year % 4 == 0 && year % 100 != 0))

sumday = 29;

else

sumday = 28;

break;

default: sumday = 0; break;

}

if (sumday > 0)

Console.Write("So ngay cua {0}/{1} la {2} ngay", month, year, sumday);

Console.ReadKey();

}

}

-----------------------------------------------------------------------------------------------

0