初学C语言,程序代码只是单纯的实现功能,并未考虑Bug问题。
--------------------------------------------------------------------------------------------------------------
1.对N*N的二维数组求二维数组右上半三角元素的值乘以m.并输出新的二维数组元素。
例如:若m的值为2,a数组中的值为:
1 9 7
a= 2 3 8
4 5 6
计算后:
2 18 14
a= 2 6 16
4 5 12
#define N 3
int main()
{
int a[N][N],m;
int i,j;
scanf("%d",&m);
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&a[i][j]);
if(j>=i)//根据规律可得出,当j>=i时,乘以相应的m值就能得出相应的结果
a[i][j]*=m;
}
}
printf("\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}
右上半部分的值要乘以m,即当j>=i的时候开始进行。
2.写一程序,定义一个N×N的二维数组,计算数组周边元素的平均值。
例如:a数组中的值为:
0 1 2 7 9
1 9 7 4 5
2 3 8 3 1
4 5 6 8 2
5 9 1 4 1
则:a数组周边元素的平均值为3.375
#define N 5 int main() { int a[N][N]sum=0; int i,j,log=0,x; float average; for(i=0;i<N;i++) { for(j=0;j<N;j++) scanf("%d ",&a[i][j]); printf("\n"); } for(i=0;i<N;i++) { for(j=0;j<N;j++) sum+=a[i][j]; } for(i=1;i<N-1;i++) { for(j=1;j<N-1;j++) log+=a[i][j]; } x=sum-log; average=x/(float) (4*N-4); printf("%.3f",average); return 0; }
3.编写程序实现矩阵(3行3列)的转置(即行列互换)。
例:若输入下面的矩阵:
100 200 300
400 500 600
700 800 900
转置后:
100 400 700
200 500 800
300 600 900
#include <stdio.h> #include<stdlib.h> #define N 3 int main() { int a[N][N]={{100,200,300},{400,500,600},{700,800,900}}; int i=0,j=0,temp; for(i=0;i<N;i++) { for(j=i;j<N;j++) { temp=a[i][j]; a[i][j]=a[j][i]; a[j][i]=temp; } } for(i=0;i<N;i++) { for(j=0;j<N;j++) { printf("%d ",a[i][j]); } printf("\n"); } return 0; }
4.写一程序,找出N×N矩阵中每列元素中的最大值,并按顺序依次存放于一维数组b中。
#include<stdio.h>
#define N 3
int main()
{
int a[N][N],b[3];
int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%d",&a[i][j]);
for(j=0;j<N;j++)
{
b[j]=a[0][j];
for(i=0;i<N;i++)
{
if(b[j]<a[i][j])
b[j]=a[i][j];
}
}
printf("\n");
for(i=0;i<N;i++)
printf("%d ",b[i]);
}
5.写一程序建立一个N×N的矩阵。矩阵元素的构成规律是:最外层元素的值全部为1;从外向内第2层元素的值全部为2;第3层元素的值全部为3,……依此类推。
例如:若N=5,生成的矩阵为:
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
#include<stdio.h>
int main()
{
int N,a[100][100]={0};
int i,j,k;
scanf("%d",&N);
printf("\n");
for(i=0;i<N;i++)
for(j=i; j<N-i; j++)
{
a[i][j]=i+1;
a[N-i-1][j]=i+1;
for(k=i+1; k<N-i; k++)
{
a[k][i]=i+1;
a[k][N-i-1]=i+1;
}
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
6.写一程序,判断N×N(规定N为奇数)的矩阵是否是“幻方”。“幻方”的判断条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等。
例如:以下3×3的矩阵就是一个“幻方”:
4 9 2
3 5 7
8 1 6
#include<stdio.h>
#define N 3
int main()
{
int a[N][N];
int i,j,m=0,n=0,k=0;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%d",&a[i][j]);
for(i=0;i<N;i++)
{
m+=a[i][i];
n+=a[i][N-i-1];
}
if(m==n)
{
for(i=0;i<N;i++)
{
for(i=0,j=N;i<N;i++)
{
n+=a[i][j];
k+=a[j][i];
}
}
if ((n !=m)&&(k!= m))
printf("该数组为幻方数组");
}
return 0;
}
7.写一程序,将4×3矩阵中第k行的元素与第0行元素交换。
例如:有下列矩阵:
1 2 3
4 5 6
7 8 9
10 11 12
若k为2,程序执行结果为:
7 8 9
4 5 6
1 2 3
10 11 12
#include<stdio.h>
int main()
{
int a[4][3];
int i,j,b[3],k;
for(i=0;i<4;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
printf("please input K value:");
scanf("%d",&k);
printf("\n");
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
{
b[j]=a[0][j];
a[0][j]=a[k][j];
a[k][j]=b[j];
printf("%d ",a[i][j]);
}
printf("\n");
}
printf("\n");
return 0;
}
8.写一程序,求矩阵a[N][N]中每行的最小值,结果存放到数组b中。
例如:若
1 4 3 2
a= 8 6 5 7
11 10 12 9
13 16 14 15
则结果b数组应该为1,5,9,13
#include<stdio.h>
#define N 4
int main()
{
int a[N][N],b[4];
int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%d",&a[i][j]);
for(i=0;i<N;i++)
{
b[i]=a[i][0];
for(j=0;j<N;j++)
{
if(b[i]>a[i][j])
b[i]=a[i][j];
}
}
printf("\n");
for(i=0;i<N;i++)
printf("%d ",b[i]);
return 0;
}
9.写一程序计算N×N矩阵的主对角线元素和反向对角线元素之和,要求先累加主对角线元素中的值,再累加反向对角线元素中的值。
例如:若N=3,有下列矩阵:
1 2 3
4 5 6
7 8 9
首先累加1,5,9,然后累加3,5,7,结果为30。
#include<stdio.h>
#define N 3
int main()
{
int a[N][N];
int i,j,m=0,n=0;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%d",&a[i][j]);
for(i=0;i<N;i++)
{
m+=a[i][i];
n+=a[i][N-i-1];
}
printf("\n");
printf("%d",m+n);
return 0;
}
10.写一程序,实现将N×N矩阵中元素的值按列向右移动1个位置,右边被移出矩阵的元素的绕回左边第1列。
例如:N=3,有下列矩阵
1 2 3
4 5 6
7 8 9
计算结果为:
3 1 2
6 4 5
9 7 8
#include<stdio.h>
#define N 3
int main()
{
int a[N][N],temp=0;
int i=0,j=0;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
scanf("%d",&a[i][j]);
}
for(i=0;i<N;i++)
{
temp=a[i][N-1];//取得0行最后一个数字
for(j=N-1;j>0;j--)//从最后一行开始遍历
a[i][j]=a[i][j-1];//a[0][2]=a[0][1],遍历所有行,将每行第一个数赋值给第二个数
a[i][0]=temp;//将每行的最后一个数给每行第一个数
}
printf("\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}