« Home « Kết quả tìm kiếm

Giáo trình ngôn ngữ C++ Part 8


Tóm tắt Xem thử

- Cấu trúc do.
- Cấu trúc while mà chúng ta khảo sát ở trên luôn while kiểm tra điều kiện lặp trước khi thực hiện thân của nó.
- Tức là đòi hỏi trước khi vào cấu trúc while chúng ta phải xác lập được điều kiện lặp cho nó..
- Có lẽ bạn cũng đồng ý rằng có những cấu trúc lặp mà thân của nó phải thực hiện ít nhất một lần, tức bước lặp đầu tiên được thực hiện mà không cần điều kiện gì, sau đó các bước lặp tiếp theo sẽ được xem xét tuỳ vào trạng thái của bước lặp trước đó.
- Với tình huống như thế thì while không thuận lợi bằng một cấu trúc điều khiển khác mà C cung cấp, đó là cấu trúc do while..
- Cấu trúc của do while:.
- Trong cú pháp trên S là 1 câu lệnh là thân của vòng lặp, <bt>.
- là biểu thức điều kiện có vai trò kiểm soát vòng lặp..
- Sự hoạt động của cấu trúc do while bước 1: thực hiện câu lệnh S.
- bước 2: kiểm tra giá trị biểu thức <bt>, nếu có giá trị ‘đúng.
- khác 0) thì lặp lại bước 1, nếu ‘sai’ (=0) thì kết thúc vòng lặp..
- Ví dụ 5.1: Viết chương trình cho phép người sử dụng nhập một ký tự trên bàn phím, in kí tự và mã của nó ra màn hình, kết thúc chương trình khi người dùng bấm phím ESC (mã 27).
- Giải: tương tự như ví dụ 4.2 nhưng ở đây chúng ta sử dụng cấu trúc do, vậy có chương trình.
- printf(“\n Hay nhap mot ki tu.
- Ví dụ 5.2: Chương trình tính tổng sin(x ) theo công thức khai triển Taylor:.
- Nhưng rõ ràng chương trình không thể tính vô hạn được, chúng ta chỉ có thể tính với một giới hạn nào đó.
- Cách thứ hai chúng ta hạn chế số bước theo độ chính xác của kết quả.
- Chúng ta có thể phát biểu lại bài toán là: Tính sin(x) theo công thức khai triển trên với độ chính xác ε (epsilon) cho trước.
- Yêu cầu này có thể thoả mãn khi chúng ta tính tổng đến số hạng thức k nào đó mà giá trị tuyệt đối của phần tử này <= ε..
- Chúng ta có sơ đồ khối thuật giải như sau:.
- các bạn có chương trình tính sin( x).
- Ví dụ 5.3: Viết chương trình nhập một số nguyên dương n từ bàn phím, kiểm tra và thông báo số đó có là số nguyên tố hay không..
- Chương trình chỉ kiểm tra số n >2.
- Sau khi kiểm tra xong một số, chương trình hỏi người dùng có muốn kiểm tra tiếp hay không, nếu trả lời c(C) thì chương trình vẫn tiếp tục cho nhập và kiểm tra số tiếp, ngược lại sẽ kết thúc chương trình..
- Giải :Để kiểm tra số n có là số nguyên tố hay không chúng ta cần kiểm tra các số từ 2 tới xem có số nào là ước của n hay không, nếu không thì thông báo n là số nguyên tố, ngược lại thông báo n là hợp số..
- Cấu trúc for.
- Đây cũng là toán tử điều khiển thực hiện lặp một số lệnh nào đó nhưng có cú pháp khác với hai chương trình lặp mà chúng ta đã xem xét ở phần trên, for trong C được dùng hết sức mềm dẻo nhưng nói chung nó sẽ trực quan và dễ hiểu hơn trong những tình huống lặp mà số bước lặp xác định..
- Trước khi trình bày cú pháp tổng quát của for chúng ta hãy xem xét một đoạn lệnh (in các kí tự từ ‘a’ tới ‘z’ và mã của chúng) như sau:.
- printf(“ gia tri %d là mã của ki tu %c”, i,i);.
- đoạn lệnh trên có thể viết lại bằng chương trình while là i =‘a’;.
- ¾ Cú pháp.
- 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ó..
- 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.
- b4: Thực hiện bt_3, rồi quay về b2..
- sơ đồ cấu trúc for.
- 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ư:.
- 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..
- 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ư:.
- printf(“\ni = %d, j = %d);.
- 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ử.
- Ví dụ 6.1: Chương trình in các kí tự có mã từ 32 tới 255 trong bảng mã ASCII.
- 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 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ả sử chúng ta có một dãy số a 1 , a 2.
- a n để 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:.
- 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:.
- Các bạn có chương trình như sau.
- Ví dụ 6.3 : Viết chương trình giải bài toán sau:.
- Chúng ta có.
- Ở đâ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 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:.
- tối đa chỉ có 20 trâu đứng thì thực hiện.
- tối đa chỉ có 23 trâu nằm thực hiện.
- 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.
- Ví dụ:.
- 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..
- Trong thân của for cũng như các cấu trúc lặp khác, có thể có câu lệnh continue và break, với chức năng là:.
- break : kết thúc vòng lặp (trong cùng) chứa nó.
- break cho ta khả năng kết thúc một vòng lặp từ một vị trí bên trong của vòng lặp mà không cần đến giá trị của biểu thức điều kiện.
- Nếu trong nhiều cấu trúc lặp lồng nhau thì break chỉ có tác dụng kết thúc một cấu trúc lặp trong cùng chứa nó mà thôi..
- Có nghĩa là sẽ bỏ qua các lệnh trong thân của vòng lặp kể từ lệnh sau continue cho tới hết thân của vòng lặp.
- Nếu có nhiều cấu trúc lặp bao nhau thì lệnh continue cũng chỉ có tác dụng với cấu trúc lặp trong cùng chứa nó..
- Ta có thể minh hoạ break và continue như sau:.
- Chú ý: Trong for khi gặp continue thì các lệnh phía sau continue tới hết khối bị bỏ qua và chuyển tới thao tác thực hiện bt_3 ( bước nhảy) sau đó bắt đầu vòng lặp mới (kiểm tra điều kiện)..
- Ví dụ 6.4 : chương trình nhập số nguyên dương n từ bàn phím, tìm và in các ước của n và tổng các ước ra màn hình..
- 5: in ra các số nguyên tố 2..n.
- 6: Kiểm tra 1 số có là số chính phương?.
- 7: Kiểm tra 1 số có là số hoàn chỉnh?.
- 8: Tìm giá trị lớn nhất, nhỏ nhất trong 1 dãy.
- 10: Nhập một số kiểm tra số đó có là số thuộc dãy fibonaxi hay không?

Xem thử không khả dụng, vui lòng xem tại trang nguồn
hoặc xem Tóm tắt