『壹』 c語言編程如何編寫積分公式
#include<iostream.h>
//定義結構類型
structstudent
{
intnum;
charname[20];
floatgrade;
};
voidmain(void)
{
//聲明數組
inti,size;
charstr[]="Thisisastring.";
intint_values[]={51,23,2,44,45,0,11};
floatfloat_values[]={15.1,13.3,22.2,10.4,1.5};
studentst_arr[]={101,"WangLin",92,102,"LiPing",85,103,"ZhaoMin",88};
//顯示char類型數組元素及其大小
size=sizeof(str)/sizeof(char);
cout<<"Numberofelementsinstr:";
cout<<size<<endl;
for(i=0;i<size;i++){
cout<<str[i];
}
cout<<endl;
//顯示int類型數組元素及其大小
size=sizeof(int_values)/sizeof(int);
cout<<"Numberofelementsinint_values:";
cout<<size<<endl;
for(i=0;i<size;i++){
cout<<int_values[i]<<"";
}
cout<<endl;
//顯示float類型數組元素及其大小
size=sizeof(float_values)/sizeof(float);
cout<<"Numberofelementsinfloat_values:";
cout<<size<<endl;
for(i=0;i<size;i++){
cout<<float_values[i]<<"";
}
cout<<endl;
//顯示student類型數組元素及其大小
size=sizeof(st_arr)/sizeof(student);
cout<<"Numberofelementsinst_arr:";
cout<<size<<endl;
for(i=0;i<size;i++){
cout<<st_arr[i].num<<"";
cout<<st_arr[i].name<<"";
cout<<st_arr[i].grade<<endl;
}
}
#include<iostream.h>
//add()函數的定義,其有返回值
doubleadd(doublex,doubley)
{
doublez;
z=x+y;
cout<<x<<"+"<<y<<"="<<z<<endl;
return(z);
}
main()
{
doublea=0.5,b=1.0;
//以不同參數形式調用函數add()
cout<<"add(1.5,2.5)="<<add(1.5,2.5)<<endl;
cout<<"add(a,b)="<<add(a,b)<<endl;
cout<<"add(2*a,a+b)="<<add(2*a,a+b)<<endl;
cout<<"----------------------"<<endl;
//以表達式方式調用函數add()
doublec=2*add(a,b);
cout<<"c="<<c<<endl;
cout<<"----------------------"<<endl;
//以語句式方式調用函數add()
add(2*a,b);
cout<<"----------------------"<<endl;
//用其他類型參數調用函數add()
intn=1,m=2;
cout<<"add("<<n<<","<<m<<")="<<add(n,m)<<endl;
}
#include<iostream.h>
//定義符號函數sgn(),其返回值為int類型
intsgn(doublex)
{
if(x>0)return(1);//返回出口1
if(x<0)return(-1);//返回出口2
return(0);//返回出口3
}
//main()函數定義
main()
{
doublex;
inti;
for(i=0;i<=2;i++){
cout<<"x=";
cin>>x;
cout<<"sgn("<<x<<")="<<sgn(x)<<endl;
}
}
『貳』 如何用C語言求二重定積分
按二重積分的定義做。
我的這個出錯,一起討論下吧:
#include<stdio.h>
#include<math.h>
#defineN100
voidmain(){
doubleresult,(*p)(double,double);
doublef(double,double);
doubleintegral(double,double,double,double,double(*p)());
p=f;
// printf("請輸入abcd的值: ");
// scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
result=integral(2.0,8.0,0,6.0,p);
printf("該二重積分的值為: ");
printf("%f",result);
printf(" ");
}
//求二重積分的函數
doubleintegral(doublea,doubleb,doublec,doubled,double(*p)(double,double)){
inti,j;
doublex,y,h1,h2,volum=0;
h1=(b-a)/N;
h2=(d-c)/N;
x=a;
y=c;
for(i=0;i<N;i++){
for(j=0;j<N;j++){
volum+=(*p)(x,y)*h1*h2;
y+=h2;
}
x+=h1;
}
return(volum);
}
doublef(doublex,doubley){
doubleh;
h=sqrt((2+x*x)*sin(x*y)*sin(x*y))+x*x*y*cos(x)-30*x*y*y;
return(h);
}
運行結果:
『叄』 用C語言編寫一個求定積分的程序
這是辛普森積分法。
給你寫了fun_1( ),fun_2(),請自己添加另外幾個被積函數。
調用方法 t=fsimp(a,b,eps,fun_i);
a,b --上下限,eps -- 迭代精度要求。
#include<stdio.h>
#include<stdlib.h>
#include <math.h>
double fun_1(double x)
{
return 1.0 + x ;
}
double fun_2(double x)
{
return 2.0 * x + 3.0 ;
}
double fsimp(double a,double b,double eps, double (*P)(double))
{
int n,k;
double h,t1,t2,s1,s2,ep,p,x;
n=1; h=b-a;
t1=h*(P(a)+P(b))/2.0;
s1=t1;
ep=eps+1.0;
while (ep>=eps)
{
p=0.0;
for (k=0;k<=n-1;k++)
{
x=a+(k+0.5)*h;
p=p+P(x);
}
t2=(t1+h*p)/2.0;
s2=(4.0*t2-t1)/3.0;
ep=fabs(s2-s1);
t1=t2; s1=s2; n=n+n; h=h/2.0;
}
return(s2);
}
void main()
{
double a,b,eps,t;
a=0.0; b=3.141592653589793238; eps=0.0000001;
// a definite integral by Simpson Method.
t=fsimp(a,b,eps,fun_1);
printf("%g\n",t);
t=fsimp(a,b,eps,fun_2);
printf("%g\n",t);
// ...
printf("\n Press any key to quit...");
getch();
}
『肆』 C語言編寫f(x)=x^2在區間[0,1]定積分
思路就是將區間無限細分
小區間梯形就可以看成矩形,小矩形所有面積相加,就是定積分
#include"stdio.h"
#include"math.h"
doublef(doublex)//被積函數
{
returnx*x;
}
doublefun(doublep,doubleq,intn)//p,q分別表示積分下上限,n為細分的區間數,越大值越精確
{
inti;
doublesum=0,h=(q-p)/n;
for(i=1;i<=n;i++)//f(p+i*h)*h就是小矩形的面積,加到sum上去。
sum+=f(p+i*h)*h;
returnsum;
}
intmain()
{
printf("(x*x)在(0,1)上定積分為%lf ",fun(0,1,1000000));//區間數自己設越大值越精確
}
結果:
數學分析:
f(x)=x^2=x*x;
定積分:x*x*x/3+c(常數)
在區間(0,1)上定積分:1/3=0.333333
結果正確。
『伍』 用C語言求定積分
實際問題描述:
求定積分近似值
程序代碼如下:
#include
#include
void main()
{
int i,n=1000;
float a,b,h,t1,t2,s1,s2,x;
printf("請輸入積分限a,b:");
scanf("%f,%f",&a,&b);
h=(b-a)/n;
for(s1=0,s2=0,i=1;i<=n;i++)
{
x=a+(i-1)*h;
t1=(float)exp(-x*x/2);t2(float)=exp(-(x+h)*(x+h)/2);
s1=s1+t1*h; /*矩形面積累加*/
s2=s2+(t1+t2)*h/2; /*梯形面積累加*/
}
printf("矩形法算得積分值:%f.
",s1);
printf("梯形法算得積分值:%f.
",s2);
}
程序運行結果如下:
矩形法算得積分值:0.855821
梯形法算得積分值:0.855624
由上面的比較可知,梯形法的精度要高於矩形法。
『陸』 怎樣編寫c語言積分函數
積分分為兩種,數值積分,公式積分。
公式積分:部分函數可以直接用公式求得其不定積分函數。C語言中可以直接用積分公式寫出其積分函數。
數值積分:按照積分的定義,設置積分范圍的步長,用梯形面積累加求得其積分。
以【f(x)=x*sin(x) 從1到2的積分】為例:
#include<math.h>
#include<stdio.h>
doubleintegral(double(*fun)(doublex),doublea,doubleb,int,n){
doubles,h,y;
inti;
s=(fun(a)+fun(b))/2;
h=(b-a)/n;/*積分步長*/
for(i=1;i<n;i++)
s=s+fun(a+i*h);
y=s*h;
returny;/*返回積分值*/
}
doublef(doublex){
return(x*sinx)/*修改此處可以改變被積函數*/
}
intmain(){
doubley;
y=integral(f,1.0,2.0,150);/*修改此處可以改變積分上下限和步數,步長=(上限-下限)/步數*/
printf("y=%f ",y);
return0;
}
『柒』 怎麼用C語言表示積分
源代碼如下:
#include#includefloat f1(float x)
{
return(1.0+x);
}
float f2(float x)
{
return(2.0*x+3.0);
}
float f3(float x)
{
return(exp(x)+1);
}
float f4(float x)
{
return(pow(1+x,2));
}
float f5(float x)
{
return(pow(x,3));
}
float fsimp(float a,float b,float (*p)(float))
{
float c,s;
c=(a+b)/2;
s=(b-a)/6*(p(a)+4*p(c)+p(b));
return s;
}
int main()
{
float a,b;
printf("請輸入積分下限a的值:");
scanf("%f",&a);
printf("請輸入積分上限b的值:");
scanf("%f",&b);
printf("%f ",fsimp(a,b,f1));
}
(7)c語言求yx2積分擴展閱讀
1、對應於一個積分式要有一段程序,可以改變程序的一小部分來改變所要求的積分式。
2、除數不能位0。
3、兩個整數相除,結果仍是整數。
4、若被除數其中有一個為浮點數或者兩個都為浮點數,則結果為浮點類型。操作數必須為整數,不能是浮點數。
『捌』 用C語言求積分
好象要你自己定義函數,庫函數中好象是沒有直接可以用的積分函數的。
『玖』 c語言求定積分
問題就是出在數據類型上的選用上,precision=0.0000001時已經超過了float的數據范圍,所以導致數據截斷後precision=0.000000,從而程序在計算積分時可能陷入死循環,應該採用double型數據類型。其實不推薦樓主用如此多的define語句,程序的可讀性和風格應該重於編程員的勞動度。。。
還有樓主對自然對數e的define也已經超過了計算機的可識別范圍。。您那樣精確的定義e並不會在結果上獲得更加精確地結果,其實反倒會起到相反的作用,要知道與其用一個這樣可能導致內存出錯以及必定會導致數據截斷的變數來實現精度的提高遠遠不如採用一個更精確的積分演算法,而且c語言提供了自然數e為底的指數函數~而且貌似您的積分演算法是不準確的,梯形積分的定義並非如此,其再兩端的函數值應該只取1/2.希望您多加細心~
如果不介意的話,就是你的precision應該改為step~這樣會能更加准備的表達了這個變數的作用,在你的程序中precision變數其實是積分步長~在數值計算方法中積分精度的控制往往不是通過細化步長來表達,而是通過後一個積分值-前一個積分值<precision
這樣來實現精度控制~呵呵
『拾』 用c語言求二重積分~~
這個你用手工積分就行了,當然常數的代入計算還是可以用計算器的。給你的提示是分0<y<a/2和a/2<y<a兩次脫絕對值符號,最後都會演變為對sqrt(x^2+u^2)/(x^2+u^2+v^2)^2的積分形式,或者,你只關心數值結果的話,直接採用矩形法或者辛普森積分法,劃分的細一點就不會有太大誤差了