初學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;
}