目录
实验7-2-1 求矩阵各行元素之和
实验7-2-2 矩阵运算
实验7-2-3 求矩阵的局部极大值
实验7-2-5 判断上三角矩阵
实验7-2-6 打印杨辉三角
实验7-2-7 方阵循环右移
实验7-2-8 找鞍点
实验7-2-1 求矩阵各行元素之和
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
int m,n;
scanf("%d %d",&m,&n);
for(int i=0;i<m;i++){
int a;
int sum=0;//每行的和
for(int j=0;j<n;j++){
scanf("%d",&a);
sum=sum+a;
}
printf("%d\n",sum);
}
return 0;
}
实验7-2-2 矩阵运算
//遍历每个元素,i代表行,j代表列,
//如果i+j==n-1||i==n-1||j==n-1就不加这些元素
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
int n;
scanf("%d",&n);
int a=0,sum=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
scanf("%d",&a);
if(i+j!=n-1&&i!=n-1&&j!=n-1){
sum=sum+a;
}
}
}
printf("%d",sum);
return 0;
}
实验7-2-3 求矩阵的局部极大值
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
int m,n;
scanf("%d %d",&m,&n);
int a[m][n];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
int flag=0;
for(int i=1;i<m-1;i++){
for(int j=1;j<n-1;j++){
if(a[i][j]>a[i-1][j]&&a[i][j]>a[i][j-1]&&a[i][j]>a[i+1][j]&&a[i][j]>a[i][j+1]){
printf("%d %d %d\n",a[i][j],i+1,j+1);
flag=1;
}
}
}
if(flag==0){
printf("None %d %d",m,n);
}
return 0;
}
#include<stdio.h>
int main(){
int i,j,k;
for( i=0;i<10;i++){
for( j=0;j<20;j++){
for( k=0;k<30;k++){
if(i==2&&j==5&&k==10){
goto out;//去往标识符
}
}
}
}
out://(标识符)
printf("%d,%d,%d",i,j,k);
}
实验7-2-5 判断上三角矩阵
//下半区全都是0,a[i][j]==0,当i>j
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
int x;
scanf("%d",&x);
for(int k=0;k<x;k++){//输入的x个矩阵
int n;
scanf("%d",&n);
int a[n][n];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}//输入矩阵
int flag=1;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i>j&&a[i][j]!=0){
printf("NO\n");
flag=0;
goto haha;
}
}
}//判断矩阵是不是上三角
haha:
if(flag==1){
printf("YES\n");
}
}
return 0;
}
实验7-2-6 打印杨辉三角
这题好难,遇见这种要找空格规律的最麻烦了。
杨辉三角的特点:
- 下三角矩阵
- 第一列和主队角线元素为1
- 其他元素=上面的元素+左上角的元素
随后的每一行,开头和最后的数字都是1,其他的每个数都是它左上方和右上方的数之和,就是说除每行最左侧与最右侧的数字以外,每个数字等于它的左上方与上方两个数字之和。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
int N;
scanf("%d",&N);
/*if(N==1){
printf(" 1");
}
if(N==2){
printf(" 1\n");
printf(" 1 1\n");
}
*///先得4分再说
int a[N][N];
int i, j;
for( i = 0; i < N; i++ ){
for( j = 0; j < N; j++ ){
if( j == 0 || j == i ){
a[i][j] = 1;
}
}
}
for( i = 2; i < N; i++ ){
for( j = 1; j < i; j++ ){
a[i][j] = a[i-1][j-1] + a[i-1][j];
}
}
for( i = 0; i < N; i++ ){//每行先打印N-i-1个空格
for(int k=0;k<N-i-1;k++){
printf(" ");
}
//输出矩阵的下三角
for( j = 0; j <= i; j++ ){
printf( "%4d", a[i][j] );//每个数字固定4位
}//不能写" %d",因为后面的数字有可能两位,三位。
printf("\n");
}
return 0;
}
实验7-2-7 方阵循环右移
//移动每行的元素,j列数变成(j+2)%(n)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
int m,n;
scanf("%d %d",&m,&n);
int a[n][n];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
int b[n][n];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
b[i][(j+m)%(n)]=a[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf("%d ",b[i][j]);
}
if(i<n-1){
printf("\n");
}
}
return 0;
}
实验7-2-8 找鞍点
//遍历每行,再遍历最大值所在的列看看是不是最小的
//移动每行的元素,j列数变成(j+2)%(n)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
int n;
scanf("%d",&n);
int a[n][n];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
int flag;
int i;
int lie=0;
for(i=0;i<n;i++){
int max=a[i][0];
for(int j=0;j<n;j++){
if(a[i][j]>=max){
max=a[i][j];
lie=j;
}
}//每一行
flag=1;
for(int k=0;k<n;k++){//遍历最大值所在的列
if(a[k][lie]<max){
flag=0;
break;
}
}
if(flag==1){
break;
}
}
if(flag){
printf("%d %d",i,lie);
}else{
printf("NONE");
}
//循环里面的变量只是暂时的
return 0;
}