题目1·幻方矩阵
检验并打印幻方矩阵
幻方矩阵是指该矩阵中每一行、每一列、每一对角线上的元素之和都是相等的。从键盘输入一个5×5的矩阵并将其存入一个二维整型数组中,检验其是否为幻方矩阵,并将其按指定格式显示到屏幕上。
输入格式: “%d”
输出格式:
如果是幻方矩阵,输出提示信息: “It is a magic square!\n”
矩阵元素的输出: “%4d”(换行使用"\n")
如果不是幻方矩阵,输出提示信息: “It is not a magic square!\n”
输入样例1:
17_24_1_8_15
23_5_7_14_16
4_6_13_20_22
10_12_19_21_3
11_18_25_2_9
(输人样例中“_”代表空格)
输出样例1:
It is a magic square!
**17**24***1***8**15
**23***5***7**14**16
***4***6**13**20**22
**10**12**19**21***3
**11**18**25***2***9
(输出样例中“*”代表空格)
输入样例2:
1_0_1_6_1
3_1_1_1_1
1_1_1_1_2
1_1_1_1_1
9_1_7_1_1
(输人样例中“_”代表空格)
输出样例2:
It is not a magic square!
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
(输人样例中“_”代表空格,输出样例中“*”代表空格)
程序
#include <stdio.h>
#include <stdlib.h>
#define N 10
void FindSaddlePoint(int a[][N], int m, int n);
void FindSaddlePoint(int a[][N], int m, int n)
{
int max, min, x, y, k, l , p, q, r;
for(p = 0; p < m; p++)
{
max = a[p][0];
x = p;
y = 0;
for(q = 0; q < n; q++)
{
if(a[p][q] > max)
{
max = a[p][q];
x = p;
y = q;
}
}
min = a[0][y];
k = 0;
l = y;
for(r = 0; r < m; r++)
{
if(a[r][y] < min)
{
min = a[r][y];
k = r;
l = y;
}
}
if(x == k && y == l)
{
printf("a[%d][%d] is %d\n", x, y, a[x][y]);
return;
}
}
printf("No saddle point!\n");
return;
}
int main()
{
int m,n,i,j,a[N][N];
printf( "Input m,n:\n");
scanf( "%d,%d",&m,&n);
printf( "Input matrix:\n" );
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
FindSaddlePoint(a, m, n);
return 0;
}
题目2·鞍点
请编程找出一个M*N矩阵中的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。如果矩阵中没有鞍点,则输出“No saddle point!”
已知函数原型:
void FindSaddlePoint(int a[][N], int m, int n);
在该函数中输出有无鞍点的信息。
程序运行结果示例1:
Input m,n:
3,3↙
Input matrix:
1 2 3↙
4 5 6↙
7 8 9↙
a[0][2] is 3
程序运行结果示例2:
Input m,n:
3,4↙
Input matrix:
3 4 7 5↙
0 1 8 2↙
9 3 2 6↙
No saddle point!
输入提示: “Input m,n:\n”“Input matrix:\n"
输入格式:
输入矩阵大小: “%d,%d”
输入矩阵元素: “%d”
输出格式:
找到鞍点的输出格式:“a[%d][%d] is %d\n”
没找到鞍点的输出格式:“No saddle point!\n”
程序
#include <stdio.h>
#include <stdlib.h>
#define N 10
void FindSaddlePoint(int a[][N], int m, int n);
void FindSaddlePoint(int a[][N], int m, int n)
{
int max, min, x, y, k, l , p, q, r;
for(p = 0; p < m; p++)
{
max = a[p][0];
x = p;
y = 0;
for(q = 0; q < n; q++)
{
if(a[p][q] > max)
{
max = a[p][q];
x = p;
y = q;
}
}
min = a[0][y];
k = 0;
l = y;
for(r = 0; r < m; r++)
{
if(a[r][y] < min)
{
min = a[r][y];
k = r;
l = y;
}
}
if(x == k && y == l)
{
printf("a[%d][%d] is %d\n", x, y, a[x][y]);
return;
}
}
printf("No saddle point!\n");
return;
}
int main()
{
int m,n,i,j,a[N][N];
printf( "Input m,n:\n");
scanf( "%d,%d",&m,&n);
printf( "Input matrix:\n" );
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
FindSaddlePoint(a, m, n);
return 0;
}
题目3·矩阵转置
某二维数组存放的数据构成一个nn的方阵,其中n<=5。写程序,从键盘输入n的值(n<=5),该nn矩阵中各元素的值按下面的公式计算:
a[i][j] = i * n + j + 1
其中,a[i][j]表示第i行第j列的元素。要求分别输出该矩阵和它的转置矩阵。
注意:定义数字大小N时,请用
#define N 10
输入格式: “%d”
输出提示:“The original matrix is:\n”
输出提示:“The changed matrix is:\n”
输出格式: 矩阵的列与列之间为%3d,行与行之间为\n
输入样例1:
5↙
输出样例1:
The_original_matrix_is:
__1__2__3__4__5
__6__7__8__9_10
_11_12_13_14_15
_16_17_18_19_20
_21_22_23_24_25
The_changed_matrix_is:
__1__6_11_16_21
__2__7_12_17_22
__3__8_13_18_23
__4__9_14_18_24
__5_10_15_20_25
(输出样例中下划线“_”代表空格)
输入样例2:
4↙
输出样例2:
The original matrix is:
__1__2__3__4
__5__6__7__8
__9_10_11_12
_13_14_15_16
The changed matrix is:
__1__5__9_13
__2__6_10_14
__3__7_11_15
__4__8_12_16
程序
#include <stdio.h>
#include <stdlib.h>
#define N 10
int main()
{
int n,a[N][N],i,j,m=1;
scanf("%d",&n);
printf("The original matrix is:\n");
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
a[i][j] = i * n + j + 1;
printf("%3d",a[i][j]);
}
printf("\n");
}
printf("The changed matrix is:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%3d",a[j][i]);
}
printf("\n");
}
return 0;
}
题目4·蛇形矩阵
从键盘任意输入一个自然数n(n表示矩阵的大小,假设不超过100),请编程输出一个n*n
的蛇形矩阵。如果输入的n不是自然数或者输入了不合法的数字,则输出"Input error!"。
函数原型: void ZigzagMatrix(int a[][N], int n);
函数功能:计算n*n
的蛇形矩阵
提示:用两个双重循环分别计算n*n矩阵的左上三角和右下三角,设置一个计数器从1开始记录当前要写入矩阵的元素值,每次写完一个计数器加1,在计算左上角和右下角矩阵元素时,分奇数和偶数两种情况考虑待写入的元素在矩阵中的行列下标位置。
程序运行结果示例1:
Input n:
5↙
1 2 6 7 15
3 5 8 14 16
4 9 13 17 22
10 12 18 21 23
11 19 20 24 25
程序运行结果示例2:
Input n:
4↙
1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16
程序运行结果示例3:
Input n:
-5↙
Input error!
程序运行结果示例4:
Input n:
105↙
Input error!
程序运行结果示例5:
Input n:
w↙
Input error!
输入提示信息:“Input n:\n”
输入错误提示信息:“Input error!\n”
输入格式: “%d”
输出格式:"%4d"
数据换行: “\n”
程序
#include <stdio.h>
#define N 100
void ZigzagMatrix(int a[][N], int n);
void ZigzagMatrix(int a[][N], int n)
{
int i,j,count,temp;
//处理左上三角,从a[0][0]开始正序输出
for(i=0;i<n;i++)
{
if(i%2==0)
{
temp=i*(i+1)/2+1;
a[i][0]=temp;
for(j=1;j<=i;j++)
{
temp++;
a[i-j][j]=temp;
}
}
if(i%2==1)
{
temp=i*(i+1)/2+1;
a[0][i]=temp;
for(j=1;j<=i;j++)
{
temp++;
a[j][i-j]=temp;
}
}
}
//处理右下三角,从a[n][n]开始倒序输出
for(i=0;i<n-1;i++)
{
if(i%2==0)
{
temp=n*n-i*(i+1)/2;
a[n-1-i][n-1]=temp;
for(j=1;j<=i;j++)
{
temp--;
a[n-1-i+j][n-1-j]=temp;
}
}
if(i%2==1)
{
temp=n*n-i*(i+1)/2;
a[n-1][n-1-i]=temp;
for(j=1;j<=i;j++)
{
temp--;
a[n-1-j][n-1-i+j]=temp;
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%4d", a[i][j]);
}
printf("\n");
}
}
int main()
{
int n,s;
int a[N][N] = {0};
printf("Input n:\n");
s = scanf("%d", &n);
if(s < 1 || n < 0 || n > 100)
{
printf("Input error!\n");
}
else
{
ZigzagMatrix(a, n);
}
return 0;
}