01/10/2018, 09:57

Tìm lỗi sai bài toán tính biểu thức tổng x^i / i!

đây là phần code của mình nhưng chạy nó chỉ ra bằng 0.

#include<stdio.h>
#include<conio.h>
#include<math.h>
int giai_thua(int n);
float mu_x(float x,int a);
int main()
{
	int n;
	float f=0;
	float x;
	printf("nhap n: ");
	scanf("%d",&n);
	printf("nhap x: ");
	scanf("%f",&x);
	for(int i;i<=n;i++)
	{
		f+=mu_x(x,i)/giai_thua(i);
		printf("%8.2f",f);
	}
	printf("%8.2f",f);
	return 0;

}
int giai_thua(int n)
{
	int gt=1;
	for(int i=1;i<=n;i++)
	{
		gt*=i;
	}
	return gt;
}
float mu_x(float x,int a)
{
	float t=1,j;
	for(j=1;j<=a;j++)
	{
		t*=x;
	}
	return t;
}
HK boy viết 12:06 ngày 01/10/2018
  1. Gán f = 0.0
  2. int i=1; i<=n; i++
  3. Có thể để hàm giai thừa có kết quả biến float không?
  4. Nhắc: Máy tính có nút Print Screen.
Võ Trọng Anh viết 12:01 ngày 01/10/2018

vẫn thế bạn ak

HK boy viết 12:03 ngày 01/10/2018

Mình đã sửa hàm giai thừa thành float, gt*=i sửa thành gt*=(i*1.0), sửa for i thành for (int i=1;i<=n;i++) và mình ra khác 0 nhé.

Tuấn Nguyễn viết 12:03 ngày 01/10/2018

Mình nghĩ cần gì phải có 1 hàm tính số mũ riêng nhỉ

Võ Trọng Anh viết 12:04 ngày 01/10/2018

tks bạn nhiều. đúng là chạy rồi bạn ak :). mình ko để ý đến vòng for i chưa gán giá trị bắt đầu. mình cứ tìm lỗi ở các kiểu dữ liệu int vs float.

Võ Trọng Anh viết 12:07 ngày 01/10/2018

mình ms biết chắc C thôi bạn ak.

Nguyễn Duy Hùng viết 12:06 ngày 01/10/2018

câu này có lẽ không cần làm 2 hàm riêng power với factorial

#include<stdio.h>
int main()
{
	int n;
	float x;
    float f=1,p=1,r=0;// biến f dùng để tính giai thừa, p để tính mũ x, r là kết quả
	printf("nhap n: ");
	scanf("%d",&n);
	printf("nhap x: ");
	scanf("%f",&x);

	for(int i = 1; i <= n; i++)
	{
		p*=x;
        f*=i;
        r+=p/(f*1.0);    
	}
	printf("%0.2f",r);
	return 0;
}

chạy thử xem

Võ Trọng Anh viết 11:59 ngày 01/10/2018

minh muốn xây dựng dựa trên hàm con thôi bạn ak. code thế này mình chạy rồi. tks bạn

NG viết 12:03 ngày 01/10/2018

Hay làm như vầy cho nó nguy hiểm chút nè bác

float mu_chia_giai_thua(float x, int n){
    if (n==1)
        return x;
    return x/n * mu_chia_giai_thua(x,n-1);
}
float bieuthuc(float x, int n){
    if (n==0)
        return 0;
    return bieuthuc(x, n-1) + mu_chia_giai_thua(x,n);

}

Hay chơi kiểu này bao nhẹ bao nhanh

float bieuthuc(float x, int i, int n){
    if (i==1)
        return x*bieuthuc(x, i+1, n);
    else if(i>1 && i<=n)
        return 1 + x/i*bieuthuc(x, i+1, n);
    else
       return 1;
}

F(x,n) = bieuthuc(x,1,n)
Em đang rảnh nên ngứa tay, đừng ai chửi nhé

Bài liên quan
0