Đọc bài toán của bạn thì mình hiểu vấn đề như sau, viết một chương trình sử dụng vòng lặp xuất ra dãy kết quả khai triển Maclaurin của $e^x$ theo $x$ và $n$, tại mỗi vòng lặp, dùng hàm emux() nhận vào $x$ và $n$ để tính giá trị của mỗi biểu thức $\frac{x^n}{n!}$, khi $n$ càng tăng chúng ta cần mở rộng độ chính xác của phép tính lên bởi vì khi $n$ càng tăng, kết quả phép tính sẽ càng bé.
Mình sử dụng C++, C cũng tương tự, chỉ cần thay các câu lệnh nhập xuất.
#include <iostream>
#include <math.h>
using namespace std;
double emux(double x, int n) {
if (n == 0) return 1;
// Tính lũy thừa ở tử số: x^n
double numerator = pow(x, n);
// Tính giai thừa ở mẫu số: n!
double denominator = 1;
for (int i = 1; i <= n; i++)
denominator *= i;
// Thực hiện phép chia giữa tử và mẫu
double result = numerator / denominator;
return result;
}
int main() {
double x;
int n;
// Nhập vào x (không cần kiểm tra điều kiện với x)
cout << "Nhap vao x = ";
cin >> x;
// Nhập vào số n
do {
cout << "Nhap vao n = ";
cin >> n;
if (n < 0)
cout << "So n phai lon hoac bang 0, xin nhap lai.\n";
} while (n < 0);
// Xem chuỗi khai triển Maclaurin của e^x
cout << "f(x) = 1 + ";
for (int i = 1; i <= n; i++) {
if (i < n)
cout << "x^" << i << "/" << i << "!" << " + ";
else
cout << "x^" << i << "/" << i << "!" << endl;
}
// Chạy vòng lặp từ 0 đến n, mỗi lần chạy gọi hàm enumx để
// tính giá trị của từng phần tử trong chuỗi và xuất ra kết quả
// theo định dạng của chuỗi Maclaurin
cout << "--------" << endl;
for(int i = 0; i <= n; i ++){
// Mở rộng độ chính xác của kết quả tính khi n tăng.
cout.precision(i);
if (i < n)
cout << emux(x, i) << " + ";
else
cout << emux(x, i);
}
return 0;
}
Kết quả xuất ra màn hình Console: