基於C語言的材料力學模型計算實現(拉壓變形篇)

本章研究的計算對象是簡單杆軸模型的拉壓變形,涵蓋的功能是計算拉/壓應力與總變形量。拉壓變形程序算法流程圖如下:

Part 1.簡單杆軸模型

例題2.石砌橋墩的墩身高l=10m,其橫截面尺寸圖3-1所示。荷載F=1000kN,材料的密度ρ=2.35kg/,試求墩身底部橫截面上的壓應力。

解題思想與算法:

3-1 例題2圖

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。

3-2 標記方式圖

運行界面:

代碼片段:

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.142104.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將進入彎曲應力的研究~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章