C循环上的基本交互

C循环上的基本交互,c,for-loop,C,For Loop,我正在做一个循环练习,我有一个疑问 我有一个int数组,我想在这个数组中迭代,得到数组元素的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 <arraySiz

我正在做一个循环练习,我有一个疑问

我有一个
int
数组,我想在这个数组中迭代,得到数组元素的
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;
}
intmain(){
int i,和=0,数组大小=10;
int数组[]={1,2,3,4,4,4,7,8,9,10};

对于(i=0;i我会这样做-避免浮动,除非您真的需要它们:

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

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

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

我会这样做:

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

对于(i=0,j=arraySize-1;i我会这样做:

 for(i=0, j= arraySize-1; i <= j; i++,j--){
   sum += array[i];
   if(i!=j){ sum+= array[j]; }
 }
for(i=0,j=arraySize-1;i
krithika.595>cat file1.cc
#包括
使用名称空间std;
int main()
{     
int i,和=0,数组大小=10;
int数组[]={1,2,3,4,4,4,7,8,9,10};
int j;
对于(i=0,j=(arraySize-1);i
kritika.595>cat file1.cc
#包括
使用名称空间std;
int main()
{     
int i,和=0,数组大小=10;
int数组[]={1,2,3,4,4,4,7,8,9,10};
int j;

对于(i=0,j=(arraySize-1);i
for(i=0);i
for(i=0);i这是一个针对可读性以及最少分支/比较进行优化的版本:

#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;
}
#包括
#包括
以奇怪的方式计算整数和(常量整数*数组,大小)
{
整数和=0;
常量int*begin=&数组[0];
常量int*end=&数组[n-1];
while(开始<结束)
{
总和+=*开始+*结束;
begin++;
结束--;
}
如果(开始=结束)/*奇数*/
{
总和+=*开始;
}
回报金额;
}
int main()
{
常量int数组[]={1,2,3,4,4,7,8,9,10,11};
整数和;
求和=以奇怪的方式计算求和(数组,
sizeof(数组)/sizeof(int));
printf(“总和为%d.\n”,总和);
返回0;
}

这是一个针对可读性以及最少分支/比较而优化的版本:

#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;
}
#包括
#包括
以奇怪的方式计算整数和(常量整数*数组,大小)
{
整数和=0;
常量int*begin=&数组[0];
常量int*end=&数组[n-1];
while(开始<结束)
{
总和+=*开始+*结束;
begin++;
结束--;
}
如果(开始=结束)/*奇数*/
{
总和+=*开始;
}
回报金额;
}
int main()
{
常量int数组[]={1,2,3,4,4,7,8,9,10,11};
整数和;
求和=以奇怪的方式计算求和(数组,
sizeof(数组)/sizeof(int));
printf(“总和为%d.\n”,总和);
返回0;
}


只需检查
i<(arraySize+1)/2
就更简单了。不过,您不需要计算每个循环的迭代次数,它是一个固定常数。只需检查
i<(arraySize+1)就更简单了/2
。除此之外,您不需要计算每个循环的迭代次数,它是一个固定常数。@jamesdlin您是对的。我有点太快了。初始化为
arraySize-1
似乎是正确的方法。谢谢!谢谢。不知道我们可以按您发布的方式执行for循环。这种方法简单得多…@jamesdlin you是的。我有点太快了。初始化到代码> ARAYSIZE——1 <代码>似乎是正确的方法。谢谢!不知道我们可以做你的方式。你应该把答案放在C上,而不是C++。答案应该是C,而不是C++。对于记录,这是一个糟糕的家庭作业。evance to real world programming。@Lundin我不同意。它教你在不同的层次上编程。从难度来看,这是对编程和概念的介绍。最困难的部分是在达成某个答案/解决方案时形式化一种务实的方法。即使作业不现实,它也教你这种形式化方法关于过程。如果你理解我的意思,你就不会从计算点集的凸包开始教编程。@Yuri这并不坏,因为程序的目的不现实,而是因为要求没有意义,没有质疑的余地。没有理由一定要有人用这种奇数来计算和nner.如果作业是“找出字符串是否是回文”,那么算法将以一种自然的方式与此非常相似。那么你不仅需要一种实用的方法来获得答案,还必须质疑规范并收集要求(是否允许大写字母/空格等).Engineer vs code monkey。@另一方面,Lundin对回文的定义非常熟悉,一次谷歌搜索将提供大量的点击率,而上面使用的一点重新措辞有效地解决了同样的问题,但对谷歌来说更难,因此迫使学生自己尝试解决。@Yuri a good编程老师会让学生解释他们的程序,每行解释一行。如果他们不理解代码,几行代码后就很明显了。只要学生知道程序在做什么,那么使用谷歌是没有害处的;恰恰相反。如果你搜索代码,你可能会遇到一些统计数据这是学生可以学习的最先进的算法之一,而不是自己制造一些丑陋、低效的小车。此外,在每个项目中重新发明轮子的现实世界工程师不会受到他们经理的欢迎。作为记录,这是一个糟糕的家庭作业,与现实世界编程无关。@Lundin我不同意。我不同意t从不同的层面教你编程。从难度来看,这是编程和概念的介绍。最难的部分是在达成某个答案/解决方案时形式化一种务实的方法。即使作业不现实,它也教你这种形式化过程。你不是从co开始教编程的计算点集的凸包,如果你明白我的意思的话。@Yuri
#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;
}