C语言程序设计实验报告
实验5 函数程序设计
班级 学号 姓名
一、实验目的rand() 产生[0,RAND_MAX] 之间的随机数magic = rand();RAND_MAX是在stdlib.h中定义,不大于双字节整数的最大值32767 ,所以使用前加 #include
产生[0,b-1] 之间的随机数
magic = rand()%b;
产生[a,a+b-1] 之间的随机数
magic = rand()%b + a;
rand()产生的数据是一串伪随机序列,要实现真正的随机化,用srand()函数播种种子:
#include
srand(time(NULL));
magic = rand() % 100 + 1;
二、实验内容及步骤—编译—连接,直到编译、连接成功。最后运行程序,输出正确结果。
(1)下述程序中,函数FUN功能是:计算正整数NUM的各位上的数字之积。例如,若输入252,则输出应该是20;若输入202,则输出应该是0。
#include /*提示:有3处错误*/
#include
long fun(num)
{long k=1;
do
{k*=num%10;
num\=10;
}while (num)
return k;
}
void main()
{long n;
scanf(“%ld”,&n);
printf(“\n%ld\n”,fun(n));
}
修改后程序代码:
2、编写程序模拟掷骰子游戏。已知掷骰子游戏的游戏规则为:每个骰子有6面,这些面包含1、2、3、4、5、6个点,掷两枚骰子之后,计算点数之和。如果第一次掷的点数和为7或11,则游戏者获胜;如果第一次掷的点数和为2、3或12,则游戏者输;如果第一次掷的点数和为4、5、6、8、9或10,则将这个和作为游戏者获胜需要掷出的点数,继续投骰子,直到掷到该点数时算是游戏者获胜。如果投掷7次仍未掷到该点数,则游戏者输。
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#include "time.h"
enum {CONTINUE,WON,LOST};
void main()
{ int status=CONTINUE;
int i=0,j=0,add,k;
srand((unsigned)time(NULL));
while(i==0)
i=rand()%6;
printf("1: %d\n",i);
while(j==0)
j=rand()&6;
printf("2: %d\n",j);
add=i+j;
if(add==11 || add==7)
status=WON;
if(add==2 || add==3 || add==12)
status=LOST; if(status==WON)
printf("You Win!\n");
else if(status==LOST)
printf("YOU LOST!\n");
else
{ for(k=1;k<=7;k++)
{ i=0;
j=0;
printf("***************%d****************\n",k);
while(i==0)
i=rand()%6;
printf("1: %d\n",i);
while(j==0)
j=rand()%6;
printf("2: %d\n",j);
if((i+j)==add)
{
status=WON;
break; }
}
if(status==WON)
printf("YOU WIN!\n");
else
printf("YOU LOST!\n");
}
getch();
}
3. 递归程序设计练习——计算最大公约数
利用计算最大公约数的三条性质,用递归方法计算两个整数的最大公约数。
性质1:如果x>y,则x和y的最大公约数与x-y和y的最大公约数相同