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 ...
随机推荐
- POJ - 1185 炮兵阵地 (状态压缩)
题目大意:中文题目就不多说大意了 解题思路: 1.每行最多仅仅有十个位置,且不是山地就是平原,那么就能够用1表示山地,0表示平原,将每一行的状态进行压缩了 2.接着找出每行能放炮兵的状态.先不考虑其它 ...
- 杭电ACM1408——盐水的故事
简单的题目,RT,就能够写出代码.须要注意的是类型的应用,应该用浮点型. 以下的是AC的代码: #include <iostream> using namespace std; int m ...
- PS大头照的背景
给同事ps一个大头照,只是修改一下背景颜色,以前没有做过,这次算是小练习了一把,与大家分享一下.修改大头照背景重要的是如何选中背景的区域,如果用魔棒选择的话,头与背景的边处理的不好,说说我的处理方法吧 ...
- crm查询记录共享给了哪些人
有时候,我们须要查询一个记录.共享给了哪些人?怎么做? 第一种做法:是sql的方式 select * from PrincipalObjectAccess where objectid = '5226 ...
- EEPlat PaaS VS Saleforce force.com
综述 EEPlatPaaS和Saleforce的Force.com都是元数据驱动应用的解决方式.整体而言,Force.com提供了更上层的解决方式,屏蔽了SQL语句.数据库:EEPlat更加底层,有更 ...
- Silverlight技术调查(4)——完成的调查结果
原文 Silverlight技术调查(4)——完成的调查结果 客户端使用Silverlight+DXperience,可以在线编辑各种常见文本及富文本文档(doc.docx.rtf.txt.html… ...
- 杭电 1711 Number Sequence
Number Sequence Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- html适配Anroid手机
本文全然是翻译与总结谷歌官方的教程,已确保文档的正确性. 免得大家被五花八门的其它的资料弄混了,也没有系统行的学习. 一.设置窗体尺寸和适配屏幕分辨率 谷歌官方文档提到两个大的方面. 1.Viewpo ...
- webpack React+ES6
webpack踩坑之路——构建基本的React+ES6项目 webpack是最近比较火的构建工具,搭配上同样比较火的ReacJS与ES6(ES2015)一定是现在很多潮流 programmer 的 ...
- 【ASP.NET Web API教程】5.5 ASP.NET Web API中的HTTP Cookie
原文:[ASP.NET Web API教程]5.5 ASP.NET Web API中的HTTP Cookie 5.5 HTTP Cookies in ASP.NET Web API 5.5 ASP.N ...