1、2.7.1.2 练习 2:生命细胞
***** ** *
** * *
** * *
** ** ****
若一个细胞周围有3个活细胞,当前细胞就活
若一个细胞周围有2个活细胞,当前细胞的生命状态不变
若一个细胞周围有<2或>3,当前细胞就死亡
随机生成10*10的细胞群营,研究历经多少代,群落进入稳定状态。
程序雏形:
char c[10][10];//用于存储细胞阵列
void init(char c[][10]);//用于初始化细胞阵列
void show(char c[][10],int g);//用于显示细胞阵列
2、int quit(void);//用于接受用户的指令,退出程序
void breed(char c[][10]);//繁殖
srand(time(NULL));
rand();//随机函数
//life.c
#include
#include
#include
#define H 10//宏定义行列便于更改
#define W 10
#define NULL 0
void init(char c[H][W])
{
srand(time(NULL));
int i,j;
for(i=0;i3、)
for(j=0;j4、);
}
void quit(void)
{
printf("Press to quit,press other key to continue...");
char ch;
scanf("%c",&ch);
if(ch=='Q'||ch=='q')
exit(0);
}
void breed(char c[H][W])
{
int i,j;
for(i=0;i=0&&c[u][j
5、]=='*')
k++;
if(d=0&&c[i][l]=='*')
k++;
if(r=0&&l>=0&&c[u][l]=='*')
k++;
if(u>=0&&r=0&&c[d][l]=='*')
k++;
if(d6、f(k==3)
c[i][j]='*';
else
if(k!=2)
c[i][j]=' ';
}
}
int main()
{
char c[H][W];
init(c);
int g;
for(g=1;;g++)
{
show(c,g);
quit();
breed(c);
}
return 0;
}
错误分析:
1)当k需要进行自增自减时候,在声明k的时候,一定要让k值初始化
详解:
1) breed函数
(u,l)
(u,j)
(u,r)
(
7、i,l)
(i,j)
(i,r)
(d,l)
(d,j)
(d,r)
一个点四周共有八个点,这八个点影响它的生命状态,从c[0][0]到c[9][9]这样的顺序一一判断。
2)随机函数:srand(time(NULL));
rand();
这是一个伪随机数,由srand()函数接受一个种子,这个种子是在头文件time.h里面的,接收当前系统时间作为一个种子,种子不同,rand()函数产生的随机数列也会不同,相当于一个种子产生一个随机数列,这个数列无穷大,相同的种子产生的相同的随机数列。
3)rand()%2;
%取余,如:a%b;其中a和b均必须为int类型
a除以b取余数,若a>b,那么余数不会大于b,10%3=1,商为3
若a