c语言编程,包括二维数组的输入,最大最小值,转置和对角线求和

有急用,谢谢了

(1) 输入2维数组的行数,列数,动态分配数组。或者你声明一个足够大的数组,不做动态分配
(2)输入 数据,按一行一行的顺序。
(3)假定 最大最小的初值 等于 a[0][0], 然后遍历数组,谁大于max 就变更为max新值,谁小于min 就变更为min新值,
(4)如果 NR==NC, 是方阵,可以用 a[j][i]=a[i][j]; 的方法转置。否则要开一个 NC*NR的矩阵做转置。
(5)求主副对角线之和,若 n 为奇数,求总和时,注意要扣除 重复点(交叉点)元素值。
#include <stdio.h>

main(){
int **a; // a[NR][NC] -- *a[NR] -- a[j][i]
int i,j,NR,NC,n;
int max,min,sum=0,t;
printf("input array N_row N_col:\n");
scanf("%d %d",&NR,&NC);
a = (int **) malloc(sizeof(int *) * NR);
for (j=0;j<NR;j++) a[j] = (int *) malloc(sizeof(int) * NC);
printf("================\n");
printf("input %d * %d array data:\n",NR,NC);
for (j=0;j<NR;j++) for (i=0;i<NC;i++) scanf("%d",&a[j][i]);
printf("================\n");
max=min=a[0][0];
for (j=0;j<NR;j++) for (i=0;i<NC;i++){
if (a[j][i]>max) max=a[j][i];
if (a[j][i]<min) min=a[j][i];
}
printf("max=%d; min=%d\n",max,min);
printf("================\n");
printf("befre:\n");
for (j=0;j<NR;j++) {
for (i=0;i<NC;i++) printf("%d ",a[j][i]); printf("\n");
}
printf("after:\n");
for (i=0;i<NC;i++){
for (j=0;j<NR;j++) printf("%d ",a[j][i]); printf("\n");
}
if (NR==NC){
n = NR;
printf("================\n");
for (j=0;j<n;j++)
for (i=0;i<j;i++){t=a[j][i];a[j][i]=a[i][j];a[i][j]=t;};
printf("after:\n");
for (j=0;j<n;j++) {
for (i=0;i<n;i++) printf("%d ",a[j][i]); printf("\n");
}
printf("================\n");
sum=0;
for (j=0;j<n;j++)for (i=0;i<n;i++) if (i==j) sum=sum+a[j][i];
for (j=0;j<n;j++)for (i=0;i<n;i++) if (i==n-j-1) sum=sum+a[j][i];
if (n%2==1)sum=sum-a[n/2][n/2];
printf("2 dia sum=%d\n",sum);
}
return 0;
}
温馨提示:答案为网友推荐,仅供参考
相似回答