《二级C语言程序设计》第9章结构体与共用体
- 格式:ppt
- 大小:291.00 KB
- 文档页数:67
第九章结构体和共用体【本章要求】1、结构体类型的定义方法和数据的引用,尤其是结构体成员中含有数组的用法2、访问通过结构体类型建立的单链表,并对链表中的结点进行插入、删除操作3、共用体类型的定义和引用,尤其是队成员的覆盖赋值方式。
9.1 结构体9.1.1概念结构体是一种构造数据类型,用于把不同类型的数据组合成一个自定义的数据类型。
9.1.2结构体类型定义结构类型定义的一般形式是:struct <结构类型名>{ <成员类型标识符><空格><成员名表列>;<成员类型标识符><空格><成员名表列>;<成员类型标识符><空格><成员名表列>;} [<变量名列表>];【说明】1、struct是关键字,不能省略2、<结构类型名>为合法标识符,但可省略(即无名结构体)3、<成员名表列>是由一个或多个成员名(又称为成员变量)组成,当成员名不止一个时,用逗号分隔。
4、结构可由多个成员名组成,成员名可以是由<成员类型标识符>确定的相同的或不同的数据类型,可以是基本类型或构造类型。
5、<变量名列表>可为空。
举例说明:struct student {int num;char name[20];char sex;int age;float score;char addr[30];};【说明】namenumsexagescoreaddr2字节2字节20字节1字节4字节30字节……..- 113 -《C 语言程序设计》- 114 - 1、结构体类型定义的作用域取决于其定义位置2、结构体类型定义仅仅描述结构的组织形式,并不分配内存。
9.2 结构体变量9.2.1结构体变量的定义一、方式一先定义结构体类型,再定义结构体变量。
举例说明如下:1、一般形式:struct student stu1, stu2;2、若有宏定义:#define STUDENT struct student则可为:STUDENT stu1, stu2; 二、方式二定义结构体类型的同时定义结构体变量。
9.4课后习题9.4.1项目练习一.练习目的1.进一步巩固结构体类型和共用体类型的定义与引川2.进一步复习链表的建立过程3.进一步巩固枚举类型的定义与枚举元索的引用方法二.练习内容1.用结构体变量表示平面上的一个点(横坐标和纵坐标),输入两个点,求两点Z间的距离。
#include "stdio.h"include "math.h"struct pin{float x;float y;}a,b;main(){printfC*请输入a点的横纵坐标:“);scanf("%f%f"/&a.x,&a.y);printfC'Xn");printf("请输入b点的横纵坐标scanf(,,%f%f"/&b.x,&b.y);printf("\n n);printff"输出a、b 两点之间的距离是:%f",sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)));getch();}2.16个同学围成一-圈,从笫1个人开始按1、2、3的顺序报号,凡报到3者退出圈子。
找出最后昭在圈子中的人原来的序号。
ttinclude "stdio.h"#include "stdlib.h"#define LEN sizeof(struct game)struct game{int num;struct game *next;};struct game *creat(){ struct game *head,*p;head=p=(struct game *) malloc(LEN);p->num=l;int i=2;while(i<=16){ p・>next=(struct game *) malloc(LEN);p->next-:>nu m=i;i++;p=p->n ext; }p->next=head; return(head);} struct game *delete(struct game *head) { struct game*pl=head,*p2=head,*x; int k=l;while(pl->next!=pl) {if(k==3) {x=pl; pl=pl->next;p2・>n ext=pl; free(x); x=NULL; k=0;} else {P2=pl; pl=pl->next;}pl->next=NULL;return(pl);}void print(struct game *head){ struct game *p;p=head;while(p!=NULL) {printf("%d\t",p->num);p=p->n ext;}printfCAn");}main(){ struct game *pt,*p;pt=creat();p=delete(pt);print(p);free(p);getch();}3.建立一个链表,每个结点包含的成员为:职工号、工资。