2017-03-21 20 views
0

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; 
} 
+2

使用 ' "%dは"'ドキュメントを読んで、整数を印刷します。 –

+1

配列のすべての要素で配列(因子)を同じ値(S = 58)で埋めています。 –

答えて

0

必要のないすべてのファーストをゼロに与え続けます呼び出すために:最初のループでその後

#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; 

} 
+0

このようなループでreallocを呼び出すことは非常に効率が悪いため、悪い考えです。元の投稿のように、必要なサイズを事前に計算する方がはるかに高速です。 – Lundin

+0

@ Lundin私たちは元のポストに従うならば、私たちはループを2回使用します。ファクタの数を取得するための最初のとfactor配列を埋めるための第二。彼はループの後に配列を宣言した元のポストのため。 –

+0

** reallocについて**私はこれを発見しました[ループでreallocを呼び出す際の短所](http://stackoverflow.com/questions/30976295/disadvantages-of-calling-realloc-in-a-loop?answertab=votes# tab-top) –

0

あなたは正しい軌道に乗っているが、あなたのプログラムは、単にクリーンアップのビットを必要とします。浮動小数点数、余分な変数などを取り除く。また、因子の数を数え、それらを計算することは同じアルゴリズムであり、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; 
} 
関連する問題