欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载  

    第八章结构体与共用体.ppt

    • 资源ID:3164214       资源大小:1.11MB        全文页数:57页
    • 资源格式: PPT        下载积分:8
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要8
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第八章结构体与共用体.ppt

    第八章 结构体与共用体,8.1 结构体 8.2 结构体数组 8.3 指向结构体类型数据的指针 8.4 链表 8.5 共用体 8.6 枚举类型,8.1 结构体,表示一个同学的数据: 学号 int num; 姓名 char name20; 年龄 int age; 成绩 float score; 家庭住址 char addr30;,通过定义结构体类型(记录),将有关数据作为一个整体看待,struct student int num; char name20; int age; float score; char addr30; ;,整体的名字 称为结构体类型名 (结构体标记),整体的标记,整体的构成单位 称为结构体成员、域,一、结构体类型的定义,struct 结构体类型名 类型 成员名; 类型 成员名; ; ;,struct student int num; char name20; int age; float score; char addr30; ;,struct date int month; int day; int year; ;,二、结构体类型变量的定义 1先定义结构体类型再定义变量,struct student int num; char name20; int age; float score; char addr30; ; struct student student1,student2;,成员的顺序是随意的,2在定义结构体类型的同时定义变量,struct student int num; char name20; int age; float score; char addr30; student1,student2;,3直接定义结构体变量,struct int num; char name20; int age; float score; char addr30; student1,student2;,方式1和2可以在多处定义相同结构体类型的变量 而方式3不行,结构体类型可以嵌套定义,struct date int month; int day; int year; struct student int num; char name20; char sex; struct date birthday; ;,三、结构体变量的初始化,struct student int num; char name20; char sex; int age; float score; char addr30; a=8010, “zhangsan“, 'm',19,93, “Beijing“;,int x=6; char s20=“sdfsfgg“;,或a=.name=“zhangsan“, .num=8010;,四、结构体变量的使用 1. 分量运算符. 优先级与( )、 相同 stu1.num stu1.name stu1.score stu1.birth.year,struct date int month; int day; int year; ; struct student int num; char name20; int age; char addr30; struct date birth; stu1,stu2;,2.相同类型的结构体变量之间可以直接赋值 stu1=stu2 或stu1=(struct student).num=123,.age=19,.name=“li“,域名对应的分量与同类型的变量一样看待,3.输入与输出 不能直接输入输出 printf(“%d,%s,%c,%d,%f,%sn“,student); error printf(“%d,%s,%c,%d,%f,%sn“,stu1); error 而是: printf(“%d,%s,“,stu1.num, stu1.name); printf(“%c,%d,“,stu1.sex, stu1.age); printf(“%f,%s“,stu1.score, stu1.addr); scanf(“%d %s “,4.结构体类型变量的比较 不能直接比较 if(stu1=stu2) error 只能进行 if(stu1.num=stu2.num&& !strcmp(stu1.name,stu2.name) ,5. sizeof(struct student) struct studentint num; char name10;stu1,stu2;,int sum; int sum10; int fun(int sum); int *sum; int fun(int *sum); int *fun(int *sum);,struct student sum; struct student sum10; struct student fun(struct student sum); struct student *sum; struct student fun(struct student *sum); struct student *fun(struct student *sum);,struct student long num; char name20; char sex; int age; struct int year,month,daydate; ;,五、定义类型标识符,typedef int INTEGER; INTEGER i,j,k; typedef float REAL; REAL a,b; typedef int *POINT; POINT p1,p2;,typedef struct int month,day,year;DATE; DATE oneday; typedef int ARRAY100; ARRAY a,b,c; 表示较复杂的类型,给已有的类型起一个新的名字,增加程序的可移植性,一般方法: 先按定义变量的方法写出定义部分 把变量名换成新的类型标识符 在该行最前面加上typedef,8.2 结构体数组,int main( ) int i,j; struct student c18; for(i=0; i5) c1i.age-; else if(c1i.date.month=5 ,for(i=0; i10; i+) printf(“%d %s %dn“,c1i.num,c1i.name,c1i.age); ,计算c1班每个学生的年龄,int main( ) int i,j; FILE *fp; struct student c18; fp=fopen(“stu.txt“, “r“); for(i=0; i5) c1i.age-; else if(c1i.date.month=5 ,fp=fopen(“out.txt“, “w“); for(i=0; i10; i+) fprintf(fp,“%d %s %dn“,c1i.num,c1i.name,c1i.age); fclose(fp);,对c1班学生按排序,洗牌和发牌模拟,一付扑克有52张牌,分为4种花色(Suit): 黑桃(Spades)、红桃(Hearts)、草花(Clubs)、方块(Diamonds) 每种花色有13张牌面(Face): A,2,3,4,5,6,7,8,9,10,Jack,Queen,King,struct CARD /表示一张牌的结构体 char suit10; /花色 char face10; /牌面 ;,char *suit = “Spades“,“Hearts“,“Clubs“,“Diamonds“; char *face = “A“,“2“,“3“,“4“,“5“,“6“,“7“,“8“,“9“,“10“, “jack“,“Queen“,“King“;,int main( ) int result52; /哪些牌已选用过 struct CARD card52; /存放52张牌 int count=0; int num=0,k; srand(time(NULL); for(k=0; k52; k+) resultk=-1; /所有牌未被发出 while(count52) /共发出52张牌 k=rand()%52; if(-1=resultk) resultk=1; /第k张牌发出 strcpy(cardcount.suit,suitk/13); strcpy(cardcount.face,facek%13); count+; ,for(k=0; k52; k+) if(k%3=0) printf(“n%2d-“,k); else if(i%3=1) printf(“ %2d-“,k); else printf(“ %2d-“,k); printf(“%9s“,cardk.suit); if(strcmp(cardk.suit,“Spades“)=0)printf(“ %c “,6); else if(strcmp(cardk.suit,“Hearts“)=0)printf(“ %c “,3); else if(strcmp(cardk.suit,“Clubs“)=0)printf(“ %c “,5); else if(strcmp(cardk.suit,“Diamonds“)=0)printf(“ %c “,4); printf(“%6s“,cardk.face); printf(“n“); ,int main( ) struct CARD card52,temp; /存放52张牌 int count,k; srand(time(NULL); for(k=0; k52; k+) /顺序发牌 strcpy(cardk.suit,suitk/13); strcpy(cardk.face,facek%13); count=0; /随机打乱顺序 while(count52) k=rand()%52; temp=cardcount; cardcount=cardk; cardk=temp; count+; ,8.3 指向结构体类型数据的指针,int a10,b; int *p; 如果p= 数组元素ai的地址就是a+i、p+i 元素ai的值就是*(a+i)、*(p+i)、pi,struct student long num; char name20; char sex; float score; ;,1指向结构体变量的指针 结构体变量在内存的首地址为其指针,int main( ) struct student stu1, *p; p= ,printf(“%ldn“,p-num); printf(“%cn“,p-sex); puts(p-name); printf(“%fn“,p-score);,struct student int num; char name20; int score; ;,#define N 10 int main( ) struct student stuN; struct student *p; int i; for (p=stu; pnum,p-name, ,2指向结构体数组元素的指针,3结构体变量做函数的参数,struct student int num; char name20; int score; ;,#define N 10 int find (struct student *p ) int i,num,score; score=p-score; num=0; for (i=1; iscore score) score=(p+i)-score; num=i; return(num); ,int main() struct student stuN; struct student *p; int i,num,score; for (i=0; inum,p-score); ,4. 返回指向结构体指针的函数,#define N 10 struct student *find(struct student *p) int i; struct student *t; t=p; for (i=1; iscore t-score) t=p+i; return(t); ,struct student int num; char name20; int score; ;,int main() struct student stuN; struct student *p; int i; for (p=stu;pnum,p-name, ,int main() struct student stuN; struct student *p; int *s; p=stu+3; p-num=103; p-score=87; strcpy(p-name, “liming“); s=(int *)malloc(sizeof(int); *s=100; p=(struct student*)malloc(sizeof(struct student); p-num=105; p-score=90; strcpy(p-name,“zhangsan“); ,struct student int num; char name20; int score; ;,8.4 链表,一、链表的特点:,由若干个结点构成,每个结点是一个结构体类型的数据,每个结点都包含指向下一个结点的指针,最后一个结点的指针为空指针,struct student int num; int score; struct student *next; ; struct student *head;,链:结构体中指向同一结构体类型的指针构成,由链首对链表进行操作,链尾指针用NULL表示,二、打印链表,/#define NULL 0 #define LEN sizeof(struct student) struct student int num; int score; struct student *next; ;,建立,void DispLink(struct student *head) struct student *p; p=head; while (p!=NULL) printf(“%d %5dn“,p-num,p-score); p=p-next; ,int main() struct student *head; head=CreateLink(); DispLink(head); DeleteMemory(head); ,void DeleteMemory(struct student *head) struct student *p,*pr; p=head; while (p!=NULL) pr=p; p=p-next; free(pr); ,释放存储空间,NULL,三、建立链表,建立第一个结点,记录头结点 建立第二个结点,拉链 建立第三个结点,拉链 . 处理最后一个结点的链,建立结点-申请空间,读入数据,head,0,20,head,70,NULL,链表的建立过程,pr=p; p=.malloc pr-next=p;,struct student *CreateLink( void) struct student *head,*p,*pr; pr=p=(struct student *)malloc(LEN); if(NULL=p) printf(“No enough memory to allocation!n“); exit(0); scanf(“%d,%d“,while (p-num!=0) if (NULL=head) head=p; else pr-next=p; pr=p; p=(struct student *)malloc(LEN); scanf(“%d,%d“, ,pr-next=NULL; free(p); return(head); ,struct student *AppendNode(struct student *head) struct student *head,*p,*pr; p=(struct student *)malloc(LEN); if(NULL=p) printf(“No enough memory to allocation!n“); exit(0); p-next=NULL; scanf(“%d,%d“, ,if(NULL=head) head=p; else pr=head; while(pr-next) pr=pr-next; pr-next=p; ,int main() struct student *head; char yes; head=NULL; printf(“Do you want to append a new node(Y/N)?“); scanf(“ %c“, ,四、查找:,void search(struct student *head, int num) struct student *p; p=head; if (p!=NULL) while (p-num!=num ,五、删除结点,.删除p3: 条件:p3=head ),p3,p4,p1,p2,struct student *DeleteNode(struct student * head, int num) struct student *p,*pr; if (head=NULL) printf(“list null n“); return head; p=head; while (p-num!=num ,六、插入结点,插入到p3之前: p0-next=p3; head=p0;,条件:链表已按学号排序,插入学生num 操作:建一个结点p0 找到插入的位置,插入结点,p3,p4,p1,p2,插入到p1之前: p0-next=p1; p2-next=p0;,NULL,101 78,103 90,110 65,115 70,p3,p4,p1,p2,插入到p4之后: p0-next=p4-next; p4-next=p0;,NULL,101 78,103 90,110 65,115 70,p3,p4,p1,p2,NULL,struct student *InsertNode(struct student *head, int num) struct student *p,*pr,*p0; p0=(struct student*)malloc(LEN); if(NULL=p0) printf(“No enough memory to allocation!n“); exit(0); p0-num=num; p0-next=NULL; if (head=NULL) head=p0; else ,p=head; while (p-numnext!=NULL) pr=p; p=p-next;,if(p-numnum) if (head=p) head=p0; p0-next=p; else pr-next=p0; p0-next=p; else p1-next=p0; p0-next=NULL;,return(head);,8.5 共用体(联合),一、共用体类型的定义,union共用体类型名 类型 成员名; 类型 成员名; ; ;,union date int i; char ch; float f; a,b,c;,二、共用体类型的特点 各成员的地址相同 任一时刻只有一个成员起作用 成员之间相互覆盖 共用体变量不能初始化* 共用体变量不能做函数参数* 共用体变量不能用做返回值,三、共用体类型变量的定义 先定义共用体类型再定义变量 在定义共用体类型的同时定义变量 直接定义共用体变量,四、共用体变量的使用 printf(“%d“,a.i); printf(“%c“,a.ch); printf(“%f“,a.f); sizeof(union date)=?,union date int i; char ch; float f; a,b,c;,#define sformat “%-6d%-10s%-3c%-3c-%6dn“ #define tformat “%-6d%-10s%-3c%-3c-%6sn“ int main() int n,i; for (i=0; i5; i+) scanf(“%d %s %c %c“, ,struct int num; char name10; char sex; char job; union int class1; char position10; category; person5;,if (personi.job='s') scanf(“%d“, ,8.6 枚举类型,一、枚举类型及枚举类型变量的定义 格式:enum 标识符枚举常量表列变量名表 enum weekday sun,mon,tue,wed,thu,fri,sat; enum weekday oneday,workday,weed_end; 先定义枚举类型再定义变量 在定义枚举类型的同时定义变量 直接定义枚举变量,枚举元素(枚举常量)的值 enum weekdaysun,mon,tue,wed,thu,fri,sat oneday; sun=0, mon=1, enum sun=7,mon=1,tue,wed,thu,fri,sat workday; sun=7, mon=1, tue=2,二、枚举类型变量的使用 赋值 workday=sun; 或 workday=(enum weekday)0; workday=1; * error 比较 oneday=sun onedaysat 输入/出 不能直接输入输出, printf(“%d“,workday); .error* int i; enum weekday day; printf(“input the value(0-sun,1-mon):“); scanf(“%d“, ,int main( ) enum colorred,yellow,blue,white,black; enum color i,j,k,pri; int n=0,loop; for (i=red;i=black; i+) for (j=red; j=black; j+) if (i!=j) for (k=red; k=black; k+) if (k!=i) ,口袋里有5种颜色的小球若干,每次从口袋中取出3个小球,有多少得到不同颜色小球的取法?,switch(pri) case red: printf(“%-10s“,“red“); break; case yellow:printf(“%-10s“,“yellow“); break; case blue: printf(“%-10s“,“blue“); break; case white: printf(“%-10s“,“white“); break; case black: printf(“%-10s“,“black“); printf(“n“); printf(“total=%dn“,n); return 0; ,

    注意事项

    本文(第八章结构体与共用体.ppt)为本站会员(本田雅阁)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开