




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
模拟社会关系C程序设计模拟社会关系设计一个模拟社会关系的数据结构,每个人的信息用结构体表示,包含姓名、性别和指向父亲、母亲、配偶、子女的指针(设只限两个子女)。要求编写以下函数:(1)增加一个新人的函数;(2)建立人与人之间关系的函数:父-子、母-子、配偶等;(3)检查某两人之间是否为堂兄妹。CONTENTS01编程思路分析基础知识点具体实现总结与拓展030204编程思路分析1.编程思路分析定义structperson结构体类型用于描述个人信息。1定义函数newperson()用于往社会关系中增加一个新人。2定义函数father_child()、mother_child()、mate()分别用于建立父子关系、母子关系以及配偶关系。
3定义函数brothersinlaw()用于判断两人之间是否为堂兄妹;定义函数print_relate()用于输出人物关系。4在主函数中调用以上各函数用于实现程序的功能。5基础知识点2.基础知识点struct[结构体类型名]{
数据类型名1成员名1;数据类型名2成员名2;
……
数据类型名n成员名n;};结构体类型的定义形式为:structperson{charname[20];/*人的姓名*/charsex;/*性别,'M'表示男性,'F'表示女性*/structperson*father;/*该人的父亲*/structperson*mother;/*该人的母亲*/structperson*mate;/*该人的配偶*/structperson*childs[CHILDREN];/*该人的孩子*/};定义个人信息的结构体类型:2.基础知识点结构体类型的数据在函数间的传递(3)用指向结构体变量(或结构体数组)的指针作实参,将结构体变量(或数组)的地址传递给形参,属于“传址”方式。这种方式下,实参和形参具有相同的地址,对形参的操作即是对实参的操作。这是一种最常使用的方法。要将一个结构体变量的值传递给另一个函数,有三种方法:(1)用结构体变量的成员作参数。用法和用普通变量作实参是一样的,属于“值传递”方式。(2)用结构体变量作参数。用结构体变量作实参时,采取的也是“值传递”方式,将结构体变量所占的内存单元的内容全部按顺序传递给形参,形参也必须是同类型的结构体变量。由于采用的是“值传递”的方式,如果在执行被调函数期间改变了形参的值,该值不能返回给主调函数,造成使用上的不便。具体实现3.具体实现定义structperson结构体类型用于描述个人信息。1#defineCHILDREN2structperson{charname[20];/*人的姓名*/charsex;/*性别,'M'表示男性,'F'表示女性*/structperson*father;/*该人的父亲*/structperson*mother;/*该人的母亲*/structperson*mate;/*该人的配偶*/structperson*childs[CHILDREN];/*该人的孩子*/};3.具体实现定义函数newperson()用于往社会关系中增加一个新人。2/*[函数]添加一个新人*/structperson*newperson(char*name,charsex){inti;structperson*p=(structperson*)malloc(sizeof(structperson));strcpy(p->name,name);p->sex=sex;p->father=NULL;p->mother=NULL;p->mate=NULL;for(i=0;i<CHILDREN;i++) p->childs[i]=NULL;returnp;};3.具体实现定义函数father_child()、mother_child()、mate()分别用于建立父子关系、母子关系以及配偶关系。
3/*[函数]建立父子关系*/voidfather_child(structperson*father,structperson*child){intindex;for(index=0;index<CHILDREN-1;index++)/*寻找一个空缺的位置*/if(father->childs[index]==NULL)/*如果没有,则放到最后*/break;father->childs[index]=child;child->father=father;}3.具体实现定义函数father_child()、mother_child()、mate()分别用于建立父子关系、母子关系以及配偶关系。
3/*[函数]建立母子关系*/voidmother_child(structperson*mother,structperson*child){intindex;for(index=0;index<CHILDREN-1;index++)/*寻找一个空缺的位置*/if(mother->childs[index]==NULL)/*如果没有,则放到最后*/break;mother->childs[index]=child;child->mother=mother;}3.具体实现定义函数father_child()、mother_child()、mate()分别用于建立父子关系、母子关系以及配偶关系。
3/*[函数]mate建立配偶关系*/voidmate(structperson*h,structperson*w){h->mate=w;w->mate=h;}3.具体实现定义函数brothersinlaw()用于判断两人之间是否为堂兄妹;定义函数print_relate()用于输出人物关系。4/*[函数]判断是否为堂兄妹*/intbrothersinlaw(structperson*p1,structperson*p2){structperson*f1,*f2;if(p1==NULL||p2==NULL||p1==p2)return0;if(p1->sex==p2->sex)return0;/*不可能是堂兄妹*/f1=p1->father;f2=p2->father;if(f1!=NULL&&f1==f2)return0;/*是兄妹,不是堂兄妹*/while(f1!=NULL&&f2!=NULL&&f1!=f2)/*远亲*/{f1=f1->father;f2=f2->father;if(f1!=NULL&&f2!=NULL&&f1==f2)return1;}return0;}3.具体实现/*[函数]输出人物关系*/voidprint_relate(structperson*p){intindex,i;
if(p->name==NULL)return;
if(p->sex=='M')printf("%sismale.\n",p->name);elseprintf("%sisfemale.\n",p->name);
if(p->father!=NULL)printf("%s'sfatheris%s.\n",p->name,p->father->name);if(p->mother!=NULL)printf("%s'smotheris%s.\n",p->name,p->mother->name);定义函数brothersinlaw()用于判断两人之间是否为堂兄妹;定义函数print_relate()用于输出人物关系。43.具体实现/*续函数print_relate()*/if(p->mate!=NULL)if(p->sex=='M')printf("Hiswifeis%s.\n",p->mate->name);elseprintf("Herhusbandis%s.\n",p->mate->name);if(p->childs!=NULL){for(index=0;index<CHILDREN-1;index++)if(p->childs[index]==NULL)break;if(index>0)printf("Childrenare:");for(i=0;i<index;i++)printf("%s\t",p->childs[i]->name);}printf("\n");}定义函数brothersinlaw()用于判断两人之间是否为堂兄妹;定义函数print_relate()用于输出人物关系。43.具体实现在主函数中调用以上各函数用于实现程序的功能。5John(M)Herry(M)Jason(M)Kate(F)Peter(M)Maggie(F)Jenny(M)Marry(F)pGrandfatherpFather1pMother1pSonpfather2pMother2pDaughterpCousin父子父子父子父子父子配偶配偶母子母子母子char*name[8]={"John","Kate","Maggie","Herry","Jason","Peter","Marry","Jenny"};charmale='M',female='F';structperson*pGrandfather,*pFather1,*pFather2,*pMother1,*pMother2,*pSon,*pDaughter,*pCousin;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);3.具体实现在主函数中调用以上各函数用于实现程序的功能。5/*输出各种关系*/print_relate(pGrandfather);print_relate(pFather1);print_relate(pFather2);print_relate(pMother1);print_relate(pMother2);print_relate(pSon);print_relate(pDaughter);print_relate(pCousin);3.具体实现if(!brothersinlaw(pDaughter,pCousin))printf("%sand%sarenotbrothers(sisters)inlaw.\n",pDaughter->name,pCousin->name);elseprintf("%sand%sarebrothers(sisters)inlaw.\n",pDaughter->name,pCousin->name);if(!brothersinlaw(pSon,pCousin))printf("%sand%sarenotbrothers(sisters)inlaw.\n",pSon->name,pCousin->name);elseprintf("%sand%sarebrothers(sisters)inlaw.\n",pSon->name,pCousin->name
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 福州软件职业技术学院《学术英语听说(高级)》2023-2024学年第一学期期末试卷
- 武汉航海职业技术学院《解剖学》2023-2024学年第一学期期末试卷
- 上海音乐学院《国际物流实务》2023-2024学年第一学期期末试卷
- 鹤壁能源化工职业学院《彝族毕摩文化》2023-2024学年第一学期期末试卷
- 大连大学《军事体育》2023-2024学年第一学期期末试卷
- DB4210T 68-2024 马铃薯秋延后大棚生产技术规程
- 襄阳汽车职业技术学院《私教工作技巧及流程》2023-2024学年第一学期期末试卷
- 郑州商贸旅游职业学院《幼儿行为观察及矫正》2023-2024学年第一学期期末试卷
- 广西蓝天航空职业学院《学校音乐教育导论与教材教法(二)》2023-2024学年第一学期期末试卷
- 辽宁铁道职业技术学院《西方文论导读》2023-2024学年第一学期期末试卷
- 充血性心力衰竭患者利尿剂抵抗
- 光纤研磨工艺
- (2023版)高中化学新课标知识考试题库大全(含答案)
- 水土保持工作情况汇报
- 装饰装修工程概况描述(参考)
- SJ2D双微机自动准同期装置说明书
- 中国移动热线人工优秀服务蓝图
- 义务教育英语课程标准(2022年版)知识点汇总
- 低应变检测技术原理讲义图文丰富
- 普通货物运输安全管理制度(全套)
- 义务教育英语课程标准(2022年版)知识点汇总
评论
0/150
提交评论