Chinaunix首页 | 论坛 | 博客
  • 博客访问: 129081
  • 博文数量: 40
  • 博客积分: 2228
  • 博客等级: 大尉
  • 技术积分: 335
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-12 11:48
文章分类

全部博文(40)

文章存档

2011年(11)

2010年(29)

我的朋友

分类: LINUX

2010-07-22 00:18:30

下面是一个生产随机数的实例:
 

#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#define TRUE 1
#define FALSE 0
#define N_CARDS 13

void shuffle(int *deck, int n_cards)
{
    int i;
    static int first_time=TRUE;

    if(first_time){
        first_time=FALSE;
        srand((unsigned int) time(NULL));
    }

    for(i = n_cards - 1; i > 0;i-=1)
    {
        int where;
        int temp;
    
        where = rand() % i;
        temp=deck[where];
        deck[where] = deck[i];
        deck[i] = temp;
    }
}

void print(int *deck, int n_cards, void (*fun)(int * , int ))
{
    int i=0;

    printf("inital status .......\n");
    for( ; i < n_cards ; i++ )
    {
        printf("deck[%d]=%d\n",i,deck[i]);
    }
    
    fun(deck , n_cards);
    
    printf("change status .......\n");
    for(i = 0 ; i < n_cards ; i++ )
    {
        printf("deck[%d]=%d\n",i,deck[i]);
    }
}

void main(){
    int *deck=(int *)malloc(N_CARDS * sizeof(int));
    int *p=deck;
    int i = 0;

    for(;p < &deck[N_CARDS]; )//注意:赋值的最有效方式
        *p++ = i++;    

    print(deck, N_CARDS, shuffle);
    
}


阅读(1282) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~