【C语言】每日一代码:杨氏矩阵

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int find_num(int arr[3][3], int col, int row, int k)
{
	int i = 0;
	//从右上角数字查找
	while (k != arr[i][row - 1] && i < col && row >= 0)
	{
		if (k < arr[i][row - 1])
		{
			row--;
		}
		else
		{
			i++;
		}
	}
	if (k == arr[i][row - 1])
		return 1;//找到了,返回1
	else
		return 0;//没找到,返回0
}
int main()
{
	int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };
	int k = 0;
	scanf("%d", &k);
	int ret = find_num(arr, 3, 3, k);
	if (ret == 1)
	{
		printf("找到了\n");
	}
	else
	{
		printf("找不到\n");
	}
	return 0;
}

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
简支梁有限元程序的核心是构建刚度矩阵和载荷向量,然后通过求解线性方程组得到位移和反力。以下是一个简单的C语言程序示例,可以用于求解简支梁的位移和反力: ```c #include <stdio.h> #include <stdlib.h> #include <math.h> #define N 3 //每个单元节点数 #define M 2 //梁的数量 #define DOF 2 //每个节点的自由度数 void assemble(double *K, double *f); void solve(double *K, double *f, double *u); int main() { //定义节点坐标 double x[N * M] = {0.0, 0.0, 2.0, 0.0, 4.0, 0.0, 6.0, 0.0, 8.0, 0.0, 10.0, 0.0}; //定义单元节点编号 int e[N * (M - 1)] = {1, 2, 3, 4, 5, 6}; //定义杨氏模量和截面面积 double E = 2.1e11, A = 0.01; //定义节点载荷 double f[N * M * DOF] = {0.0, 0.0, 0.0, 0.0, 0.0, -1000.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1000.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1000.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1000.0}; double K[N * M * DOF][N * M * DOF] = {0.0}; double u[N * M * DOF] = {0.0}; assemble(&K[0][0], &f[0]); solve(&K[0][0], &f[0], &u[0]); for (int i = 0; i < N * M * DOF; i++) { printf("u[%d] = %.4f\n", i, u[i]); } return 0; } void assemble(double *K, double *f) { //定义局部刚度矩阵 double k[N * DOF][N * DOF] = {0.0}; double L, c, s; for (int i = 0; i < M; i++) { //计算单元长度 L = sqrt(pow(x[N * i + 2] - x[N * i], 2.0) + pow(x[N * i + 3] - x[N * i + 1], 2.0)); //计算单元方向余弦 c = (x[N * i + 2] - x[N * i]) / L; s = (x[N * i + 3] - x[N * i + 1]) / L; //计算局部刚度矩阵 k[0][0] = k[1][1] = E * A / L; k[0][1] = k[1][0] = -E * A / L; k[2][2] = k[3][3] = 12 * E * A / pow(L, 3.0); k[2][3] = k[3][2] = 6 * E * A / pow(L, 2.0); k[0][2] = k[2][0] = k[1][3] = k[3][1] = -E * A / L; k[1][2] = k[2][1] = k[0][3] = k[3][0] = -E * A / L; k[4][4] = k[5][5] = 4 * E * A / L; k[4][5] = k[5][4] = -6 * E * A / pow(L, 2.0); k[4][0] = k[0][4] = k[5][1] = k[1][5] = -6 * E * A / pow(L, 2.0) * s; k[4][1] = k[1][4] = k[5][0] = k[0][5] = 6 * E * A / pow(L, 2.0) * c; //组装局部刚度矩阵到全局刚度矩阵 for (int j = 0; j < N; j++) { for (int k = 0; k < N; k++) { for (int m = 0; m < DOF; m++) { for (int n = 0; n < DOF; n++) { int row = j * DOF + m; int col = k * DOF + n; K[row][col] += k[m + j * DOF][n + k * DOF]; } } } } } //组装载荷向量到全局载荷向量 for (int i = 0; i < N * M * DOF; i++) { f[i] = f[i]; } } void solve(double *K, double *f, double *u) { //求解位移和反力 //对于简支梁,两个节点的横向位移是已知的,因此只需要求解纵向位移和反力 double K11 = K[2][2], K12 = K[2][5], K21 = K[5][2], K22 = K[5][5]; double f1 = f[2], f2 = f[5]; double det = K11 * K22 - K12 * K21; u[2] = (K22 * f1 - K12 * f2) / det; u[5] = (K11 * f2 - K21 * f1) / det; } ``` 该程序中,`x`数组表示节点坐标,`e`数组表示单元节点编号,`E`和`A`分别表示杨氏模量和截面面积,`f`数组表示节点载荷,`K`数组表示刚度矩阵,`u`数组表示位移和反力。程序的核心是`assemble`函数和`solve`函数,`assemble`函数用于构建刚度矩阵和载荷向量,`solve`函数用于求解线性方程组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值