C语言 统计数组每个元素个数

用C语言产生100个随机数,作为一个数组,然后统计该数组中每个元素出现的次数,并输出,请教这个程序该如何写、

我没有随机种子函数,这样效果明显。所产生的随机数的范围你可以改变。
#include<stdio.h>
#include<stdlib.h>
main()
{
int a[100],b[100],c[100]={0},i,j;
//a数组放随机数
//b数组放是否被统计的标志,1未统计,0已统计
//c数组放对应a数组中随机数出现的次数
for(i=0;i<100;i++)
{
a[i]=rand()%21;//产生0~20的随机数
b[i]=1;//未统计
printf("%5d",a[i]); //打印a数组的值
if((i+1)%10==0) //一行打印10个数
printf("\n");
}
printf("\n");
for(i=0;i<100;i++)
{
if(b[i]) //若a[i]未被统计
{
c[i]++; //次数加1
for(j=i+1;j<100;j++)//从下一个开始向后查找
if(a[j]==a[i]) //若相等
{
c[i]++; //则次数增1
b[j]=0; //改为已统计
}
}
}
for(i=0,j=1;i<100;i++)
{
if(c[i]) //若某随机数出现了,则打印其值和出现次数
printf("%3d:%5d 出现 %3d次\n",j++,a[i],c[i]);
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-14
void test()
{
srand((int)time(0));
int i, j;
int a[100];
for( i=0; i<100; i++)
{
a[i] = (int)(rand() * 10.0 / RAND_MAX); //随机数限定在0~10之间更能看出效果
}
//排序
for( i=0; i<99; i++)
{
for(j=i; j<100; j++)
{
if(a[i]> a[j])
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
//输出统计结果
i=0;
while(i<100)
{
int count =0;
int v = a[i];
while((v == a[i]) && i<100)
{
i++;
count++;
}
printf("%d 出现 %d 次\n", v, count);
}
}
第2个回答  2011-11-15
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define n 100

void main()
{
int i,j,t, a[n];

srand((unsigned)time(NULL));
for(i=0;i<n;i++)
a[i] = rand()%n;
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
j=1;t=a[0];
for(i=1;i<n;i++)
{
if(t==a[i]) j++;
else
{
printf("%d出现%d次\n", t, j);
j=1;t=a[i];
}
}
printf("%d出现%d次\n", t, j);
}
第3个回答  2019-02-13
用cnt加for循环?