C标准库中生成伪随机数的是rand函数,使用这个函数需要包含头文件stdlib.h,它没有参数,返回值是一个介于0和RAND_MAX之间的接近均匀分布的整数。RAND_MAX是该头文件中定义的一个常量,在不同的平台上有不同的取值,但可以肯定它是一个非常大的整数。通常我们用到的随机数是限定在某个范围之中的,例如0~9,而不是0~RAND_MAX,我们可以用%运算符将rand函数的返回值处理一下:

int x = rand() % 10;

C标准库允许我们自己指定一个初值,然后在此基础上生成伪随机数,这个初值称为Seed,可以用srand函数指定Seed。通常我们通过别的途径得到一个不确定的数作为Seed,例如调用time函数得到当前系统时间距1970年1月1日00:00:00的秒数,然后传给srand

srand(time(NULL));

写一个小程序,生产随机数并打印出来,并以可视化的形式打印直方图:

value	how many
0 10130
1 10072
2 9990
3 9842
4 10174
5 9930
6 10059
7 9954
8 9891
9 9958
0  1  2  3  4  5  6  7  8  9

*  *  *  *     *  *  *     *
* * * * * * *
* * *
*
*
 /*************************************************************************
> File Name: random.c
> Author: qin
> Mail: qin11745@gmail.com
> Created Time: 2013年08月02日 星期五 09时23分46秒
************************************************************************/ #include<stdio.h>
#include<stdlib.h>
#define N 100//定义保存随机数数组的大小(产生N个随机数)
#define C 100//定义保存各个随机数出现的次数的数组的大小
#define UPPER 10 //定义随机数的最大值(使随机数在0-UPPER之间,UPPER<=20&&UPPER<=N) int a[N];//保存随机数的数组
int histogram[C];//保存各个随机数个数的数组 void get_random(int upper_bound)//获取0-upper_bound内的随机数
{
int i;
srand(time(NULL));
for (i = ; i < N ;i++)
a[i] = rand() % upper_bound;
} int get_max(int a[],int num)//获取一个数组之中的最大值
{
int i;
int max;
max = a[];
for(i = ; i< num ;i++)
if(max<a[i])
max=a[i];
return max;
} void print_random()//打印随机数柱状图
{
int i,j,m;
m = get_max(&histogram,N);
int temp[N];
printf("max is %d\n",m);
for (i = ; i < UPPER;i++)
printf("%d\t",i);
printf("\n");
printf("\n");
for (i = ; i < N;i++)
temp[i] = histogram[i]; for (i = ; i < m ;i++)
{
for(j = ; j < N;j++)
{
//printf("%d",temp[j]);
if((temp[j])>)
printf("*");
printf("\t");
temp[j]--;
}
printf("\n");
} } /*
int count(int value)//统计各个数的出现次数(效率低下)
{
int count =0,i;
for(i = 0;i < N;i++)
if(a[i] == value)
++count;
return count;
}
*/ void get_count()//获取每个数字的出现频率(利用a[i]的值作为histogram[]的下标)
{
int i = ;
for(i = ; i < N;i++)
histogram[a[i]]++;
} int main(void)//主函数
{
int i = ;
get_random(UPPER);
// for(i = 0; i < 10 ;i++)
// printf("%d\t%d\n",i,count(i));
// printf("\n");
get_count();
printf("value\thowmany\n");
for (i = ;i < UPPER;i++)
printf("%d\t%d\n",i,histogram[i]);
print_random();
return ;
}

打印效果:

[qin@localhost c]$ ./random
value howmany max is * * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * *
* * * * * * * *
* * * * * *
* * * * *
* * * *
* * *
* *
* *
* *

遇到的问题1:

[qin@localhost c]$ gcc random.c -o random
random.c::: 警告:宏名后缺少空白 [默认启用]
random.c::: 错误:程序中有游离的‘\’
random.c::: 错误:程序中有游离的‘\’
random.c::: 错误:程序中有游离的‘\’
random.c: 在函数‘get_random’中:
random.c::: 错误:程序中有游离的‘\’
random.c::: 错误:程序中有游离的‘\’
random.c::: 错误:程序中有游离的‘\’
random.c: 在函数‘print_random’中:
random.c::: 错误:程序中有游离的‘\’
random.c::: 错误:程序中有游离的‘\’
random.c::: 错误:程序中有游离的‘\’
random.c::: 警告:传递‘get_max’的第 个参数时在不兼容的指针类型间转换 [默认启用]
random.c::: 附注:需要类型‘int *’,但实参的类型为‘int (*)[]’
random.c::: 错误:程序中有游离的‘\’
random.c::: 错误:程序中有游离的‘\’
random.c::: 错误:程序中有游离的‘\’
random.c::: 错误:程序中有游离的‘\’
random.c::: 错误:程序中有游离的‘\’
random.c::: 错误:程序中有游离的‘\’
random.c::: 错误:程序中有游离的‘\’
random.c::: 错误:程序中有游离的‘\’
random.c::: 错误:程序中有游离的‘\’
random.c: 在函数‘get_count’中:
random.c::: 错误:程序中有游离的‘\’
random.c::: 错误:程序中有游离的‘\’
random.c::: 错误:程序中有游离的‘\’

这是因为在添加注释的时候不小心在第10行的 N 后面添加了一个汉语的空格,导致编译出错。

遇到的问题2:

void print_random()//打印随机数柱状图

函数中使用了制表符来控制字符间的间距,不知道卫什么换成空格之后打印的直方图就会出现变形错位,各个数字出现的频率不能正确对准,百思不得其解。

c语言数组应用--统计随机数并打印直方图的更多相关文章

  1. Go语言数组的使用

    Go 语言数组 Go 语言提供了数组类型的数据结构. 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形.字符串或者自定义类型. 相对于去声明number0 ...

  2. Go语言数组

    目录 声明数组 数组在内存的结构 初始化数组 使用数组 函数间传递数组 数组使用注意事项 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列(这是一种同构的数据结构);这种类型可以是任意的原始类 ...

  3. C语言数组指针

    C语言中的数组指针与指针数组: ·数组指针一.区分 首先我们需要了解什么是数组指针以及什么是指针数组,如下: int *p[5];int (*p)[5];数组指针的意思即为通过指针引用数组,p先和*结 ...

  4. C语言数组的创建和使用

    C语言数组的创建和使用 数组是一组相同类型元素的集合. 一维数组的创建及初始化 //创建int类型的数组 //直接创建:不对数组进行初始化 int arr1[10]; //最常用.好用的创建方式 in ...

  5. Go 语言控制台输入&生成随机数

    Go 语言控制台输入&生成随机数 1. 不同基础类型之间的转化对于不同的基础类型之间的转化,Go 提供了 strconv包.它实现了字符串与其他基本数据类型之间的转化.其中最常用的数值转化函数 ...

  6. GO语言数组和切片实例详解

    本文实例讲述了GO语言数组和切片的用法.分享给大家供大家参考.具体分析如下: 一.数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列. (1)数组的创建. 数组有3种创建方式: ...

  7. C语言 数组 列优先 实现

    C语言数组结构列优先顺序存储的实现 (GCC编译). 从行优先转换为列优先存储方式, 与行优先相比, 不同之处在于改变了数组维界基址的先后顺序, 从而改变了映像函数常量基址. /** * @brief ...

  8. C语言 数组 行优先 实现

    C语言数组结构行优先顺序存储的实现 (GCC编译). /** * @brief C语言 数组 行优先 实现 * @author wid * @date 2013-11-02 * * @note 若代码 ...

  9. 不可或缺 Windows Native (5) - C 语言: 数组

    [源码下载] 不可或缺 Windows Native (5) - C 语言: 数组 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 数组 示例cArray.h #ifn ...

随机推荐

  1. BZOJ 3446: [Usaco2014 Feb]Cow Decathlon( 状压dp )

    水状压dp. dp(x, s) = max{ dp( x - 1, s - {h} ) } + 奖励(假如拿到的) (h∈s). 时间复杂度O(n * 2^n) ------------------- ...

  2. Endnote X6 如何修改输出格式(output style)成为自己想要的输出格式:

    Endnote X6 如何修改输出格式(output style)成为自己想要的输出格式: (1)首先尝试在endnote output style 网站中查找: http://www.endnote ...

  3. 摘记:IIS长时间任务超时处理

    1.如果是在客户端调用Webservice,首先设置客户端超时, SoapHttpClientProtocol.Timeout = 3600 * 1000;//单位为秒,这是设置了一个小时 2.如果站 ...

  4. Appium 命令行启动配置

    Appium 安装过后,会有图形界面,同样也支持命令行参数的启动和配置 Windws: 在windows 安装配置Appium有三种方式: Node install -g appium .exe文件安 ...

  5. QT在构造函数中退出程序

    原地址:http://www.tuicool.com/articles/RZnYze 在QT的界面类的构造过程中,如果想退出整个程序,暴力的做法是调用exit(-1)进行,另外一种不是那么暴力的方式如 ...

  6. ios开发者创建app应用开发授权文件 实战方法:

    收到apple邮件成为合法的开发者后,进入https://developer.apple.com/account/ios/profile/profileList.action页面 总的有4步操作: 1 ...

  7. perl 继承概述

    <pre name="code" class="html">[root@wx03 test]# cat Horse.pm package Horse ...

  8. [置顶] ARM-Linux下WEB服务器Boa的移植、配置和运行测试

    Linux下使用的轻量级WEB服务器主要有:lighttpd.thttpd.shttpd和boa等等,而Boa是使用最为广泛的轻量级WEB服务器之一(当然,阿帕奇是世界使用排名第一的Web服务器软件) ...

  9. TEXT文本编辑框4 点击按钮读取文本框内容到内表

    *&---------------------------------------------------------------------* *& Report ZTEST_CWB ...

  10. 使用JDBC获取能自动增加的主键

    本篇讲述如何使用JDBC获取能自动增加的主键的值.有时候我们在向数据库插入数据时希望能返回主键的值,而不是通过查询的方式.一般来说,在多表相互关联主键约束,也就是说别的表的外键约束是该表的主键,那么在 ...