S = x - x
3
/3! + x
5
/5! - x
7
/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 fabs(S-sin(x)) <= ε. 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à p
k
thì
Gi¸o tr×nh tin häc c¬ së II - N
gôn ngữ
C
55
p
k
= (-1)
2k
x
2k +1
/
(2k+1)
!
và
p
k+1
= (-1)
2k+1
x
2(k+1) +1
/
(2(k+1)+1)
!
= -p
k
* x
2
/(2k*(2k+1))
Chúng ta có sơ đồ khối thuật giải như sau:
sơ đồ khối tính S sin(x)
Gi¸o tr×nh tin häc c¬ së II - N
gôn ngữ
C
56
các bạn có chương trình tính sin( x)
#include
#include
void main(){
float x, eps;
float s, sh;
int k;
printf("\nNhap gia tri (radian) x = ");
scanf("%f",&x);
printf("\nNhap sai so duoc phep eps = ");
scanf("%f",&eps);
s=x;sh=x; k=1;
do {
sh =-sh*x*x/(2*k*(2*k+1));
s+=sh;
k++;
} while(fabs(sh)>eps);
printf("s= %f ",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ố.
Gi¸o tr×nh tin häc c¬ së II - N
gôn ngữ
C
57
#include
#include
#include
#include
void main(){
int k, n, tl;
do{
printf("\nNhap gia tri can kiem tra = ");
scanf("%d",&n);
if(n<2) printf("Khong kiem tra so <2");
else { k=2;
while((k<=sqrt(n))&&(n%k)) k++;
if(k>sqrt(n))
printf("\n%d La so nguyen to",n);
else
printf("\n%d Khong la so nguyen to",n);
}
printf("\nban co kiem tra so khac khong :");
tl = getch();
} while(toupper(tl)=='C');
}
IV.6. 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:
for(i=’a’; i<’z’; i++)
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’;
while(i<=’z’)
{ printf(“ gia tri %d là mã của ki tu %c”, i,i);
i++;
}
Gi¸o tr×nh tin häc c¬ së II - N
gôn ngữ
C
58
¾
Chia sẻ với bạn bè của bạn: |