六跨连续梁内力计算程序程序(12页).doc
-六跨连续梁内力计算程序说明文档一 程序适用范围本程序用来解决六跨连续梁在荷载作用下的弯矩计算。荷载可以是集中力Fp(作用于跨中)、分布荷载q(分布全垮)、集中力偶m(作用于结点)的任意组合情况。端部支承可为铰支或固支。二 程序编辑方法使用Turbo C按矩阵位移法的思路进行编辑,用Turbo C中的数组来完成矩阵的实现,关键的求解K=P的步骤用高斯消元法。三 程序使用方法运行程序后,按照提示,依次输入结点编号,单元编号,单元长度,抗弯刚度(EI的倍数),集中力,均部荷载,集中力偶,各个数据间用空格隔开,每一项输入完毕后按回车键,所有数据输入完毕后按任意键输出结果。输出结果中包括输入的数据(以便校核),角位移的值(以1/EI为单位)以及每个单元的左右两端弯矩值。四 程序试算1 算例1算力图示:输入数据:结点:1 2 3 4 5 6 0;单元:1 2 3 4 5 6;长度:4 6 6 8 4 6;EI:1 1.5 1 2 1 1.5;Fp:0 12 8 0 6 0;q:8 0 0 4 0 6;m:0 0 -8 0 10 0 0运行程序如下:结果为:角位移为:单元编号123456左端弯矩0.00000-14.92439-7.30243-12.37565-8.16809-7.95197右端弯矩14.92439-0.6975712.3756518.168097.9519723.02401弯矩图如下:2 算例2算例图示:输入数据:结点:0 1 2 3 4 5 6;单元:1 2 3 4 5 6;长度:4 6 6 8 4 6;EI:1 1.5 1 2 1 1.5;Fp:0 12 8 0 6 0;q:8 0 0 4 0 6;m:0 0 -8 0 10 0 0运行程序如下:结果为:角位移为:单元编号123456左端弯矩-9.82331-12.35339-7.76314-12.55393-6.58562-14.10360右端弯矩12.35339-0.2368612.5539316.5856214.103600.00000弯矩图如下:3 算例3算例图示:输入数据:结点:0 1 2 3 4 5 0;单元:1 2 3 4 5 6;长度:4 6 6 8 4 6;EI:1 1.5 1 2 1 1.5;Fp:0 12 8 0 6 0;q:8 0 0 4 0 6;m:0 0 -8 0 10 0 0运行程序如下:结果为:角位移为:单元编号123456左端弯矩-9.83978-12.32059-7.87793-12.19318-8.21722-7.93794右端弯矩12.32059-0.1220712.1931818.217227.9379423.03103弯矩图如下:4 算例4算例图示:输入数据:结点:1 2 3 4 5 6 7;单元:1 2 3 4 5 6;长度:4 6 6 8 4 6;EI:1 1.5 1 2 1 1.5;Fp:0 12 8 0 6 0;q:8 0 0 4 0 6;m:0 0 -8 0 10 0 0运行程序如下:结果为:角位移为:单元编号123456左端弯矩-0.00000-14.25984-7.18863-12.73600-6.53707-14.11573右端弯矩14.95284-0.8113712.7360016.5370714.115730.00000弯矩图如下:五源程序#include<stdio.h>#include<conio.h>定义变量int joint7; 结点编号int unit6; 单元编号float length6; 长度float EI6; 抗弯刚度float P6; 集中力float q6; 均部荷载float m7; 集中力偶double I6; 线刚度int number=7,i,j;double K77=0; 整体刚度矩阵double k622; 单元刚度矩阵double MP62,Mq62,Mlast62,M7=0,tatleM7,mm7,Mqueue7=0,antiM7=0;依次为:集中力、均布荷载引起的固端弯矩,最终杆端弯矩,全部荷载引起的弯矩,总的结点荷载,按结点编号排列的结点集中力偶,按结点编号排列的固端弯矩,等效结点弯矩double angle7=0; 角位移void input(); 输入函数void solve(); 求解函数void output(); 输出函数void Gauss(); 高斯消元法void main() input(); solve(); output();void input() clrscr(); printf("Please input data.nnThe joint number:"); for(i=0;i<7;i+) scanf("%d",&jointi); printf("nThe unit number:"); for(i=0;i<6;i+) scanf("%d",&uniti); printf("nThe length:"); for(i=0;i<6;i+) scanf("%f",&lengthi); printf("nThe EI:"); for(i=0;i<6;i+) scanf("%f",&EIi); printf("nThe Fp:"); for(i=0;i<6;i+) scanf("%f",&Pi); printf("nThe q:"); for(i=0;i<6;i+) scanf("%f",&qi); printf("nThe m:"); for(i=0;i<6;i+) scanf("%f",&mi);void solve() for(i=0;i<7;i+)if(jointi=0) number-=1; for(i=0;i<6;i+) MPi0=-Pi*lengthi/8;MPi1=Pi*lengthi/8; for(i=0;i<6;i+) Mqi0=-qi*lengthi*lengthi/12;Mqi1=qi*lengthi*lengthi/12; for(i=1;i<6;i+) Mi=MPi-11+MPi0+Mqi-11+Mqi0; M0=MP00+Mq00; M6=MP51+Mq51; if(joint0=0)j=1;else j=0; for(i=j;i<7&&jointi>=1;i+) Mqueuejointi-1=Mi; mmjointi-1=mi; for(i=0;i<7;i+) antiMi=-Mqueuei; for(i=0;i<7;i+) tatleMi=antiMi+mmi; for(i=0;i<6;i+) Ii=(EIi/lengthi); if(joint0=0) Kjoint1-1joint1-1+=4*I0; if(joint6=0) Kjoint5-1joint5-1+=4*I5; for(i=0;i<6;i+) ki00=4*Ii,ki01=2*Ii,ki10=2*Ii,ki11=4*Ii; for(i=j;jointi>=1&&jointi+1>=1&&i<6;i+) Kjointi-1jointi-1+=ki00; Kjointi-1jointi+1-1+=ki01; Kjointi+1-1jointi-1+=ki10; Kjointi+1-1jointi+1-1+=ki11; getch();void output() clrscr(); printf("The data you put in:ntjoint :"); for(i=0;i<7;i+) printf("t"); printf("%d",jointi); printf("nntunit :"); for(i=0;i<6;i+) printf("t"); printf("%d",uniti); printf("nntlength :"); for(i=0;i<6;i+) printf("t"); printf("%1.0f",lengthi); printf("nntEI :"); for(i=0;i<6;i+) printf("t"); printf("%1.1f",EIi); printf("nntFp :"); for(i=0;i<6;i+) printf("t"); printf("%1.0f",Pi); printf("nntq :"); for(i=0;i<6;i+) printf("t"); printf("%1.0f",qi); printf("nntm :"); for(i=0;i<6;i+) printf("t"); printf("%1.0f",mi); Gauss(); for(i=0;i<6;i+) Mlasti0=ki00*anglejointi-1+ki01*anglejointi+1-1+MPi0+Mqi0; Mlasti1=ki10*anglejointi-1+ki11*anglejointi+1-1+MPi1+Mqi1; printf("n-"); printf("nThe angle(1/EI):nn"); for(i=0;i<number;i+) printf("%12.6f",anglei); printf("n-"); printf("nunit number"); for(i=0;i<6;i+) printf("%6d ",uniti); printf("nnleft M t"); for(i=0;i<6;i+) printf("%12.5f",Mlasti0); printf("nnright Mt"); for(i=0;i<6;i+) printf("%12.5f",Mlasti1); getch();void Gauss() int l,m;double box; double BOX7=0;for(j=0;j<(number-1);j+) for(i=j;i<number;i+) if(Kij!=0) for(m=0;m<number;m+) BOXm=Kim;Kim=Kjm;Kjm=BOXm; box=tatleMi;tatleMi=tatleMj;tatleMj=box; break; for(m=j+1;m<number;m+) Kjm/=Kjj; tatleMj/=Kjj; Kjj=1; for(l=j+1;l<number;l+) tatleMl+=-tatleMj*Klj; for(m=number-1;m>=j;m-) Klm+=-Kjm*Klj; tatleMnumber-1/=Knumber-1number-1; Knumber-1number-1=1; for(i=0;i<number;i+) anglei=tatleMi; for(i=number-2;i>=0;i-) for(j=number-1;j>i;j-) anglei=anglei-Kij*anglej; -第 12 页-