
61
BÀI TẬP
1. Khai báo (định nghĩa) hàm trong C để tính gần đúng tích phân xác định
của f(x) tr ên [a, b] (đối kiểu con trỏ hàm)
a. Dùng công thức hình thang
b. Dùng công thức Parabol
c. Dùng công thức Newton-cotet
2. Viết chương trình tính gần đúng tích phân xác định trên [a, b] của 1 hàm
f(x) cụ thể (sử dụng các hàm đã khai báo trong câu 1). So sánh kết quả,
nhận xét.

62
MỘT SỐ CHƯƠNG TRÌNH THAM KHẢO
1. Tính gần đúng tích phân xác định
# include <stdio.h>
# include "conio.h"
# include "math.h"
# define PI 3.14159
float d[10];int n;
double g(double x)
{
return 1/(1+x*x);
}
double tp(double (*f)(double),float a,float b)
{
int n=100,i;
float s,h=(b-a)/n;
s=(f(a)+f(b))/2;
for (i=1; i<n;i++) s+=f(a+i*h);
return s*h;
}
void nhap(float *a, int *n)
{ int i;
printf("\n Nhap bac da thuc: ");scanf("%d",n);
printf("\n Nhap he so cua ham da thuc:\n");
for (i=0;i<=*n; ++i) {
printf(" a[%d]=",i);
scanf("%f",a+i);
}
}
double f(double x)
{
float p=d[0]; int i;
for(i=1;i<=n;i++) p=p*x+d[i];
return p;
}
main()
{ float a,b; char tt;

63
while (1) {
printf("\n Nhap can de tinh tich phan: "); scanf("%f%f",&a,&b);
/*printf("a= "); scanf("%f",&a);
printf("b= "); scanf("%f",&b);*/
printf("\nS1=%.3f",tp(sin,0,PI));
printf("\nS2=%.3f",tp(cos,0,PI/2));
printf("\nS3=%.3f",tp(g,a,b));
nhap(d,&n);
printf("\nS4=%.3f",tp(f,a,b));
printf("\n\n Ban tiep tuc ko(c/k)?");
tt=getch();
if (tt!='c') break;
}
}
2. Tim nghiem gan dung cua phtrinh da thuc bac n bang PP chia doi
# include <stdio.h>
# include "conio.h"
# include "math.h"
# define eps 1e-3
float f(float);
void nhap(float *, int );
float d[10]; int n;
void main()
{ float a,b,c; char tt;
while (1) {
printf("\n Nhap bac phuong trinh: ");scanf("%d",&n);
nhap(d,n);
printf("\n Nhap khoang nghiem: "); scanf("%f%f",&a,&b);
/* printf("a= "); scanf("%f",&a);
printf("b= "); scanf("%f",&b);*/
if (f(a)*f(b)<0) {
c=(a+b)/2;
while (fabs(a-b) >= 1e-3 && f(c)!=0) {
printf("\n%.3f %.3f %.3f",a,b,f(c));
if (f(b)*f(c)>0)
b=c;
else a=c;
c=(a+b)/2;

64
}
printf("\n\n Nghiem phtrinh: %.3f",c);
}
else
if (f(a)*f(b)>0) printf(" ( %f, %f) khong phai la khoang
nghiem",a,b);
else
if (f(a)==0) printf(" \n Nghiem phtrinh: %.3f",a);
else printf(" \n Nghiem phtrinh: %.3f",b);
printf("\n\n Ban tiep tuc ko(c/k)?");
tt=getch();
if (tt!='c') break;}
}
void nhap(float *a, int n)
{ int i;
printf("\n Nhap he so cua phuong trinh:\n");
for (i=0;i<=n; ++i) {
printf(" a[%d]=",i);
scanf("%f",a+i);
}
}
/* ham tinh gia tri da thuc*/
float f(float x)
{
float p=d[0]; int i;
for(i=1;i<=n;i++) p=p*x+d[i];
return p;
}
3. PP tiếp tuyến
# include "conio.h"
# include "math.h"
# define eps 1e-3
float f(float x);
float fdh(float x);
main()
{ float a,b; char tt;
while (1)
{ printf("\nNhap xap xi ban dau: "); scanf("%f",&a);
/*b=a-f(a)/fdh(a);

65
printf("\n%.3f %.3f %f",a,-f(a)/fdh(a),b);*/
do {
b=a;
a=b-f(b)/fdh(b);
printf("\n%.3f %.3f %f",b,-f(b)/fdh(b),a);
}
while (fabs(a-b) >= 1e-3 );
printf("\nNghiem phtrinh: %.3f",a);
printf("\nTiep tuc ko(c/k)?");
tt=getch();
if (tt=='k' || tt=='K') break;}
}
float f(float x)
{
return exp(x)-10*x+7;
}
float fdh(float x)
{
return exp(x)-10;
}
4. Giải hệ phtrình đại số tuyến tính bằng PP Gauss
# include <stdio.h>
# include "conio.h"
# include "math.h"
void nhap(float *a, int n,int m);
void xuatmt(float *a, int n,int m);
main()
{ float a[10][10];
float x[10],m,s;
char tt;
int n,i,j,k;
while (1) {
printf("\n Nhap n= "); scanf("%d",&n);
printf("\n Nhap he so cua he phuong trinh:\n");
for (i=1;i<=n; ++i)
for (j=1;j<=n+1;++j) {
printf(" pt[%d%d]=",i,j);
scanf("%f",&m);
a[i][j]=m;
}