文档详情

第10章 构造数据类型.pptx

发布:2025-03-04约1.4万字共85页下载文档
文本预览下载声明

十、构造数据类型结构体2结构体与函数3共用体6任务91结构体与指针4链表5

十、构造数据类型typedef类型声明8小型案例9枚举类型7

任务分析1有时需要编写一个函数print,用来打印一批学生的成绩信息,定义一个学生成绩数组,假如在该数组中有5个学生的数据记录,每个记录又包括num、name、score[3],则可用主函数输入这些记录,再用print函数输出这些记录。返回首页

任务分析1分析数据需求问题输入structstudent{charnum[6];charname[8];intscore[3];}stu[N];/*定义一成绩数组用来表示学生的成绩信息*/问题输出编写print函数用以输出记录返回首页

任务分析1设计定义一函数,采用结构数组作为函数参数,实现结构体变量作为函数参数的应用方法算法1.先定义一个结构数组2.再引用结构体数组完成一批学生的成绩信息的输入3.最后运用结构数组作为函数参数,实现对这批信息的输出返回首页

任务分析1/*编写一个函数print,打印一个学生的成绩数组,该数组中有5个学生的数据记录,每个记录包括num、name、score[3],用主函数输入这些记录,用print函数输出这些记录。*/#includestdlib.h#includestdio.h#defineN5structstudent{charnum[6];charname[8];intscore[3];}stu[N];返回首页

任务分析1voidprint(structstudentstu[]){inti,j;printf(\nNo.NameScore1Score2Score3\n);for(i=0;iN;i++){printf(%-6s%-10s,stu[i].num,stu[i].name);for(j=0;j3;j++)printf(%-8d,stu[i].score[j]);返回首页

任务分析1printf(\n);}}voidmain(){inti,j;for(i=0;iN;i++){printf(num:);scanf(%s,stu[i].num);printf(name:);返回首页

任务分析1scanf(%s,stu[i].name);for(j=0;j3;j++){printf(score%d:,j+1);scanf(%d,stu[i].score[j]);}}print(stu);}返回首页

任务分析1运行结果:Num:Name:Score1:Score2:Score3:……返回首页

结构体1概念提出:我们已学习了一些简单数据类型(整型、实型、字符型)的定义和应用,还学习了数组(一维、二维)的定义和应用,从中我们认识到C的基本数据类型及数组这种构造数据类型,认识到构造数据结构作为一个整体在处理多个相关数据时非常方便,然而数组只能按顺序组织多个同类型的数据,在实际应用中往往会涉及到一组不同类型的数据的问题。

结构体1例如通讯地址表、学生登记表、成绩表等,在通讯地址表中我们会写下姓名、邮编、邮箱地址、电话号码、E-mail等项目。这些表中集合了各种数据,因此不能用一个数组来存放这一组数,由于数组中各元素的类型和长度须是一致的,为了解决这个问题,C语言引入了一种新的构造数据类型-----“结构体”。它相当于其他高级语言中的记录(record)。假设程序中用到如下表所示数据结构,C语言中可由用户在程序中去定义这种类型,即构造一个结构体数据类型。

结构体1通讯地址表各数据项姓名工作单位家庭住址邮编电话号码E-mail字符串字符串字符串长整型字符串或长整型字符串

结构体1上述表格用C提供的结构体类型描述如下:通讯地址表:structaddr{charname[20];chardepartment[30];/*部门*/charaddress[30];/*住址*/longbox;/*邮编*/longphone;/*电话号码*/charemail[30];/*Email*/};

结构体1诸如住宿表:structaccommod{charname[20];/*姓名*/charsex;/*性别*/charjob[40];/*职业*/intage;/*年龄*/longnumber;/*身份证号码*/};等等

结构体1这一系列对不同登记表的数据结构的描述类型称为结构体类型。由于不同的问题有不同的数据成员,也就是说有不同描述的结构体类型。我们也可以理解为结构体类型根据所针对的问题其成员是不同的,可以有任意多的结构体类型

显示全部
相似文档