| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 683 人关注过本帖
标题:vc和tc中rand的使用有很大的不同么?
只看楼主 加入收藏
soky
Rank: 4
等 级:业余侠客
帖 子:126
专家分:228
注 册:2009-7-13
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
vc和tc中rand的使用有很大的不同么?
最近看谭老师的c视频中用的是tc,我们一般都用vc,想把一个例题改过来,看看。
大家帮帮忙了

#include<stdlib.h>
#include<stdio.h>
void main()
{
    int a[7]={0},i,m,rand(6);
    for(i=0;i<6000;i++)
    {
        m=1+rand%(6-1+1);
        a[m]++;
    }
    for(i=0;i<6;i++)
        printf("\na[%d]=%5d",i,a[i]);
}

这是我最后改好的。谢谢。
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
void main()
{
    int a[7]={0},i,m,n;
    char ch;
    srand((unsigned int)time(NULL));
    printf("Input the roll number:");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        m=1+rand()%6;
        a[m]++;
    }
    for(i=1;i<7;i++)
        printf("\na[%d]=%5d\n",i,a[i]);
    printf("\ncontinue?\ty or n:");
    getchar();
    ch=getchar();
    if(ch=='y'||ch=='Y')
    main();
    else
        exit(0);
}


[[it] 本帖最后由 soky 于 2009-8-1 16:36 编辑 [/it]]

QQ截图未命名.png (3.49 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: rand 
2009-08-01 15:18
prankmoon
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:161
专家分:921
注 册:2009-7-21
收藏
得分:20 
应该没什么区别,本人没有测试,所以仅仅只是猜测。

大家对老谭的教程褒贬不一。本人的看法是他的例子选的不错,讲解思路也很清晰。但其编码风格实在为大家所诟病,比如,居然#include "xxx.c"文件,汗一个;一看就知道是没有什么工程实践的教书匠写的。

rand是C语言的一个关键字,不推荐作为变量名称;数组应该用[],而不是(),所以,你的rand(6)也是不对的;如果你把rand()当成函数,那这个是不需要你自己定义和声明的,C库函数里面有。

下面是改写的方法之一:
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
    int i, m;
    int a[7] = {0};
    
    srand((unsigned int)time(NULL));    // 使用当前时间初始化种子
    
    for(i=0; i<6000; i++)
    {
        m = 1 + rand()%6;
        a[m]++;
    }
    
    for(i=0; i<6; i++)
    {
        printf("a[%d]=%5d\n", i, a[i]);
    }
    
    return 0;
}

某次的输出结果:
a[0]=    0
a[1]= 1005
a[2]=  995
a[3]= 1026
a[4]=  998
a[5]= 1016

其实,这样实现随机数的算法是比较差的;还有a[0]永远为0,因为初始化后它从来就没有机会被赋值(因为m>0)。

下面是另外一种方法,随机性比上面的要好很多:
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
    int i;
    int a[7] = {0};
    
    srand((unsigned int)time(NULL));

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


某次输出:
a[0]=1174488912
a[1]=673928502
a[2]=628104221
a[3]=2042131697
a[4]=2085886835
a[5]=2095988708

希望上面的代码对你有所帮助。

[[it] 本帖最后由 prankmoon 于 2009-8-1 15:59 编辑 [/it]]
2009-08-01 15:55
soky
Rank: 4
等 级:业余侠客
帖 子:126
专家分:228
注 册:2009-7-13
收藏
得分:0 
以下是引用prankmoon在2009-8-1 15:55的发言:

应该没什么区别,本人没有测试,所以仅仅只是猜测。

大家对老谭的教程褒贬不一。本人的看法是他的例子选的不错,讲解思路也很清晰。但其编码风格实在为大家所诟病,比如,居然#include "xxx.c"文件,汗一个;一看 ...

谢谢了,虽然我知道第一种的做法,但是还是谢谢你
2009-08-01 16:20
快速回复:vc和tc中rand的使用有很大的不同么?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025516 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved