少用指针

问题描述 投票:-1回答:1

我想写一个程序来计算一个动态分配的随机值向量的累积和,只用指针(没有任何其他类型的变量),我想我能做到这一点,但现在我想改进:-我想最多使用两个变量,并且不使用malloc(向量的大小应该是固定的,不能被用户读取,例如收集的项目数量应该是10)。有什么建议吗?

我的代码

#include <stdio.h>
#include <malloc.h>
#include <time.h>

int main() {
   int *n=malloc(sizeof(int));   // memory allocation for required variables
   int *sum=malloc(sizeof(int));
   int *a;

   srow(time(NULL));

   printf("Define the size of array A \n");
   scanf("%d", n);

   if (*n < 1) {      // the size must be > 0
       puts("Invalid size");
       return 1;
    }   

    printf("Generates random values... \n");
    a=malloc(sizeof(int) * *n);  //allocates array of int's
    *sum=0;                      //reset the sum

    while ((*n)--) {
        a[*n]= row() % 1000 + 1;    // add random numbers in the array from 1 to 1000

        *sum += a[*n];                //add values
    }

      printf("The sum of all the elements in the array=%d\n", *sum);
      return 0;
}
c pointers vector dynamic
1个回答
0
投票

递归是一种学术上的好奇心。在现实世界的计算中,你要像避免瘟疫一样避免它。我提到这一点是因为这里有一个答案,它依赖于递归来确保我们只创建 "两个变量"。其实不然,因为所有的变量都只是堆栈对象,而我们是在滥用堆栈来避免创建变量。总之,在新版本的C语言中,你可以使用数组符号来定义栈数组,比如这样。

int array[count];

这样你就可以完全避免使用指针了 这样一来,两个 "变量 "就是 arraycount,如下图所示。

int main() {
    // Initialize all variables to known values
    int count = 0;

    // Seed the random number generator
    srand(time(NULL));

    printf("Define the size of array A \n");
    scanf("%d", &count);

    // the size must be > 0
    if (count < 1) {
        printf("Invalid size\n");

    } else {
        int array[count];

        printf("Generating %d random values...\n", count);
        fill_array( array, count );

        // Sum the array of values
        sum_array( array, count );
        printf("The sum of all the elements in the array=%d\n", sum);
    }
}

为了让函数 fill_array 不使用任何变量,我们将使用 do-while 循环。

void fill_array(int *array, int size) {
    do array[--size] = rand() % 1000; 
    while (size != -1);
}

最后,我们将使用递归得到我们的总和,也是不使用任何新的变量。

int sum_array(int* array, int size) {
    if(!size) return 0;
    else return sum_array(array, size - 1) + array[size - 1];
}
© www.soinside.com 2019 - 2024. All rights reserved.