Gi¸o tr×nh tin häc c¬ së II - N
gôn ngữ
C
51
if(ch==27)
break;
printf(“ky tu %c co ma la %d”,ch,ch);
}
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*,..,*(n-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
#include
const int Max =10; //
giới hạn giá trị cần tính
void main(){
int n, i;
long gt;
printf("\nNhap n = ");
scanf("%d",&n);
while((n<=0)||(n>Max))
{
printf("\nNhap lai n (0scanf("%d",&n);
}
gt=i=1;
while(i<=n)
{
gt*=i;
i++;
}
printf("\nGia tri %d! = %ld",n,gt);
getch();
}
Ví dụ 4.4: Viết chương trình tính và in S = 1 +1/(2!)
+1/(3!)+..+1/(n!) với n nhập từ bàn
phím, 0
Gi¸o tr×nh tin häc c¬ së II - N
gôn ngữ
C
52
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/(((k-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
Chia sẻ với bạn bè của bạn: