无限数索引没有任何指针



我想从用户获取一个变量并将其设置为我的数组大小。但是在C中,我无法将变量用于数组大小。另外,我不能为我的项目使用指针和 *标志,因为我正在学习C,我的老师说这是禁止的。有人可以告诉我一种从用户那里摄取数组尺寸的方法吗?

最后,我想做这两个项目:1-从用户中获取N,然后从用户获取INT数字,然后反向打印条目。2-从用户中获取N并从用户获取浮点数并计算平均值。孤独的方式是使用具有可变大小的数组。

< 3

编辑(回答此):

让我讲故事。

我老师的第一个问题是:从用户获取条目(INT),直到输入" -1",然后从最后到第一个输入条目号。(老师要求我通过递归功能解决这个项目,没有任何数组)第二个问题是:从用户获取N条目(浮动)并计算其平均值。(为此,我必须使用阵列和函数或简单的代码没有任何指针)

现代C具有可变大小数组,如下:

void example(int size)
{
    int myArray[size];
    //...
}

大小不应该太大,因为Aray分配在堆栈上。如果太大,堆栈将溢出。另外,此ARAY仅存在于功能中(此处:funtion example),您不能将其返回给呼叫者。

我认为您的任务是提出一个解决方案,该解决方案 not 使用数组。

对于任务2,这很简单。只需在打印之前累积输入并除以输入的数量即可。喜欢:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    float result = 0;
    float f;
    int n = 0;
    printf("How many numbers?n");
    if (scanf("%d", &n) != 1) exit(1);
    for (int i=0; i < n; ++i)
    {
        if (scanf("%f", &f) != 1) exit(1);
        result += f;
    }
    result /= n;
    printf("average is %fn", result);
    return 0;
}

第一个任务更复杂,但可以使用递归解决。这是伪代码中的算法。

void foo(int n)  // where n is the number of inputs remaining
{
    if (n == 0) return;     // no input remaining so just return
    int input = getInput;   // get next user input
    foo(n - 1);             // call recursive
    print input;            // print the input received above
}

并将其称为

foo(5);  // To get 5 inputs and print them in reverse order

我将离开OP将此伪代码转换为真实代码。

您实际上可以使用变量大小数组。用-std=c99

编译时允许它们

否则,您可以将数组分配为任意大小(例如实际尺寸的上限),然后使用用户提供的实际N。

我不知道这是否对您有帮助,如果没有帮助,请提供更多信息以及您已经实现的目标。

最新更新