c语言数组应用--统计随机数并打印直方图
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语言数组应用--统计随机数并打印直方图的更多相关文章
- Go语言数组的使用
Go 语言数组 Go 语言提供了数组类型的数据结构. 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形.字符串或者自定义类型. 相对于去声明number0 ...
- Go语言数组
目录 声明数组 数组在内存的结构 初始化数组 使用数组 函数间传递数组 数组使用注意事项 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列(这是一种同构的数据结构);这种类型可以是任意的原始类 ...
- C语言数组指针
C语言中的数组指针与指针数组: ·数组指针一.区分 首先我们需要了解什么是数组指针以及什么是指针数组,如下: int *p[5];int (*p)[5];数组指针的意思即为通过指针引用数组,p先和*结 ...
- C语言数组的创建和使用
C语言数组的创建和使用 数组是一组相同类型元素的集合. 一维数组的创建及初始化 //创建int类型的数组 //直接创建:不对数组进行初始化 int arr1[10]; //最常用.好用的创建方式 in ...
- Go 语言控制台输入&生成随机数
Go 语言控制台输入&生成随机数 1. 不同基础类型之间的转化对于不同的基础类型之间的转化,Go 提供了 strconv包.它实现了字符串与其他基本数据类型之间的转化.其中最常用的数值转化函数 ...
- GO语言数组和切片实例详解
本文实例讲述了GO语言数组和切片的用法.分享给大家供大家参考.具体分析如下: 一.数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列. (1)数组的创建. 数组有3种创建方式: ...
- C语言 数组 列优先 实现
C语言数组结构列优先顺序存储的实现 (GCC编译). 从行优先转换为列优先存储方式, 与行优先相比, 不同之处在于改变了数组维界基址的先后顺序, 从而改变了映像函数常量基址. /** * @brief ...
- C语言 数组 行优先 实现
C语言数组结构行优先顺序存储的实现 (GCC编译). /** * @brief C语言 数组 行优先 实现 * @author wid * @date 2013-11-02 * * @note 若代码 ...
- 不可或缺 Windows Native (5) - C 语言: 数组
[源码下载] 不可或缺 Windows Native (5) - C 语言: 数组 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 数组 示例cArray.h #ifn ...
随机推荐
- Jackson ObjectMapper类
ObjectMapper类是Jackson库的主要类.它提供一些功能将转换成Java对象匹配JSON结构,反之亦然.它使用JsonParser和JsonGenerator的实例实现JSON实际的读/写 ...
- Internet基础
互联网是什么? Internet是一个互联网,它是将提供不同服务的,使用不同技术的,具有不同功能的物理网络互连起来而形成的. TCP/IP是一个协议集,它对Internet中主机的寻址方式,主机的命名 ...
- Hashtable的使用
Hashtable mylist = new Hashtable(); mylist.Add("1", "100"); ...
- DOM方法入门 - 第二课
1.console.log()是吧元素显示在控制台2.appendChild() 就是将元素追加到末尾3.innerHTML获取的是元素里面的所有内容包括里面的子元素4.innerText获取的是元素 ...
- Moss、SharePoint数据库迁移问题(转)
当项目快做完时,大家都要考虑将程序及数据迁移到正式环境部署.但是,如果用SharePoint开发,它会产生很多数据库,到底哪些需要迁移,哪些不需要迁移了?? 请看: 1.配置完成SharePoint后 ...
- HDU3709:Balanced Number(数位DP+记忆化DFS)
Problem Description A balanced number is a non-negative integer that can be balanced if a pivot is p ...
- JS - 鼠标经过边框旋转
*右侧为鼠标经过时效果. 下载地址:http://www.lanrentuku.com/js/tupian-1200.html
- S3C6410 纯粹的裸机启动,自己写的SD BOOT启动
这几天晚上一直折腾S3C6410的裸机SD卡启动,不大想使用UBOOT,我是搞硬件的,对底层非常感兴趣,不喜欢已经写好的,因此自己一直在尝试,其实很早之前就试过SD卡启动,也就是ARM11上电后会把S ...
- 修改进程占用内存SetProcessWorkingSetSize函数(多篇相关文章值得学习)
物理内存和虚拟内存 物理内存,在应用中,自然是顾名思义,物理上,真实的插在板子上的内存是多大就是多大了.看机器配置的时候,看的就是这个物理内存. 如果执行的程序很大或很多,就会导致物理内存消耗殆尽.为 ...
- Usaco 1.3.2 修理牛棚(Barn Repair)
Barn Repair 题意:在一个夜黑风高,下着暴风雨的夜晚,农民约翰的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满. 剩下的牛一个紧挨着另一个被排成一行来过夜. 有些牛棚里有 ...