C循环的基本交互

时间:2012-05-09 09:59:05

标签: c for-loop

我正在做一个循环练习并且有疑问。

我有一个ints数组,想要遍历这个数组,获取数组元素的sum。必须在每次传递中完成此迭代,对第一个元素和最后一个元素求和,对第二个元素求和,将第二个元素和最后一个元素相加,减去1,依此类推。

如果我有一个包含偶数个元素的数组,我就是这样做的:

int main(){
    int i,sum=0,arraySize=10;
    int array[] = {1,2,3,4,4,4,7,8,9,10};

    for (i=0;i <arraySize/2;i++){
        sum+=array[i] + array[arraySize-i-1];
    }

    printf("The sum is %d\n", sum);

    return 0;
}

但是如果我有一个奇数我正在这样做:

int main(){
    int i,sum=0,arraySize=11;
    int array[] = {1,2,3,4,4,4,7,8,9,10,11};

    for (i=0;i <(arraySize/2)+0.5;i++){
        if (i != (arraySize/2)){
            sum+=array[i] + array[arraySize-i-1];
        }
        else{
             sum+=array[i];
        }
    }

    printf("The sum is %d\n", sum);

    return 0;
}

这是正确的方法吗?

5 个答案:

答案 0 :(得分:3)

我会这样做:

 for(i=0, j= arraySize-1; i <= j; i++,j--){
   sum += array[i];
   if(i!=j){ sum+= array[j]; }
 }

答案 1 :(得分:2)

我会这样做 - 除非你真的需要它们,否则请避免浮动:

for (i=0; i < (arraySize / 2) + (arraySize & 1); i++) {

(arraySize & 1)对于奇数为1,对于偶数值为0。

甚至更容易:

for (i = 0; i < (arraySize + 1) / 2; i++) {

答案 2 :(得分:1)

这是针对可读性进行了优化的版本以及最少的分支/比较:

#include <stdio.h>
#include <stdio.h>

int calc_sum_in_weird_manner (const int* array, size_t n)
{
  int sum=0;
  const int* begin = &array[0];
  const int* end   = &array[n-1];

  while(begin < end)
  {
    sum += *begin + *end;
    begin++;
    end--;
  }

  if(begin == end) /* odd number */
  {
    sum += *begin;
  }

  return sum;
}


int main()
{
  const int array[] = {1,2,3,4,4,4,7,8,9,10,11};
  int sum;

  sum = calc_sum_in_weird_manner (array,
                                  sizeof(array)/sizeof(int));

  printf("The sum is %d.\n", sum);

  return 0;
}

答案 3 :(得分:0)

krithika.595> cat file1.cc
#include<iostream>

using namespace std;

int main()
{     
int i,sum=0,arraySize=10;     
int array[] = {1,2,3,4,4,4,7,8,9,10};
int j;
for (i=0,j=(arraySize-1);i<=j;i++,j--)
{         
if(i==j)
sum+=array[i];
else
sum+=array[i] + array[j];     
}
cout <<sum<<endl;
}
krithika.596> ./a.out
52
krithika.597> 

答案 4 :(得分:0)

for (i=0;(i <arraySize/2)||(array[i]==array[arraySize-i-1]);i++){
        if (array[i]==array[arraySize-i-1]) {
             sum+=array[i];

        }else{

        sum+=array[i] + array[arraySize-i-1];
        }
    }


    printf("The sum is %d\n", sum);