随机函数问题!

zhecaishiwo 2005-01-09 01:26:21
题目:
这是一个有趣的猜拳游戏,参与游戏的双方是您和电脑。
用C语言编写一个程序来实现这个游戏。程序中让您选择1、2、3出拳(其中1代表石头,2代表剪子,3代表布),程序则使用1个1—3之间的随机数出拳(电脑出拳),判断胜负并显示结果。这个猜拳游戏会一直继续下去,直到您不想玩了。
三、实现的步骤
1、 定义程序中使用的变量。
2、 接受用户出拳,使用函数完成用户出拳的功能。
3、 完成电脑出拳,使用函数完成电脑出拳的功能。
4、 判断胜负,使用函数完成判断胜负功能。
5、 进行循环判断。
6、 具体运行结果请参考图1


部分代码:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>]

int a; // 用来存放用户的选择
int b; // 用来存放电脑的选择

void customer(); // 用来获取用户的合法输入,其值保存在a中
void computer();// 用来获取计算机的输入,其值保存在b中

void computer()
{
srand((unsigned)time(NULL));
b=rand()%3+1;
if(b==1)
printf("My choice is:stone\n");
else if(b==2)
printf("My choice is:scissors\n");
else if(b==3)
printf("My choice is:cloth\n");
return y;
}

void compare(int u , int v)
{
if(b==a)
printf("Our choice are the same.\n");
else if(b==1)
{
if(a==2) printf("I'm sorry I lose the game.\n");
else if(a=3) printf("Ha Ha ! I win the game.\n");
}
else if(b==2)
{
if(a==1) printf("I'm sorry I lose the game.\n");
else if(a==3) printf("Ha Ha ! I win the game.\n");

}
else if(b==3)
{
if(a==1) printf("Ha Ha ! I win the game.\n");
else if(a==2) printf("I'm sorry I lose the game.\n");
}
}
void main()
{
char x;
do
{
customer();
computer(b);
compare(a,b);
printf("Do you want to continue?(Y/N)");
scanf(" %c",&x);
}while(x=='y' || x=='Y');
}

// 该函数用来获取用户的选择,并保存在a中
void customer()
{
// 获取用户的有效输入
do
{
printf("Please enter your choice?(1--stone 2--scissors 3--cloth):");
scanf("%d",&a);

if(a<1||a>3)
{
printf("Your choice is invalid!\n");
}
}while(a<1||a>3);

// 显示用户的选择
if(a==1)
{
printf("Your choice is:stone\n");
}
else if(a==2)
{
printf("Your choice is:scissors\n");
}
else if(a==3)
{
printf("Your choice is:cloth\n");
}
}


问题:
b=rand()%3+1; //是生成随机函数
我想问问大家为什么要%3+1这是什么意思呢?这样会产生什么结果呢?
...全文
368 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongyuanzhang 2005-02-02
  • 打赏
  • 举报
回复
b=rand()%3+1; //是生成随机函数
因为如果 b=rand()%3 它的可能值为0,1,2,
给它加1后使它的可能取值为1,2,3;
wangfei886 2005-02-02
  • 打赏
  • 举报
回复
问 问题的人是不是在北大青鸟学的啊?
你怎没这么若制那?
0`——32767 %3 只有0,1,2
现在题目要的是1,2,3
所以 才加上1啊?
你想想是认识数%3 的余数只有3-3,4-3,5-3,
不可能有(6-3)或6以上的 因为他还可以尚2啊

小第 我也 是在北大青鸟上的
master5470 2005-02-01
  • 打赏
  • 举报
回复
前几天正好参加一个考试考了这道题目

哈哈,还好不难!!!

阿普以下
zhudonhua 2005-02-01
  • 打赏
  • 举报
回复
关于取余运算的技巧在数据结构中也有的啊!
在处理队列的假溢出问题时,应用了循环队列,在判断队列是否为满时!

b=rand()%3+1;
rand()%3把所有实数分成3个等价类:
余数为0: .....-6 -3 0 3 6 9 .....
余数为1: .....-5 -2 1 4 7 10.....
余数为2: .....-4 -1 2 5 8 11......
所以b=rand()%3 的结果是0,1,2
在此基础上+1,就变成了1,2,3了!
bjnw 2005-02-01
  • 打赏
  • 举报
回复
任何以一个数除以一个固定的数取余 结果肯定会比这个固定的数小.rand()%3 的结果肯定是0~3范围内啊.
bjnw 2005-02-01
  • 打赏
  • 举报
回复
楼主你还好么?
ihsgnep 2005-01-25
  • 打赏
  • 举报
回复
晕,你们别吓坏了楼主
江南书童 2005-01-25
  • 打赏
  • 举报
回复
如果你不是很理解rand()%3+1

randomize();
random(3)+1;
也行!
cnepine 2005-01-17
  • 打赏
  • 举报
回复
使用rand函数获得随机数。rand函数返回的随机数在0-RAND_MAX(32767)之间。

%3 除3后的余数,你的程序中现在只需要1,2,3这三个数,可是rand()获得的却是1~32767之间的任意一个数。又因为任何整数除3后的余数只能是0,1,2。所以rand()%3+1的结果就是1,2,3你所需要的值。

如果你现在需要的值为1,2,3,4,5 。 则使用rand()%5+1就可以随机获得一个值。

erxwu 2005-01-17
  • 打赏
  • 举报
回复
重复那么多次,教小学生啊。
huabihan 2005-01-14
  • 打赏
  • 举报
回复
最好用srand,真正的随基数,用srand产生种子.
CMyMfc 2005-01-14
  • 打赏
  • 举报
回复
这个问题相关文章多了
网上搜索一下全市
WorldMobile 2005-01-14
  • 打赏
  • 举报
回复
楼主贴的代码也太长了,建议楼主把主要的代码贴出来

读起来太累了,帮你顶吧
Kshape 2005-01-14
  • 打赏
  • 举报
回复
楼上说的很详细了
楼主还不明白?
ccq17 2005-01-14
  • 打赏
  • 举报
回复
不过这样子产生的结果,很可能每次电脑出的值都是一样的,并没有真正达到随机数的目的。可以用系统时间做种子,这样产生的随机数可能就不会重复了
oyljerry 2005-01-14
  • 打赏
  • 举报
回复
一个小的数除以一个大的数,因而小于1
lovefly_fanny 2005-01-11
  • 打赏
  • 举报
回复
rand产生是的大小在0~~RAND_MAX,
所以一个小于RAND_MAX的数除于RAND_MAX
当然小于1咯
zhecaishiwo 2005-01-09
  • 打赏
  • 举报
回复
rand()/RAND_MAX肯定是小于1的
楼主懂了吗?

不懂
Kshape 2005-01-09
  • 打赏
  • 举报
回复
double randf()
{
return (double)(rand()/(double)RAND_MAX);
}
===============================
代码的意思就是返回0-1之间的数
因为
rand()产生的数的范围肯定是<RAND_MAX的
所以
rand()/RAND_MAX肯定是小于1的
楼主懂了吗?
greenteanet 2005-01-09
  • 打赏
  • 举报
回复
你看看这个,以前写的
#include <iostream>
using namespace std;

#include <conio.h>
#include <time.h>

int main()
{

clock_t start, finish;
time_t begin, end;
double var = 0;
unsigned int i, guess;
srand((unsigned)time(NULL));
cout << "Do you want to play it.('y' or 'n'): ";
char c;
c = getchar();
do
{
i = rand() % 100;
cout << "You guess the number is: " << endl;
start = clock();
time( &begin );
cin >> guess;
while(guess != i)
{
if(guess > i)
{
cout << "Please input a bit smaller." << endl;
cin >> guess;
}
else
{
cout << "Please input a bit bigger." << endl;
cin >> guess;
}
}
finish = clock();
time( &end );
var = (double)(finish - start) / CLOCKS_PER_SEC;
cout << "It took you " << var << " seconds" << endl;
cout << "It took you " << difftime(end, begin) << " seconds" << endl <<endl;
int elapsed_time = difftime(end, begin);
if(elapsed_time < 15)
cout << "You are very clever!" <<endl << endl;
else if(elapsed_time < 25)
cout << "You are normal!" << endl <<endl;
else
cout << "You are stupid!" << endl << endl;

cout << "Congradulations!You have done it." << endl;
cout << "The number you guess is " << i <<endl;
cout << "Now do you want to try it again?('y' or 'n')" << endl;
c=getchar();
}while((c=getchar())!='n');

return 0;
}
加载更多回复(12)

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧