矩阵形式:
1 1 1 1 1
2 1 1 1 1
3 2 1 1 1
4 3 2 1 1
5 4 3 2 1
完整代码:
/*编写以下函数
1.在一个二维数组中形成如以下形式的 n 阶矩阵:
1 1 1 1 1
2 1 1 1 1
3 2 1 1 1
4 3 2 1 1
5 4 3 2 1
2.去掉靠边元素,生成新的 n-2 阶矩阵;
3.求矩阵主对角线下元素之和:
4.以方阵形式输出数组
*/#include<stdio.h>
#include<stdlib.h>//全局变量,所有函数都可以访问到
int **arr;//创建n阶矩阵
void func1(int n){// 要使用malloc函数动态分配内存arr = (int **)malloc(n * sizeof(int *));for(int i = 0; i < n; i++){arr[i] = (int *)malloc(n * sizeof(int));}// 创建数组for (int i = 0; i < n; i++){//先把所有的元素都赋值为1for (int k = 0; k < n; k++){arr[i][k]=1;}//让后按照三角形的规律赋值for (int j = 0; j < i; j++){arr[i][j]=i+1-j;}}
}//创建n-2阶矩阵
void func2(int n){//只需要调用n-2时的func1就可以func1(n-2);
}//求矩阵主对角线下元素之和
int func3(int n){int sum=0;//循环累加对角线下的所有元素,只需要j<i就可以for (int i = 0; i < n; i++){ for (int j = 0; j < i; j++){sum+=arr[i][j];}}return sum;
}//以方阵形式输出数组
void func4(int n){// 打印矩阵printf("该矩阵为:\n");for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){printf("%d ", arr[i][j]);}printf("\n");}
}int main(){int n=0;printf("请输入矩阵的行数:");scanf("%d",&n);//创建n阶矩阵func1(n);// 打印矩阵func4(n);printf("该矩阵主对角线下元素之和为:%d\n",func3(n));//生成新的矩阵func2(n);//打印新的矩阵func4(n-2);printf("该矩阵主对角线下元素之和为:%d\n",func3(n-2));return 0;
}