1.定义一个一维数,数组大小为24。

2.产生0~23的随机数。

3.将产生的随机数存入i数组,要求数组中的每个数据不能相同。

4.补充说明,这个子程序要求每次调用后,这个数组里面就 存放了0~23这些数据,而且这些数据没有重复的。

5.注意,C语言有随机数函数,可以用函数产生随机数。RAND(N)

#include <stdio.h>
#include <time.h>
#define ArrayMaxItem 24

int RandTest()
{
int i = 0;
int ret = 0;
time_t t;
for (i=0; i<10; i++)
{
srand((unsigned) time(&t)*10);
ret = rand();
//ret = rand((unsigned) time(&t));
printf("ret:%d\n", ret);
}
return 0;
}

int RandArray(int *a, int n)
{
int i = 0;
int t = 0;
time_t mytime;
struct tm *timeinfo;

for (i=0; i<n ;i++)
a[i] = 0;

/*only n-1 posions need to by seted*/
for (i=0; i<n-1; i++)
{
while(a[t=rand((unsigned)time(&mytime))%n] != 0);
a[t] = n-i-1;
timeinfo = localtime(&mytime);
printf("time:%s a[%d]:%d\n", asctime(timeinfo), t, a[t]);
}

for (i=0; i<n; i++)
{
printf("a[%d]:%d\n", i, a[i]);
}
return 0;
}

int main()
{
int a[ArrayMaxItem];
RandArray(a, ArrayMaxItem);

//RandTest();
return 0;
}

1.随机数的使用过程:

  网上说要先调用srand(unsigned seed)函数设置随机数种子,再调用rand(void)产生随机数,但我用系统时间来作为种子,产生了十次随机数值都是一样的。

  之后采用上面代码所用的方法,直接将种子传入rand()函数中,调用十次产生不同的值,但每次调用产生的值是同一组。

2.获得系统时间:

#include <stdio.h>
#include <time.h>
int main()
{
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
printf ( "The current date/time is: %s", asctime (timeinfo) );

return 0;
}

time_t // 时间类型(time.h 定义)
struct tm { // 时间结构,time.h 定义如下:
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
}
time ( &rawtime ); // 获取时间,以秒计,从1970年1月一日起算,存于rawtime
localtime ( &rawtime ); //转为当地时间,tm 时间结构
asctime() // 转为标准ASCII时间格式:
//就是直接打印tm,tm_year 从1900年计算,所以要加1900,月tm_mon,从0计算,所以要加1

3.思路:

  用随机数产生0~n-1范围内的数组下标,当对应的数不为0,则置为n-i-1,这样,只需要置n-1个,最后一个本来就是0。

  产生0~n-1范围内的随机数的方法是对rand()产生出来的随机数对n取余。

4.运行结果:

time:Tue Apr 19 12:28:42 2016
a[7]:23
time:Tue Apr 19 12:28:42 2016
a[22]:22
time:Tue Apr 19 12:28:42 2016
a[9]:21
time:Tue Apr 19 12:28:42 2016
a[19]:20
time:Tue Apr 19 12:28:42 2016
a[17]:19
time:Tue Apr 19 12:28:42 2016
a[10]:18
time:Tue Apr 19 12:28:42 2016
a[12]:17
time:Tue Apr 19 12:28:42 2016
a[13]:16
time:Tue Apr 19 12:28:42 2016
a[2]:15
time:Tue Apr 19 12:28:42 2016
a[11]:14
time:Tue Apr 19 12:28:42 2016
a[18]:13
time:Tue Apr 19 12:28:42 2016
a[4]:12
time:Tue Apr 19 12:28:42 2016
a[16]:11
time:Tue Apr 19 12:28:42 2016
a[8]:10
time:Tue Apr 19 12:28:42 2016
a[15]:9
time:Tue Apr 19 12:28:42 2016
a[21]:8
time:Tue Apr 19 12:28:42 2016
a[14]:7
time:Tue Apr 19 12:28:42 2016
a[6]:6
time:Tue Apr 19 12:28:42 2016
a[5]:5
time:Tue Apr 19 12:28:42 2016
a[1]:4
time:Tue Apr 19 12:28:42 2016
a[23]:3
time:Tue Apr 19 12:28:42 2016
a[20]:2
time:Tue Apr 19 12:28:42 2016
a[3]:1
a[0]:0
a[1]:4
a[2]:15
a[3]:1
a[4]:12
a[5]:5
a[6]:6
a[7]:23
a[8]:10
a[9]:21
a[10]:18
a[11]:14
a[12]:17
a[13]:16
a[14]:7
a[15]:9
a[16]:11
a[17]:19
a[18]:13
a[19]:20
a[20]:2
a[21]:8
a[22]:22
a[23]:3

C语言 将产生的随机数存入数组,数据不能相同的更多相关文章

  1. js获取100个随机数存入数组

    . //js获取100个随机数存入数组 $(function () { var arr = []; ; var str = ""; ) { , ); ) { arr[num] = ...

  2. c语言输入一行未知个数数字存入数组

    一直有个疑问输入一行数字存入数组时若不知道数字的个数怎么办,最容易想到的办法就是接收字符然后转化为数字,但这样太过麻烦. 今天上网查了下,说可以用ungetc()函数将字符送回输入流,在这里总结归纳一 ...

  3. C语言中如何将二维数组作为函数的参数传递

    今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不 ...

  4. php 将查询出的数组数据存入redis

    我们从数据库查询出来的数据一般为数组的形式, 而redis是不支持存入数组的, 一种解决办法是将数组转化为json数据,再将json存入redis,之后取出时再将json转化为php数组. 但将取出的 ...

  5. C#委托与C语言函数指针及函数指针数组

    C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...

  6. C# Hashtable中存入数组、List

    哈希表中存入数组示例代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

  7. java随机数与数组的使用。

    java随机数与数组的使用.    一:题目 二 代码:  public class Students {    int number;  // 学号    int State ;   // 年级   ...

  8. C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

    原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...

  9. 第二十三节:Java语言基础-详细讲解函数与数组

    函数 函数在Java中称为方法,在其他语言中可能称为函数,函数,方法就是定义在类中具有特定功能的程序.函数,在Java中可称为方法. 函数的格式: 修饰符 返回值类型 函数名(参数类型 参数1, 参数 ...

随机推荐

  1. String 去重,区分大小写

    题目要求:去除,和.,相同的单词去除后面的.区分大小写 示例:输入:There is a will,there is a way. 输出There is a will there way 答案代码: ...

  2. JAVA+PHP+阿里云组件纯手工实现POP、SMTP、IMAP开发邮件服务器(二)

    java开发邮件服务器的接收模块 用java建立socket服务端,监听端口25,实现SMTP协议.即可完成邮件服务器的接收模块. 这里要注意的是,SMTP协议其实可以分为两种.一种是你用手机.PC等 ...

  3. worker启动executor源码分析-executor.clj

    在"supervisor启动worker源码分析-worker.clj"一文中,我们详细讲解了worker是如何初始化的.主要通过调用mk-worker函数实现的.在启动worke ...

  4. nginx 配置.json文件直接访问

    不要弹出下载 配置nginx.conf http { include mime.types; default_type application/json;

  5. android网络判断

    //ConnectivityManager管理网络连接相关的操作 ConnectivityManager connectivityManager = (ConnectivityManager) con ...

  6. Oracle之别名小结

    今天在写一个简单的SQL语句并执行时抛出了如下图所示的一个错误提示信息! 恩,此异常信息很明显,在SQL语句中标示符的长度过长了,简短一些就应该没问题了,我查看了一下我的SQL语句发现是我的查询字段的 ...

  7. 华为OJ平台——统计字符串中的大写字母

    题目描述: 统计字符串中的大写字母的个数 输入: 一行字符串 输出: 字符串中大写字母的个数(当空串时输出0) 思路: 这一题很简单,直接判断字符串中的每一个字符即可,唯一要注意的一点是输入的字符串可 ...

  8. [drp 6]接口和抽象类的区别,及其应用场景

    导读:在很多时候,接口和抽象类可以替换.发现这个问题,还是之前学习设计模式的时候,看到那个UML图发现的.那么,究竟在什么时候使用接口,什么时候使用抽象类呢?现在结合这个项目,做一个总结. 一.接口 ...

  9. SVN与TortoiseSVN实战:属性的奇技淫巧(一)

    硬广:<SVN与TortoiseSVN实战>系列已经写了六篇,本系列结合TortoiseSVN对SVN中容易被忽视的部分进行了详解,预计再用三.四篇来结束这个系列. 本篇详解一下SVN的属 ...

  10. asp.net ashx 一般处理程序 使用async await异步直接 copy可用哦

    以前一直很懒  碰到ashx要用await异步就绕开  用aspx  或者mvc异步控制器  这次公司需要  我查了国内的文章基本都不能简单copy来处理一堆错关键的过程中函数BeginProcess ...