Q)从用户的1D数组中获取输入,为其值的总和创建新数组,例如,如果传递的数组为:| 1 | | 2 | | 3 |那么它应该打印| 1 | | 3 | | 6 | ,它将加上数组的内容,即1 + 2 = 3,1 + 2 + 3 = 6,不应更改array [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]);
}
}
告诉我为修复缺陷我可以进行的更改。
对于初学者,该功能应该做一件事:根据要求更新阵列。
这是要输出更新后的数组的函数主要。
您的函数实现不清楚,也太复杂。
例如,在此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;
}
有记载
//如果i == 0,则意味着我们不需要更改的第一个值数组;
同时更新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