循环和总和给出了未经检验的结果

时间:2017-05-11 07:26:12

标签: c pointers sum

这是我的代码

在指针的帮助下,我试图找到并比较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

4 个答案:

答案 0 :(得分:3)

s1s2都未初始化。在使用语句0s1+=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)

你可以这样做:

  1. documentBase64 ----&gt; *(*(a+i)+j)=rand();
  2. a[i][j]=rand()%100; -----&gt; printf("%d ",*(*(a+i)+j));
  3. 添加printf("%d ", a[i][j]);
  4. 然后以下可行。

    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;
}