哈工大材料力学上机实验悬臂梁弯矩挠度 c语言完美整合.docx

上传人:b****5 文档编号:7182395 上传时间:2023-01-21 格式:DOCX 页数:36 大小:119.78KB
下载 相关 举报
哈工大材料力学上机实验悬臂梁弯矩挠度 c语言完美整合.docx_第1页
第1页 / 共36页
哈工大材料力学上机实验悬臂梁弯矩挠度 c语言完美整合.docx_第2页
第2页 / 共36页
哈工大材料力学上机实验悬臂梁弯矩挠度 c语言完美整合.docx_第3页
第3页 / 共36页
哈工大材料力学上机实验悬臂梁弯矩挠度 c语言完美整合.docx_第4页
第4页 / 共36页
哈工大材料力学上机实验悬臂梁弯矩挠度 c语言完美整合.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

哈工大材料力学上机实验悬臂梁弯矩挠度 c语言完美整合.docx

《哈工大材料力学上机实验悬臂梁弯矩挠度 c语言完美整合.docx》由会员分享,可在线阅读,更多相关《哈工大材料力学上机实验悬臂梁弯矩挠度 c语言完美整合.docx(36页珍藏版)》请在冰豆网上搜索。

哈工大材料力学上机实验悬臂梁弯矩挠度 c语言完美整合.docx

哈工大材料力学上机实验悬臂梁弯矩挠度c语言完美整合

HarbinInstituteofTechnology

课程设计

 

课程名称:

材料力学

设计题目:

悬臂梁的弯矩及挠度

院系:

机电工程学院

班级:

设计者:

学号:

设计时间:

指导老师:

哈尔滨工业大学

一问题描述:

在悬臂梁条件下,进行材料选取或者探究某材料是否满足设计和使用要求时,如果能够快速计算出材料任意截面的弯矩和挠度,乃至于整体的最大弯矩,最大挠度,则可以起到事半功倍的效果。

为此,我设计了这个c语言程序。

这个c语言程序有以下两个特点:

(1)界面比较友善,可以根据实际要求,具体选择计算的方式。

(2)计算迅速,占用空间小,简单实用,适用面广。

二界面展示及源代码:

(1)主界面:

图一:

主选择界面

这个界面的最显著的特点是:

界面较为友好,清晰;而且用户可以根据实际情况具体选择运用哪种方法进行计算。

具体的选项:

1-8都有文字标注,选择只需输入数字,然后回车便可出现下一步的具体提示。

(2)1:

计算一个力作用下的任意截面的弯矩,挠度:

【1】源代码:

#include

#include

doubleMz,l,a,x,v,E,I,b,F;

main()

{

printf("请输入长度l\n");

scanf("%lf",&l);

printf("请输入长度a\n");

scanf("%lf",&a);

printf("请输入弹性模量E\n");

scanf("%lf",&E);

printf("请输入极惯性矩I\n");

scanf("%lf",&I);

printf("请输入力F\n");

scanf("%lf",&F);

printf("请输入x\n");

scanf("%lf",&x);

b=l-a;

if(x>0&&x

{

Mz=F*(l-a)*x/l;

v=-F*b*x*(l*l-x*x-b*b)/(6*E*I*l);

printf("Mz=%f\n",Mz);

printf("v=%f\n",v);

}

elseif(x>a&&x

{

Mz=F*a*(l-x)/l;

v=-F*b*(l/b*pow(x-a,3)+(l*l-b*b)*x-x*x*x)/(6*E*I*l);

printf("Mz=%f\n",Mz);

printf("v=%f\n",v);

}

else

{

printf("數值溢出\n");

}

}

【2】检验数据:

条件:

L=1m,E=4.5GPa。

I=0.0001m4

,F=1000N,a=0.6m,x=0.3m;

理论运算结果:

Mz=120Nm

V=-0.000033m

【3】程序运行结果:

图二:

程序一运行

结论:

运行结果与理论运算结果相同,可以使用。

(3)一个力偶作用下的任意截面的弯矩,挠度。

【1】源代码:

#include

#include

doubleMz,l,a,x,v,E,I,b,M;

main()

{

printf("请输入长度l\n");

scanf("%lf",&l);

printf("请输入长度a\n");

scanf("%lf",&a);

printf("请输入弹性模量E\n");

scanf("%lf",&E);

printf("请输入极惯性矩I\n");

scanf("%lf",&I);

printf("请输入弯矩M\n");

scanf("%lf",&M);

printf("请输入x\n");

scanf("%lf",&x);

b=l-a;

if(x>0&&x

{

Mz=M*x/l;

v=M*x*(l*l-3*b*b-x*x)/(6*E*I*l);

printf("Mz=%f\n",Mz);

printf("v=%f\n",v);

}

elseif(x>a&&x

{

Mz=M*(l-x)/l;

v=M*(-x*x*x+3*l*(x-a)*(x-a)+(l*l-3*b*b)*x);

printf("Mz=%f\n",Mz);

printf("v=%f\n",v);

}

else

{

printf("數值溢出\n");

}

}

【2】检验数据:

条件:

L=1m,E=4.5GPa。

I=0.0001

m4,M=1000Nm,a=0.6m,x=0.3m;

理论计算结果:

Mz=300.00Nm

V=0.000048m

【3】程序运行结果:

图三:

程序一运行

结论:

运行结果与理论运算结果相同,可以使用。

(4)一段分布力作用下的任意截面的弯矩挠度:

【1】源代码:

#include

#include

doubleq,l,c,d,x,E,I,v,Mz;

doubleC,D,Ec,Fc;

doubleFR1,FR2;

/*函数功能:

奇异函数*/

doubleqiyi(doublex,doubley)

{

if(x<=y)

return0;

if(x>y)

returnx-y;

}

main()

{

printf("请输入长度l\n");

scanf("%lf",&l);

printf("请输入弹性模量E\n");

scanf("%lf",&E);

printf("请输入极惯性矩I\n");

scanf("%lf",&I);

printf("请输入分布力q\n");

scanf("%lf",&q);

printf("请输入长度c\n");

scanf("%lf",&c);

printf("请输入长度d\n");

scanf("%lf",&d);

printf("请输入x\n");

scanf("%lf",&x);

C=qiyi(x,c);

D=qiyi(x,d);

FR2=(-q*(d*d-c*c)/2)/l;//求支反力

FR1=-q*(d-c)-FR2;

Ec=-(FR1*pow(l,3)/6-q*pow(l-c,4)/24+q*pow(l-d,4)/24)/E/I/l;

Fc=0;

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+Ec*x;

printf("截面的弯矩为:

%f\n",Mz);

printf("截面的挠度为:

%f\n",v);

}

【2】检验数据:

c,d为q作用的起止长度坐标。

条件:

L=1m,E=4.5GPa。

I=0.0001m4,q=1000N/m,c=0.6m,d=0.8m,x=0.3m;

理论计算结果:

Mz=-18Nm

V=0.000007m

【3】程序运行结果:

图三:

程序一运行

结论:

运行结果与理论运算结果相同,可以使用。

(5)n个力共同作用下的任意截面的弯矩,挠度:

【1】源代码;

#include

#include

doubleMzs,l,a[10],x,vs,E,I,F[10],Mz[10],v[10];

inti,nF;

main()

{

printf("请输入长度l\n");

scanf("%lf",&l);

printf("请输入弹性模量E\n");

scanf("%lf",&E);

printf("请输入极惯性矩I\n");

scanf("%lf",&I);

printf("请输入集中载荷F的个nF:

");

scanf("%d",&nF);

printf("请输入集中载荷F的值和位置a:

");

for(i=0;i

{

scanf("%lf%lf",&F[i],&a[i]);

}

printf("请输入x\n");

scanf("%lf",&x);

for(i=0;i

{

if(x>0&&x

{

Mz[i]=F[i]*(l-a[i])*x/l;

v[i]=-F[i]*(l-a[i])*x*(l*l-x*x-(l-a[i])*(l-a[i]))/(6*E*I*l);

}

elseif(x>a[i]&&x

{

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-(l-a[i])*(l-a[i]))*x-x*x*x)/(6*E*I*l);

}

Mzs=Mzs+Mz[i];

vs=vs+v[i];

}

printf("截面的弯矩为%f",Mzs);

printf("截面的挠度为%f",vs);

}

【2】检验数据:

a[n]为F[n]的作用位置坐标。

条件:

L=1m,E=4.5GPa。

I=0.0001m4,F[1]=1000N,F[2]=2000N,a[1]=0.6m,a[2]=0.8m,x=0.4m;

理论计算结果:

Mz=320.00NmV=-0.000088m

【3】程序运行结果:

结论:

运行结果与理论运算结果相同,可以使用。

(6)h个力偶共同作用作用下的任意截面的弯矩,挠度:

【1】源代码:

#include

#include

doubleMz[10],l,b[10],x,v[10],E,I,M[10],Mzs,vs;

inti,nM;

main()

{

printf("请输入长度l\n");

scanf("%lf",&l);

printf("请输入弹性模量E\n");

scanf("%lf",&E);

printf("请输入极惯性矩I\n");

scanf("%lf",&I);

printf("请输入外力偶M的个数nM");

scanf("%d",&nM);

printf("请输入外力偶值和位置b:

");

 

for(i=0;i

{

scanf("%lf%lf",&M[i],&b[i]);

}

printf("请输入x\n");

scanf("%lf",&x);

for(i=0;i

{

if(x>0&&x

{

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);

}

elseif(x>b[i]&&x

{

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);

}

Mzs=Mzs+Mz[i];

vs=vs+v[i];

}

printf("截面的弯矩为%f",Mzs);

printf("截面的挠度为%f",vs);

}

【2】检验数据:

条件:

L=1m,E=4.5GPa。

I=0.0001

m4,M[1]=1000Nm,M[2]=2000Nm,b[1]=0.6m,b[2]=0.7m,x=0.3m;

理论计算结果:

Mz=900.00Nm

V=0.00019m

【3】程序运行结果:

  结论:

运行结果与理论运算结果相同,可以使用。

(7)m段分布力共同作用下的任意截面的弯矩,挠度:

【1】源代码:

#include

#include

doubleq[10],l,c[10],d[10],x,E,I,v[10],Mz[10],Mzs,vs;

doubleC[10],D[10],Ec[10],Fc[10];

doubleFR1[10],FR2[10];

inti,nq;

doubleqiyi(doublex,doubley)

{

if(x<=y)

return0;

if(x>y)

returnx-y;

}

main()

{

printf("请输入长度l\n");

scanf("%lf",&l);

printf("请输入弹性模量E\n");

scanf("%lf",&E);

printf("请输入极惯性矩I\n");

scanf("%lf",&I);

printf("请输入均布力的个数nq");

scanf("%d",&nq);

printf("请输入分布力q的值和位置c,d:

");

for(i=0;i

{

scanf("%lf%lf%lf",&q[i],&c[i],&d[i]);

}

printf("请输入x\n");

scanf("%lf",&x);

for(i=0;i

{

C[i]=qiyi(x,c[i]);

D[i]=qiyi(x,d[i]);

FR2[i]=(-q[i]*(d[i]*d[i]-c[i]*c[i])/2)/l;//求支反力

FR1[i]=-q[i]*(d[i]-c[i])-FR2[i];

Ec[i]=-(FR1[i]*pow(l,3)/6-q[i]*pow(l-c[i],4)/24+q[i]*pow(l-d[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;

Mzs=Mzs+Mz[i];

vs=vs+v[i];

}

printf("截面的弯矩为%f",Mzs);

printf("截面的挠度为%f",vs);

}

【2】检验数据:

条件:

L=1m,E=4.5GPa。

I=0.0001

m4,q[1]=1000Nm,q[2]=2000Nm,c[1]=0.4m,c[2]=0.5m,d[1]=0.6m,d[2]=0.7m,x=0.4m;

理论计算结果:

Mz=-78Nm

V=0.000032m

【3】程序运行结果:

结论:

运行结果与理论运算结果相同,可以使用。

(8)n个力,h个力偶,m段分布力共同作用下的任意截面的弯矩,挠度:

【1】源代码:

#include

#include

doubleF[10],M[10],q[10];//定义各个载荷大小的数组

doubleMz[10],v[10],l,E,I,Mzs,vs,Mzmax,vmax,Mzmin,vmin;//定义杆的基本参数

doublea[10],b[10],c[10],d[10];//定义各个载荷的横坐标

doubleA[10],B[10],C[10],D[10];//定义奇异函数中间变量

doubleEc[10],Fc[10];//定义积分常数

doublex;//定义任一截面横坐标

doubleFR1[10],FR2[10];//定义支反力FR1,FR2

inti,Q;//定义循环变量

intnM,nF,nq,nn;//定义载荷个数

/*函数功能:

奇异函数*/

doubleqiyi(doublex,doubley)

{

if(x<=y)

return0;

if(x>y)

returnx-y;

}

voidps()

{

printf("请输入长度l\n");

scanf("%lf",&l);

printf("请输入弹性模量E\n");

scanf("%lf",&E);

printf("请输入极惯性矩I\n");

scanf("%lf",&I);

printf("请输入集中载荷F的个nF:

");

scanf("%d",&nF);

printf("请输入集中载荷F的值和位置a:

");

for(i=0;i

{

scanf("%lf%lf",&F[i],&a[i]);

}

printf("请输入外力偶M的个数nM");

scanf("%d",&nM);

printf("请输入外力偶值和位置b:

");

for(i=0;i

{

scanf("%lf%lf",&M[i],&b[i]);

}

printf("请输入均布力的个数nq");

scanf("%d",&nq);

printf("请输入分布力q的值和位置c,d:

");

for(i=0;i

{

scanf("%lf%lf%lf",&q[i],&c[i],&d[i]);

}

printf("请输入任一截面横坐标x\n");

scanf("%lf",&x);

nn=nF;//找到最大载荷数

if(nM>nn)

nn=nM;

if(nq>nn)

nn=nq;

}

main()

{

ps();//初始数据输入

for(i=0;i

{

A[i]=qiyi(x,a[i]);

B[i]=qiyi(x,b[i]);

C[i]=qiyi(x,c[i]);

D[i]=qiyi(x,d[i]);

FR2[i]=(M[i]-F[i]*a[i]-q[i]*(d[i]*d[i]-c[i]*c[i])/2)/l;//求支反力

FR1[i]=-(F[i]+q[i]*(d[i]-c[i]))-FR2[i];

Ec[i]=-((M[i]*pow((l-b[i]),2)/2+F[i]*pow((l-a[i]),3)/6+FR1[i]*pow(l,3)/6-q[i]*pow(l-c[i],4)/24+q[i]*pow(l-d[i],4)/24))/E/I/l;//求积分常数

if(x<=b[i])Q=0;

if(x>b[i])Q=1;

Mz[i]=(M[i]*Q+F[i]*A[i]+FR1[i]*x)-q[i]*pow(C[i],2)/2+q[i]*pow(D[i],2)/2;

v[i]=(M[i]*pow(B[i],2)/2+F[i]*pow(A[i],3)/6+FR1[i]*pow(x,3)/6)/(E*I)-(q[i]*pow(C[i],4)/24-q[i]*pow(D[i],4)/24)/(E*I)+Ec[i]*x;

Mzs=Mzs+Mz[i];

vs=vs+v[i];}

printf("截面的弯矩为%f",Mzs);

printf("截面的挠度为%f",vs);

}

【2】检验数据:

条件:

L=1m,E=4.5GPa。

I=0.0001

,F[1]=1000N,F[2]=2000N,a[1]=0.6m,a[2]=0.8m,M[1]=1000Nm,M[2]=2000Nm,b[1]=0.6m,b[2]=0.8mq[1]=1000Nm,q[2]=2000Nm,c[1]=0.4m,c[2]=0.5m,d[1]=0.6m,d[2]=0.7m,x=0.4m;

理论计算结果:

Mz=-1570.00NmV=0.00037m

【3】程序运行结果:

结论:

运行结果与理论运算结果相同,可以使用。

(9)n个力,h个力偶,m段分布力共同作用下的最大弯矩,最大挠度。

【1】源代码:

#include

#include

doubleF[10],M[10],q[10];//定义各个载荷大小的数组

DoubleMz[10],v[10],l,E,I,Mzs[100],vs[100],Mzmax,vmax,Mzmin,vmin;/

doublea[10],b[10],c[10],d[10];//定义各个载荷的横坐标

doubleA[10],B[10],C[10],D[10];//定义奇异函数中间变量

doubleEc[10],Fc[10];//定义积分常数

doublex;//定义任一截面横坐标

doubleFR1[10],FR2[10];//定义支反力FR1,FR2

inti,Q;//定义循环变量

intj;

ntnM,nF,nq,nn;//定义载荷个数

/*函数功能:

奇异函数*/

doubleqiyi(doublex,doubley)

{

if(x<=y)

return0;

if(x>y)

returnx-y;

}

/*函数功能:

初始数据输入*/

voidps()

{

printf("请输入长度l\n");

scanf("%lf",&l);

printf("请输入弹性模量E\n");

scanf("%lf",&E);

printf("请输入极惯性矩I\n");

scanf("%lf",&I);

printf("请输入集中载荷F的个nF:

");

scanf("%d",&nF);

printf("请输入集中载荷F的值和位置a:

");

for(i=0;i

{

scanf("%lf%lf",&F[i],&a[i]);

}

 

printf("请输入外力偶M的个数nM");

scanf("%d",&nM);

printf("请输入外力偶值和位置b:

");

for(i=0;i

{

scanf("%lf%lf",&M[i],&b[i]);

}

printf("请输入均布力的个数nq");

scanf("%d",&nq);

printf("请输入分布力q的值和位置c,d:

");

for(i=0;i

{scanf("%lf%lf%lf",&q[i],&c[i],&d[i]);}

printf("请输入任一截面横坐标x\n");

scanf("%lf",&x);

nn=nF;//找到最大载荷数

if(nM>nn)

nn=nM;

if(nq>nn)

nn=nq;

}

main()

{

ps();//初始数据输入

for(j=0;j<99;j++)

{

x=j*l/100;

for(i=0;i

{

A[i]=qiyi(x,a[i]);

B[i]=qiyi(x,b[i]);

C[i]=qiyi(x,c[i]);

D[i]=qiyi(x,d[i]);

FR2[i]=(M[i]-F[i]*a[i]-q[i]*(d[i]*d[i]-c[i]*c[i])/2)/l;//求支反力

FR1[i]=-(F[i]+q[i]*(d[i]-c[i]))-FR2[i]

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1