//两个for循环和一个for循环为二维数组赋初值并求出正对角线元素之和
#include<stdio.h>
#include<stdlib.h>
#define N 10
//两个for循环为二维数组赋值
void for2(int a[N][N])
{
int sum=0;
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
// a[i][j]=++sum;//适合在一个for循环里面给二维数组赋值 ,虽然也可以!
a[i][j]=i*N+(j+1);
printf("%-5d",a[i][j]);
}
printf("\n");
}
}
//一个for循环给二维数组赋值
void for1(int a[N][N])
{
int sum=0;
for(int i=0;i<N*N;i++)
{
// a[i][j]=++sum;//错误 ,a[i]也是错误的,因为形参是二位数组,也没有j
a[i/N][i%N]=++sum;
printf("%-5d",a[i/N][i%N]);//打印a[i][j]
//每行有N个,每N个换行
if((i+1)%N==0)
{
printf("\n");
}
}
}
//打印正对角线元素之和
void sum_zdjx(int a[N][N])
{
int sum = 0;
for(int i=0;i<N;i++)
{
sum+=a[i][i];
}
printf("正对角线元素之和sum=%d\n",sum);
}
int main()
{
int a[N][N];
// printf("用一维数组方式【即一个for循环】初始化二维数组\n");
// for1(a);
printf("二维数组方式【双重for循环】初始化二维数组\n");
for2(a);
sum_zdjx(a);
}