这个题目是求矩阵对角线的和
#include <stdio.h>
int main()
{
int a[3][3] = { 0 }, i, sum=0;
int dj(int(*)[3], int*);
int(*p)[3] = a;
int f = 0;
int* b = &f;
for (i = 0; i < 3; i++)
{
printf("请矩阵输入第%d行元素:", i + 1);
scanf("%d %d %d",(*(p+i+1)+1), (*(p + i + 1) + 2), (*(p + i + 1) + 3));
}
sum = dj(p, b);
printf("主对角线之和:%d", sum);
printf("副对角线之和:%d\n", f);
return 0;
}
int dj(int(*a)[3], int* b)
{
int sum = 0, i, f = 0;
for (i = 0; i < 3; i++)
{
sum += a[i][i];
}
for (i = 0; i <3; i++)
{
f += a[i][2 - i];
}
*b = f;
return sum;
}
赋值那里不用指针却可以运行
for(i=0;i<3;i++)
{
printf("请矩阵输入第%d行元素:",i+1);
scanf("%d %d %d",&a[i][0],&a[i][1],&a[i][2]);
}
数组计数从0开始
比如int a[3];
a[0]=a+0;
a[1]=a+1;
a[2]=a+2;
scanf("%d %d %d",&a[i][0],&a[i][1],&a[i][2]); 中的空格去掉
for(i=0;i<3;i++)
{
printf("请矩阵输入第%d行元素:",i+1);
scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]);
}
不大理解"对角线"的意思(还是说你的输出结果不对)
按我的理解进后代码即建议如下
(代码比较冗长,请见谅)
#include <stdio.h>
#define ARRAY_LENGTH 3 //矩阵边长 array->数组
void GetDiagonal(int[ARRAY_LENGTH][ARRAY_LENGTH], int*, int*); //函数声明放外面更容易区分 diagonal->对角线
int main()
{
//变量
int array[ARRAY_LENGTH][ARRAY_LENGTH] = { 0 };
int major = 0, minor = 0; //majior->主 minor->次
//输入
for (int i = 0; i < ARRAY_LENGTH; i++) //局部变量就让它呆里面好了, 对了,数组是从0开始计数的哦
{
for (int j = 0; j < ARRAY_LENGTH; j++)
{
printf("请输入第%d行第%d列元素:\t", i+1, j+1);
scanf_s("%d",&array[i][j]); //我个人认为p+i不如p[i]来的直观,代码毕竟是来读而不是来炫的对吧,而且极有可能漏掉一个‘&’
//我用的是高版本,_s指安全版本
}
}
//计算
GetDiagonal(array, &major, &minor);
//列出
printf("\n\n您输入的数组为:\n");
for (int i = 0; i < ARRAY_LENGTH; i++)
{
for (int j = 0; j < ARRAY_LENGTH; j++)
printf("%d\t", array[i][j]);
printf("\n");
}
//输出
printf("主对角线之和:%d\n", major); //我猜你说的是 ↖↘ 方向的对角线
printf("副对角线之和:%d\n", minor);
return 0;
}
/// <summary>
/// 计算对角线(当然,你可以直接把这个移到main()中,只要改一改就行)
/// </summary>
/// <param name="array">将数组传入</param>
/// <param name="pmajor">主对角线于此传出</param>
/// <param name="pminor">副对角线于此传出</param>
void GetDiagonal(int array[ARRAY_LENGTH][ARRAY_LENGTH], int* pmajor, int* pminor)
{
for (int i = 0; i < ARRAY_LENGTH; i++)
{
//主对角线
*pmajor += array[i][i]; //pmajor指向major,此处直接为major赋值
//副对角线
*pminor += array[ARRAY_LENGTH - i - 1][i]; //同一行,不过是从行末开始
}
}