I顯示方法
#include <stdio.h>
#define HEIGHT 17
int main(void)
{
int i=0;
printf("\n\nIIIIIII\n");
while (i<HEIGHT)
{
printf(" III\n");
i++;
}
printf("IIIIIII\n\n\n");
return 0;
}
埃特肯
#include<stdio.h>
#include<math.h>
float f(float a)
{float b;
b=pow(2,-a);
return b;
}
main()
{float x0,x1,e,y,z;
int k;
scanf("%f,%f",&x0,&e);
for(k=0;k<100;k++)
{y=f(x0);
z=f(y);
x1=x0-(y-x0)*(y-x0)/(z-2*y+x0);
if(fabs(x1-x0)<e)
{printf("%f",x1);
break;
}
else x0=x1;
}
}
杜氏分解法
#include<stdio.h>
#include<math.h>
main()
{int n,i,j,k,t,sum;
float a[10][10],b[10],x[10],y[10];
printf("the top exp is ");
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(i=0;i<n;i++)
scanf("%d",&b[i]);
for(i=1;i<n;i++)
a[i][1]=a[i][1]/a[1][1];
for(k=1;k<n;k++)
{for(j=k;j<n;j++)
{sum=0;
for(t=0;t<k;t++)
sum+=a[k][t]*a[t][j];
a[k][j]=a[k][j]-sum;
}
if(k!=n-1)
{for(i=k+1;i<n;i++)
{sum=0;
for(t=0;t<k;t++)
sum+=a[i][t]*a[t][k];
a[i][k]=(a[i][k]-sum)/a[k][k];
}
}
}
y[0]=b[0];
for(i=1;i<n;i++)
{sum=0;
for(k=0;k<i;k++)
sum+=a[i][k]*y[k];
y[i]=b[i]-sum;
}
x[n-1]=y[n-1]/a[n-1][n-1];
for(i=n-2;i>=0;i--)
{sum=0;
for(k=i+1;k<n;k++)
sum+=a[i][k]*x[k];
x[i]=(y[i]-sum)/a[i][i];
}
for(i=0;i<n;i++)
printf("%f\n",x[i]);
}
二分法
#include<stdio.h>
#include<math.h>
float f(float x)
{float y;
y=x*x+2*x+1;
return y;
}
main()
{float a,b,c,x;
printf("%s","input three numbers:\n");
scanf("%f%f%f",&a,&b,&c);
while(fabs(b-a)>=c)
{x=(a+b)/2;
if(f(x)!=0)
{if(f(a)*f(x)<0)
b=x;
else a=x;}
else a=x,b=x;
}
printf("%f\n",(a+b)/2);
}
分段線性插值
#include<stdio.h>
#include<math.h>
main()
{int e,h,i,j,k,n;
float x[10],y[10],a,sum,total,e1,e2;
printf("input n\n");
scanf("%d",&n);
printf("input X\n");
for(i=0;i<=n;i++)
scanf("%f",&x[i]);
printf("input Y\n");
for(i=0;i<=n;i++)
scanf("%f",&y[i]);
printf("input x\n");
scanf("%f",&a);
for(j=1;j<=n;j++)
if(x[j-1]<=a&&a<=x[j])
e=j;
if(e==1)
h=j;
else if(e==n)
h=j-1;
else {e1=fabs(a-x[j-2]);
e2=fabs(a-x[j+1]);
if(e1<e2)
h=j-1;
else h=j;}
sum=0;
for(k=h-1;k<=h+1;k++)
{total=1;
for(j=h-1;j<k;j++)
total*=((a-x[j])/(x[k]-x[j]));
for(j=k+1;j<=h+1;j++)
total*=((a-x[j])/(x[k]-x[j]));
sum+=y[k]*total;
}
printf("x=%f,L=%f",a,sum);
}
複合梯形法
#include<stdio.h>
#include<math.h>
#define f(x) 4/(1+(x)*(x))
float g(int k)
{int i,total;
total=1;
for(i=1;i<=k;i++)
total*=2;
return total;
}
main()
{int i,k,k0,k1,tag;
float a,b,e,e1,t[50],sum;
scanf("%f,%f,%f,%d,%d",&a,&b,&e,&k0,&k1);
t[0]=((b-a)*(f(1)-f(0)))/2;
k=1;
tag=0;
do{sum=0;
for(i=1;i<=g(k-1);i++)
sum+=f(a+(2*i-1)*(b-a)/g(k));
t[k]=t[k-1]/2+(b-a)*sum/g(k);
if(k>=k1)
{e1=fabs(t[k]-t[k-1]);
if(e1<e)
{printf("k=%d,T=%f\n",k,t[k]);
tag=1;
}
}
k++;
}while(tag==0&&k<k0);
if(tag==0||k>=k0)
printf("error!\n");
}
複合辛普森
#include<stdio.h>
#include<math.h>
#define f(x) (x)/(4+(x)*(x))
main()
{int k,n;
float a,b,h,s,x;
scanf("%f,%f,%d",&a,&b,&n);
h=(b-a)/(2*n);
x=a;
s=f(x)-f(b);
k=1;
do
{x=x+h;s=s+4*f(x);
x=x+h;s=s+2*f(x);
k++;
}while(k<=n);
s=(s*h)/3;
printf("s=%f\n",s);
}
改進歐拉法
#include<stdio.h>
#include<math.h>
main()
{float a[10][10],b[10],m[10][10],x[10],sum;
int i,j,k,n;
printf("the top exp:");
scanf("%d",&n);
printf("\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%f",&a[i][j]);
for(i=0;i<n;i++)
scanf("%f",&b[i]);
for(k=0;k<n-1;k++)
{if(a[k][k]==0)
printf("error");
else for(i=k+1;i<n;i++)
{m[i][k]=a[i][k]/a[k][k];
a[i][k]=m[i][k];
b[i]=b[i]-m[i][k]*b[k];
for(j=k+1;j<n;j++)
a[i][j]=a[i][j]-m[i][k]*a[k][j];
}}
if(a[n-1][n-1]==0)
printf("error");
else x[n-1]=b[n-1]/a[n-1][n-1];
b[n-1]=x[n-1];
for(i=n-2;i>=0;i--)
{sum=0;
for(j=i+1;j<n;j++)
{sum+=a[i][j]*x[j];}
x[i]=(b[i]-sum)/a[i][i];
b[i]=x[i];
}
for(i=0;i<n;i++)
printf("%f\n",x[i]);
}
簡單迭代
#include<stdio.h>
#include<math.h>
float f(float x)
{float y;
y=sqrt(10/(4+x));
return y;
}
main()
{float x0,x1,a;
int k,N;
k=0;
scanf("%f,%f,%d",&x0,&a,&N);
for(k=0;k<N;k++)
{x1=f(x0);
if(fabs(x1-x0)<a)
{printf("%d,%f",k,x1);
break;
}
else x0=x1;
}
if(k>=N)
{printf("error");
}
}
列主元元素消元
#include<stdio.h>
#include<math.h>
main()
{float a[10][10],b[10],s,t,e,sum;
int i,j,k,n,m;
printf("The top exp is ");
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%f",&a[i][j]);
for(i=0;i<n;i++)
scanf("%f",&b[i]);
scanf("%f",&e);
k=0;
do{t=a[k][k];
for(i=k;i<n;i++)
{if(fabs(t)<fabs(a[i][k]))
{t=a[i][k];
m=i;
}
else m=k;
}
if(fabs(t)<e)
printf("det A = 0\n");
else {if(m!=k)
{for(j=0;j<n;j++)
{s=a[m][j];
a[m][j]=a[k][j];
a[k][j]=s;
}
s=b[m];
b[m]=b[k];
b[k]=s;
}
for(i=k+1;i<n;i++)
for(j=k+1;j<n;j++)
{a[i][k]=a[i][k]/a[k][k];
a[i][j]=a[i][j]-a[i][k]*a[k][j];
b[i]=b[i]-a[i][k]*b[k];
}
}
k++;
}while(k<n-2);
if(fabs(a[n-1][n-1])<e)
printf("det A = 0\n");
else {b[n-1]=b[n-1]/a[n-1][n-1];
for(i=n-2;i>=0;i--)
{sum=0;
for(k=i+1;k<n;k++)
{sum+=a[k][j]*b[j];}
b[i]=(b[i]-sum)/a[i][i];
}
}
for(i=0;i<n;i++)
printf("%f\n",b[i]);
}
龍貝格算法
#include<stdio.h>
#include<math.h>
#define f(x) 4/(1+(x)*(x))
float g(int k)
{int i,total;
total=1;
for(i=1;i<=k;i++)
total*=2;
return total;
}
main()
{int k0,k1,k,tag,i;
float a,b,e,e1,t[50],s[50],c[50],r[50],sum;
scanf("%f,%f,%f,%d,%d",&a,&b,&e,&k0,&k1);
t[0]=(b-a)*(f(0)+f(1))/2;
k=1;
tag=0;
do{if(k==1)
{t[1]=t[0]/2+(b-a)*f(a+(b-a)/2)/2;
s[0]=(4*t[1]-t[0])/3;
}
if(k==2)
{t[2]=t[1]/2+(b-a)*(f(a+(b-a)/4)+f(a+3*(b-a)/4))/4;
s[1]=(4*t[2]-t[1])/3;
c[0]=(16*s[1]-s[0])/15;
}
if(k>=3)
{sum=0;
for(i=1;i<=g(k-1);i++)
sum+=f(a+(2*i-1)*(b-a)/g(k));
t[k]=t[k-1]/2+(b-a)*sum/g(k);
s[k-1]=(4*t[k]-t[k-1])/3;
c[k-2]=(16*s[k-1]-s[k-2])/15;
r[k-3]=(64*c[k-2]-c[k-3])/63;
}
if(k>=k1)
{e1=fabs(r[k-3]-r[k-4]);
if(e1<e)
{printf("k=%d,T=%f\n",k,r[k-3]);
tag=1;
}
}
k++;
}while(tag==0&&k<k0);
if(tag==0||k>=k0)
printf("error!\n");
}
龍格庫塔方法
#include<stdio.h>
#include<math.h>
#define f(x,y) (x)-(y)+1
main()
{int n,k;
float a,b,y0,h,x,y,t[4];
scanf("%f,%f,%f,%d",&a,&b,&y0,&n);
h=(b-a)/n;
x=a;y=y0;
printf("%f,%f\n",x,y);
k=1;
do{t[0]=f(x,y);
x=x+h/2;
t[1]=f(x,y+h*t[0]/2);
t[2]=f(x,y+h*t[1]/2);
x=x+h/2;
t[3]=f(x,y+h*t[2]);
y=y+h*(t[0]+2*t[1]+2*t[2]+t[3])/6;
printf("%f,%f\n",x,y);
k++;
}while(k<=n);
}