【问题标题】:How do i pass values in an empty vector?如何在空向量中传递值?
【发布时间】:2017-03-21 05:32:13
【问题描述】:

如何使用 for 循环将值传递给空向量(因子)?

在这段代码中,我试图找到一个数字的因子数,然后将因子传递给一个空向量,但它一直给我零

#include <stdio.h>
#include <math.h>

int main(void)
{

    int facVar = 57;
    int S;
    double numFact = 0;
    int k;
    int factors1[4];

    for (S = 1; S <= facVar; S = S + 1)
    {
        if (facVar % S == 0)
        {
            numFact = numFact + 1;

        }
    }
    int factNum = numFact;
    int factors[factNum];
    int indices[factNum];
    int i;
    printf("the number of factors is  %.lf \n", numFact);

    for (k = 0; k < factNum; k++)
    {

        factors[k] = S;
    }

    for (k = 0; k < factNum; k++)
    {
        printf("factors are %.lf", factors[k]);
    }

    return 0;
}

【问题讨论】:

  • 使用"%d"打印整数,阅读文档。
  • 您在数组的所有元素中使用相同的值 (S = 58) 填充数组(因子)。

标签: c


【解决方案1】:

首先你不需要打电话:

#include <math.h>

之后,在第一个循环中,您检查您的号码的因数,您不会将其存储在数组中:

for(S=1 ; S <= facVar ; S = S + 1){
if(facVar % S == 0){
    numFact = numFact + 1;

}
}

因此您需要将因子存储在数组因子中。 该程序可帮助您获得所需的结果:

#include <stdio.h>
#include <stdlib.h>

int main(void){

int facVar = 57;
int S, k;
int numFact = 0;

for(S = 1, k = 0 ; S <= facVar ; S++){
    if(facVar % S == 0){
      numFact++;

    }
}
int factors[numFact];
for(S = 1, k = 0 ; S <= facVar ; S++){
    if(facVar % S == 0){
      factors[k] = S;
      k++;

    }
}
printf("the number of factors is:  %d \n" , numFact);

for(k = 0; k < numFact ; k++){
    printf("factors are: %d\n" , factors[k]);
}

return 0;

}

【讨论】:

  • 在这样的循环中调用 realloc 是个坏主意,因为它非常低效。与原始帖子一样,预先计算所需的大小会快得多。
  • @Lundin 如果我们按照原始帖子进行操作,我们将使用循环两次。第一次获取因子数,第二次填充因子数组。因为在原始帖子中他声明了数组在循环之后。
  • 关于 realloc 我发现了这个Disadvantages of calling realloc in a loop
  • 问题确实是在循环中使用 realloc,而不是两次执行相同的循环,这是不可避免的。
【解决方案2】:

您在正确的轨道上,您的程序只需要一些清理。摆脱浮点数,多余的变量等。还要计算因素的数量并计算它们是相同的算法,重复两次。 factors[k] = S; 没有任何意义。

工作代码:

#include <stdio.h>

int main(void)
{
  const int facVar = 57;
  int numFact = 0;

  for (int i = 1; i <= facVar; i++)
  {
    if (facVar % i == 0)
    {
      numFact++;
    }
  }
  printf("The number of factors is  %d \n", numFact);

  int factors[numFact];
  int fact_n=0;
  for (int i = 1; i <= facVar; i++)
  {
    if (facVar % i == 0)
    {
      factors[fact_n] = i;
      fact_n++;
    }
  }

  printf("The factors are: ");
  for (int i = 0; i < numFact; i++)
  {
    printf("%d ", factors[i]);
  }

  return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 2020-07-24
    • 2019-11-21
    • 2021-12-16
    • 2015-09-18
    相关资源
    最近更新 更多