Sự lồng nhau giữa các câu lệnh if:

Một phần của tài liệu Bài giảng: ngôn ngữ lập trình C pdf (Trang 37 - 44)

VIII. Trình bày màn hìn h:

Ch−¬ng V CÁC CÂU LỆNH ĐIỀU KHIỂN

I.2. Sự lồng nhau giữa các câu lệnh if:

Các câu lệnh if có thể lồng nhau : trong khối lệnh của câu lệnh if này có thể có câu lệnh if khác. Để tránh nhầm lẫn ta nên sử dụng dấu đóng mở khối lệnh.

biểu thức Khối lệnh 2

khối lệnh 1 T

Nếu số từ khóa if bằng số từ khóa else thì ta có tương ứng từng cặp if-else Nếu số từ khóa if nhiều hơn số từ khóa else thì else được gắn với if liền trước nó. Ví dụ :

if (n>0) if (a>b) z=a; else z=b;

Như vậy else sẽ gắn liền với if thứ hai.

Để chương trình trong sáng, ta cần tuân thủ :

• Ta nên sử dụng cặp dấu {} để chắc chắn không nhầm lẫn.

• Các câu lệnh, khối lệnh nằm trong một câu lệnh if nằm dịch về bên phải.

• Các câu lệnh, khối lệnh cùng cấp thì viết thẳng cột.

• Điểm đầu và điểm cuối của khối lệnh phải nằm thẳng cột. Ví dụ :

if (n>0) if(a>b) z=a;

tương đương với : if ((n>0)&&(a>b)) z=a;

I.3. else if:

if (biểu thức 1) khối lệnh 1; else if (biểu thức 2) khối lệnh 2; ... else if ( biểu thức n) khối lệnh n; else khối lệnh n+1; Đối với câu lệnh này :

• Chỉ có 1 trong n+1 khối lệnh được thực hiện .

• Nếu biểu thức i là biểu thức đầu tiên khác 0 (TRUE) thì khối lệnh i được thực hiện

• Nếu cả n biểu thức đều bằng 0 (FALSE) thì khối lệnh n+1 được thực hiện. Ví dụ : giải phương trình bậc 2 #include <stdio.h> #include <conio.h> #include <math.h> main() {

float a,b,c,delta;

printf(“\nNhap vao 3 he so:”); scanf(“%f%f%f”,&a,&b,&c); if (a==0)

if (b==0) if (c==0)

printf(“\nPhuong trinh dung voi moi x”); else printf(“\nPhuong trinh vo nghiem!”); else printf(“\nPhuong trinh co 1 nghiem x: %f”,(-c) / b); else

{

delta=b*b-4*a*c; if (delta<0.0)

printf(“\nPhuong trinh vo nghiem”); else if (delta==0.0)

printf(“\nPhuong trinh co mot nghiem kep : x = %f”,-b/(2*a)); else { printf(“\nPhuong trinh co hai nghiem phan biet :”);

printf(“\nx1 = %f”, (-b+sqrt(delta))/(2*a)); printf(“\nx2 = %f”, (-b-sqrt(delta))/(2*a)); } } getch(); return 0; }

II. Câu lệnh switch:

Lệnh if chỉ cho phép ta chọn một trong hai phương án tùy theo biểu thức điều kiện. Tuy nhiên đôi khi ta cần phải lựa chọn 1 trong nhiều phương án khác nhau. Để thuận tiện ta sẽ dùng câu lệnh switch: switch (biểu thức) { case hằng1 : [ khối lệnh 1 ; ] case hằng2 : [ khối lệnh 2 ; ] ... case hằngn : [ khối lệnh n ; ] [default : khối lệnh n+1 ; ] } Trong đó :

biểu thức: là biểu thức nguyên bất kì Các hằng i phải có giá trị khác nhau

Các khối lệnh i và thành phần default là không bắt buộc.

Máy sẽ so sánh biểu thức với các hằng i theo thứ tự từ trên xuống. Khi biểu thức có giá trị bằng hằng i thì khối lệnh i được thực hiện. Nếu trong khối lệnh đó không có lệnh nhảy thì sẽ thực hiện tiếp tục các khối lệnh bên dưới mà không cần so sánh tiếp. Nếu trong khối lệnh đó có lệnh break thì sẽ thoát ra khỏi câu lệnh switch. Khi biểu thức có giá trị khác với tất cả hằng i thì sẽ thực hiện khối lệnh n+1 (nếu có).

Khi biểu thức bằng với hằng i, để sau khi thực hiện xong khối lệnh i chương trình sẽ thoát ra ngoài câu lệnh switch sớm hơn ta có thể dùng lệnh break. Ta cũng có thể sử dụng lệnh goto để nhảy ra khỏi câu lệnh switch (ta không nên dùng lệnh goto).

Ví dụ : #include <stdio.h> #include <conio.h> main() { char ch;

printf(“\n Nhap 1 ki tu:”); scanf(“%c”,&ch);

switch (ch) {

case ‘A’ : printf(“\nChu A”); break;

case ‘B’ : printf(“\nChu B”); break;

case ‘C’ : printf(“\nChu C”); break;

default : printf(“\nKhong phai cac chu A,B,C”); }

getch(); return 0; }

• Nhiều giá trị case trong một trường hợp :

Máy sẽ tiếp tục làm việc khi chưa gặp lệnh thoát, vì vậy ta có thể sắp xếp để có nhiều giá trị case trong một trường hợp

Ví dụ : #include <stdio.h> #include <conio.h> main() { int n; printf(“Nhap diem:”); scanf(“%d”,&n);

switch (n) { case 0: case 1: case 2: case 3:

case 4: printf(“loại kém”);break; case 5:

case 6: printf(“loại trung bình”);break; case 7:

case 8: printf(“loại giỏi”);break; default: printf(“loại giỏi”); }

getch(); return 0; }

Trong C++ ta có thể viết như sau : #include <stdio.h> #include <conio.h> main() { int n; printf(“Nhap diem:”); scanf(“%d”,&n); switch (n) {

case 0,1,2,3,4: printf(“loại kém”);break; case 5,6: printf(“loại trung bình”);break; case 7,8: printf(“loại giỏi”);break; default: printf(“loại giỏi”);

} getch(); return 0; }

Ta nên sử dụng default cho dù không bao giờ xảy ra trường hợp đó: ta dùng default để kiểm tra xem có thể có lỗi hay không bằng cách đặt một thông báo lỗi ở đó, từ đó ta dễ gỡ rối. III. Câu lệnh for:

Để thực hiện các công việc lặp đi lặp lại hay làm việc với các phần tử mảng, nếu ta viết từng lệnh một thì sẽ không hiệu quả.

• Dạng :

công việc ; /* đây là thân của chu trình */

• Sự hoạt động của câu lệnh for : 1. Thực hiện biểu thức khởi tạo. 2. Kiểm tra biểu thức điều kiện

- nếu biểu thức điều kiện đúng thì thực hiện công việc bên trong chu trình for. - nếu biểu thức điều kiện sai thì thoát ra khỏi lệnh for .

3. Tính biểu thức 3, quay trở lại bước 2.

Ví dụ : Để đưa ra màn hình các số từ 1 đến 10, mỗi số trên một dòng : #include <stdio.h> #include <conio.h> main() { int i; for(i=1;i<=10;i++) printf(“\n%d”,i); getch(); return 0; } Ví dụ : #include <stdio.h> #include <conio.h> main() {

Biểu thức khởi tạo

Biểu thức điều kiện

Thực hiện công việc

Thay đổi điều kiện T

int i,n,sohang,tong=0; printf(“\nNhap n:”); scanf(“%d”,&n);

printf(“\nNhap vao %d so nguyen :”,n); for(i=1;i<=n;i++)

{

printf(“\nSo thu %d : ”,i); scanf(“%d”,&sohang); tong+=sohang; } printf(“\nTong = %d”,tong); getch(); return 0; }

Các biểu thức trong ngoặc vuông có thể có, có thể không nhưng các dấu chấm phẩy, ngoặc đơn bắt buộc phải có mặt. Các biểu thức cùng loại được ngăn cách nhau bởi dấy phẩy.

Với C++ ta có thể khai báo biến tạm thời ở một khối lệnh {}. Trong vòng lặp for có thể khai báo biến trong biểu thức đầu tiên của biểu thức khởi tạo.

Khi biểu thức 2 vắng mặt thì nó xem như luôn đúng. Biểu thức 2 có thể gồm nhiều biểu thức nhưng tính đúng sai của nó là tính đúng sai của biểu thức cuối cùng.

Để ra khỏi vòng lặp ta dùng các lệnh break, goto hoặc return trong thân chu trình. Ví dụ : vòng lặp for sau đây không có biểu thức thay đổi điều kiện:

for(count=0;count<10;) printf(“\n%d”,count++);

Thậm chí ta có thể viết vòng lặp for không có cả ba biểu thức trên. Ta cũng có thể tạo vòng lặp for không có câu lệnh nào trong vòng lặp, mọi công việc đã được thực hiện trong câu lệnh for. Khi đó câu lệnh rỗng sẽ là dấu chấm phẩy đứng một mình trên một dòng. Tuy nhiên ta không nên làm như vậy.

• Các vòng for lồng nhau :

Phía trong các thân của vòng for có thể có những vòng for khác. Ví dụ : for(i=1;i<10;i++) { for(j=1;j<10;j++) printf(“%3d”,i+j); printf(”\n”); }

Khi gặp lệnh break trong vòng lặp for thì máy sẽ ra khỏi vòng lặp for sâu nhất chứa lệnh này.

Một phần của tài liệu Bài giảng: ngôn ngữ lập trình C pdf (Trang 37 - 44)

Tải bản đầy đủ (PDF)

(103 trang)