您的位置 首页 > 数码极客

【clrscr】揭晓用C语言怎样做到模拟社会关系

.

什么是社会关系?“社会关系是人们在共同物质和精神活动过程中结成的相互关系的总称,即人与人之间的所有关系。

今天这里我们将用C语言写一个模拟社会关系的程序,如果有对编程感兴趣的可以加群(学习群号:233026065),我期待和大家一起交流学习 探索和体验编程的魅力。老司机带队这趟车你彪不彪?

参考代码如下

#include <;

#define CHILDREN 5

struct person{

char *name;/*名字符串指针*/

char sex;/*性别:男用字符'M';女用字符'F'*/

struct person *father;/*指向父亲*/

struct person *mother;/*指向母亲*/

struct person *mate;/*指向配偶*/

struct person *children[CHILDREN];/*指向子女*/

};

/* [函数]newperson增加新人 */

struct person *newperson(char *name,char sex)

{

struct person *p;

int index;

p=(struct person *)malloc(sizeof(struct person));

p->name=(char *)malloc(strlen(name)+1);

strcpy(p->name,name);

p->sex=sex;

p->father=NULL;

p->mother=NULL;

p->mate=NULL;

for(index=0;index<CHILDREN;index++)

p->children[index]=NULL;

return p;

}

/* [函数]father_child建立父-子关系 */

father_child(struct person *father,struct person *child)

{

int index;

for(index=0;index<CHILDREN-1;index++)/*寻找一个空缺的子女指针*/

if(father->children[index]==NULL)/*若没有空缺,则填在最后*/

break;

father->children[index]=child;/*建立父-子关系*/

child->father=father;

}

(学习群号:233026065)

/* [函数]mother_child建立母-子关系 */

mother_child(struct person *mother,struct person *child)

{

int index;

for(index=0;index<CHILDREN-1;index++)/*寻找一个空缺的子女指针*/

if(mother->children[index]==NULL)/*若没有空缺,则写在最后*/

break;

mother->children[index]=child;/*建立母-子关系*/

}

/* [函数]mate 建立配偶关系 */

mate(struct person *h,struct person *w)

{

h->mate=w;/*建立配偶关系*/

w->mate=h;

}

/* [函数]brotherinlow 检查两人是否是堂兄妹 */

int brothersinlaw(struct person *p1,struct person *p2)

{

struct person *f1,*f2;

if(p1==NULL||p2==NULL||p1==p2) return 0;

if(p1->sex==p2->sex) return 0;/*不可能是堂兄妹*/

f1=p1->father;

f2=p2->father;

if(f1!=NULL&&f1==f2) return 0;/*是兄妹,不是堂兄妹*/

while(f1!=NULL&&f2!=NULL&&f1!=f2)/*考虑远房情况*/

{

f1=f1->father;

f2=f2->father;

if(f1!=NULL&&f2!=NULL&&f1==f2) return 1;

}

return 0;

}

/* 函数print_relate用于输出人物p的姓名,性别和各种关系 */

void print_relate(struct person *p)

{

int index,i;

if(p->name==NULL)

return;

if(p->sex=='M')

printf(" %s is male.",p->name);

else

printf(" %s is female.",p->name);

if(p->father!=NULL)

printf(" %s's father is %s.",p->name,p->father->name);

if(p->mother!=NULL)

printf(" %s's mother is %s.",p->name,p->mother->name);

printf("\n");

if(p->mate!=NULL)

if(p->sex=='M')

printf(" His wife is %s.",p->mate->name);

else

printf(" Her husband is %s.",p->mate->name);

if(p->children!=NULL)

{for(index=0;index<CHILDREN-1;index++)/*寻找一个空缺的子女指针*/

if(p->children[index]==NULL)/*若没有空缺,index为子女个数 */

break;

if(index>0)

printf(" Children are:");

for(i=0;i<index;i++)

printf(" %s",p->children[i]->name);

}

printf("\n");

}

main()

{

char *name[8]={"John","Kate","Maggie","Herry","Jason","Peter","Marry","Jenny"};

char male='M',female='F';

struct person *pGrandfather,*pFather1,*pFather2,*pMother1,*pMother2,*pSon,*pDaughter,*pCousin;

clrscr();

pGrandfather = newperson(name[0],male);

pFather1 = newperson(name[3],male);

pFather2 = newperson(name[4],male);

pMother1 = newperson(name[1],female);

pMother2 = newperson(name[2],female);

pSon = newperson(name[5],male);

pDaughter = newperson(name[6],female);

pCousin = newperson(name[7],female);

father_child(pGrandfather,pFather1);

father_child(pGrandfather,pFather2);

father_child(pFather1,pSon);

father_child(pFather1,pDaughter);

father_child(pFather2,pCousin);

mate(pFather1,pMother1);

mate(pFather2,pMother2);

mother_child(pMother1,pSon);

mother_child(pMother1,pDaughter);

mother_child(pMother2,pCousin);

/* 输出各种关系 */

print_relate(pGrandfather);

print_relate(pFather1);

print_relate(pFather2);

print_relate(pMother1);

print_relate(pMother2);

print_relate(pSon);

print_relate(pDaughter);

print_relate(pCousin);

if(!brothersinlaw(pDaughter,pCousin))

printf("%s and %s are not brothers (sisters) in law.\n",pDaughter->name,pCousin->name);

else

printf("%s and %s are brothers (sisters) in law.\n",pDaughter->name,pCousin->name);

if(!brothersinlaw(pSon,pCousin))

printf("%s and %s are not brothers (sisters) in law.\n",pSon->name,pCousin->name);

else

printf("%s and %s are brothers (sisters) in law.\n",pSon->name,pCousin->name);

if(!brothersinlaw(pSon,pDaughter))

printf("%s and %s are not brothers (sisters) in law.\n",pSon->name,pDaughter->name);

else

printf("%s and %s are brothers (sisters) in law.\n",pSon->name,pDaughter->name);

puts("\n Press any key to quit...");

getch();

}

这是今天的内容,有问题的地方大家可以指出。

如果对编程方面有兴趣的可以加群:233026065,大家一起学习交流。

群内有许多学习资料、视频,免费课......

关于作者: admin

无忧经验小编鲁达,内容侵删请Email至wohenlihai#qq.com(#改为@)

热门推荐