C 循环和求和给出未扩展的结果 这是我的密码
在指针的帮助下,我试图找到并比较5x5矩阵的主对角线和第二对角线之和。数字是随机生成的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() {
#包括
#包括
#包括
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。如果你正在查看