【问题标题】:Adding Values of Field in C? [closed]在C中添加字段的值? [关闭]
【发布时间】:2014-06-06 19:49:29
【问题描述】:

我想问你如何在 C 中添加数组的值。 示例:

Array[5]
--------
Array[1]=0.2
Array[2]=0.2 ----> I want to add the first 0.2 to the second 0.2 (=0.4)
Array[3]=0.3
Array[4]=0.15

我想要以下输出:

0.2
0.4
0.7
0.85

我该怎么做?特殊运营商? PS:我想在一个简单的 for 循环中做到这一点。不是额外的库等。

【问题讨论】:

  • 没有 Array[5] 元素。你有从 0 到 4 的元素。
  • 双倍 val = 0.2;双* arr = malloc( sizeof( 双 ) * 5 ); memset(arr, val, 5);应该这样做。
  • @Ben:我没有看到他们要求动态数组的任何证据。
  • @GeorgeT 不过,它可能更快。我的意思是无论哪种方式都可以。
  • @Ben 那行不通。 memset 仅适用于字节。

标签: c arrays


【解决方案1】:

很多失败。这么多错误。

标记您的问题[C] [C++],但不能同时标记。
它们不是一回事。

如果您声明 Array[5],则有效的索引是 04
Array[5] 超出范围

您描述想要输出,但您的程序没有输出!
显示printf,或cout,或类似的输出语句。

如果要给数组成员加值,很简单:

Array[2] = Array[2] + 0.2;

如果要将两个数组成员加在一起:

Array[2] = Array[1] + Array[2];

虽然您没有明确指定,但您似乎想让数组的每个成员都成为所有早期成员(包括它自己)的总和。

这是我的代码:

int main(void)
{
    double array[] = { 0.2,
                       0.2,
                       0.3,
                       0.15
                     };

    for(int i=1; i<4; ++i)
    {
        array[i] += array[i-1];
    }

    for(int i=0; i<4; ++i)
    {
        printf("[%d] : %lf\n", i, array[i]);
    }

    return 0;
}

【讨论】:

  • 公平的答案。不过,您的 printf 需要 i
  • +1 表示 c 和 c++ 不是同一个东西。
【解决方案2】:

在 C++ 中,您可以使用基于范围的 for 语句来做到这一点

double Array[5] = { 0.2, 0.2, 0.3, 0.15, 0.4 };

double sum = 0.0;

for ( double x : Array ) sum += x;

如果您需要添加中间和的输出,那么您可以将上面的代码编写为

double Array[5] = { 0.2, 0.2, 0.3, 0.15, 0.4 };

double sum = 0.0;

for ( double x : Array ) 
{ 
    sum += x;
    std::cout << sum << ' ';
}

或者你可以应用标准算法std::accumulate例如

#include <numeric>
#include <iterator>

//...

double Array[5] = { 0.2, 0.2, 0.3, 0.15, 0.4 };

double sum = std::accumulate( std::begin( Array ), std::end( Array ), 0.0 );

如果您只需要输出部分和,那么您可以使用标准算法std::partial_sum 例如

#include <numeric>
#include <iterator>
#include <iostream>

//...

double Array[5] = { 0.2, 0.2, 0.3, 0.15, 0.4 };

std::partial_sum( std::begin( Array ), std::end( Array ), 
                  std::ostream_iterator<double>( std::cout, " " ) );

或者你可以自己写一个循环。例如

double Array[5] = { 0.2, 0.2, 0.3, 0.15, 0.4 };

double sum = 0.0;

for ( size_t i = 0; i < sizeof( Array ) / sizeof( *Array ); i++ ) sum += Array[i];

这个循环你也可以在 C 中使用。

与使用 C 函数 printf 输出的代码相同

double Array[5] = { 0.2, 0.2, 0.3, 0.15, 0.4 };

double sum = 0.0;

for ( size_t i = 0; i < sizeof( Array ) / sizeof( *Array ); i++ ) 
{
    sum += Array[i];
    printf( "%f ", sum );
}

在 C 语言中,您还可以为 double 类型的数组编写自己的算法。例如

double Accumulate( const double a[], size_t n )
{
   double sum = 0.0;

   for ( const double *p = a; p < a + n; ++p ) sum += *p;

   return sum;
}

可以这样调用

double Array[5] = { 0.2, 0.2, 0.3, 0.15, 0.4 };

double sum = Accumulate( Array, sizeof( Array ) / sizeof( *Array ) );;

【讨论】:

    【解决方案3】:
    for(int i = 0; i<5; i++)
    {
     Array[i]=Array[i]+Array[i+1];
     cout<< Array[i];
    }
    

    我不知道你想用c还是c++(这个是c++) 我也没有添加命名空间std,也没有包含iostream,只是循环。

    您需要记住,数组从 0 开始而不是从 1,这就是为什么我以 0 开始循环。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-07
      • 1970-01-01
      • 2012-03-28
      • 2021-04-08
      • 2020-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多