gpt4 book ai didi

c - 显示数组总和的逻辑缺陷

转载 作者:行者123 更新时间:2023-11-30 18:10:17 25 4
gpt4 key购买 nike

Q) 从用户处获取一维数组的输入,为其值的总和创建新数组,例如,如果传递的数组是: | 1 | | 2 | | 3 |那么它应该打印 |1| | 3| |6| ,它会加上数组的内容,即1+2 = 3, 1+2+3 = 6,它不应该改变数组[0]的值。我尝试编写该程序,但它有缺陷

#include <stdio.h>
void subtotal (float[], int);
int main()
{
int n,i;
printf("Enter the size of array"); // taking size of array from user
scanf("%d",&n);
float a[n];
for (i=0;i<n;i++) // loop for entering elements of array
{
printf("Enter the element of array");
scanf("%f",&a[i]);
}
subtotal(a,n); // function call
}
void subtotal (float a[],int n) // function definition
{
int i,j;
float c;
float sum=0,minus=0;
c = a[0];
for (i=0;i<n;i++) // nested loop to calculate sum of array element
{
sum = sum - minus;
for (j=0;j<=i;j++) // this loop is used to store sum value
{

sum = sum+a[i];
minus = sum;
}
a[i] = sum; // new array element a[i] will be sum;
sum = 0;
if (i==0) // if i==0 that means we don't need to change the first value of array;
{
a[i] = c; // a[0] was stored in extra variable 'c' , hence a[i] = c;
}
}
for (i=0;i<n;i++) // this loop to print the updated array
{
printf("%.2f \t",a[i]);
}
}

告诉我可以进行哪些更改来修复这些缺陷。

最佳答案

对于初学者来说,该函数应该做一件事:根据要求更新数组。

这是应该输出更新后的数组的 main 函数。

你的函数实现不清楚,而且太复杂。

例如在此 if 语句的注释中

if (i==0) // if i==0 that means we don't need to change the first value of array;
{
a[i] = c; // a[0] was stored in extra variable 'c' , hence a[i] = c;
}

上面写着

// if i==0 that means we don't need to change the first value of array;

同时a[0]的值被更新。

这个 if 语句上面的语句也做了同样的事情

a[i] = sum; // new array element a[i] will be sum; 

可以通过以下方式更简单地定义该函数,如下面的演示程序所示。

#include <stdio.h>

void subtotal( float a[], size_t n )
{
for ( size_t i = 1; i < n; i++ )
{
a[i] += a[i-1];
}
}

int main(void)
{
float a[] = { 1.0f, 2.0f, 3.0f };
const size_t N = sizeof( a ) / sizeof( *a );

subtotal( a, N );

for ( size_t i = 0; i < N; i++ )
{
printf( "%.1f ", a[i] );
}

putchar( '\n' );

return 0;
}

程序输出为

1.0 3.0 6.0 

如果您需要将部分和放入另一个数组中,则可以按以下方式定义该函数

#include <stdio.h>

void subtotal( float a[], size_t n, float b[] )
{
if ( n != 0 )
{
b[0] = a[0];

for ( size_t i = 1; i < n; i++ )
{
b[i] = a[i] + b[i-1];
}
}
}

int main(void)
{
float a[] = { 1.0f, 2.0f, 3.0f };
float b[sizeof( a ) / sizeof( *a )];
const size_t N = sizeof( a ) / sizeof( *a );

subtotal( a, N, b );

for ( size_t i = 0; i < N; i++ )
{
printf( "%.1f ", b[i] );
}

putchar( '\n' );

return 0;
}

程序输出再次是

1.0 3.0 6.0 

关于c - 显示数组总和的逻辑缺陷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58609916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com