【问题标题】:Modulus Division With Arrays in C, Malloc (Free)C、Malloc 中带有数组的模除法(免费)
【发布时间】:2017-07-14 01:12:20
【问题描述】:

打印 [start, end] 范围内所有可被 n 整除的数字。程序包含 3 个变量,Start、End 和 n 使用 C 编码。这是我到目前为止所拥有的,我不确定每次用户输入新的开始/结束值时如何分配内存。

size_t  = end;
    int *a = malloc((max+1) * sizeof *a);
    if (a) {
        for (size_t i = 0; i <= max; i++){
            a[i] = i;
        free(a);
        }
    }
    return 0;

【问题讨论】:

  • 您应该打印这些数字。那么,为什么要将它们存储在内存中呢?
  • 你知道如何编写一个测试来告诉你 i 是否可以被 n 整除吗? (提示:什么是“mod”操作符?)你了解如何从头到尾循环吗?你知道如何用 C 打印数字吗?
  • free(a); 移到 for 循环之后。

标签: c arrays malloc free


【解决方案1】:

size_t = 结束;

这条线与我有关。我建议你这样做:

int function(int max){
    int *a = (int*) malloc ( (max+1) * sizeof(int));
    if (a){
        for (int i = 0 ; i<=max ; ++i){
            a[i] = i;
        }
    free(a);
    return (1);
    }
return (0);
}
  • 该函数只请求向量的大小,在你的情况下,据我所知,不需要其他东西。

  • 我建议您返回 int,这样您就可以检查 分配是否成功完成

  • 至少对我而言,size_t 的定义没有意义。 Size_t 是一个函数。 Size_t 是一个函数,因此,它应该用括号( ex size_t() )调用。括号内的内容是类型、变量或您想知道“大小”的东西。它在我的代码中用作 sizeof(int),因为您想知道整数的大小,因此您可以分配“整数块内存”

  • 不要忘记在 malloc 之前进行转换。 Malloc 已返回 void 指针 (void*)。这意味着如果要指向整数,则需要使用此强制转换 (int*)。

  • 您将如何调用该函数,但是,您应该考虑将 max+1 更改为 max。对我来说,这更符合逻辑。

【讨论】:

  • 作为补充,请注意如果函数 malloc 的输入为 0,编译时会出现一些疯狂的错误/警告
【解决方案2】:
for(int i = start; i<=end; i++){
    if(i%n == 0){
        printf("%d is divisible by %d\n",i,n);
    }
}

有一些伪代码可以让你继续前进。如果您的目标只是打印数字,则不需要动态内存。您只需要遍历给定范围[start, end]。在里面你需要一个条件来检查范围内的值是否可以被n整除;学习 mod 运算符%

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 2011-03-12
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多