C语言程序练习.docx
《C语言程序练习.docx》由会员分享,可在线阅读,更多相关《C语言程序练习.docx(15页珍藏版)》请在冰豆网上搜索。
C语言程序练习
2014年03月14号
#include
doublefun(doublex,doubley);
doubleEuler(doubledx,doublex,doubley);
doubleTrapz(doubledx,doublex,doubley);
intmain()
{
doublex0;
doublex,y;
doubledx;
doubleEy=1,Ty=1;
x0=0;
y=1;
dx=0.1;
for(x=x0;x<1;x+=dx)
{
Ty+=Trapz(dx,x,Ty);
Ey+=Euler(dx,x,Ey);
//printf("%lf,%lf\n",x+dx,Ey);
printf("%lf,%lf\n",x+dx,Ty);
}
return0;
}
doublefun(doublex,doubley)
{
returny-2*x/y;
}
doubleEuler(doubledx,doublex,doubley)
{
returndx*fun(x,y);
}
doubleTrapz(doubledx,doublex,doubley)
{
doubledy=Euler(dx,x,y);
return(dy+Euler(dx,x+dx,y+dy))/2;
}
打开txt文件
#include"stdio.h"
#include"string.h"
voidREADDAT(char(*t)[12])
{
FILE*fp;
inti;
fp=fopen("E:
\\Hello.txt","r");
for(i=0;i<10;i++)
{
fgets(t[i],12,fp);
}
fclose(fp);
}
voidmain()
{
inti;
chart[10][12]={0};
READDAT(t);
for(i=0;i<10;i++)
puts(t[i]);
}
2014415
函数指针的练习
#include
voidMyFun(int,int);//这个申明也可写成:
voidMyFun(int);
void(*FunP)(int,int);//也可申明成void(*FunP)(intx),但习惯上一般不这样。
intmain(intargc,char*argv[])
{
MyFun(10,1);//这是直接调用MyFun函数
FunP=MyFun;//将MyFun函数的地址赋给FunP变量
(*FunP)(20,1);
//这是通过函数指针变量FunP来调用MyFun函数的。
FunP(1111,1);//*FunP等于MyFun的功能
return0;
}
voidMyFun(intx,inty)//这里定义一个MyFun函数
{
printf("%d\n",x+y);
}
函数指针和指针函数结合起来用
#include"stdio.h"
int*(*pFun)(int*,int*);
int*fun(int*p,int*q);
intmain(intargc,char*argv[])
{
inta;
intb;
pFun=fun;
printf("pleaseinputtwonums:
");
scanf("%d,%d",&a,&b);
pFun(&a,&b);
return0;
}
int*fun(int*p,int*q)
{
intt;
t=*p;
*p=*q;
*q=t;
printf("%d,%d",*p,*q);
return0;
}
20140418
雅克比迭代
#include"stdio.h"
intmain()
{
doubleA[100][100];
doubleb[100];
doublef[100];
doubleB[100][100];
doubleD[100][100];
doubleL[100][100];
doubleU[100][100];
doublex[100];
doublex2[100];
doubletmp;
intm,n,i,j,k;
inta;
printf("pleaseinputtheArrayArowandcolumn:
");
scanf("%d%d",&m,&n);
for(i=0;i{
for(j=0;jscanf("%lf",&A[i][j]);
}
for(i=0;i{
for(j=0;jprintf("%lf",A[i][j]);
printf("\n");
}
printf("pleaseinputtheArrayB:
");
for(i=0;i{
scanf("%lf",&b[i]);
}
for(i=0;i{
printf("%lf",b[i]);
printf("\n");
}
for(i=0;i{
for(j=0;jif(i==j)
D[i][j]=A[i][j];
else
D[i][j]=0;
}
for(i=0;i{
for(j=0;jprintf("%lf",D[i][j]);
printf("\n");
}
for(i=0;i{
for(j=0;j{
if(i>j)
L[i][j]=-A[i][j];
else
L[i][j]=0.0;
}
}
for(i=0;i{
for(j=0;jprintf("%lf",L[i][j]);
printf("\n");
}
for(i=0;i{
for(j=0;jif(iU[i][j]=-A[i][j];
else
U[i][j]=0;
}
for(i=0;i{
for(j=0;jprintf("%lf",U[i][j]);
printf("\n");
}
for(i=0;i{
for(j=0;j{
if(i==j)
B[i][j]=0.0;
else
B[i][j]=-A[i][j]/D[i][i];
}
}
for(i=0;i{
for(j=0;jprintf("%lf",B[i][j]);
printf("\n");
}
printf("\n");
for(i=0;i{
f[i]=b[i]/D[i][i];
}
for(i=0;i{
printf("%lf",f[i]);
}
printf("\n");
printf("输入初始值:
");
for(i=0;i{
scanf("%lf",&x[i]);
}
printf("\n");
printf("输入迭代次数:
");
scanf("%d",&a);
for(k=0;k{
for(i=0;ix2[i]=x[i];
for(i=0;i{
tmp=0.0;
for(j=0;j{
tmp+=B[i][j]*x2[i];
}
x[i]=tmp+f[i];
printf("%lf",x[i]);
}
printf("\n");
}
return0;
}
2014年4月23号
高斯数值积分计算程序
#include
#include
doublegauss(double(*func)(doublex),doublea,doubleb,intn);
intmain()
{
doublefunction_name(double);
doublea,b;
intn;
printf("请输入积分上限b:
\n");
scanf("%lf",&b);
printf("请输入积分下限:
a\n");
scanf("%lf",&a);
printf("请输入积分的点数n:
\n");
scanf("%d",&n);
doubleans;
ans=gauss(function_name,a,b,n);
printf("ans=%lf",ans);
return0;
}
doublegauss(double(*func)(doublex),doublea,doubleb,intn)/*高斯求积*/
{
/*高斯点及其求积系数列表*/
doublex1[1]={0.0};
doubleA1[1]={2};
doublex2[2]={-0.5573503,0.5573503};
doubleA2[2]={1,1};
doublex3[3]={-0.7745967,0.0,0.7745967};
doubleA3[3]={0.555556,0.888889,0.555556};
doublex4[4]={0.3399810,-0.3399810,0.8611363,-0.8611363};
doubleA4[4]={0.6521452,0.6521452,0.3478548,0.3478548};
doublex5[5]={0.0,0.5384693,-0.5384693,0.9061799,-0.9061799};
doubleA5[5]={0.5688889,0.4786287,0.4786287,0.2369269,0.2369269};
double*p,*t;
switch(n)
{
case1:
p=x1;
t=A1;
break;
case2:
p=x2;
t=A2;
break;
case3:
p=x3;
t=A3;
break;
case4:
p=x4;
t=A4;
break;
case5:
p=x5;
t=A5;
break;
default:
printf("intputwrong!
");
}
doubleg=0;
inti;
for(i=0;i{
g+=(*func)((b-a)*p[i]/2+(a+b)/2)*t[i];
}
g*=(b-a)/2;
returng;
}
doublefunction_name(doublex)
{
return(sqrt(x));
}
2014年4月25号
LU分解程序
#include
intmain(intargc,char*argv[])
{
inti,j;
intk;
floats=0;
floatm=0;
intdim;
floatA[100][100];
floatL[100][100];
floatU[100][100];
printf("请输入要分解的初始矩阵的维数:
");
scanf("%d",&dim);
printf("请输入要分解的初始矩阵:
");
for(i=1;i<=dim;i++)
{
for(j=1;j<=dim;j++)
scanf("%f",&A[i][j]);
}
for(i=1;i<=dim;i++)
{
for(j=1;j<=dim;j++)
printf("%f",A[i][j]);
printf("\n");
}
printf("\n");
//LandU
for(i=1;i<=dim;i++)
{
for(j=1;j<=dim;j++)
if(i>j)
{
U[i][j]=0;
}
}
for(i=1;i<=dim;i++)
{
for(j=1;j<=dim;j++)
if(i{
L[i][j]=0;
}
}
for(i=1;i<=dim;i++)
{
for(j=1;j<=dim;j++)
if(i==j)
{
L[i][j]=1;
}
}
for(j=1;j<=dim;j++)
{
U[1][j]=A[1][j];
}
for(i=1;i<=dim;i++)
{
L[i][1]=A[i][1]/U[1][1];
}
//l和U
for(i=2;i<=dim;i++)
{
for(j=i;j<=dim;j++)
{
s=0;
for(k=1;k<=i-1;k++)
s+=L[i][k]*U[k][j];
U[i][j]=A[i][j]-s;
}
for(j=i+1;j<=dim;j++)
{
m=0;
for(k=1;k<=i-1;k++)
m+=L[j][k]*U[k][i];
L[j][i]=(A[j][i]-m)/U[i][i];
}
}
printf("分解以后的矩阵L:
\n");
for(i=1;i<=dim;i++)
{
for(j=1;j<=dim;j++)
{
printf("%f",L[i][j]);
}
printf("\n");
}
printf("\n");
printf("分解以后矩阵U:
\n");
for(i=1;i<=dim;i++)
{
for(j=1;j<=dim;j++)
{
printf("%f",U[i][j]);
}
printf("\n");
}
return0;
}