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 ...
随机推荐
- C#、WinForm、ASP.NET - Md5散列加密
MD5值概念解释: 转载自:http://free0007.iteye.com/blog/2047163 所 谓MD5,即"Message-Digest Algorithm 5(信息-摘要 ...
- delphi中覆盖最大化消息(覆盖WM_GETMINMAXINFO消息)
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; ...
- MYSQL查询表结构
mysql查看表结构命令,如下: desc 表名;show columns from 表名;describe 表名;show create table 表名; use information_sche ...
- 基于visual Studio2013解决面试题之0710求方优化
题目
- uvc摄像头代码解析6
10.扫描视频设备链和注册视频设备 10.1 uvc视频链 struct uvc_video_chain { //uvc视频链 struct uvc_device *dev; //uvc设备 stru ...
- Codility上的问题 (17) PI 2012
这个题比较简单,给定一个整数数组,对每个元素,求出和它最近比它大的数的距离(下标绝对值),如果没有比它大的数,认为距离是0. 数组元素个数 N [0..50000],数组元素范围[-10^9, +10 ...
- Java中的throw和throws的差别
Java中的throw和throws的差别 1.throwkeyword用于方法体内部.而throwskeyword用于方法体部的方法声明部分: 2.throw用来抛出一个Throwable类型的异常 ...
- Mac 修改Host 绑定host
Mac 系统下 ,修改Host 文件: 打开命令行终端 输入 sudo vi /etc/hosts 之后回车确认,进入vi 编辑界面(进行vi编辑操作,之后保存就行了) 版权声明:本文为博主原创文章, ...
- Shell printf 命令
Shell printf 命令 printf 命令模仿 C 程序库(library)里的 printf() 程序. 标准所定义,因此使用printf的脚本比使用echo移植性好. printf 使用引 ...
- Windows DIB文件操作具体解释-5.DIB和调色板
Windows调色板是256色显卡时期的产物,如今显卡最少也是16bit的了.所以调色板基本上是用不到了的. 可是以下几种情况还是须要去使用和了解调色板: 1.在新显卡上保证256色兼容模式的正常执行 ...