哈工大材料力学上机作业.docx
《哈工大材料力学上机作业.docx》由会员分享,可在线阅读,更多相关《哈工大材料力学上机作业.docx(31页珍藏版)》请在冰豆网上搜索。
![哈工大材料力学上机作业.docx](https://file1.bdocx.com/fileroot1/2023-2/1/52654341-46ad-4c7c-8e9b-8b6cee06dcfe/52654341-46ad-4c7c-8e9b-8b6cee06dcfe1.gif)
哈工大材料力学上机作业
哈尔滨工业大学
材料力学计算机作业
姓名:
XX
班级:
XXXXXXX
学号:
XXXXXXXXXX
材料力学计算机作业
1.一个力作用下的任意截面的弯矩,挠度。
#include
#include
voidmain()
{
doubleM,l,a,x,v,E,I,F;
charch;
ST1:
printf("请输入长度l(单位:
m):
");
scanf("%lf",&l);
printf("请输入长度a(单位:
m):
");
scanf("%lf",&a);
printf("请输入弹性模量E(单位:
GPa):
");
scanf("%lf",&E);
printf("请输入极惯性矩I(单位:
m^4):
");
scanf("%lf",&I);
printf("请输入力F(单位:
KN):
");
scanf("%lf",&F);
ST2:
printf("请输入x(单位:
m):
");
scanf("%lf",&x);
if(x>=0&&x<=a)
{
M=F*(l-a)*x/l;
v=(-F*(l-a)*x*(l*l-x*x-pow(l-a,2))/(6*E*I*l))*1e-3;
printf("Mz=%fKN*m\n",M);
printf("v=%fmm\n",v);
}
elseif(x>a&&x<=l)
{
M=F*a*(l-x)/l;
v=(-F*(l-a)*(l/(l-a)*pow(x-a,3)+(l*l-pow(l-a,2))*x-x*x*x)/(6*E*I*l))*1e-3;
printf("Mz=%fKN*m\n",M);
printf("v=%fmm\n",v);
}
else
{
printf("溢出\n");
}
printf("是否计算其他截面(y/n):
");
scanf("%c",&ch);
if(ch=='y')gotoST2;
printf("是否重新输入参数(y/n):
");
scanf("%c",&ch);
if(ch=='y')gotoST1;
}
运行界面:
2.一个力偶作用下的任意截面的弯矩,挠度。
#include
#include
main()
{
doubleM,l,E,I,a,b,x,v,Mz;
charch;
ST1:
printf("请输入长度l(单位m):
");
scanf("%lf",&l);
printf("请输入长度a(单位m):
");
scanf("%lf",&a);
printf("请输入弹性模量E(单位GPa):
");
scanf("%lf",&E);
printf("请输入极惯性矩I(单位m^4):
");
scanf("%lf",&I);
printf("请输入弯矩M(单位Nm):
");
scanf("%lf",&M);
ST2:
printf("请输入x(单位m):
");
scanf("%lf",&x);
b=l-a;
if(x>=0&&x<=a)
{
Mz=M*x/l;
v=(M*x*(l*l-3*b*b-x*x)/(6*E*I*l))*1e-6;
printf("Mz=%fNm\n",Mz);
printf("v=%fmm\n",v);
}
elseif(x>a&&x<=l)
{
Mz=M*(l-x)/l;
v=(M*(-x*x*x+3*l*(x-a)*(x-a)+(l*l-3*b*b)*x))*1e-6;
printf("Mz=%fNm\n",Mz);
printf("v=%fmm\n",v);
}
else
{
printf("溢出\n");
}
printf("是否计算其他截面(y/n):
");
scanf("%c",&ch);
if(ch=='y')gotoST2;
printf("是否重新输入参数(y/n):
");
scanf("%c",&ch);
if(ch=='y')gotoST1;
}
运行界面:
3.一段分布力作用下的任意截面的弯矩挠度。
#include
#include
doubleqy(doublex,doubley);
voidmain()
{
charch;
doubleq,l,a,c,d,x,E,I,v,Mz;
doubleC,D,Ea;
doubleFR1,FR2;
ST1:
printf("请输入长度l(单位m):
");
scanf("%lf",&l);
printf("请输入弹性模量E(单位GPa):
");
scanf("%lf",&E);
printf("请输入极惯性矩(单位m^4):
");
scanf("%lf",&I);
printf("请输入分布力q(单位N/m):
");
scanf("%lf",&q);
printf("请输入长度a(单位m):
");
scanf("%lf",&a);
printf("请输入长度c(单位m):
");
scanf("%lf",&c);
ST2:
printf("请输入位置x(单位m):
");
scanf("%lf",&x);
d=a+c;
C=qy(x,a);
D=qy(x,d);
FR2=(-q*(d*d-a*a)/2)/l;
FR1=-q*c-FR2;
Ea=-(FR1*pow(l,3)/6-q*pow(l-a,4)/24+q*pow(l-d,4)/24)/E/I/l;
Mz=(FR1*x-0.5*q*C*C+0.5*q*D*D);
v=((FR1*pow(x,3)/6-q*pow(C,4)/24+q*pow(D,4)/24)/E/I+Ea*x)*1e-6;
printf("截面的弯矩为%fNm\n",Mz);
printf("截面的挠度为%fmm\n",v);
printf("是否计算其他截面(y/n):
");
scanf("%c",&ch);
if(ch=='y')gotoST2;
printf("是否重新输入参数(y/n):
");
scanf("%c",&ch);
if(ch=='y')gotoST1;
}
doubleqy(doublex,doubley)
{
if(x<=y)
return0;
if(x>y)
returnx-y;
}
运行界面:
4.n个力共同作用下的任意截面的弯矩,挠度。
#include
#include
main()
{
doubleMzs,l,x,vs,E,I,F[10],a[10],Mz[10],v[10];
inti,nF;
charch;
ST1:
printf("请输入长度l(单位m):
");
scanf("%lf",&l);
printf("请输入弹性模量E(单位GPa):
");
scanf("%lf",&E);
printf("请输入极惯性矩I(单位m^4):
");
scanf("%lf",&I);
printf("请输入集中载荷F的数量n:
");
scanf("%d",&nF);
printf("请输入集中载荷F的值(单位KN)和位置a(单位m):
\n");
for(i=0;i{
scanf("%lf,%lf",&F[i],&a[i]);
}
ST2:
printf("请输入位置x(单位m):
");
scanf("%lf",&x);
Mzs=0;
vs=0;
for(i=0;i{
if(x>=0&&x<=a[i])
{
Mz[i]=F[i]*(l-a[i])*x/l;
v[i]=(-F[i]*(l-a[i])*x*(l*l-x*x-pow(1-a[i],2))/(6*E*I*l))*1e-3;
}
elseif(x>a[i]&&x<=l)
{
Mz[i]=F[i]*a[i]*(l-x)/l;
v[i]=(-F[i]*(l-a[i])*(l/(l-a[i])*pow(x-a[i],3)+(l*l-pow(1-a[i],2))*x-pow(x,3))/(6*E*I*l))*1e-3;
}
Mzs=Mzs+Mz[i];
vs=vs+v[i];
}
printf("截面的弯矩为%fNm\n",Mzs);
printf("截面的挠度为%fmm\n",vs);
printf("是否计算其他截面(y/n):
");
scanf("%c",&ch);
if(ch=='y')gotoST2;
printf("是否重新输入参数(y/n):
");
scanf("%c",&ch);
if(ch=='y')gotoST1;
}
运行界面:
5.n个力偶共同作用作用下的任意截面的弯矩,挠度。
#include
#include
main()
{
charch;
doubleMz[10],l,b[10],x,v[10],E,I,M[10],Mzs,vs;
inti,nM;
ST1:
printf("请输入长度l(单位m):
");
scanf("%lf",&l);
printf("请输入弹性模量E(单位GPa):
");
scanf("%lf",&E);
printf("请输入极惯性矩I(单位m^4):
");
scanf("%lf",&I);
printf("请输入外力偶M的个数n:
");
scanf("%d",&nM);
printf("请输入外力偶值(单位Nm)和位置b(单位m):
\n");
for(i=0;i{
scanf("%lf,%lf",&M[i],&b[i]);
}
ST2:
printf("请输入位置x(单位m):
\n");
scanf("%lf",&x);
Mzs=0;
vs=0;
for(i=0;i{
if(x>=0&&x<=b[i])
{
Mz[i]=M[i]*x/l;
v[i]=(M[i]*x*(l*l-3*(l-b[i])*(l-b[i])-x*x)/(6*E*I*l))*1e-6;
}
elseif(x>b[i]&&x<=l)
{
Mz[i]=M[i]*(l-x)/l;
v[i]=(M[i]*(-x*x*x+3*l*(x-b[i])*(x-b[i])+(l*l-3*(l-b[i])*(l-b[i]))*x))*1e-6;
}
Mzs=Mzs+Mz[i];
vs=vs+v[i];
}
printf("截面的弯矩为%fNm\n",Mzs);
printf("截面的挠度为%fmm\n",vs);
printf("是否计算其他截面(y/n):
");
scanf("%c",&ch);
if(ch=='y')gotoST2;
printf("是否重新输入参数(y/n):
");
scanf("%c",&ch);
if(ch=='y')gotoST1;
}
运行界面:
6.m段分布力共同作用下的任意截面的弯矩,挠度。
运行界面:
#include
#include
doubleqy(doublex,doubley);
doubleq()
{
doubleMzs,vs;
inti;
Mzs=0;
vs=0;
for(i=0;i{
d3[i]=a3[i]+c3[i];
C[i]=qy(x,a3[i]);
D[i]=qy(x,d3[i]);
FR2[i]=(-q[i]*(d3[i]*d3[i]-a3[i]*a3[i])/2)/l;
FR1[i]=-q[i]*(d3[i]-a[i])-FR2[i];
Ec[i]=-(FR1[i]*pow(l,3)/6-q[i]*pow(l-a3[i],4)/24+q[i]*pow(l-d3[i],4)/24)/E/I/l;
Mz[i]=(FR1[i]*x-0.5*q[i]*C[i]*C[i]+0.5*q[i]*D[i]*D[i]);
v[i]=((FR1[i]*pow(x,3)/6-q[i]*pow(C[i],4)/24+q[i]*pow(D[i],4)/24)/E/I+Ec[i]*x)*1e-6;
Mzs=Mzs+Mz[i];
vs=vs+v[i];
}
returnMzs,vs;
}
doubleqy(doublex,doubley)
{
if(x<=y)
return0;
if(x>y)
returnx-y;
}
7.n个力,h个力偶,m段分布力共同作用下的任意截面的弯矩,挠度。
C语言程序代码:
#include
#include
intnM,nF,nq,i;
doubleF[10],M[10],q[10];
doublel,E,I,Mzf,Mzm,Mzq,vf,vm,vq,x;
doublea1[10],a2[10],a3[10],c3[10],d3[10];
doubleqy(doublex,doubley);
voidinput();
voidFs();
voidMs();
voidqs();
main()
{
charch;
ST1:
input();
ST2:
printf("请输入任一截面横坐标x(单位m):
");
scanf("%lf",&x);
Fs();
Ms();
qs();
printf("截面的弯矩为%fNm\n",Mzf+Mzm+Mzq);
printf("截面的挠度为%fmm\n",vf+vm+vq);
printf("是否计算其他截面(y/n):
");
scanf("%c",&ch);
if(ch=='y')gotoST2;
printf("是否重新输入参数(y/n):
");
scanf("%c",&ch);
if(ch=='y')gotoST1;
}
doubleqy(doublex,doubley)
{
if(x<=y)
return0;
if(x>y)
returnx-y;
}
voidinput()
{
printf("请输入长度l(单位m):
");
scanf("%lf",&l);
printf("请输入弹性模量E(单位GPa):
");
scanf("%lf",&E);
printf("请输入极惯性矩I(单位m^4):
");
scanf("%lf",&I);
printf("请输入集中载荷F的个nF:
");
scanf("%d",&nF);
printf("请输入集中载荷F的值(单位KN)和位置a(单位m):
\n");
for(i=0;i{
scanf("%lf,%lf",&F[i],&a1[i]);
}
printf("请输入外力偶M的个数nM:
");
scanf("%d",&nM);
printf("请输入外力偶值(单位Nm)和位置a(单位m):
\n");
for(i=0;i{
scanf("%lf,%lf",&M[i],&a2[i]);
}
printf("请输入均匀分布力的个数nq:
");
scanf("%d",&nq);
printf("请输入分布力q的值(单位N/m)和位置a,c(单位m):
\n");
for(i=0;i{
scanf("%lf,%lf,%lf",&q[i],&a3[i],&c3[i]);
}
}
voidFs()
{
inti;
doubleMz[10],v[10];
Mzf=0;
vf=0;
for(i=0;i{
if(x>=0&&x<=a1[i])
{
Mz[i]=F[i]*(l-a1[i])*x/l;
v[i]=(-F[i]*(l-a1[i])*x*(l*l-x*x-pow(1-a1[i],2))/(6*E*I*l))*1e-3;
}
elseif(x>a1[i]&&x<=l)
{
Mz[i]=F[i]*a1[i]*(l-x)/l;
v[i]=(-F[i]*(l-a1[i])*(l/(l-a1[i])*pow(x-a1[i],3)+(l*l-pow(1-a1[i],2))*x-pow(x,3))/(6*E*I*l))*1e-3;
}
Mzf=Mzf+Mz[i];
vf=vf+v[i];
}
}
voidMs()
{
inti;
doubleMz[10],v[10];
Mzm=0;
vm=0;
for(i=0;i{
if(x>=0&&x<=a2[i])
{
Mz[i]=M[i]*x/l;
v[i]=(M[i]*x*(l*l-3*(l-a2[i])*(l-a2[i])-x*x)/(6*E*I*l))*1e-6;
}
elseif(x>a2[i]&&x<=l)
{
Mz[i]=M[i]*(l-x)/l;
v[i]=(M[i]*(-x*x*x+3*l*(x-a2[i])*(x-a2[i])+(l*l-3*(l-a2[i])*(l-a2[i]))*x))*1e-6;
}
Mzm=Mzm+Mz[i];
vm=vm+v[i];
}
}
voidqs()
{
inti;
doubleMz[10],v[10],Ec[10],FR1[10],FR2[10],C[10],D[10];;
Mzq=0;
vq=0;
for(i=0;i{
d3[i]=a3[i]+c3[i];
C[i]=qy(x,a3[i]);
D[i]=qy(x,d3[i]);
FR2[i]=(-q[i]*(d3[i]*d3[i]-a3[i]*a3[i])/2)/l;
FR1[i]=-q[i]*(d3[i]-a3[i])-FR2[i];
Ec[i]=-(FR1[i]*pow(l,3)/6-q[i]*pow(l-a3[i],4)/24+q[i]*pow(l-d3[i],4)/24)/E/I/l;
Mz[i]=(FR1[i]*x-0.5*q[i]*C[i]*C[i]+0.5*q[i]*D[i]*D[i]);
v[i]=((FR1[i]*pow(x,3)/6-q[i]*pow(C[i],4)/24+q[i]*pow(D[i],4)/24)/E/I+Ec[i]*x)*1e-6;
Mzq=Mzq+Mz[i];
vq=vq+v[i];
}
}
运行界面:
8.n个力,h个力偶,m段分布力共同作用下的最大弯矩,最大挠度。
C语言程序代码:
#include
#include
intnM,nF,nq,i;
doubleF[10],M[10],q[10],x[500],Mzs[500],vs[500];
doublel,E,I,Mzf,Mzm,Mzq,vf,vm,vq;
doublea1[10],a2[10],a3[10],c3[10],d3[10];
doubleqy(doublex,doubley);
voidinput();
voidFs();
voidMs();
voidqs();
main()
{
charch;
doubleMzmax,xmm,vmax,xvm;
ST:
input();
for(i=0;i<=500;i++)
{
x[i]=(double)(l/500*i);
Fs(x[i]);
Ms(x[i]);
qs(x[i]);
Mzs[i]=Mzf+Mzm+Mzq;
vs[i]=vf+vm+vq;
}
Mzmax=Mzs[0];
xmm=0;
vmax=vs[0];
xvm=0;
for(i=0;i<=500;i++)
{
if(Mzmax{
Mzmax=Mzs[i];
xmm=i;
}
if(vmax{
vmax=vs[i];
xvm=i;
}
}
xmm=(double)(xmm*l/500);
xvm=(double)(xvm*l/500);
printf("最大弯矩为Mzmax=%fNm\n",Mzmax);
printf("最大弯矩所在位置为%fm\n",xmm);
printf("最大挠度为vmax=%fmm\n",vmax);
printf("最大挠度所在位置为%fm\n",xmm);
printf("是否重新输入参数(y/n):
");
scanf("%c",&ch);
if(ch=='y')gotoST;
}
doubleqy(doublex,doubley)
{
if(x<=y)
return0;
if(x>y)
returnx-y;
}
voidinput()
{
printf("请输入长度l(单位m):
");
scanf("%lf",&l);
printf("请输入弹性模量E(单位GPa):
");
scanf("%lf",&E);
printf("请输入极惯性矩I(单位m^4):
");
scanf("%lf",&I);
printf("请输入集中载荷F的个nF:
");
scanf("%d",&nF);
printf("请输入集中载荷F的值(单位KN)和位置a(单位m):
\n");
for(i=0;i{
scanf("%lf,%lf",&F[i],&a1[i]);
}
printf("请输入外力偶M的个数nM:
");
scanf("%d",&nM);
printf("请输入外力偶值(单位Nm)和位置a(单位m):
\n");
for(i=0;i{
scanf("%lf,%lf",&M[i],&a2[i]);
}
printf("请输入均匀分