资源描述
单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,Chap,8 结 构,本章要点,什么是,结构,(,struct,),?,如何定义,结构类型,?,什么是,结构变量,?什么是,结构成员变量,?,结构变量如何赋值?,什么是结构的嵌套?,什么是,结构数组,?,num,name,score,101,Xi,Yangyang,95,102,Mei,Yangyang,100,103,Lan,Yangyang,74.5,104,Hui,Tailang,53,学生信息,?如何表示?,自定义,结构类型,:,struct,student,struct,student,int,num;,char name20;,float score;,;,8.1 用结构表示学生信息,结构,(,struct,),:,若干不同类型变量的集合,结构名:,sutdent,结构是一种,构造,数据类型,由程序员自行定义,数据类型名,:,struct,student,学号、姓名、成绩,struct,student,int,num,;,/*,学号,整型,*/,char,name20,;,/*,姓名,字符数组,*/,float,score,;,/,*,课程成绩,整型,*/,;,结构中,各分量,:,结构成员变量,用结构类型表示学生信息,自定义的数据类型,struct,结构名,类型名 结构成员名1;,类型名 结构成员名2;,类型名 结构成员名,n,;,;,定义结构类型,结构类型名,结构成员表,struct,student,int,num;,char name20;,float score;,;,数组,:,相同,类型数据的集合,结构,:,不同,类型数据的集合,定义平面上的任意一点,struct,point,float x,y;,;,定义复数,struct,complex,double real;,/,实部,double,imag,;,/,虚部,;,定义,结构类型,示例,结构类型名:,struct,point,结构类型名:,struct,complex,定义,结构变量,形式,1,1,、,先,定义结构类型:,struct,student,int,num;,char name20;,float score;,;,再,定义结构变量:,struct,student,s1,s2,s3,s4,;,结构变量,结构类型,2,、,结构类型、结构变量,同时,定义,struct,student,int,num;,char name20;,float score;,s1,s2,s3,s4,;,定义,结构变量,形式,2,3、,省略结构名,,直接定义结构变量,:,struct,student,int,num;,char name20;,float score;,s1,s2,s3,s4,;,定义,结构变量,形式,3,引用,结构变量,引用结构成员,结构变量名,.,成员变量,如:,s1,.,name,s1,.,score,struct,student,int,num;,char name20;,float score;,s1,;,s1,.,num=101;,strcpy,(s1,.,name,“Xi,Yangyang,);,s1,.,score=95;,scanf(%d,%s,%f,&s1,.,num,s1,.,name,&s1,.,score);,printf(%d,%s,%f n,s1,.,num,s1,.,name,s1,.,score);,结构变量的赋值,1,、,赋初值,struct,student,s1=,101,Xi,Yangyang,95,;,2,、,赋值,struct,student,s1=,101,Xi,Yangyang,95,s2;,s2=s1;,结构的嵌套定义,struct,student,int,num;,char name20;,struct,address,addr,;,float score;,s,;,城市,成绩,家庭住址,姓名,学号,街道,门牌号,s,.,addr,.,number,=86,city,score,addr,name,num,street,number,struct,address,char city20;,char street20;,int,number;,;,【,例,8-5】,建立有10个学生成绩的结构记录,输出平均分,并按照成绩,从高到低,输出学生记录。,任务解析:,定义存放学生信息的结构类型,struct,student,定义,结构数组,s10:,一个元素对应一个学生,统计数组,s,中每个元素(学生)的成绩分量。,针对成绩分量,将,s,进行选择法排序,8.2 按成绩降序输出学生信息,关键技术,如何定义,结构数组,s10,?,struct,student,s10,;,如何引用数组元素的成员变量?,si,.,score,如何交换结构数组元素是,si,与,sk,?,设置临时的,结构类型变量,temp,temp=,si,;,si,=,sk,;,sk,=temp;,si,sj,#include,struct,student,int,num;char name20;,int,score;,;,void main(),int,i,j,k,sum=0;,struct,student,s10,temp,;,for(,i=0;i 10;i+,),/,输入,10,个元素,,统计总分,scanf(%d%s%f,&,si.num,si.name,&,si.score,);,sum+=,si.score,;,printf(“,A,verage,:%,dn,”,sum/10,);,/,输出,平均分,for(,i=0;i 9;i+,),k=i;,for(,j=i+1;j,sk,.,score,)k=,j,;,temp=,s,i,;,s,i,=,s,k,;,s,k,=temp;,for(,i=0;i10;i+,),printf(“%d,%s%,dn”,si,.,num,si,.,name,si,.,score,);,/,选择排序,8.2.2 结构数组,struct,student,s1,;,struct,student,s,10,;,结构数组,:其中每个元素均为,结构变量,struct,student,int,num;,char name20;,float score;,;,s0,101,“Xi,Yangyang,9,5,s1,102,“Mei,Yangyang,100,s 9,110,“Hong,Tailang,80,num,name,score,si,i=09,结构数组的初始化,struct,student,s10,=,101,“Xi,Yangyang,95,102,“Mei,Yangyang,100,;,struct,student,int,num;,char name20;,float score;,;,s0,101,“Xi,Yangyang,9,5,s1,102,“Mei,Yangyang,100,s 9,num,name,score,结构数组编程,for(sum,=0,i=0;i 10;i+),scanf(%,d,%,s,%,f,&,si,.,num,si,.,name,&,si,.,score,);,sum+=,si,.,score,;,for(i=0;i 10;i+),printf(“%d,%,s,%,fn”,si,.,num,si,.,name,si,.,score,);,struct,student,int,num;,char name20;,float score;,s10,;,s0,101,“Xi,Yangyang,9,5,s1,102,“Mei,Yangyang,100,s 9,110,“Hong,Tailang,80,num,name,score,选择排序,for(i=0;i 9;i+),k=i;,for(j=i+1;j,sk,.,score,)k=j;,temp=,s,i,;,s,i,=,s,k,;,s,k,=temp;,struct,student,int,num;,char name20;,int,score;,s10,;,s0,101,“Xi,Yangyang,9,5,s1,102,“Mei,Yangyang,100,s 9,110,“Hong,Tailang,80,num,name,score,注意事项,1,不能对结构变量直接赋值,如:,struct,student,s,;,s,=103,“,Lan,Yangyang,”,74.5;,s,.num=103;,s,.name,=“,Lan,Yangyang,”;,s,.score,=74.5;,注意事项,2,结构类型的长度问题:,struct,s1,char c1,c2;,int,n;,;,6,B?,struct,s2,char c1;,int,n;char c2;,;,6,B?,字节对齐,:在成员间插入空字节,使总字节数成为最长成员长度的,N,倍,c1,c2,struct,s1,n,8B,c1,c2,struct,s2,n,12B,本讲小结与作业,小结:,结构类型、结构变量的定义方法,如何为结构变量赋值?,如何引用结构变量成员(分量)赋值?,如何定义和使用结构数组?,作业:,1,,,2,,,4,上机实验十一,
展开阅读全文