材料力学上机大作业

  • 格式: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);/*输出结果*/

}