1、材料力学实验报告 材料力学上机作业 姓名:林海奇 班级:1236005 学号:6121820510 哈尔滨工业大学2013年12月 此程序可计算在n个力、n个力偶以及n段分布力作用下悬臂梁上任意一点的挠度、转角、弯矩和剪切力。 运行此程序时,需在程序中输入已知杆的EI和杆的长度。然后输入集中力、均布力、力偶的个数、大小、位置;最后输入位置坐标x,即可计算在x点的挠度、转角、弯矩和剪切力。(均采用国际单位制)C语言程序代码:#include #include #include #define N 10#define N5 10000int InputFix(double disforce4,do
2、uble conforce2,double moment2,int *pN1,int *pN2,int *pN3,double *plength,double *pEI);/输入数据函数int Dengxiaodis(double disforce4,double kb2,double dengxiaoli2,int *pN2);/计算等效力函数int CalculateFix(double disforce4,double conforce2,double moment2,double kb2,double dengxiaoli2, int *pN1,int *pN2,int *pN3,do
3、uble *plength,double *pEI);/计算函数int main() double disforceN4;/均布力起点大小终点大小,起点位置终点位置 double conforceN2;/集中力(位置,大小) double momentN2;/力偶 double kbN2;/deposit every k and b of the distribute force double dengxiaoliN2;/deposit force of 位置和大小 int N1=0;/number of constrate forces int N2=0;/number of distrib
4、ute forces int N3=0;/number of moments double EI=0; double length=0;/杆长 InputFix(disforce,conforce,moment,&N1,&N2,&N3,&length,&EI); Dengxiaodis(disforce,kb,dengxiaoli,&N2); CalculateFix(disforce,conforce,moment,kb,dengxiaoli,&N1,&N2,&N3,&length,&EI); return 0;int InputFix(double disforce4,double con
5、force2,double moment2,int *pN1,int *pN2,int *pN3,double *plength,double *pEI) int i,j; double EI; double length; int N1,N2,N3; printf(请输入EI:); scanf(%lf,&EI); *pEI=EI; printf(请输入杆的长度: ); scanf(%lf,&length); *plength=length; printf(请输入集中力的个数:); scanf(%d,&N1); *pN1=N1; if(N10) printf(请输入集中力的参数(位置,大小):
6、); for(i=0; iN1; i+) for(j=0; j0) printf(请输入分布力的参数:(起点大小,终点大小,起点位置,终点位置); for(i=0; iN2; i+) for(j=0; j0) printf(请输入力偶的参数:(位置,大小)); for(i=0; iN3; i+) for(j=0; j2; j+) scanf(%lf,&momentij); return 0;int Dengxiaodis(double disforce4,double kb2,double dengxiaoli2,int *pN2) int geshu; int i; double k;/力系
7、斜率 double b; double q1,q2,x1,x2; geshu=*pN2; for(i=0; igeshu; i+) q1=disforcei0; q2=disforcei1; x1=disforcei2; x2=disforcei3; dengxiaolii1=(q1+q2)*(x2-x1)/2;/大小 kbi0=(q2-q1)/(x2-x1); k=kbi0; kbi1=q1-k*x1; b=kbi1; dengxiaolii0=(2*k*(pow(x2,3)-pow(x1,3)+3*b*(pow(x2,2)-pow(x1,2)/6/dengxiaolii1;/位置 retu
8、rn 0;int CalculateFix(double disforce4,double conforce2,double moment2,double kb2,double dengxiaoli2, int *pN1,int *pN2,int *pN3,double *plength,double *pEI) double x;/用户输入需要求的点在坐标位置 double RA=0,MA=0; double Vx=0; double Mx=0; double angle=0; double vx=0;/挠度 double x1,x2;/均布力的起点和终点 double xi;/xi的坐标
9、double mx;/表示X的每一个小块 double f;/均布力分成N份后,每一个力的大小 double k,b; int i,j; int n1,n2,n3; double length; double EI; int biaozhi1=0;/判断x是否在军部力之间 printf(请输入求解的点在坐标: ); scanf(%lf,&x); printf(n); n1=*pN1; n2=*pN2; n3=*pN3; length=*plength; EI=*pEI; for(i=0; in1; i+) RA=RA+conforcei1; for(i=0; in2; i+) RA=RA+de
10、ngxiaolii1; RA=(-1)*RA;/ for(i=0; in3; i+) MA+=momenti1; for(i=0; in1; i+) /集中力 MA-=conforcei0*conforcei1; for(i=0; in2; i+) /均布力 MA-=dengxiaolii1*dengxiaolii0; MA=(-1)*MA;/求 Vx的部分 for(i=0; idisforcei2)&(xdisforcei3) biaozhi1=1;/在均布力之间. break; if(biaozhi1=0)/力既不在军部力默认力为右连续 Vx-=RA; for(i=0; iconforce
11、i0) Vx-=conforcei1; else break ; for(i=0; i=disforcei3) Vx-=dengxiaolii1; else break; printf(V(x)=%lf,Vx); printf(n); else /力在军部力之间 Vx-=RA; for(i=0; iconforcei0) Vx-=conforcei1; else break ; for(i=0; i=disforcei3) Vx-=dengxiaolii1; else break; Vx=Vx-(kbi0*x+kbi1+disforcei0)*(x-disforcei2)/2; printf(V(x)=%lf,Vx); printf(n); 求Mx的部分 Mx-=MA; Mx-=RA*x; if (biaozhi1=0)/力不再均布力之间 for(i=0; iconforcei0) Mx-=conforcei1*(x-conforcei0); else break ; for(i=0; imomenti0) Mx-=momenti1; else break; for(i=0; i=disforcei3) Mx-=dengxiaolii1*(x-dengxiaolii0); else bre
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1