GamesCapNhat.Wap.Sh
HOME - Lập Trình đồng hồ gỗ ĐỨC PHỔ WAP LẬP TRÌNH
Xem Thêm >>
Lập Trình C

Các Cấu Trúc Điều Khiển Chương Trình C (phần 2)

Các Cấu Trúc Điều Khiển Chương Trình C (phần 2)

IV.4.  Cấu trúc while

while là cấu trúc điều khiển lặp thực hiện một lệnh hay khối lệnh nào đó với số lần lặp được xác định tuỳ theo một điều kiện (gọi là điều kiện lặp). Cấu trúc của while như sau:  

  while (<bt>)     S;

Trong đó bt là một biểu thức nào đó là biểu thức điều kiện lặp, S là thân của while và chỉ là một câu lệnh. Sự hoạt động của while như sau:  bước 1: tính giá trị của <bt> bước 2: nếu giá trị tính được của <bt> là ‘sai’ (==0) thì kết thúc  while bước 3: nếu giá trị của <bt> là ‘đúng’ (!=0) thì thực hiện S bước 4: quay lại bước 1     

Ví dụ 4.1: Tìm ước số chung lớn nhất của 2 số nguyên x, y  theo thuật toán sau: a = x; b = y; 

b1:  nếu (a = b) thì ước số chung lớn nhất là a, kết thúc  ngược lại (a !=b)  thì tới bước 2 

b2: - nếu a > b thì ta tính a = a- b - ngược lại  ta tính  b =b – a - quay lại bước 1  

Như vậy chúng ta có thể phát biểu như sau  Chừng nào (a !=b) thì lặp lại  n ếu a >b thì a = a-b  ngược lại b = b -a  k ết thúc vòng lặp này thì a=b và là ước chung lớn nhất của x và y.  Đó chỉ xét trường hợp x, y là số nguyên >0. Trong trường hợp nếu một trong hai số bằng 0 thì ước số chung lớn nhất là trị tuyệt đối của số còn lại,  nếu cả 2 số bằng 0 thì không xác định được ước số chung lớn nhất. chúng ta có chương trình  sau 

#include <stdio.h>

 #include <conio.h>

 #include <math.h>

  void main){ <; 

  scanf"; 

  a = abs(x); // a bằng trị tuyệt đối của x  

 b = abs(y); // b bằng trị tuyệt đối của y 

  if0   

   printf("ca hai so bang 0");

   else  if0  

   printf0; 

 else      {    

 while(a!=b)    

    if(a>b) a-=b;     

      else b-=a;   

 printf"uocsochunglonnhatla;  

 } getch); < Giải: chúng ta có thể mô tả các bước của chương trình như sau 

1: nhận 1 ký tự từ bàn phím, mã lưu trong biến ch  ch= getch);<

 4: quay lại 1 Vậy có chương trình  

// In ki tu

 #include <stdio.h

#include <conio.h> 

#include <math.h>

 const int ESC =27; // ma phim ESC

 void main0)!=ESC)   

 printf"\nKitu;

 }

 Nhận xét:

− while là cấu trúc điều khiển lặp với điều kiện trước, tức là điều kiện lặp được kiểm tra trước khi vào thân của vòng lặp, do vậy nếu biểu thức điều kiện có giá trị ‘sai’ ngay từ đầu thì thân của while có thể không được thực hiện lần nào

. − trong thân của while phải có lệnh để làm thay đổi giá trị của biểu thức điều kiện. Hoặc nếu biểu thức điều kiện luôn có giá trị ‘đúng’

 - chúng ta gọi vòng lặp không kết thúc,  thì trong thân của while phải có lệnh để chấm dứt vòng lặp (xem lệnh break). 

ví dụ   

  while (1) // biểu thức điều kiện luôn đúng   

  { 

printf(“\n Hay bam mot phim: “);

                   ch = getch); < break;  

    printf“kytu;  

   }

 Ví dụ 4.3: Viết chương trình nhập số nguyên n từ bàn phím, n <=10 và n >0, tính và in giá trị n! (giai thừa của n), với n! = 1*2*,..,*-1*n Giải:  Theo yêu cầu n nhập từ bàn phím phải thoả mãn n > 0 và n <=10, vì vậy nếu n người dùng nhập n không hợp lệ thì chương trình sẽ yêu cầu nhập lại, và sẽ lặp lại việc nhập cho tới khi thoả mãn.  Việc tính gt  = n! theo các bước sau:  

gt = 1 ;

 i = 1;  

  while ( i <=n)   

   { 

 gt = gt *i;  

      i++;  

  }  



// giai thua

 #include <stdio.h>

 #include <conio.h>

 const int Max =10; // giới hạn giá trị cần tính

 void main){ <;  

 scanf"; 

  while((n<=0)||(n>Max))  {   printf"\nNhaplain(0<n<= : ", Max);   scanf";  }   

gt=i=1; 

  while(i<=n)  {  gt*=i;    i++;  } 

  printf"\nGiatri;   

getch1 +1/(3!)+..+1/(n!)  với n nhập từ bàn phím, 0<n<10.  

Giải: Bạn thấy là để tính S thì phải tính được  các số hạng  là 1/(k!) với k 1,2,..,n sau đó cộng vào tổng. Như vậy chúng ta có thể thực hiện như sau:  

1: S=1; k=2;

 2: nếu k > n thì thực hiện  4:  ngược lại thì thực hiện 3: 

3: thực hiện các thao tác

 3.1:  tính   d =  k! 

3.2:  tính   pt = 1/d

 3.3:  S = S + pt 

3.4:  k = k+1 

3.5:  lặp lại 2:

 4:  in kết quả là S và kết thúc 

 Nhưng như vậy với mỗi số hạng (pt) của tổng chúng ta phải tính giai thừa một lần, trong khi đó chúng ta thấy rằng số hạng (pt) thứ k là 1/(k1!) = 1/-1!)*k) tức là bằng giá trị của pt thứ k-1  nhân với 1/k. Vì vậy ta có thể sửa đổi lại cách tính như sau:

 1: S=1;  pt=1; k = 2 

2: nếu k > n thì thực hiện  4:  ngược lại thì thực hiện 3:

 3: thực hiện các thao tác 

3.1:  tính   pt = pt * 1/k

 3.2:  S = S + pt 

3.3:  k = k+1

 3.4:  lặp lại 2: 

4:  in kết quả là S và kết thúc 

 Chương trình là

 #include <stdio.h>

 #include <conio.h> 

const int Max =10; // gioi han

 void main0;  

 scanf";  

 while((n<=0)||(n>Max)) {  

  printf"\nNhaplain(0<n<= : ", Max);  

  scanf";    

                    }  

   S=pt=1; k=2; 

  while(k<=n){ 

 pt /=k; 

 S+=pt;  

       k++;  

 }  

 printf0; 

  }  

Ví dụ 4.5:  Viết chương trình  nhập số nguyên dương n từ bàn phím, hãy kiểm tra và thông báo ra màn hình số đó có là số nguyên tố hay không ?  

IV.5.  Cấu trúc do  ..  while 

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:    

do         S;  

while (<bt>);  

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  // In ki tu

 #include <stdio.h> 

#include <conio.h> 

#include <math.h> 

const int ESC =27; // ma phim ESC

 void main){ <

 ch = getch)<;  

 }while(ch!=ESC)  

  }

  Ví dụ 5.2: Chương trình tính tổng sin(x ) theo công thức khai triển Taylor:  

Các bạn biết rằng sin(x) được tính theo tổng chuỗi vô hạn đan dấu như sau:   

   S = x - x 3/3!  +  x5/5! - x7/7! +...  

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ó hai cách để giới hạn một là theo số các số hạng trong tổng tức là chỉ tính tổng với n số hạng đầu tiên của chuỗi, cách này có ưu điểm là số  bước lặp xác định, nhưng không ước lượng được sai số. 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. Có nghĩa  là kết quả tính được (S) có sai số so với giá trị thực của nó không  quá ε, hay fabs0) <= ε. 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  <= ε. Cácbạn thấy rằng các phần tử trong chuỗi có tính chất đan dấu và giả sử ta ký hiệu phần tử thứ k trong chuỗi là pk  thì 

 pk  =  -12kx 2k +1 /3! 

 và   pk+1 =  -12k+1x 21 +1 /3+1)!      = -p k * x2 /1)  

  các bạn có chương trình tính sin( x)  

#include <math.h>

 #include <stdio.h

void main0 x  = ");

 scanf"; 

printf("\nNhap sai so duoc phep eps = ");

 scanf"; s=x;sh=x; k=1; 

do {     

 sh =-sh*x*x/1);

      s+=sh;   

   k++;  

 }  while(fabs(sh)>eps);

 printf"s=;

 }  

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. Yêu cầu

  - 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ố.   

#include <math.h>

 #include <stdio.h>

 #include <conio.h>

 #include <ctype.h> 

void main){<;

 scanf";

 if(n<2) printf("Khong kiem tra so <2");

 else {

 k=2; 

      while((k<=sqrt(n))&&n) k++; 

      if(k>sqrt(n))  printf"\n;   

    else   printf"\n;  

     } 

 printf("\nban co kiem tra so khac khong :"); 

 tl = getch); <=='C'); 

}   



<< Bài Viết Khác
Danh mục
Game Mobile
Phần Mềm - Ứng Dụng
Hình Nền Đẹp
Kinh Nghiệm Thủ Thuật
Giải Trí Thư Giản
Phim Tổng Hợp
Hổ Trợ Học Tập
Tiện Ích Wap Online
Điện Thoại Bạn Có Chưa?
game online - kinh nghiem thu thuat - app android - game android - phim hanh dong - lap trinh c - lap trinh pascal - giai tri
U-ON

Teya Salat