问题是这样的:首先生成一列0~9的随机数保存在数组中,然后统计其中每个数字出现的次数并打印。
#include <stdio.h>
#include <stdlib.h>
#define N 20
int a[N];
void gen_random(upper_bound) //生成随机数
{
int i;
for(i=0;i<N;i++)
{
a[i]=rand()%10;
printf("%d ",a[i]);//printf("%d\t",a[i]);和printf("%d",a[i]);三者是有区别的
}
printf("\n"); //这个最好不要丢
}
int howmany(int value) //统计
{
int i,count=0;
for(i=0;i<N;i++)
if(a[i]==value) //此处不用{ }
++count;
return count;
}
int main()
{
int i,ret;
gen_random(10);
printf("value\thow many\n");
for(i=0;i<10;i++)
{ //下面两句可以合并为printf("%d\t%d\n", i, howmany(i));
ret=howmany(i);
printf("%d\t%d\n",i,ret);
}
return 0;
}
编译结果如下:
需要注意的几点问题如下:
(1)C标准库中生成伪随机数的是rand函数,使用这个函数需要包含头文件stdlib.h,它没有参数,返回值是一个介于0和RAND_MAX之间的接近均匀分布的整数。我们用到的随机数是限定在某个范围之中的,例如0~9,而不是0~RAND_MAX,我们可以用%运算符将rand函数的返回值处理一下:int x = rand() % 10;
(2)编译器的工作分为两个阶段,先是预处理(Preprocess)阶段,然后才是编译阶段。像#include和#define这种以#号开头的行称为预处理指示(Preprocessing Directive)。本程序中预处理器做了两件事情,一是把头文件stdio.h和stdlib.h在代码中展开,二是把#define定义的标识符N替换成它的定义20。