プロが教える店舗&オフィスのセキュリティ対策術

課題で、全部で8名から代表者を3名無作為に選びたい。一様乱数を0から7の間で発生させる。それを100回試行して最も回数の多い順に並べ変えを行って表示する。プログラムを作りたいのですがどうすればいいですか?
一応作ったものはこれですがセグメントエラーがでてしまいます。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
main()
{
 unsigned char x;
int w;
char name[8]={'A','B','C','D','E','F','G','H'};
for(n=0;n<8;n++)
{
count[n]=0;
}
for(i=1;i<=100;i++)
{
x=rand()%8;
count[x]++;
if(x==0)
name[x]='A';
if(x==1)
name[x]='B';
if(x==2)
name[x]='C';
if(x==3)
name[x]='D';
if(x==4)
name[x]='E';
if(x==5)
name[x]='F';
if(x==6)
name[x]='G';
if(x==7)
name[x]='H';
name[x]++;
}
for(i=0;i<8;i++)
{
w=i;
for(j=i+1;j<8;j++)
{
if(count[w]>count[j])
w=j;
}
name[w]=count[w];
count[w]=count[i];
count[i]=name[w];
}
printf("----------------------");
for(i=0;i<8;i++)
{
printf("第%d位%3s回%10s\n",i+1,count[w],name[w]);
}
printf("----------------------");
}
-----------------------
第1位 ○○回 △さん
第2位 ○○回 △さん
・・・
--------------------
と言う風に表示したいです

A 回答 (3件)

>一応作ったものはこれですがセグメントエラーがでてしまいます。



ビルドできないかと思いますが…。

>count[n]=0;

count[]の宣言がありません。

>name[x]++;

name[]の中身をインクリメントする理由はなんでしょう?

>for(i=0;i<8;i++)
>{
> printf("第%d位%3s回%10s\n",i+1,count[w],name[w]);
>}

wの値は変化しません。(たぶんiの誤りでしょう)
%sで指定していますが、count[w]やname[w]は「文字列の先頭アドレス」が格納されていますか?
    • good
    • 1
この回答へのお礼

ありがとうございます

お礼日時:2015/05/22 17:58

プログラムの組み方が明らかに奇妙だと思います。



>char name[8]={'A','B','C','D','E','F','G','H'};

 char型で8人分を宣言してそれぞれを、Aさん、Bさん、Cさん、以下同様としたいのかもしれませんが、これはやめてAさんは0番、Bさんは1番、Cさんは2番と対応させた上でint型で配列を宣言してはどうだろうか。

 if文で条件判断してインクリメント処理している部分も不自然な気がします。
    • good
    • 0
この回答へのお礼

ありがとうございます

お礼日時:2015/05/22 17:58

>プログラムを作りたいのですがどうすればいいですか?



問題点の指摘ではなく、正解のコードが欲しかっただけなんですね。
まぁ、私の指摘もいろいろ足りませんでしたけど、そんな無能の指摘よりコードくれ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!