本章研究的計算對象是簡單杆軸模型的拉壓變形,涵蓋的功能是計算拉/壓應力與總變形量。拉壓變形程序算法流程圖如下:
Part 1.簡單杆軸模型
例題2.石砌橋墩的墩身高l=10m,其橫截面尺寸圖3-1所示。荷載F=1000kN,材料的密度ρ=2.35kg/,試求墩身底部橫截面上的壓應力。
解題思想與算法:
A.頭文件與宏定義、全局變量聲明部分:
#include<math.h>
#define N 5
#define Pi acos(-1.0)//圓周率
double M[N];//外力偶矩
double l[N];//各段長度
double F[N];//各截面所受外力
double A[N];//截面面積
double Sigma[N];//應力
double E;//彈性模量
int Number,choice;
B.主函數與外部函數部分:
(1).按照提示輸入對應數據.
表面上看,橋墩只有一段,但考慮到其本身重力,由於材料密度均勻分佈,因此橋墩重心取再其正中心。程序的輸入的分段數要求輸入每段第一個截面所受的直接外力(只需輸入該截面特有的受力大小,不要重複輸入),因此將其模型爲兩段後,重新標記各位置字母,如圖3-2所示,截面O所受外力即爲荷載F,而構造出來的截面A所受外力爲橋墩自身重力P,截面B沒有直接受到其餘外力(外力已累加,不重複輸入)。OA與AB長度均爲5m。
運行界面:
代碼片段:
int main(){
bool Choice;
char Letter[N+1]={'O','A','B','C','D','E'};
printf("請輸入所分段數:");
scanf("%d",&Number);
printf("請從起始端至末端輸入各段長度/m:\n");
for(int i=0;i<Number;i++){
printf("%c%c段:",Letter[i],Letter[i+1]);
scanf("%lf",&l[i]);
}
(2).輸入各截面特有的受力大小,橋墩的自重P=ρglA,截面形狀是組合圖形,它的面積大小A=9.14,繼而算得P=2.359.8×10×9.14≈2104.9kN。接着按照截面提示輸入截面形狀及其相關參數,此時程序會調用Area函數對計算並存儲面積信息。
運行界面:
代碼片段:
printf("各段截面大小是否相等?是,輸入1;否,輸入0:");
scanf("%d",&Choice);
if(Choice==true){
printf("請輸入截面形狀:a.圓形,輸入0;b.方形,輸入1;c.組合圖形,輸入2:");
scanf("%d",&choice);
A[0]=Area(choice);
for(int i=1;i<Number+1;i++){
A[i]=A[0];
}
}
else{
for(int i=0;i<Number;i++){
printf("請輸入%c%c段截面形狀:1.圓形,輸入0;2.方形,輸入1;3. 組合圖形,輸入2:",Letter[i],Letter[i+1]);
scanf("%d",&choice);
A[i]=Area(choice);
}
}
Area函數:形參choice傳值爲用戶選擇的截面形狀代號,當choice =0時,函數計算實心圓截面;當choice =1時,函數計算方形截面;當choice =2時,函數計算組合圖形或不規則圖形截面,在此情況下,用戶在計算截面面積後直接輸入面積參數即可。
double Area(int choice){
double r,a,b,S;
if(!choice){
printf("請輸入半徑/m:");
scanf("%lf",&r);
S=Pi*pow(r,2);
}
else if(choice==1){
printf("請輸入長度/m:");
scanf("%lf",&a);
printf("請輸入寬度/m:");
scanf("%lf",&b);
S=a*b;
}
else{
printf("請直接輸入總面積/m^2:");
scanf("%lf",&S);}
return S;
}
(3).根據用戶需要,選擇計算壓應力功能。本題需要計算壓應力,此部分無需調用函數,直接套用公式σ=計算出各截面壓/拉應力,如果在(1)中以壓應力爲正值的標準輸入各截面受力,則計算得到正值,爲壓應力,負值則爲拉應力。
代碼片段:
printf("是否計算壓應力?是,輸入1;否,輸入0:");
scanf("%d",&Choice);
if(Choice==true){
for(int i=0;i<Number;i++){
Sigma[i]=F[i]/A[i];
printf("%c%c段壓應力/Pa:%lf\n",Letter[i],Letter[i+1],Sigma[i]);
}
}
(4).根據用戶需要,選擇計算變形量功能,若選擇此功能,用戶輸入彈性模量參數後,程序會調用Delta_L()函數進行計算,函數返回值即爲計算的變形量結果。本題不計算變形量,在執行完用戶所選擇的功能後,程序結束。
運行界面:
代碼片段:
printf("是否計算變形量?是,輸入1;否,輸入0:");
scanf("%d",&Choice);
if(Choice==true){
printf("請輸入軸的彈性模量/GPa:");
scanf("%lf",&E);
printf("總變形/m:%lf\n",Delta_L());
}
return 0;
}
Delta_L函數:應變ε=,變形∆l=εl,函數會將計算得到的各段變形量累加,從而計算出總變形量。
double Delta_L(){//總變形
double L=0.0;
for(int i=0;i<Number;i++)L=L+(Sigma[i]*l[i])/(E*pow(10.0,9));
return L;
}
Part 2.拉壓變形程序的應用
變式4.一木樁受力如左圖所示,軸的橫截面爲邊長200mm的正方形,材料可認爲符合胡克定律,其彈性模量E=10GPa。如不記柱的自重,試求各段柱橫截面上的應力與柱的總變形。
解題思路:重新標記各位置字母,如右圖所示,木樁模型分爲OA、AB兩段,截面O受正壓力100kN,截面A受力160kN,截面B無其他受力。OA、AB兩段長度均爲1.5m。按界面提示與要求輸入參數,選擇計算應力與總變形的功能即可完成計算
結論:左圖中的AC段受壓應力2.5MPa,CB段受壓應力6.5MPa,柱的總變形爲1.35mm,即被壓縮了1.35mm.
拉壓變形的內容暫告一段落,下一個blog將進入彎曲應力的研究~