C 练习实例38
题目:求一个3*3矩阵对角线元素之和
程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。
实例
// Created by www.facesoho.com on 15/11/9.
// Copyright © 2015年 小鸟启蒙. All rights reserved.
//
#include<stdio.h>
#define N 3
int main()
{
int i,j,a[N][N],sum=0;
printf("请输入矩阵(3*3):\n");
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%d",&a[i][j]);
for(i=0;i<N;i++)
sum+=a[i][i];
printf("对角线之和为:%d\n",sum);
return 0;
}
以上实例输出结果为:
请输入矩阵(3*3): 1 2 3 4 5 6 7 8 9 对角线之和为:15

文人墨客
参考了 麦穗melody 同学的,做了些改进,N 的取值没有限制:
#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 3 int main(){ int i,j; int a[N][N]; int sum=0; srand(time(NULL)); //随机数种子 for(i=0;i<N;i++){ for(j=0;j<N;j++){ a[i][j]=rand()%(10); //产生0-10以内的随机数 if(i==j || i+j==N-1) sum+=a[i][j]; //边产生边相加 } } printf("打印随机%d阶矩阵:\n",N); for(i=0;i<N;i++){ for(j=0;j<N;j++){ printf("%3d ",a[i][j]); } printf("\n"); } printf("%d阶矩阵对角线元素之和为:%d",N,sum); return 0; }文人墨客
参考方法:
#include<stdio.h> int tangle_sum(int *a,int n) { int i; int sum = 0; for(i = 0; i < n; i++) sum += a[i*n + i]; return sum; } int main(void) { int a[3][3],ret; int *p = *a; printf("请输入矩阵(3*3):\n"); for(int i = 0;i < 3; i++) { for(int j = 0; j < 3; j++) { scanf("%d",&a[i][j]); } } ret = tangle_sum(p,3); printf("对角线之和为:%d",ret); return 0; }文人墨客
求 N*N 阶矩阵对角线元素之和(N 为奇数):
#include<stdio.h> #include<stdlib.h> #include<time.h> #define N 5 int main() { int i=0,j=0; int a[N][N]; int sum=0; srand(time(NULL)); //srand()函数是随机函数rand()函数的种子函数,以time(NUL // L)为种子,可使rand()每次产生随机数不同; for(i=0;i<N;i++){ for(j=0;j<N;j++){ a[i][j]=rand()%(N*N+1); //rand()%31是产生0-30的随机数 } } printf("打印随机%d阶矩阵:\n",N); for(i=0;i<N;i++){ for(j=0;j<N;j++){ printf("%3d ",a[i][j]); if(j==N-1) printf("\n"); } } for(i=0;i<N;i++){ sum=sum+a[i][i]+a[i][N-1-i]; } sum=sum-a[(N-1)/2][(N-1)/2]; printf("%d阶矩阵对角线元素之和为:%d",N,sum); return 0; }