材料力学上机大作业
- 格式:doc
- 大小:221.00 KB
- 文档页数:6
2013年材力上机大作业
应力状态分
题目要求:
输入:
1. 平面应力状态输入:
(σx、σy、τxy);某截面方位角α
2. 空间应力状态输入:
(σx、σy、σz、τxy、τyz、τxz)
输出:
1. 输出主应力(σ1、σ2、σ3)
2. 最大剪应力(τmax=τ13=(σ1—σ3)/2)
3. 如为平面应力状态则需输出方位角α斜截面上的应力σa、τa及主方向角αa
4. 画出应力圆示意图
二、程序原文:
#include
#include
void Erxiang(float xigemaX,float xigemaY,float taoxy,float aerfa); /*二向应力求解函数*/
void Sanxiang(float xigemaX,float xigemaY,float xigemaZ,float taoxy,float taoxz,float taoyz);/*三向应力求解函数*/
void main()
{
int a;/*状态标志量,用以进行二向应力与三向应力问题的选择*/
float xigemaX,xigemaY,xigemaZ,taoxy,taoxz,taoyz,aerfa;/*各应力及α*/
printf("Select items from 2 or 3\n");/*选择二向应力问题或三向应力问题,键入2或3,以回车结束*/
scanf("%d",&a); if(a==2)/*键入2后执行二向应力求解过程*/
{
printf("xigemaX:");/*屏幕提示输入*/
scanf("%f",&xigemaX);/*键入已知数值,以回车结束,下同*/
printf("xigemaY:");
scanf("%f",&xigemaY);
printf("taoxy:");
scanf("%f",&taoxy);
printf("aerfa:");
scanf("%f",&aerfa);
Erxiang(xigemaX,xigemaY,taoxy,aerfa);
}
else/*键入3后执行三向应力求解过程*/
{
printf("xigemaX:");
scanf("%f",&xigemaX);
printf("xigemaY:");
scanf("%f",&xigemaY);
printf("xigemaZ:");
scanf("%f",&xigemaZ);
printf("taoxy:");
scanf("%f",&taoxy);
printf("taoxz:");
scanf("%f",&taoxz);
printf("taoyz:");
scanf("%f",&taoyz);
Sanxiang(xigemaX,xigemaY,xigemaZ,taoxy,taoxz,taoyz);
}
}
void Erxiang(float xigemaX,float xigemaY,float taoxy,float aerfa)/*二向应力求解函数*/
{
float aerfa2,a;/*aerfa2为所求主应力角*/
float xigema1,xigema2,xigema3,xigemaaerfa,taoaerfa;/*分别为三个主应力与α方向上的正应力与切应力*/
xigema1=(xigemaX+xigemaY)/2+sqrt(taoxy*taoxy+((xigemaX-xigemaY)/2)*((xigemaX-xigemaY)/2));
xigema2=(xigemaX+xigemaY)/2-sqrt(taoxy*taoxy+((xigemaX-xigemaY)/2)*((xigemaX-xigemaY)/2));
a=2*taoxy/(xigemaX-xigemaY);
aerfa=(aerfa/180)*3.141592657;/*角度转化为弧度*/
aerfa2=atan(a)/2;
xigemaaerfa=(xigemaX+xigemaY)/2+(xigemaX-xigemaY)*cos(2*aerfa)/2+taoxy*sin(2*aerfa);
taoaerfa=-(xigemaX-xigemaY)*sin(2*aerfa)/2+taoxy*cos(2*aerfa);
aerfa2=aerfa2/3.141592657*180;
if(xigema2>=0)/*进行主应力的大小排序与各解的输出*/
{
printf("xigema1=%f,xigema2=%f,xigema3=0\n",xigema1,xigema2);/*输出主应力*/
printf("aerfa1=%f,aerfa2=%f\n",aerfa2,aerfa2+90);/*输出主应力角*/
printf("xigemaaerfa=%f,taoaerfa=%f\n",xigemaaerfa,taoaerfa);/*输出α方向上的应力*/
}
else if(xigema1<=0)
{
printf("xigema1=0,xigema2=%f,xigema3=%f\n",xigema1,xigema2);
printf("aerfa1=%f,aerfa2=%f\n",aerfa2,aerfa2+90);
printf("xigemaaerfa=%f,taoaerfa=%f\n",xigemaaerfa,taoaerfa);
}
else
{
printf("xigema1=%f,xigema2=0,xigema3=%f\n",xigema1,xigema2);
printf("aerfa1=%f,aerfa2=%f\n",aerfa2,aerfa2+90);
printf("xigemaaerfa=%f,taoaerfa=%f\n",xigemaaerfa,taoaerfa);
}
}
void Sanxiang(float xigemaX,float xigemaY,float xigemaZ,float taoxy,float taoxz,float taoyz)/*三向应力求解函数*/
{
float a,b,c,d,deta,k,t,xita,xigema1,xigema2,xigema3;/*定义一元三次方程相关系数与三个主应力*/
float yoona;
a=1;
b=-(xigemaX+xigemaY+xigemaZ);
c=(xigemaX*xigemaY-taoxy*taoxy+xigemaY*xigemaZ-taoyz*taoyz+xigemaZ*xigemaX-taoxz*taoxz);
d=-(xigemaX*xigemaY*xigemaZ+taoxy*taoyz*taoxz+taoxz*taoxy+taoyz
-xigemaX*taoyz*taoyz-taoxy*taoxy*xigemaZ-xigemaY*taoxz*taoxz);
deta=b*b-4*a*c;
k=b/a;
t=(2*a*b-3*a*b)/(2*pow(a,3/2));
xita=acos(t);
if(deta>0)/*主应力求解过程*/
{
printf("error!!"); }
else if(deta==0)
{
xigema1=-b/a+k;
xigema2=-k/2;
xigema3=xigema2;
}
else;
{
xigema1=(-b-2*pow(a,1/2)*cos(xita/3))/(3*a);
xigema2=(-b+pow(a,1/2)*(cos(xita/3)+pow(3,1/2)*sin(xita/3)))/(3*a);
xigema3=(-b+pow(a,1/2)*(cos(xita/3)-pow(3,1/2)*sin(xita/3)))/(3*a);
}
if(xigema1
{
yoona=xigema1;
xigema1=xigema2;
xigema2=yoona;
}
else;
if(xigema2
{
yoona=xigema3;
xigema3=xigema2;
xigema2=yoona;
}
else;
if(xigema1
{
yoona=xigema2;
xigema2=xigema1;
xigema1=yoona;
}
else;
printf("xigema1=%f,xigema2=%f,xigema3=%f\n",xigema1,xigema2,xigema3);/*输出结果*/
}