メモリを無駄にすることなく、10個のフロートを読み込んで配列に格納するにはどうすればよいでしょうか?
6 に答える
int size = 10;
float vet[size];
for(i = 0; i < size; i++){
scanf("%f", &vet[i]);
}
可能な限り単純です:)
あはは。問題はフロートを読み取ることではなく、メモリです。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つの変更でそれを行います:
malloc
文字以外のものに使用する方が慣用的です- 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
&
temp
float
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++);
}
宿題のように聞こえます。
入力から float の数を読み取ります。これを個々の float のサイズで乗算する float へのポインターにアドレスを格納する正確なバイト数を割り当てる 入力から float を読み取るループを使用する 配列内のすべての float を加算するループを使用する
ここでの宿題の教訓は、ポインターと配列という用語の関係を理解することだと思いますが、これは配列のインデックス付けなしで行うことができますが、あなたの質問は、配列を使用する必要があることを意味します。
問題についてより具体的に説明する必要があります。
これらの数値を処理する必要がある場合を除き、メモリを節約する最も簡単な方法は、最初から配列に格納しないことです。
あなたが望むのは次のようなものです。
合計 = 0;
do
read current
sum += current
while (まだ 10 個の数字を読んでいません);
あなたの質問への答えは、配列に何かを追加することはできず、配列がメモリを使用することを期待できないということです。
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]);
}