For([bt_1]; [bt_2]; [bt_3]) S;

Một phần của tài liệu §¹i häc quèc gia hµ néi khoa c«ng nghÖgi¸o tr×nh tin häc c¬ së phÇn lËp tr×nh potx (Trang 63 - 68)

IV Cỏc cấu trỳc điều khiển chương trỡnh

for([bt_1]; [bt_2]; [bt_3]) S;

S;

Trong đú S là một lệnh (đơn hoặc khối) được gọi là thõn của vũng lặp, bt_1, bt_2, bt_3 là cỏc biểu thức hợp lệ, với ý nghĩa là:

− bt_1: biểu thức khởi đầu

− bt_2: biểu thức điều kiện - điều kiện lặp

− bt_3: bước nhảy - thường dựng với ý nghĩa là thay đổi bước nhảy Cả 3 biểu thức này đều là tuỳ chọn, chỳng cú thể vắng mặt trong cõu lệnh cụ thể nhưng cỏc dấu chấm phẩy vẫn phải cú.

Hot động ca for

Hoạt động của for theo cỏc bước sau: b1: Thực hiện biểu thức khởi đầu - bt_1

b2: Tớnh giỏ trịbt_2 để xỏc định điều kiện lặp. Nếu bt_2 cú giỏ trị ‘sai’ (==0) thỡ ra khỏi vũng lặp

Ngược lại, nếu bt_2 cú giỏ trị ‘đỳng’ ( khỏc 0) thỡ chuyển tới bước 3 b3: Thực hiện lệnh S ( thõn của for ), chuyển tới b4

b4: Thực hiện bt_3, rồi quay về b2.

Như trong cỳ phỏp cỏc bạn thấy cỏc biểu thức (bt_1, bt_2, bt_3) của for cú thể vắng, hơn nữa mỗi thành phần (biểu thức) lại cú thể là một hoặc nhiều biểu thức(đơn) phõn cỏch nhau bởi dấu phẩy (,) vớ dụ như:

Nếu <bt_1>, <bt_3> vắng mặt thỡ đơn thuần đú là cỏc lệnh rỗng (khụng thực hiện gỡ), nếu chỳng cú nhiều biểu thức đơn cỏch nhau bởi dấu phẩy thỡ cỏc biểu thức đơn đú

được thực hiện tuần tự từ trỏi qua phải - thực ra vẫn cú thể coi đõy chỉ là một biểu thức, trong đú cú cỏc toỏn tử dấu phẩy (, ) và trật tự tớnh toỏn theo độ ưu tiờn của cỏc toỏn tử trong biểu thức.

Tương tự như bt_1, bt_3; biểu thức điều kiện trong trường hợp nú chỉ gồm một biểu thức đơn thỡ giỏ trị của nú quyết định vũng lặp cú cũn được tiếp tục hay khụng, nhưng nếu nú cú nhiều biểu thức đơn vớ dụ như:

for(i=0, j= i +2; i<2,j <6; i++,j++) printf(“\ni = %d, j = %d); thỡ kết quả sẽ là: i=0, j=2 i=1, j=3 i=2, j=4 i=3, j=5 Như vậy vũng lặp dừng khụng theo điều kiện i <2 mà theo điều kiện j <6. Tức là giỏ trị của biểu thức bờn phải nhất trong danh sỏch cỏc biểu thức quyết định điều kiện của của vũng lặp – điều này do toỏn tử (, ) trả về toỏn hạng bờn phải.

1: #include <stdio.h>

2: void main(void)

3: {

4: int i;

5: for(i=32; i<256; i++)

6: { 7: if ((i - 31) %10==0) printf("\n"); 8: printf("%c -%d;",i,i); 9: } 10: getch(); 11: }

Giải thớch: trong chương trỡnh trờn chỳng ta sử dụng vũng lặp for - biểu thức khởi đầu : i =32

- biểu thức điều kiện : i <256 - bước nhảy i ++

như vậy vũng lặp sẽ được thực hiện 224 lần, mỗi bước lặp nếu (i –31)%10 ==0 thỡ chỳng ta chuyển con trỏ xuống dũng mới (lệnh trờn dũng 7) – cú nghĩa là cứ sau 10 bước thỡ chỳng ta chuyển sang dũng mới, với mỗi i chỳng ta in kớ tự cú mó là i cựng giỏ trị của nú

(lệnh printf trờn dũng 8).

Vớ d 6.2: chương trỡnh nhập n số nguyờn từ bàn phớm, tỡm và in số lớn nhất, nhỏ nhất.

Giải:

Giả sử chỳng ta cú một dóy số a1, a2, .., an để xỏc định giỏ trị lớn nhất (gọi là max) và số

nhỏ nhất (min)chỳng ta thực hiện theo cỏch sau: (adsbygoogle = window.adsbygoogle || []).push({});

1. max = min = a1 ( xem một sốđầu tiờn là lớn nhất và cũng là nhỏ nhất) 2. i=2

3. nếu i > n thỡ thỡ kết thỳc, ngược lại thỡ ƒ nếu ai > max thỡ max = ai

ƒ ngược lại, nếu ai < min thỡ min =ai ƒ i =i+1

4. lặp lại bước 3

Khi kết thỳc chỳng ta cú giỏ trị lớn nhất là max, giỏ trị nhỏ nhất là min.

Nhưng cho tới bõy giờ chỳng ta chưa thể lưu được n số (trong yờu cầu này chỳng ta cũng khụng cần phải lưu chỳng) , vỡ thế chỳng ta thực hiện theo phương phỏp sau:

1: Nhập số thứ nhất từ bàn phớm vào a

2: max = min = a ( xem một sốđầu tiờn là lớn nhất và cũng là nhỏ nhất)

3: i=2

4: nếu i > n thỡ thỡ kết thỳc, ngược lại thỡ ƒ Nhập số thứ i từ bàn phớm vào a ƒ nếu a> max thỡ max = a

ƒ ngược lại, nếu a< min thỡ min =a ƒ i =i+1 5: lặp lại bước 4 Cỏc bạn cú chương trỡnh như sau #include <stdio.h> #include <conio.h> void main(){ int n,a,max,min,i; do{

printf("Nhap so phan tu cua day : "); scanf("%d", &n);

}while(n<1);

printf("Nhap so thu nhat : "); scanf("%d",&a);

max=min=a;

for(i=2; i<=n; i++) {

printf("Nhap so thu nhat : "); scanf("%d",&a); if(a>max) max=a; else if(a<min) min =a; }

printf("\n gia tri lon nhat = %d\n \

gia tri nho nhat = %d",max,min); }

Vớ d 6.3 : Viết chương trỡnh giải bài toỏn sau: “Trăm trõu trăm cỏ

Trõu đứng ăn năm Trõm nằm ăn ba

Lụ khụ trõu già, ba con một cỏ

hỏi mỗi loại cú mấy con “ Giải:

Rừ ràng là cú ba loại trõu (phương trỡnh ba ẩn) nhưng chỉ cú hai phương trỡnh đú là tổng số số trõu là 100 và tổng số cỏ cũng là 100. Chỳng ta cú

d + n + g =100 (tổng số trõu)

5*d + 3 * n + g/3 =100 (tổng số cỏ) (d: số trõu đứng, n : số trõu nằm, g : số trõu già)

Như vậy bài toỏn này khụng cú nghiệm duy nhất, và nếu cú thỡ chỉ lấy nghiệm là cỏc số

Ở đõy chỳng ta sử dụng cỏch kiểm tra cỏc bộ số gồm 3 số nguyờn dương (d,n,g) tương

ứng với số trõu của từng loại với d,n,g ∈ [1,..100], nếu thoả món hai phương trỡnh trờn thỡ

đú là một nghiệm. Vậy ta thực hiện như sau: Với d = 1 tới 20 // tối đa chỉ cú 20 trõu đứng thỡ thực hiện Với n = 1 tới 33 // tối đa chỉ cú 23 trõu nằm thực hiện g = 100 – d – n ; // số trõu già nếu (g%3==0) và (5*d + 3 * n + g/3 ==100) thỡ in (d,n,g) là một nghiệm #include <stdio.h> #include <conio.h> void main(){ int d,n,g; clrscr(); (adsbygoogle = window.adsbygoogle || []).push({});

printf("\nCac nghiem la\n");

printf("\ntrau_dung trau_nam trau_gia\n"); for(d=1; d<=20;d++) for(n=1; n<=33; n++) { g=100-d-n; if((g%3==0)&&(5*d+3*n+g/3==100)) printf("%d \t %d \t %d\n",d,n,g); } }

Chỳ ý : Ngoài cỏc cấu trỳc điều khiển chỳng ta vừa nờu trờn, trong ngụn ngữ C cũn một cấu trỳc điều khiển khỏc nữa là goto. Đõy là lệnh nhảy khụng điều kiện tới một vị trớ nào đú trong chương trỡnh, vị trớ đú được xỏc định bằng một nhón (label).

Cỳ phỏp

goto <label>;

trong đú <label> là tờn một nhón hợp lệ. Khi gặp lệnh này điều khiển sẽ được chuyển tới lệnh tại vị trớ tại nhón <label>

Vớ dụ:

goto ketthuc; // với kết thỳc là một nhón

Người ta chứng minh được là cú thể dựng cỏc cấu trỳc điều khiển rẽ nhỏnh, lặp thay thế được goto, hơn nữa lạm dụng goto làm mất đi tớnh trong sỏng và chặt chẽ của lập trỡnh cấu trỳc, do vậy trong giỏo trỡnh này chỳng tụi khụng sử dụng goto.

Một phần của tài liệu §¹i häc quèc gia hµ néi khoa c«ng nghÖgi¸o tr×nh tin häc c¬ së phÇn lËp tr×nh potx (Trang 63 - 68)