こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

非常にはずかしい質問ですが 配列の質問です。

C言語の勉強で時間が経つごとに、肝心の基礎が忘れがちになるのですよね。
それに、配列に対しての説明ってほとんど文字列ばかりで整数はみつからないです。

今回の質問は
・int型配列の要素ひとつずつ代入するにはどうするか?
・同じ数字を代入させないにはどうするか?
・配列中n個の要素を表示させるにはどうするのか?
条件
1、配列の要素はn個
2、同じ数は×

一応かいてみました。

{
int buffer[6], i, j, signal ;

srand((unsigned int)time(NULL));

for( i = 0 ; i < 6 ; i++){
buffer[i] = rand()%42+1;
for( signal = 0 , j = 0 ; j < i ; j++ ){
if(buffer[i] == buffer[j]){signal = 1; break;}
}
if(signal == 0){break;}
}

printf("%d\n",buffer);

投稿日時 - 2005-09-20 23:32:02

QNo.1662613

すぐに回答ほしいです

質問者が選んだベストアンサー

条件が揃うまで、ループし、
条件が成立したら、次の処理へ
というコーディングです。
いきなり、コーディングせず、フローチャート
を書いて、机上でテストしてください。
{
int buffer[6], i, j, signal ;

srand((unsigned int)time(NULL));

for( i = 0 ; i < 6 ; i++){
signal = 1;
while(signal == 1)
{
buffer[i] = rand()%42+1;
for(j = 0 ; j < i ; j++ )
{
if(buffer[i] == buffer[j]){break;}
}
if(j == i){signal = 0;}
}
printf("%d\n",buffer[i]);
}

}

#1さんのcontinueを使ってしまうと、iが更新
されてしまいますので、データ重複したまま、
次のデータを設定してしまいませんか?

投稿日時 - 2005-09-21 00:02:30

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

かなり書き換えていますが……
一般的に言って、配列は、見るだけでわかりにくくなるので、最小限にした方が良いです。
特に、
・一度配列に入れてから、
・妥当性を判断する
のではなく、
・妥当性を判断して
・妥当なら配列に入れる
にしたほうがわかりやすくなります。

あと、単純な繰り返しではない(インデックスがいつもふえるとは限らない)ループを、単純なループのように書くと、例外の手当が大変です。

{

#define MAXITEMS 6
int buffer[MAXITEMS];
int kimari = 0;
int j;

srand((unsigned int)time(NULL));

while(kimari < MAXITEMS)
{
int value = rand() % 42 + 1;

for(j = 0; j < kimari; j++)
{
if (buffer[j] == value)
break;
}

if (j == kimari)
{
buffer[kimari] = value;
kimari++;
}
}

for(j = 0; j < MAXITEMS; j++)
printf("No. %d = %d\n", j, buffer[j]);
}

投稿日時 - 2005-09-21 14:20:33

> C言語の勉強で時間が経つごとに、肝心の基礎が忘れがちになるのですよね。

基礎を忘れるのは、基礎をしっかりと理解していないからです。

> それに、配列に対しての説明ってほとんど文字列ばかりで整数はみつからないです。

そんなことないと思いますが・・・。

※質問の条件の中に、「ランダムな数値を代入」という件がないのですが、プログラム中でrand()を使用しているのはなぜか。
※配列の要素がn個とあるのに、bufferの要素数が6となっているのはなぜか。
※buffer[i] = rand()%42+1;の42の剰余を求めているのはなぜか。また、+1しているのはなぜか。

仕様とプログラムで結びつかない点が多すぎます。

そして、最後の
printf("%d\n",buffer);
では、%dでの表示要素とbufferで型があっていません。

ちなみに、main()はどこでしょう?

投稿日時 - 2005-09-20 23:52:03

ANo.1

最小限の修正をすると、こんな感じでしょうか。stdio.h,stdlib.h等のincludeは必要です。

{
int buffer[6], i, j, signal ;

srand((unsigned int)time(NULL));

for( i = 0 ; i < 6 ; i++){
buffer[i] = rand()%42+1;
for( signal = 0 , j = 0 ; j < i ; j++ ){
if(buffer[i] == buffer[j]){signal = 1; break;}
}
if(signal == 1){continue;}
printf("%d\n",buffer[i]);
}

}

投稿日時 - 2005-09-20 23:44:51

あなたにオススメの質問