在C中实现此循环的更好方法

时间:2014-11-27 20:05:23

标签: c loops for-loop

我需要以

之类的格式列出从1到x的数字

2,1,4,3,6,5,8,7 ......

我想到了一个像

这样的循环
for(i =1; i <j+1; i=i+2)
{
    if (i < j)
        printf("%d ", i);

    printf("     %d \n", (i-1));
}

这似乎是原始的。

在我的系统中,在某些情况下,我必须按升序(0,1,2,3,4,...)访问这些数字,在某些情况下,我必须按上述顺序加入数字

我想过根据案例改变for循环风格。

您能否建议更好的方法来实现此循环。

由于

7 个答案:

答案 0 :(得分:6)

for(i=2; i<=j; i=i+2)
    printf("%d %d", i, i-1);

答案 1 :(得分:3)

int i, x;
printf("input x : ");
scanf("%d", &x);
for(i=1; i <= x; ++i){
    printf("%d ", i & 1 ? i+1 : i-1);
}
printf("\n");

答案 2 :(得分:2)

循环可以用各种方式编写。例如,以下方式

#include <stdio.h>

int main(void) 
{
    int x;

    scanf( "%d", &x );

    for ( int i = 1, j = 1; i <= x; i++, j = -j )
    {
        printf( "%d ", i + j );
    }
    puts( "" );

    return 0;
}

如果输入10则输出

2 1 4 3 6 5 8 7 10 9

答案 3 :(得分:1)

如您所愿使用“\ n”。并使用这样的代码。你会像你问的那样认真对待。但要小心“\ n”..

 Int a=0;
    for(i=1;i<n;i++){
          a=a+1;
          if(a%2==1){
              printf("%d \n",i+1);
          }else{
               printf("%d \n",i-1);
          }
}

答案 4 :(得分:1)

如果循环内部的代码块需要为列表中的每个值运行一次,则可以使用以下代码在每次迭代中生成列表中的一个项目。这可以防止重复。

int i, j = 10;
for (i = 2; i <= j; i += -1 + 4 * (i%2)) {
    printf("%d, ",i);
}

答案 5 :(得分:1)

一个简单的产品

int i, x;
scanf("%d", &x);

// Loop from 1 to the largest even number <= x
for(i = 1; i <= (x & ~1); i++) {
  printf("%d ", i - 1 + 2*(i%2));
}
if (i <= x) {
  printf("%d ", i);
}
printf("\n");

答案 6 :(得分:0)

您可能想尝试使用数组和初始化for循环,如下所示:

int array[size];

int n;
for(n = 0; n < size; n++){
  array[n] = n;
}

然后你可以像这样进入数组:

前进两个;打印。 回去一个;打印;

一些代码可能如下所示:

int i = 0; //Which can be changed based on starting array number, etc.
while(i < size);
  printf("%d ", array[i]);
  if(i % 2 == 0){
    i--;
  } else {
    i += 3;
  }