C语言矩阵算法集合
来源:互联网 发布:高中生物知乎 编辑:程序博客网 时间:2024/06/01 09:13
引用自:http://blog.csdn.net/iwm_next/article/details/7450640
矩阵:数学上,一个m×n矩阵乃一m行n列的矩形阵列。矩阵由数组成,或更一般的,由某环中元素组成。
0.矩阵N*N相乘
#include<stdio.h>int main(void){ int i,j,k; double a[3][3],b[3][3],c[3][3]; for(i=0;i<3;i++){ for(j=0;j<3;j++){ printf("Enter the number in a[%d][%d]\n",i,j); scanf("%lf",&a[i][j]); } } for(i=0;i<3;i++){ for(j=0;j<3;j++){ printf("Enter the number in b[%d][%d]\n",i,j); scanf("%lf",&b[i][j]); } } for(i=0;i<3;i++){ for(j=0;j<3;j++){ c[i][j]=0; for(k=0;k<3;k++){ c[i][j]=a[i][k]*b[k][j]+c[i][j]; } } } for(i=0;i<3;i++){ for(j=0;j<3;j++){ printf(" %lf",c[i][j]); } printf("\n"); } return 0;}
1,求矩阵转置问题
/*根据主函数,编写一下两个函数1:求数组a[4][4]主对角线上元素的和 ----区分主对角线和次对角线的区别2:实现对数组a[4][4]的矩阵转置处理*/#include<stdio.h>void convert(int *p) //数组转置{int i,j,t;for(i=0;i<4;i++)for(j=0;j<4;j++){t=*(p+4*i+j);*(p+4*i+j)=*(p+4*j+i);*(p+4*j+i)=t;}}int total(int a[][4],int n) //主对角线上元素的和{int i,sum=0;for(i=0;i<4;++i)if(a[i][i]!=0)sum+=a[i][i];return sum;}int total1(int a[][4],int n) //次对角线上元素之和{int i,j,sum=0;for(i=0;i<4;i++)for(j=0;j<4;j++){if((i+j)==3) sum+=a[i][j]; //此时仅当i+j=n-1的时候才是次对角线上的点}return sum;}void main(){static int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};int *p,i,sum,sum1;sum=total(a,4);sum1=total1(a,4);printf("主对角线之和:%d\n",sum);printf("次对角线之和:%d\n",sum1);p=*a;convert(p);printf("转置后的数组是:\n");for(i=0;i<4;++i)printf("%d %d %d %d \n",a[i][0],a[i][1],a[i][2],a[i][3]);}
2,求矩阵中最大值的问题
/*有一个3*4的矩阵,要求编程序求出其中值最大的那个元素的值,以及所在的行号和列号*/#include<stdio.h>void main(){int a[3][4],i,j;int colum,row;printf("please input the array:\n");for(i=0;i<3;i++)for(j=0;j<4;j++)scanf("%d",a[i][j]);printf("\n");int max=a[0][0]; //设定最大值是第一个数for(i=0;i<3;i++)for(j=0;j<4;j++)if(a[i][j]>max){max=a[i][j];colum=j;row=i;}printf("max=%d,colum=%d,row=%d",max,colum,row);}
3,找出m*n矩阵的鞍点
#include<stdio.h>#include<stdlib.h>#define M 3#define N 4void main(){int a[M][N],i,j,k;int max,t;for(i=0;i<M;i++)for(j=0;j<N;j++)scanf("%d",&a[i][j]);for(i=0;i<M;i++){max=0; //此时假设每一行的最大值是第一个数即a[i][0]for(j=i+1;j<N;j++) //找出列中的最大值{if(a[i][j]>a[i][max])max=j;}for(t=1,k=0;k<M&&t;k++) //判断是否在列中是不是最小值{if(a[k][max]<a[i][max]) //如果还存在数比a[k][max]的值还小,则置t=0,t=0; //t是一个标识,t=0 表示不存在,}}if(t) printf("yes,%d\n",a[i][max]);else printf("no");}4,矩阵的周边之和问题
/*编写函数实现计算任意N*4整型矩阵上的周边元素之和假设输入的数值1 2 3 45 6 7 89 10 11 1213 14 15 16*/#include<stdio.h>#define N 3int fun(int a[][4],int n){int i,sum=0;for(i=0;i<4;i++)sum+=a[0][i]+a[n-1][i]; //第一行和最后一行的和,此时的i代表的是列数for(i=1;i<n-1;i++)sum+=a[i][0]+a[i][3]; //第一列的的第二行开始到 n-1行的 和最后一列的的第二行开始到 n-1行的,此时的i代表的是行数return sum;}void main(){int i,j;int a[N][4];for(i=0;i<N;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);int s=fun(a,N);printf("矩阵N*4周边的元素之和为:%d",s);printf("\n");}
5.判断一个N*N的矩阵是否为对称矩阵,将原矩阵输出,判断结果输出
#include<stdio.h> #define N 10void main() { int a[N][N],i,j,k,n; scanf("%d",&n); for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&a[i][j]); for(i=0;i<n;i++) { for(j=i+1;j<n;j++) { if(a[i][j]==a[j][i]) k=1; else k=0; } } if(k=0) printf("bushi"); else printf("shi\n"); for(i=0;i<n;i++) for(j=0;j<n;j++) printf("%d",a[i][j]);}6,求一个4*3的矩阵各行元素的最大值,将原矩阵和求出的最大值全部输出
#include<stdio.h>void main() { int a[4][3],s[4],i,j,k; for(i=0;i<4;i++) for(j=0;j<3;j++) scanf("%d",*(a+i)+j); for(i=0;i<4;i++) { *(s+i)= *(*(a+i)); for(j=1;j<3;j++) if(*(s+i) < *(*(a+i)+j)) *(s+i)= *(*(a+i)+j); } for(i=0;i<4;i++) { printf("Row=%d Max=%d",i,s[i] ); printf("\n"); } }
7,求一个3*5的矩阵各列元素的最大值,将原矩阵和求出的最大值全部输出
#include<stdio.h>void main() { int a[3][5],s[3],i,j,k; for(i=0;i<3;i++) for(j=0;j<5;j++) scanf("%d",*(a+i)+j); for(i=0;i<3;i++) { *(s+i)= *(*(a+j)); for(j=1;j<5;j++) if(*(s+i) < *(*(a+i)+j)) *(s+i)= *(*(a+i)+j); } for(i=0;i<3;i++) { printf("Line=%d Max=%d",j,s[j] ); printf("\n"); }
8,求一个3*4的矩阵各列元素的平均值;将原矩阵和求出的平均值全部输出
#include<stdio.h>void main() { int a[4][3],s[4],i,j,k; for(i=0;i<4;i++) for(j=0;j<3;j++) scanf("%d",*(a+i)+j); for(i=0;i<4;i++) { k=0; for(j=0;j<3;j++) k+=a[i][j]; printf("第%d行的平均值是%d",i+1,k); printf("\n"); }}
9,求一个4*3的矩阵各行元素的平均值;将原矩阵和求出的平均值全部输出
#include<stdio.h>void main() { int a[4][3],s[4],i,j,k; for(i=0;i<4;i++) for(j=0;j<3;j++) scanf("%d",*(a+i)+j); for(i=0;i<4;i++) { k=0; for(j=0;j<3;j++) k+=a[i][j]; printf("第%d行的平均值是%d",i+1,k); printf("\n"); }}
0 0
- C语言矩阵算法集合
- 常见算法:c语言矩阵算法问题
- C语言实现矩阵连乘算法
- 北航机试c语言矩阵算法
- 矩阵分解算法集合
- C语言STRASSEN算法求8*8矩阵乘积
- c语言中关于杨氏矩阵的算法应用
- c语言矩阵相乘
- C语言矩阵相乘
- C语言矩阵乘法
- C语言-蛇形矩阵
- 矩阵相乘C语言
- 配合Kruskal算法不相交集合头文件C语言
- 配合Kruskal算法不相交集合实现文件C语言
- 常见基础算法大集合(C语言实现)
- c语言集合
- c语言指针集合
- c语言题目集合
- [译]【Storm入门指南】第三章 Topologies
- 黑马程序员一NSNumber, NSDate,NSValue
- Android问题】解决 Android SDK下载和更新失败“Connection to https://dl-ssl.google.com refused...
- [Leetcode]Populating Next Right Pointers in Each NodeI&II
- poj 3278 Catch That Cow 【bfs】
- C语言矩阵算法集合
- shader 算法 分析
- think in coding
- 陶昕然与相恋8年的男友何建泽领证 安小主终收获爱情
- C - Catch That Cow POJ3278
- 如何在Linux下使用rsync
- 如何为自己的php版本选择正确的xdebug版本
- 2015 完整安装 LNMP
- Sicily 1466. Taunt Exposure Estimation