2

メモリを無駄にすることなく、10個のフロートを読み込んで配列に格納するにはどうすればよいでしょうか?

4

6 に答える 6

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

可能な限り単純です:)

于 2009-05-09T16:30:34.093 に答える
2

あはは。問題はフロートを読み取ることではなく、メモリです。iを読み込み、正確にi個のfloatを保持する配列が必要です。

これは本当に宿題の匂いがしますが、それは問題ありませんが、私はあまりにも教師であり、あなたに完全な答えを与えることはできません. つまり、必要なのはmalloc()という名前の C 関数と、 sizeofという名前の C 演算子 (関数のように見えますが、実際には言語に組み込まれています)です。

このチュートリアルをご覧ください。


ええ、あなたはそれを手に入れました。これがあなたのコメントからのコードで、フォーマットされています。

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

私は2つの変更でそれを行います:

  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。はアドレス演算子であり、であるため、&tempへのポインタでもある があります。そして、インデックスを使用してポインター演算を行っているだけです。したがって、これをもう一度次のように書き直すことができます。 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++); 
}
于 2009-05-09T17:13:41.793 に答える
0

宿題のように聞こえます。

入力から float の数を読み取ります。これを個々の float のサイズで乗算する float へのポインターにアドレスを格納する正確なバイト数を割り当てる 入力から float を読み取るループを使用する 配列内のすべての float を加算するループを使用する

ここでの宿題の教訓は、ポインターと配列という用語の関係を理解することだと思いますが、これは配列のインデックス付けなしで行うことができますが、あなたの質問は、配列を使用する必要があることを意味します。

于 2009-05-24T14:58:34.423 に答える
0

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

これらの数値を処理する必要がある場合を除き、メモリを節約する最も簡単な方法は、最初から配列に格納しないことです。

あなたが望むのは次のようなものです。

合計 = 0;
do
  read current
  sum += current
while (まだ 10 個の数字を読んでいません);

于 2009-05-09T16:29:26.907 に答える
0

あなたの質問への答えは、配列に何かを追加することはできず、配列がメモリを使用することを期待できないということです。

于 2009-05-09T16:41:56.613 に答える
0
float arr[10];
for(i = 0; i < 10; i++){
    scanf("%f", &arr[i]);
}

上記のようなものですが、最適化されていない場合に備えて余分な int を使用しません。へへ

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

float arr[1];
for(i = 0; i < 10; i++){
    scanf("%f", &arr[0]);
}
于 2009-05-09T17:09:11.053 に答える