C

时间:2019-03-15 14:06:34

标签: c pointers recursion indexing infinite

我想从用户那里获取一个变量并将其设置为我的数组大小。但是在C语言中,我不能使用变量作为数组大小。同样,我不能在我的项目中使用指针和*符号,因为我正在学习C,而我的老师说这是禁止的。 有人可以告诉我一种从用户那里获取数组大小的方法吗?

最后,我要执行以下两个项目: 1-从用户那里获取n并从用户那里获取整数,然后反转打印条目。 2-从用户那里得到n并从用户那里得到浮点数并计算平均值。 唯一的方法是使用可变大小的数组。

<3

编辑(答案):

让我讲完整的故事。

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

3 个答案:

答案 0 :(得分:4)

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

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

大小不应该太大,因为aray已分配在堆栈上。如果太大,堆栈将溢出。另外,此故障仅存在于函数中(此处为功能example),您无法将其返回给调用方。

答案 1 :(得分:1)

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

对于任务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 %f\n", 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将此伪代码转换为真实代码。

答案 2 :(得分:0)

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

进行编译时允许使用它们

否则,您可以使用任意大小(如实际大小的上限)来过度分配数组,然后使用用户提供的实际n值。

我不知道这是否对您有帮助,否则请提供更多信息以及您可能已经取得的成就。