C 循环和求和给出未扩展的结果 这是我的密码

C 循环和求和给出未扩展的结果 这是我的密码,c,pointers,sum,C,Pointers,Sum,在指针的帮助下,我试图找到并比较5x5矩阵的主对角线和第二对角线之和。数字是随机生成的 #包括 #包括 #包括 int main{ int i,s1,s2,j,a[5][5];; srand(时间(空)); printf(“矩阵为:\n”); 对于(i=0;ia[i][j]=rand()%100; printf(“%d”,*(*(a+i)+j));----->printf(“%d”,a[i][j]); 添加s1=s2=0; 那么下面的方法就行了。 #包括 #包括 #包括 int main() {

在指针的帮助下,我试图找到并比较5x5矩阵的主对角线和第二对角线之和。数字是随机生成的

#包括
#包括
#包括
int main{
int i,s1,s2,j,a[5][5];;
srand(时间(空));
printf(“矩阵为:\n”);
对于(i=0;i<5;i++){
printf(“\n\n”);
对于(j=0;j<5;j++){
*(*(a+i)+j)=兰德();
printf(“%d”,*(*(a+i)+j));
}
} 
对于(i=0;i<5;i++){
s1+=a[i][i];//主对角线
s2+=a[i][4-i];//第二对角线
}
printf(“\n\n总和1:%d\n总和2:%d”,s1,s2);
如果(s1==s2){
printf(“它们是相同的”);
}
返回0;
}

问题是主对角线的和比它应该的大51,s1和s2都是未初始化的。在语句
s1+=a[i][i]中使用之前,需要使用
0
初始化它们
s2+=a[i][4-i]

int i, s1 = 0, s2 = 0, j, a[5][5];  
我还建议使用

a[i][j] = rand();  
而不是

*(*(a+i)+j)=rand();  

访问数组成员。

s1
s2
都未初始化。在语句
s1+=a[i][i]中使用之前,需要使用
0
初始化它们
s2+=a[i][4-i]

int i, s1 = 0, s2 = 0, j, a[5][5];  
我还建议使用

a[i][j] = rand();  
而不是

*(*(a+i)+j)=rand();  

访问数组成员。

您尚未将s1、s2初始化为零

s1+=a[i][i];  // main diagonal
s2+=a[i][4-i]; // second diagonal

在这些声明之前,您没有将s1、s2初始化为零

s1+=a[i][i];  // main diagonal
s2+=a[i][4-i]; // second diagonal
在这些声明之前

您可以执行以下操作:
  • *(*(a+i)+j)=rand()--->
    a[i][j]=rand()%100
  • printf(“%d”,*(*(a+i)+j))--->
    printf(“%d”,a[i][j])
  • 添加
    s1=s2=0
  • 那么下面的方法就行了。
    #包括
    #包括
    #包括
    int main()
    {
    int i,s1,s2,j,a[5][5];;
    srand(时间(空));
    printf(“矩阵为:\n”);
    对于(i=0;i)您可以执行以下操作:
    
  • *(*(a+i)+j)=rand();
    --->
    a[i][j]=rand()%100;
  • printf(“%d”,*(*(a+i)+j));
    ----->
    printf(“%d”,a[i][j]);
  • 添加
    s1=s2=0;
  • 那么下面的方法就行了。
    #包括
    #包括
    #包括
    int main()
    {
    int i,s1,s2,j,a[5][5];;
    srand(时间(空));
    printf(“矩阵为:\n”);
    
    对于(i=0;i,对于符合C标准功能的起动器,不带参数的主要参数应声明如下

    int main( void ) 
    
    其次,最好使用命名常量而不是幻数。因此,您可以为幻数5定义命名常量
    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;
    }
    
    或者,如果您的编译器支持C99,那么该程序可以如下所示

    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
    
    #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;
    }
    
    #包括
    #包括
    #包括
    #定义n5
    #定义最大值为100
    内部主(空)
    {
    INTA[N][N];
    srand((无符号整数)时间(NULL));
    printf(“矩阵为:\n”);
    对于(大小i=0;i
    对于符合C标准功能的起动器,不带参数的主要参数应声明如下

    int main( void ) 
    
    其次,最好使用命名常量而不是幻数。因此,您可以为幻数5定义命名常量
    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;
    }
    
    或者,如果您的编译器支持C99,那么该程序可以如下所示

    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
    
    #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;
    }
    
    #包括
    #包括
    #包括
    #定义n5
    #定义最大值为100
    内部主(空)
    {
    INTA[N][N];
    srand((无符号整数)时间(NULL));
    printf(“矩阵为:\n”);
    对于(大小i=0;i
    正如我所看到的:
    *(*(a+I)+j)
    我几乎被淹没了……你是在试图产生不可读的代码吗?你也可以用
    a[I][j]
    来实现。欢迎来到StackOverflow。如果你正在查看