C语言--随机生成一个数组并逆置输出

来源:互联网 发布:java string 转list 编辑:程序博客网 时间:2024/05/17 03:36


方案一:直接使用数组

思路:随机生成一个数组,倒序输出

# include <stdio.h>
# include <stdlib.h>
# include <time.h>
int main (void)
{
        int i,n,j;
        printf("Enter a number n  : ");
        scanf("%i",&n);
        int a[n];
        srand((unsigned)time(NULL));
        for (i = 0 ;i < n; i++)
                a[i] = rand()%100+1;
        for (i = 0 ;i < n; i++)
                printf("****");
        printf("\n");
        for (i = 0 ;i < n; i++)
                printf("%4i",a[i]);
        printf("\n");
        for (i = 0 ;i < n; i++)
                printf("****");
        printf("\n");
        for (j = n-1 ;j >= 0; j--)
                printf("%4i",a[j]);
        printf("\n");
        return 0;
}


测试:

[root@security Gcc]# ./a.out
Enter a number n  : 10
****************************************
  79  77  38  80  25  20  37  22  46  97
****************************************
  97  46  22  37  20  25  80  38  77  79
[root@security Gcc]# ./a.out
Enter a number n  : 20
********************************************************************************
  18  83  61   1  87  94  34  56  84  87  88  73   5  80   2  82   3  57  65  97
********************************************************************************
  97  65  57   3  82   2  80   5  73  88  87  84  56  34  94  87   1  61  83  18


方案一的改进,使用函数调用:


# include <stdio.h>
# include <stdlib.h>
# include <time.h>
int n,i;
int main (void)
{
        printf("Enter a number n : ");
        scanf("%i",&n);
        int a[n];
        Create(a,n);
        PrintLine();
        PrintArray(a,n);

# include <stdio.h>
# include <stdlib.h>
# include <time.h>
int n,i;
int main (void)
{
        printf("Enter a number n : ");
        scanf("%i",&n);
        int a[n];
        Create(a,n);
        PrintLine();
        PrintArray(a,n);
        PrintLine();
        PrintArrayInvert(a,n);
        return 0;
}
int Create(int *array , int n)
{
        srand((unsigned)time(NULL));
        for (i = 0 ; i<n ;i++)
                array[i] = rand()%100+1;
}

void PrintLine(void)
{
        for (i = 0 ; i < n;i++)
                printf("****");
        printf("\n");
}


int PrintArray(int *array , int n )
{

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

int PrintArrayInvert(int *array , int n)
{

        for (i = n-1 ; i >= 0 ;i--)
                printf("%4i",array[i]);
        printf("\n");
        return 0;
}
                           
测试结果:

[root@security Gcc]# vim Invert_Array-2.c
[root@security Gcc]# gcc -w Invert_Array-2.c
[root@security Gcc]# ./a.out
Enter a number n : 12
************************************************
  16  50  43   8   7  14  30  72  73  19  54  35
************************************************
  35  54  19  73  72  30  14   7   8  43  50  16


方案二:使用指针将原数组逆置新数组

# include <stdio.h>
# include <stdlib.h>
# include <time.h>
int n,i;
int main (void)
{
        printf("Enter a number a : ");
        scanf("%i",&n);
        int a[n];
        CreateArray(a,n);
        PrintArray(a,n);
        PrintLine();
        ArrayInvert(a,n);
        PrintArray(a,n);
        return 0;
}

int CreateArray(int *array, int n )
{

        srand((unsigned)time(NULL));
        for (i = 0 ; i < n; i++)
                array[i] = rand()%100+1;
}
int PrintArray(int *array , int n)
{
        for (i = 0 ; i < n; i++)
                printf("%4i",array[i]);
        printf("\n");
}

void PrintLine()
{
        for (i = 0 ; i < n; i++)
                printf("****");            
         printf("\n");

}
int ArrayInvert(int *array , int n)
{
        int m,temp ,*p,*q,*j;

        m = (n-1)/2;
        p = array ; q = array+n-1; j = array + m;
        for ( ; p < q ; p++,q--)
        {
                temp = *p;
                *p = *q;
                *q = temp;
        }
}

测试:

[root@security Gcc]# gcc -w Invert_Array-3.c
[root@security Gcc]# ./a.out
Enter a number a : 3
  15  34  25
************
  25  34  15
[root@security Gcc]# ./a.out
Enter a number a : 10
  65  73  12  31  19  86  56  96  37  52
****************************************
  52  37  96  56  86  19  31  12  73  65
[root@security Gcc]# ./a.out
Enter a number a : 8
  68  53  23  70  34  80  68  63
********************************
  63  68  80  34  70  23  53  68

0 0
原创粉丝点击