質問して礼します。
大学でC言語の勉強を進めています。
その中で、配列の削除というのをやっておりわからないところがあり、質問させてもらいました。
問題
0~99までの乱数を発生させ、10個の配列に入力する。その後、0~9までの数値を入力した値に相当する配列を削除し、削除した配列を詰める事。
問題は以上の通りです。
自分でやってみると、
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
int a[10];
int i,j,ri,n,k,value;
srand((unsigned int)time(NULL));
for(i=0;i<10;i++){
ri=rand()%100;
printf("a[%d]=%2d",i,ri);
if(i==4 || i==9) { printf("\n");}
else {printf(",");}
}
printf("\n");
printf("n=");scanf("%d",&n);
実行結果
a[0]=42,a[1]=31,a[2]=45,a[3]=23,a[4]=55
a[5]=11,a[6]=63,a[7]=72,a[8]=33,a[9]= 5
n=5
というところまでしか、できませんでした。
この後の続きがわからないので教えてもらえると助かります。
配列の削除
Re: 配列の削除
Lucy7512 さんが書きました: ↑5年前質問して礼します。
大学でC言語の勉強を進めています。
その中で、配列の削除というのをやっておりわからないところがあり、質問させてもらいました。
問題
0~99までの乱数を発生させ、10個の配列に入力する。その後、0~9までの数値を入力した値に相当する配列を削除し、削除した配列を詰める事。
問題は以上の通りです。
最終的な実行結果は、
a[0]=42,a[1]=31,a[2]=45,a[3]=23,a[4]=55
a[5]=11,a[6]=63,a[7]=72,a[8]=33,a[9]= 5
n=5
a[0]=42,a[1]=31,a[2]=45,a[3]=23,a[4]=55
a[5]=63,a[6]=72,a[7]=33,a[8]=5
という形になるそうです。
自分でやってみると、
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
int a[10];
int i,j,ri,n,k,value;
srand((unsigned int)time(NULL));
for(i=0;i<10;i++){
ri=rand()%100;
printf("a[%d]=%2d",i,ri);
if(i==4 || i==9) { printf("\n");}
else {printf(",");}
}
printf("\n");
printf("n=");scanf("%d",&n);
というところまでしか、できませんでした。
この後の続きがわからないので教えてもらえると助かります。
Re: 配列の削除
コンピュータを使わず、プログラムも書かず、
自分の頭で考えて、期待される結果を書いてみてください、
ということです。
例えば、 この場合、どういう結果になりますか? この場合、どういう結果になりますか?
その結果を得るために、どのように考えましたか?
Re: 配列の削除
配列は 1個しかありません。a という名前の変数 1個です。Lucy7512 さんが書きました: ↑5年前0~99までの乱数を発生させ、10個の配列に入力する。
その配列の要素は 10個あります。a[0], a[1], ... a[9] です。
次のように書かないと不正確です。
「0~99までの乱数を発生させ、要素が10個の配列に入力する。」
または
「0~99までの乱数を 10個発生させ、配列に入力する。」
プログラムを見ると、発生した乱数は ri に代入しているだけで、
配列には入力していません。
では、なぜ配列の中身が表示されているのかというと
ri を表示しているからです。
よく考えましょう。
Re: 配列の削除
n が 5 のとき、
a[0]~a[4] の値は変化しません。
a[5] の値が元の a[6] の値になり、
a[6] の値が元の a[7] の値になり、
a[7] の値が元の a[8] の値になり、
a[8] の値が元の a[9] の値になっています。
a[5] の値を a[6] の値にするためには
a[5] = a[6]; という代入を実行すればよいのです。
これで、a[5] の元の値は消せました。
a[6] の値を a[5] に詰めることもできました。
でも、プログラム中に a[5] = a[6]; と書いてはいけません。
そう書いてしまうと、n が 8 のとき困るでしょう。
だから、n とか i とかの変数を使って、
for文で適当な回数の代入を繰り返すのです。
フォーラムルールに従って、コードタグを使って
プログラムを貼り付けてください。
a[0]~a[4] の値は変化しません。
a[5] の値が元の a[6] の値になり、
a[6] の値が元の a[7] の値になり、
a[7] の値が元の a[8] の値になり、
a[8] の値が元の a[9] の値になっています。
a[5] の値を a[6] の値にするためには
a[5] = a[6]; という代入を実行すればよいのです。
これで、a[5] の元の値は消せました。
a[6] の値を a[5] に詰めることもできました。
でも、プログラム中に a[5] = a[6]; と書いてはいけません。
そう書いてしまうと、n が 8 のとき困るでしょう。
だから、n とか i とかの変数を使って、
for文で適当な回数の代入を繰り返すのです。
フォーラムルールに従って、コードタグを使って
プログラムを貼り付けてください。