在指针的帮助下,我试图找到并比较5x5矩阵的主对角线和第二对角线的总和。这些数字是随机生成的
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<div ng-app="app" ng-controller="myCtrl">
<textarea ng-keypress="add()" rows="3"></textarea>
</div>
问题是主对角线的总和大于它应该是
的51答案 0 :(得分:3)
s1
和s2
都未初始化。在使用语句0
和s1+=a[i][i];
之前,您需要使用s2+=a[i][4-i];
对其进行初始化。
int i, s1 = 0, s2 = 0, j, a[5][5];
我还建议使用
a[i][j] = rand();
而不是
*(*(a+i)+j)=rand();
访问数组成员。
答案 1 :(得分:2)
您尚未将s1,s2初始化为零
s1+=a[i][i]; // main diagonal
s2+=a[i][4-i]; // second diagonal
在这些陈述之前
答案 2 :(得分:0)
documentBase64
----&gt; *(*(a+i)+j)=rand();
a[i][j]=rand()%100;
-----&gt; printf("%d ",*(*(a+i)+j));
printf("%d ", a[i][j]);
s1 = s2 = 0;
答案 3 :(得分:0)
对于根据C标准函数的启动器,没有参数的main应声明为
int main( void )
其次,最好使用命名常量而不是幻数。因此,您可以为幻数5定义名为constant N
的示例。在这种情况下,您的程序将更加灵活,并且可以轻松修改。
对于总和,最好使用更大的整数类型long long int
。否则可能发生溢出。
您应该在程序中使用变量的点附近初始化变量。如果您的编译器支持C99,那么您可以声明并初始化使用它们的变量。
您可以限制矩阵元素的最大值。
程序可以按以下方式查看。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 5
#define VALUE_MAX 100
int main(void)
{
int a[N][N];
size_t i, j;
long long int s1, s2;
srand( ( unsigned int )time( NULL ) );
printf( "The matrix is:\n" );
for ( i = 0; i < N; i++ )
{
printf ( "\n\n" );
for ( j = 0; j < N; j++ )
{
*( *( a + i ) + j ) = rand() % VALUE_MAX;
printf ( "%d ", *( *( a + i ) + j ) );
}
}
s1 = 0ll;
s2 = 0ll;
for ( i = 0; i < N; i++ )
{
s1 += a[i][i]; // main diagonal
s2 += a[i][N - i - 1]; // second diagonal
}
printf( "\n\nThe sum 1: %lld\nThe sum 2: %lld\n", s1, s2 );
if ( s1 == s2 )
{
puts( "They are the same" );
}
return 0;
}
它的输出可能看起来像
The matrix is:
55 81 79 14 75
89 70 41 27 73
94 14 79 85 45
66 92 27 90 67
14 85 79 53 83
The sum 1: 377
The sum 2: 287
或者如果您的编译器支持C99,那么程序可能看起来像
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 5
#define VALUE_MAX 100
int main(void)
{
int a[N][N];
srand( ( unsigned int )time( NULL ) );
printf( "The matrix is:\n" );
for ( size_t i = 0; i < N; i++ )
{
printf ( "\n\n" );
for ( size_t j = 0; j < N; j++ )
{
*( *( a + i ) + j ) = rand() % VALUE_MAX;
printf ( "%d ", *( *( a + i ) + j ) );
}
}
long long int s1 = 0ll;
long long int s2 = 0ll;
for ( size_t i = 0; i < N; i++ )
{
s1 += a[i][i]; // main diagonal
s2 += a[i][N - i - 1]; // second diagonal
}
printf( "\n\nThe sum 1: %lld\nThe sum 2: %lld\n", s1, s2 );
if ( s1 == s2 )
{
puts( "They are the same" );
}
return 0;
}