- 1、本文档共408页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
有了上面3个类型的定义,我们就可以定义各种变量了。如: struct date d; /*定义date类型变量d*/ struct date *dp; /*定义date类型指针变量dp*/ struct student st[20]; /*定义20个student 类型数据的数组st*/ struct class *cl[100]; /*定义100个class 类型的指针元素的数组cl*/ 对于结构类型变量,其中各成员在主存空间中的分布是依次按照定义成员时排列的。如上面定义的结构类型变量d,其内存分布如图。 定义好了结构变量,接下来就是对结构变量中的成员进行访问。对结构 变量中成员的访问主要有两种方式,一种是通过结构变量名限定访问,另一种是 通过结构类型指针变量指向访问。 格式1: 结构变量名.成员名 格式2: 结构指针变量名-成员名 或 (*结构指针变量名).成员名 下面对前面定义的变量d、dp、st及cl进行赋值。 d.year=2009; d.month=2; d.day=11; dp=(struct date*)malloc(sizeof(struct date)); dp-year=2009; dp-month=2; (*dp).day=10; st[10]-age=20; strcpy(st[10] -name,”张三”); st[10]-addr=”江西南昌北京东路999号”; cl[0]=(struct class*)malloc(sizeof(struct class)); /*动态分配空间*/ cl[0] -number=50; cl[0] -major=”计算机应用”; cl[0] -day-year=2008; /*入学年份*/ cl[0] -day-month=9; /*入学月份*/ 另外,结构变量在定义时可以进行初始化。如 struct date dat={2009,2,12}; struct student stud={20,”李四”,”江西南昌南京东路”}; 对于同类型的结构变量,可以相互赋值。如: struct student stud1={19,”张三”,”江西南昌北京东路”}; struct student stud2={20,”李四”,”江西南昌南京东路”}; struct date dat1; stud1=stud2; /*结构变量赋值*/ dat1=stud2; /*错误,赋值运算左右两边操作数类型不一致*/ 赋值过程就是将赋值运算符“=”右边结构变量中的各成员值依次赋值到左结构中各成员空间。 7.5.2结构数组 问题1:请录入班级人数,之后再录入每个学生的姓名和C语言课程的成绩,并列表打印输出每位学生姓名和成绩,最后输出全班的C语言平均成绩、最高分及最低分。 问题分析:每个学生的姓名和C语言成绩是相关联数据,应该约束在一起形成一个结构型数据,因为班级人数不固定,所以在程序中要动态分配内存空间来存储每个学生的姓名和C语言成绩。 代码1: #include stdio.h #include stdlib.h struct student /*定义结构类型student*/ {char name[20]; /*姓名不超过10个汉字*/ int Cgrade; /*C语言成绩*/ }; void main() {struct student *st; /*定义结构指针变量st*/ int num; /*班级人数*/ double ave=0.0; /*存放平均成绩*/ int min=100,max=0; /*初始化变量min和max*/ int i; printf(请输入班级人数:); scanf(%d,num); /*动态分配num个结构变量空间*/ st=(struct student*)malloc(num*sizeof(struct student)); i=0; while(inum) {printf(请输入姓名:); scanf(%s,st[i].name); /*录入第i个学生的姓名*/ printf(成绩:); scanf(%d,st[i].Cgrade); /*录入第i个学生的成绩*/ ave+=st[i].Cgrade; if(minst[i].Cgrade)min=st[i].Cgrade; /*记录下最低成绩*/
文档评论(0)