c语言之矩阵

简介: c语言之矩阵

矩阵作为线性代数核心内容之一也是刷题人时常会遇到的一种类型。本篇博客简单介绍一下矩阵转置、上三角矩阵以及杨氏矩阵。

     

1.转置矩阵:输入m行n列的矩阵以n行m列的方式打印出来。只要将数组的行列进行交换即可,并不难想也不难写.(相应练习:牛客网BC107)

1. #include<stdio.h>
2. int main()
3. {
4.     int n = 0;
5.     int m = 0;
6.     scanf("%d%d", &n, &m);
7.     int arr[10][10] = { 0 };
8.     int i = 0;
9.     int j = 0;
10. for (i = 0; i < n; i++)
11.     {
12. 
13. for (j = 0; j < m; j++)
14.         {
15.             scanf("%d", &arr[i][j]);
16.         }
17.     }
18. 
19. for (i = 0; i < m; i++)
20.     {
21. 
22. for (j = 0; j < n; j++)
23.         {
24.             printf("%d ", arr[j][i]);
25.         }
26.         printf("\n");
27.     }
28. return 0;
29. }

2.上三角矩阵:对角线以下所有元素都为零,但凡有一个元素非零就不是上三角(相应练习:BC106)

1. #include<stdio.h>
2. int main()
3. {
4.     int n = 0;
5.     scanf("%d", &n);
6.     int arr[10][10] = { 0 };
7.     int flag = 1;//表示是上三角
8. //读取元素
9. for (int i = 0; i < n; i++)
10.     {
11. 
12. for (int j = 0; j < n; j++)
13.         {
14.             scanf("%d", &arr[i][j]);
15. 
16.         }
17.     }
18. //数据读取完毕后开始判断
19. for (int i = 0; i < n; i++)
20.     {
21. //对角线的位置i与j下标一样,这也就说明当j小于i时元素位于对角线下方
22. for (int j = 0; j < i; j++)
23.         {
24. if (arr[i][j] != 0)//但凡对角线以下存在不为零的元素就表示不是上三角
25.             {
26.                 flag = 0;
27.                 goto end;
28.             }
29.         }
30.     }
31. end:
32. if (flag == 1)
33.         printf("YES\n");
34. else
35.         printf("NO\n");
36. return 0;
37. }

3.杨氏矩阵:有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。要求:时间复杂度为:O(n)

因为时间复杂度的要求,遍历数组的办法是不可行的。因此要采用特殊位置比较的方法。

代码如下:

1. #include<stdio.h>
2. int mat_find(int arr[3][3], int* px, int* py, int k)
3. {
4.  int x = 0;
5.  int y = *py-1;
6.  while (x <= (*px) - 1 && y >= 0)
7.  {
8.    if (arr[x][y] < k)
9.    {
10.       x++;
11.     }
12.     else if(arr[x][y]>k)
13.     {
14.       y--;
15.     }
16.     else
17.     {
18.       *px = x;
19.       *py = y;
20.       return 1;
21.     }
22.   }
23.   return 0;
24. 
25. }
26. 
27. int main()
28. {
29.   int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };
30.   int k = 0;//查找元素
31.   int a = 3;
32.   int b = 3;
33.   scanf("%d", &k);
34.   int ret = mat_find(arr, &a, &b, k);
35.   if (ret == 1)
36.     printf("%d %d \n",a,b);
37.   else
38.     printf("找不到\n");
39. 
40.   return 0;
41. }

此代码通过改变a,b的位置来实现输出要寻找元素的下标,这样有一个缺陷就是:在二次调用mat_find之前要先将a和b的值重置,否则会导致查找失败。

结束语:

线代的学习因为疫情的原因是躲在屏幕后面上网课,导致我忘的比学的还快,因此很烦矩阵,不知道各位如何看待。那么今天的博客就写(水)到这里了,你学废了吗?

相关文章
|
6天前
|
存储 人工智能 C语言
数据结构基础详解(C语言): 栈的括号匹配(实战)与栈的表达式求值&&特殊矩阵的压缩存储
本文首先介绍了栈的应用之一——括号匹配,利用栈的特性实现左右括号的匹配检测。接着详细描述了南京理工大学的一道编程题,要求判断输入字符串中的括号是否正确匹配,并给出了完整的代码示例。此外,还探讨了栈在表达式求值中的应用,包括中缀、后缀和前缀表达式的转换与计算方法。最后,文章介绍了矩阵的压缩存储技术,涵盖对称矩阵、三角矩阵及稀疏矩阵的不同压缩存储策略,提高存储效率。
|
3月前
|
存储 编译器 C语言
【C语言刷题每日一题#牛客网BC107】矩阵转置
【C语言刷题每日一题#牛客网BC107】矩阵转置
|
3月前
|
C语言
C语言--矩阵转置
C语言--矩阵转置
|
3月前
|
C语言
C语言学习记录——矩阵转换(定义一个数组实现或定义两个数组实现)
C语言学习记录——矩阵转换(定义一个数组实现或定义两个数组实现)
24 0
|
4月前
|
存储 人工智能 算法
C语言实现矩阵转置
C语言实现矩阵转置
187 0
|
4月前
|
机器学习/深度学习 人工智能 BI
矩阵操作C语言,小白必看的技能!
矩阵操作C语言,小白必看的技能!
|
10月前
|
C语言
C语言初阶,矩阵交换
C语言初阶,矩阵交换
C语言初阶,矩阵交换
|
10月前
|
C语言
【C语言刷题】喝汽水问题、上三角矩阵判定以及矩阵相等判定
【C语言刷题】喝汽水问题、上三角矩阵判定以及矩阵相等判定
70 0
【C语言刷题】喝汽水问题、上三角矩阵判定以及矩阵相等判定
|
C语言
二维数组实验题:按如下公式递归计算矩阵行列式的值:(C语言)
二维数组实验题:按如下公式递归计算矩阵行列式的值:(C语言)
208 1
二维数组实验题:按如下公式递归计算矩阵行列式的值:(C语言)
|
11月前
|
C语言
C语言之实现矩阵(3行3列)的转置(即行列互换)
C语言之实现矩阵(3行3列)的转置(即行列互换)
450 0