开发者

Index manipulation of array in C

Begining with an ordered array

开发者_StackOverflow社区 [1, 2, 3, 4, 5, 6, 8, 9, 10]

How would be the way to get every iteration the following results?

1   2   3   4   5   6   7   8   9   10
1   3   4   5   6   7   8   9   10   2
1   4   5   6   7   8   9   10   2   3
1   5   6   7   8   9   10   2   3   4
1   6   7   8   9   10   2   3   4   5
1   7   8   9   10   2   3   4   5   6
1   8   9   10   2   3   4   5   6   7
1   9   10   2   3   4   5   6   7   8
1   10   2   3   4   5   6   7   8   9


#include <stdio.h>    
#define MAX 10 
int a[MAX], i,j,cnt=2;
main (){
    for (i=0; i<MAX; i++){
       a[i]= i+1;
    }
    for (i=0; i<MAX; i++) {
        printf ("%d   ", a[i]);
    }
    printf ("\n");

    for (j=0; j < MAX-2;j++){
           a[0]=1;
           for (i=1; i < MAX-1; i++){
                if (a[i]%MAX != 0){
                       a[i]= a[i] + 1;
                }else{
                     if (a[i]==10) {
                     //printf ("a[%d]: %d \t ** %d\n", i , a[i] ,cnt);
                     //a[i-1]= i;
                    a[i]  = cnt;
                }
            }
        }
        for (i=0; i<MAX; i++)    {
                printf ("%d   ", a[i]);
         }

        printf ("\n");
       }
  }

Now I almost get it but the last column is not right, What should I do?

1   2   3   4   5   6   7   8   9   10   
1   3   4   5   6   7   8   9   10   10   
1   4   5   6   7   8   9   10   2   10   
1   5   6   7   8   9   10   2   3   10   
1   6   7   8   9   10   2   3   4   10   
1   7   8   9   10   2   3   4   5   10   
1   8   9   10   2   3   4   5   6   10   
1   9   10   2   3   4   5   6   7   10   
1   10   2   3   4   5   6   7   8   10 


C arrays are indexed from 0. So when you access elements from 1 to MAX, you are running off the end of the array.

Have your loops go from 0 to MAX-1. Customary way to write it is

for (i=0 ; i < MAX ; ++i)

...so anybody reading your code can immediately prove that the array index never equals MAX.


Well, at a minimum, arrays in C are zero based so you are writing past the end of the array. For an array declared int foo[MAX] valid elements are from foo[0]…foo[MAX-1]

Specifically a[MAX] might well reference the memory location that the variable i uses, causing the loop to reset when it attempt to overwrite a[MAX].

Either shift everything down by one, or declare your array MAX+1 and ignore the zero bit.

Oh, and you should not need to set a[1]=1; every time.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜