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 ...
随机推荐
- PHP - 计算执行程序耗时
效果: 首先在includes文件夹下编写,global.func.php函数库: <?php /* * Version:1.0 * CreateTime:2015年11月11日 * Autho ...
- WCF技术剖析之十七:消息(Message)详解(下篇)
原文:WCF技术剖析之十七:消息(Message)详解(下篇) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话)]]< ...
- ActiveMQ持久化方式(转)
消息持久性对于可靠消息传递来说应该是一种比较好的方法,有了消息持久化,即使发送者和接受者不是同时在线或者消息中心在发送者发送消息后宕机了,在消息 中心重新启动后仍然可以将消息发送出去,如果把这种持久化 ...
- MFC超链接静态类的使用
源代码:http://download.csdn.net/detail/nuptboyzhb/4197151 CHyperLink类,是由CStatic类派生出来,重载了CStatic类的如下函数: ...
- error -27257: Pending web_reg_save_param/reg_find/create_html_param[_ex] request(s) detected and reset at the end of iteration number 1
检查点函数 web_reg_find("Search=body", "savecount=num", "Text=test1&quo ...
- asp.net ajax检查用户名是否存在代码
原文 asp.net ajax检查用户名是否存在代码 用户注册时,我们经常需要检查用户名是否存在,本文就是实现无刷新验证用户名 打开开发环境VS 2005,新建项目(或打开现有项目),新建一个Web ...
- css selector: xpath:
css selector: $$(".mainLeft>div>h1") xpath: $x(".mainLeft>div>h1") n ...
- 今天就这么乱糟糟的过啦~刚刚接触html,就稍微写了一下,明天加油,今天直接贴图
2015-01-01 <!DOCTYPE HTML> <html> <head> <meta charset = "gb2312"> ...
- Android 特殊符号的转码大全
项目中要在string.xml 中显示特殊符号,如@号冒号等,直接写肯定不行啦..只能考虑使用ASCII码进行显示: @号 @ :号 : 空格 以下为常见的ASCII十进制交换编码: --> ...
- Oracle PL/SQL 非预定义异常、自定义异常处理、RAISE_APPLICATION_ERROR
抛出异常 Oracle有三种类型的异常错误: 1. 预定义(Predefined)异常 ORACLE预定义的异常情况大约有24个.对这种异常情况的处理,无需在程序中定义,由ORACLE自动将其引发. ...