材料力学实验报告.docx
《材料力学实验报告.docx》由会员分享,可在线阅读,更多相关《材料力学实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
材料力学实验报告
材料力学上机作业
姓名:
林海奇
班级:
1236005
学号:
6121820510
哈尔滨工业大学
2013年12月
此程序可计算在n个力、n个力偶以及n段分布力作用下悬臂梁上任意一点的挠度、转角、弯矩和剪切力。
运行此程序时,需在程序中输入已知杆的EI和杆的长度。
然后输入集中力、均布力、力偶的个数、大小、位置;最后输入位置坐标x,即可计算在x点的挠度、转角、弯矩和剪切力。
(均采用国际单位制)
C语言程序代码:
#include
#include
#include
#defineN10
#defineN510000
intInputFix(doubledisforce[][4],doubleconforce[][2],doublemoment[][2],int*pN1,int*pN2,int*pN3,double*plength,double*pEI);//输入数据函数
intDengxiaodis(doubledisforce[][4],doublekb[][2],doubledengxiaoli[][2],int*pN2);//计算等效力函数
intCalculateFix(doubledisforce[][4],doubleconforce[][2],doublemoment[][2],doublekb[][2],doubledengxiaoli[][2],int*pN1,int*pN2,int*pN3,double*plength,double*pEI);//计算函数
intmain()
{
doubledisforce[N][4];//均布力起点大小终点大小,起点位置终点位置
doubleconforce[N][2];//集中力(位置,大小)
doublemoment[N][2];//力偶
doublekb[N][2];//depositeverykandbofthedistributeforce
doubledengxiaoli[N][2];//depositforceof位置和大小
intN1=0;//numberofconstrateforces
intN2=0;//numberofdistributeforces
intN3=0;//numberofmoments
doubleEI=0;
doublelength=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);
return0;
}
intInputFix(doubledisforce[][4],doubleconforce[][2],doublemoment[][2],int*pN1,int*pN2,int*pN3,double*plength,double*pEI)
{
inti,j;
doubleEI;
doublelength;
intN1,N2,N3;
printf("请输入EI:
");
scanf("%lf",&EI);
*pEI=EI;
printf("请输入杆的长度:
");
scanf("%lf",&length);
*plength=length;
printf("请输入集中力的个数:
");
scanf("%d",&N1);
*pN1=N1;
if(N1>0)
{
printf("请输入集中力的参数(位置,大小):
");
for(i=0;i{
for(j=0;j<2;j++)
{
scanf("%lf",&conforce[i][j]);
}
}
}
printf("请输入分布力的个数:
");
scanf("%d",&N2);
*pN2=N2;
if(N2>0)
{
printf("请输入分布力的参数:
(起点大小,终点大小,起点位置,终点位置)");
for(i=0;i{
for(j=0;j<4;j++)
{
scanf("%lf",&disforce[i][j]);
}
}
}
printf("请输入力偶的个数:
");
scanf("%d",&N3);
*pN3=N3;
if(N3>0)
{
printf("请输入力偶的参数:
(位置,大小)");
for(i=0;i{
for(j=0;j<2;j++)
{
scanf("%lf",&moment[i][j]);
}
}
}
return0;
}
intDengxiaodis(doubledisforce[][4],doublekb[][2],doubledengxiaoli[][2],int*pN2)
{
intgeshu;
inti;
doublek;//力系斜率
doubleb;
doubleq1,q2,x1,x2;
geshu=*pN2;
for(i=0;i{
q1=disforce[i][0];
q2=disforce[i][1];
x1=disforce[i][2];
x2=disforce[i][3];
dengxiaoli[i][1]=(q1+q2)*(x2-x1)/2;//大小
kb[i][0]=(q2-q1)/(x2-x1);
k=kb[i][0];
kb[i][1]=q1-k*x1;
b=kb[i][1];
dengxiaoli[i][0]=(2*k*(pow(x2,3)-pow(x1,3))+3*b*(pow(x2,2)-pow(x1,2)))/6/dengxiaoli[i][1];//位置
}
return0;
}
intCalculateFix(doubledisforce[][4],doubleconforce[][2],doublemoment[][2],doublekb[][2],doubledengxiaoli[][2],int*pN1,int*pN2,int*pN3,double*plength,double*pEI)
{
doublex;//用户输入需要求的点在坐标位置
doubleRA=0,MA=0;
doubleVx=0;
doubleMx=0;
doubleangle=0;
doublevx=0;//挠度
doublex1,x2;//均布力的起点和终点
doublexi;//xi的坐标
doublemx;//表示X的每一个小块
doublef;//均布力分成N份后,每一个力的大小
doublek,b;
inti,j;
intn1,n2,n3;
doublelength;
doubleEI;
intbiaozhi1=0;//判断x是否在军部力之间
printf("请输入求解的点在坐标:
");
scanf("%lf",&x);
printf("\n");
n1=*pN1;
n2=*pN2;
n3=*pN3;
length=*plength;
EI=*pEI;
for(i=0;i{
RA=RA+conforce[i][1];
}
for(i=0;i{
RA=RA+dengxiaoli[i][1];
}
RA=(-1)*RA;//////////////////////////
for(i=0;i{
MA+=moment[i][1];
}
for(i=0;i{
MA-=conforce[i][0]*conforce[i][1];
}
for(i=0;i{
MA-=dengxiaoli[i][1]*dengxiaoli[i][0];
}
MA=(-1)*MA;////////////////////////
求Vx的部分
for(i=0;i{
if((x>disforce[i][2])&&(x{
biaozhi1=1;//在均布力之间.
break;
}
}
if(biaozhi1==0)//力既不在军部力默认力为右连续
{
Vx-=RA;
for(i=0;i{
if(x>conforce[i][0])
{
Vx-=conforce[i][1];
}
else
break;
}
for(i=0;i{
if(x>=disforce[i][3])
{
Vx-=dengxiaoli[i][1];
}
else
break;
}
printf("V(x)=%lf",Vx);
printf("\n");
}
else//力在军部力之间
{
Vx-=RA;
for(i=0;i{
if(x>conforce[i][0])
{
Vx-=conforce[i][1];
}
else
break;
}
for(i=0;i{
if(x>=disforce[i][3])
{
Vx-=dengxiaoli[i][1];
}
else
break;
}
Vx=Vx-(kb[i][0]*x+kb[i][1]+disforce[i][0])*(x-disforce[i][2])/2;
printf("V(x)=%lf",Vx);
printf("\n");
}
求Mx的部分
Mx-=MA;
Mx-=RA*x;
if(biaozhi1==0)//力不再均布力之间
{
for(i=0;i{
if(x>conforce[i][0])
{
Mx-=conforce[i][1]*(x-conforce[i][0]);
}
else
break;
}
for(i=0;i{
if(x>moment[i][0])
Mx-=moment[i][1];
else
break;
}
for(i=0;i{
if(x>=disforce[i][3])
{
Mx-=dengxiaoli[i][1]*(x-dengxiaoli[i][0]);
}
else
bre