8.9
1 #include <stdio.h>
2 int Sum(int arr[][4], int x){ //二维数组传参 列的参数不能空;
3 int sum1 = 0, sum2 = 0, l, j;
4
5 for(l = 0; l < x; l++){
6 sum1+= arr[l][l];
7 }
8 for(j = 0; j < x; j++){
9 sum2+= arr[x-1-j][j];
10 }
11 return sum1+sum2;
12 }
13
14 int main()
15 {
16 int n, i, j, z;
17
18 printf("请输入每一行矩阵元素的数量:\n");
19 scanf("%d", &n);
20
21 int a[][10];
22 do{
23 printf("请输入矩阵的数值:\n");
24 for(i = 0; i < n; i++){
25 for(j = 0; j < n; j++){
26 scanf("%d", &a[i][j]);
27 printf("%d ", a[i][j]);
28 }
29 printf("\n");
30 }
31 }while (n<1);
32
33 z = Sum(a, n);
34
35 printf("对角线上所有元素之和是:%d\n", z);
36
37 return 0;
38 }
39
40
8.10
还是不知道怎么用函数来写,常规方法先不写了,后面再补;
8.11
1 #include <stdio.h>
2 int main()
3 {
4 int n, i, j, k, sum1 = 0, sum2 = 0, b, c;
5 printf("请输入行数:\n");
6 scanf("%d", &n);
7 int a[][10];
8
9 for(k = 0; k < n; k++){ //先设置矩阵的对角线和第一列的数字全为1同时计算和;
10 a[k][0] = 1;
11 a[k][k] = 1;
12 sum1=sum1+a[k][0]+a[k][k]-1;
13 }
14
15 for(i = 2; i < n; i++){ //通过观察每一行除了1以外的元素规律循环赋值;
16 for(j = 1; j < i; j++){
17 a[i][j] = a[i-1][j-1]+a[i-1][j];
18 sum2+=a[i][j]; //计算和;
19 }
20 }
21 printf("%d %d\n",sum1,sum2); //验证下每一步加和是否正确;
22 for(b = 0; b < n; b++){
23 for(c = 0; c < b+1; c++){
24 printf("%d ", a[b][c]);
25 }
26 printf("\n");
27 }
28 printf("总和为:%d \n",sum1+sum2);
29
30 return 0;
31 }
32
通过观察可知该矩阵存在一定规律,首先第一列以及对角线的元素都是1,其次其他的元素都是上一行前一列元素和相同列元素相加的和,因此可以通过两步来输出这个矩阵,顺便可以完成两部分的加和计算,最后的总和自然也就是这两部分的总和了,题目相对来说不算难,只不过需要想清楚规律,就可以按部就班的写出来了,不过写程序的过程中也要注意细节哦。
不过不知道怎么用函数来写,会的麻烦评论区留言分享。