2009-05-09 20 views
1

メモリを無駄にすることなく、10個の浮動小数点を浮動小数点として配列に格納する方法を教えてください。浮動小数点数を配列に読み込む

+0

時期尚早最適化はすべての悪の根源です。 – Juliet

+2

臭いのような宿題ですか?私はまだそれを見ていない:) –

+2

これは宿題のように見えるので、これを行う:1.あなたのコース材料を慎重に読んでください。 2.これまで入力した内容を読んだり、結果を保存したりするために、今までに暴露された正しい機能を選択します。あなたがここで答えを得るなら、それはあなたが学ぶのを助けません。自分で与えられたツールで適切なソリューションを見つけるという考えのプロセスを経なければなりません。 – lothar

答えて

0

この問題については、具体的に説明する必要があります。

これらの番号で何か他のことが必要な場合を除き、メモリを保存する最も簡単な方法は、まず配列に格納することではありません。

それはあなたが欲しいもののように聞こえます。

合計= 0;
(あなたはまだ10個の数字を読んでいない)
   は現在
   合計+ =現在の
しばらく読んでください。それはあなたの質問に

+0

私は彼が* add *を書いたときにOPが* store *を意味すると信じています。 – Jens

2
int size = 10; 
float vet[size]; 
    for(i = 0; i < size; i++){ 
     scanf("%f", &vet[i]); 
    } 

としてシンプル。

+0

キーボードの10から読み取ったフロートの数もちょうど例でした – user104108

+0

scanfでエラーをチェックしていませんか?悪いプログラマー、クッキーなし! :-) – Jens

+0

'scanf'をまったく使用していますか?悪いプログラマー、クッキーなし! :-) – Emmet

0

答えはあなたが配列に物事を追加して、配列は任意のメモリを使用することを期待することはできませんということです:)可能性として

+0

としましょう 浮動小数点値[100]; int n; int index;インデックス user104108

0
float arr[10]; 
for(i = 0; i < 10; i++){ 
    scanf("%f", &arr[i]); 
} 

私が知っているのは、上記のようなものですが、最適化されていない場合は余分なintを使用しません。 hehe

さらに少ないメモリを使用するには、以下のコードを使用します。それらはすべて配列に読み込まれますが、読み込まれる最後の配列は配列にあります:

float arr[1]; 
for(i = 0; i < 10; i++){ 
    scanf("%f", &arr[0]); 
} 
2

Aha。それは問題の浮遊物を読んでいない、それは記憶です。 iを読み、正確にiの浮動小数点数を持つ配列が必要です。

これは本当に宿題のようなにおいがしますが、これは問題ありませんが、私はあなたに完全な答えを与えるにはあまりにも先生です。だから私はあなたに必要なのはmalloc()という名前のC関数と、それは関数のように見えますが実際には言語に組み込まれているということです。というサイズはです。

this tutorialをご覧ください。


よろしくお願いします。コメントのコードは次のとおりです。

int n,index; 
float temp; 
scanf("%d",&n); 
float *pValues=(float *)calloc(n,sizeof(float)); 
for(index=0;index<n;index++) { 
    scanf("%f",&temp); 
    *(pValues+index)=temp; 
} 

私は二つの変更でそれを行うだろう:

  1. その文字以外に何のためにmallocを使用することがより慣用
  2. Cでは、配列とポインタは非常に密接な関係を持っています。実際には*(pValues+index)pValues[index]とまったく同じです。

    int n,index; 
    float temp; 
    scanf("%d",&n); 
    float *pValues=(float *)malloc(n*sizeof(float)); 
    for(index=0;index<n;index++) { 
        scanf("%f",&temp); 
        pValues[index]=temp; 
    } 
    

    のは、コードの1つの以上の変換を見てみましょう:

だから私は、これはと書き換えると思います。 pValuesがあり、これはfloatへのポインタです。 があります。floatへのポインタでもあります。&がアドレス演算子で、tempfloatであるためです。そして、あなたはあなたのインデックスでポインタ演算をしているだけです。

int n,index; // Don't need temp 
scanf("%d",&n); 
float *pValues=(float *)malloc(n*sizeof(float)); 
for(index=0;index<n;index++) { 
    scanf("%f",pValues+index); 
} 

さて、クイズの質問:あなたはループ

for(index=0;index<n;index++) { 
    scanf("%f",pValues++); 
} 
+0

this..but何かがまだ間違っ int型nは、指標であるように私はそれを考え出し;? \tフロート一時、 \tのscanf( "%d個"、&n); \tフロート* pValues =(フロート*)のcalloc( n、sizeof(float)); \t for(index = 0; index user104108

+0

私の悪い...私は前に投稿したように大丈夫です:)うまく動作します – user104108

+1

scanfでエラーをチェックしていませんか?悪いプログラマー、クッキーなし! :-) – Jens

0

をした場合に何が起こるかは宿題のように聞こえるように、私たちはこの1つのより多くの時間を書き換えることができます。

入力から浮動小数点の数を読み取ります。 個々の浮動小数点のサイズでそれを掛けてください 浮動小数点へのポインタにアドレスを格納する正確なバイト数を割り当ててください 入力から浮動小数点でループを読み取る 配列内のすべての浮動小数点数を加算するループを持ちます

私の推測では、宿題のレッスンは、用語のポインタと配列の間の接続を実現することですが、配列のインデックスを作成せずにこれを行うことはできますが、あなたの質問は配列を使用する必要があることを意味します。

関連する問題