#include <stdio.h>
#include <stdlib.h>
#include <time.h>
double rand_double(); /* 0.0 to 1.0, unif. dist. */
double rand_double2(double x, double y); /* x to y */
int rand_int(int a, int b); /* a to b, inclusive */
int main() {
    int i,j,a,b,weather[5]={0,0,0,0,0};
    time_t start;
    double x, y;
    double  prob[4]={.2,.3,.5,.9};
    int  expected[5]={200,100,200,400,100};
    double choice;
    srand((long)(time(NULL))); /* initialize rand() */
    printf("RAND_MAX: %i\n",  RAND_MAX);
    printf("*********Various Ranges*********\n");
    for (i = 0; i < 3; i++)
        printf("Random double, 0 to 1: %0.15f\n",  rand_double());
    printf("\n");
    x = 2.0; y = 5.0;
    for (i = 0; i < 3; i++)
        printf("Random double, %.2f to %.2f: %0.15f\n", x, y, rand_double2(x, y));
    printf("\n");
    a = 2; b = 7;
    for (i = 0; i < 3; i++)
        printf("Random int, %i to %i: %i\n", a, b, rand_int(a, b));
    printf("*********Now The Weather*********\n");
    for (j=0;j<3;j++) {
        choice=rand_double();
        for (i=0;i<4;i++) {
            if (choice<=prob[i])break;
        }
        printf("%0.15f  %i\n",choice ,i);
        switch (i) {
        case 0:
            printf("%s\n","Sunny");
            break;
        case 1:
            printf("%s\n","Cloudy");
            break;
        case 2:
            printf("%s\n","Ocasional Showers");
            break;
        case 3:
            printf("%s\n","Rainy");
            break;
        case 4:
            printf("%s\n","Storms");
            break;

        }
    }
    printf("\n***************1000 choices****************\n");

    for (j=0;j<1000;j++) {
        choice=rand_double();
        for (i=0;i<4;i++) {
            if (choice<=prob[i])break;
        }
        weather[i]++;
    }
    for (i=0;i<5;i++) {
        printf("%i  %i expected %i \n", i,weather[i],expected[i]);
    }
    printf("\n***************time calls*************\ntime(NULL) = ");
    printf(" %ld seconds  \n", time(NULL));
    return 0;
}

double rand_double() {
    return rand()/(double)RAND_MAX;
}

double rand_double2(double x, double y) {
    return(y - x)*rand_double() + x;
}

int rand_int(int a, int b) {
    return(int)((b - a + 1)*rand_double()) + a;
}


A Run


[siegelj@tc-login Random]$ random
RAND_MAX: 2147483647
*********Various Ranges*********
Random double, 0 to 1: 0.706519631532263
Random double, 0 to 1: 0.782058262164732
Random double, 0 to 1: 0.249282087315471

Random double, 2.00 to 5.00: 3.348258040541903
Random double, 2.00 to 5.00: 4.036708436457770
Random double, 2.00 to 5.00: 4.295788123875758

Random int, 2 to 7: 7
Random int, 2 to 7: 7
Random int, 2 to 7: 5
*********Now The Weather*********
0.850873881415871  3
Rainy
0.266367023003459  1
Cloudy
0.632309428710635  3
Rainy

***************1000 choices****************
0  195 expected 200
1  93 expected 100
2  209 expected 200
3  391 expected 400
4  112 expected 100

***************time calls*************
time(NULL) =  1478024230 seconds
[siegelj@tc-login Random]$