c语言编写程序实现唱票功能,《C语言程序设计基础与实训教程》第8章:结构体及其他复合类型...

《《C语言程序设计基础与实训教程》第8章:结构体及其他复合类型》由会员分享,可在线阅读,更多相关《《C语言程序设计基础与实训教程》第8章:结构体及其他复合类型(40页珍藏版)》请在人人文库网上搜索。

1、第八章 结构体及其他复合类型,一 概述 二 结构体类型的定义 三 结构体类型变量的使用 四 结构体数组 五 指向结构体类型的指针 六 共用体的定义和使用 七 枚举类型和用户自定义类型,概述,1 为什么要学习结构体类型? 2 定义结构体类型的一般形式: struct 结构体名 成员列表 ;,如: struct student int num; /*学号*/ char name20; /*姓名*/ char sex; /*性别*/ int age; /*年龄*/ float score; /* 成绩*/ char addr30; /*地址*/ ;,性别,年龄,成绩,地址,姓名,学号,学生,如何定义。

2、学生通讯录的记录类型? 学号,姓名,地址,电话,e-mail .,定义结构体类型变量的方法,定义结构体类型变量的三种方法: 一:先定义结构体类型再定义变量 二:在定义类型的同时定义变量 三:直接定义结构体类型变量 四:结构体类型变量定义说明,一:先定义结构体类型再定义变量,如: struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student student1, student2; .,格式: struct 结构体类型名 成员表列 ; struct 结构体类型名变。

3、量名列表;,二:在定义类型的同时定义变量,如: struct student int num; char name20; char sex; int age; float score; char addr30; student1, student2; .,格式: struct 结构体类型名 成员表列 变量名列表;,三:直接定义结构类型变量,如: struct int num; char name20; char sex; int age; float score; char addr30; student1, student2; .,格式: struct 成员表列 变量名列表;,结构体类型变量。

4、定义说明,类型和变量的概念不同,如:student 是结构体类型 student1,student2是结构体变量。 对结构体成员(域)可以单独使用使用方法同普通变量。如: student1.age=18; scanf(%s,student1.name); 成员名可以与程序中的一般变量名相同,但两者不代表同一对象。如: char *name=zhang; strcpy(student1.name, name);,成员也可以是结构体。如: struct date int year; /*年*/ int month; /*月*/ int day; /*日*/ ; struct student int。

5、 num; char name20; struct date birthday; /*生日*/ ; .,结构体类型变量的引用,不能将一个结构体变量作为一个整体进行输入和输出,只能对各成员分别输入输出。如: scanf(%d%s, student); 非法。 gets(student1.name); scanf(%d, 合法,结构体成员引用方式: 结构体变量名.成员名 如: student1.name student1.num 新c标准允许将一个结构体变量赋值给另一个同结构的结构体变量。如:student1=student2 对成员变量可以象普通变量一样进行各种运算 如: student2.nu。

6、m=student1.num+1; 可以引用成员的地址,也可以引用结构体变量的地址.如: char name20; char sex; char addr20; a=89031, Li Lin, M, 123 Beijing Road; main( ) printf(%ld %s %c %sn,a.num,a.name,a.sex,a.addr); .,二:对静态存储类型的结构体变量进行初始化,格式: .变量名= 各域初值列表 ; 如: main( ) static struct student long int num; char name20; char sex; char addr20;。

7、 a=89031, Li Lin, M, 123 Beijing Road; printf(%ld %s %c %sn,a.num, a.name, a.sex, a.addr); .,三:新的c标准也可以对自动变量在定义时赋初值.,main( ) struct student long int num; char name20; char sex; char addr20; a=89031,Li Lin,M,123 Beijing Road; printf(%ld %s %c %sn,a.num,a.name,a.sex,a.addr); .,结构体数组,结构体数组:元素为结构体的数组 使用。

8、场合: 如学生情况登记表 一: 结构体数组的定义 二:结构体数组的初始化 三:举例,一: 结构体数组的定义,方法1: 对应结构体变量定义方法1 struct student long int num; char name20; char sex; char addr20; ; struct student students3;,方法2:对应结构体变量定义方法2 struct student long int num; char name20; char sex; char addr20; students3;,方法3:对应结构体变量定义方法3 struct long int num; char。

9、 name20; char sex; char addr20; students3; .,二:结构体数组的初始化,初始化方法: 在定义数组的后面加上 =初值列表 如: struct long int num; char name20; char sex; char addr20; students3= 10101, Li Lin, M, Beijing, 10102, zhang, F, shanghai ; .,三 :举例:候选人得票统计,初始: 结果:,zhang 0,li 0,wang 0,zhang 5,li 1,wang 4,方法: 1:定义数据类型:结构体数组 struct lea。

10、der char name20; int count; /*得票数*/ leaders =zhang, 0, wang, 0, li, 0; 2:循环做(唱票),循环次数为选票张数 输入被选人姓名; 相应计数+1; 3:打印结果:每个候选人及得票,struct leader char name20; /*姓名*/ int count; /*票数*/ leaders =zhang,0,wang,0,li,0; main( ) int i,j; char name20; for (i=1;i=10;i+) /*循环输入10张选票*/ scanf(%s,name); for (j=0;j3;j+) 。

11、if (strcmp(name,leadersj.name)= =0) leadersj.count+; printf(n); for (i=0;i3;i+) printf(%s : %dn,leadersi.name,leadersi.count); /*输出选举结果:个人得票*/ .,指向结构体类型数据的指针,一:指向结构体的指针变量 对象为结构体的指针变量 二:指向结构体数组的指针 对象为结构体数组的指针变量 三:用指向结构体的指针做函数参数 四: 举例,一 指向结构体的指针变量,格式:struct 结构类型名 *指针变量名 例如:struct student *p; p=,96011 。

12、Li M 87.5,num,name,sex,score,p,用指针变量引用结构体的各域: 格式: (*指针变量名)域名指针变量名-域名 如: (*p).name p-name 运算: p-n+ :p-n=p-n + 1 +p-n : p-n=p-n +1,struct student long int num; char name20; char sex; float score; ; main( ) struct student stu1; struct student *p; p=,99021,Li Lin,F,90.0,p,printf(%ld %s %c %fn,stu1.num,s。

13、tu1.name,stu1.sex,stu1.score); printf(%ld %s %c %fn,(*p).num,(*p).name,(*p).sex,(*p).score); printf(%ld %s %c %fn,p-num,p-name,p-sex,p-score); .,二 指向结构体数组的指针,指针所指对象可以是结构体数组。如: struct student *p; struct student students3; p=students; 指向第一个学生记录,99021 Li Lin F 90,p,99022 Liu F 70,99023 Zhao M 80,p+1,p+。

14、1: 指向下一个学生记录 (+p)-num : p=p+1 ,p-num (p+)-num : p-num, p=p+1,例:打印学生成绩单 方法: :定义数据类型: 元素为结构体的数组,数组长度为学生个数 :给数组中赋初值:各学生成绩 :打印表头 :循环打印各学生成绩 struct student long int num; char name20; char sex; float score; students2=1101, Li, F, 90,1102, wang, M, 80;,main( ) struct student *p; printf(%8s %10s %3s %5sn, N。

15、o.,Name,Sex,Score);*打印表头*/ for (p=students;pnum,p-name,p-sex,p-score); ,p,P+1,students,1102 wang M 80,1101 Li F 90,共用体,一:共用体的概念 二:共用体变量的引用方式 三:共用体类型数据的特点,一 共用体的概念,共用体类型数据:几个不同类型的数据共占同一段内存的数据类型。有3种格式,与结构体的3种定义格式相似。下面列出在定义类型的同时定义变量的格式 : union 共用体名 成员列表 变量列表; 如:union data int i; char ch; float f; a;,a.。

16、i a.ch a.f,定义完类型再定义变量的格式: union data int i; char ch; float f; ; union data a,b,c;,直接定义变量的格式: union int i; char ch; float f; a,b,c; .,二 共用体变量的引用方式,不能直接引用共用体变量,只能引用共用体变量的成员。如: a.i a.ch a.f, a.ch=a; a.f=1.5;结果是printf(%f,a.f)有效 不能在定义共用体时对它进行初始化。 如union int i;char ch;float f;a=1,a,1.5;非法 也可以定义共用体数组,例:输入若。

17、干人员的数据,其中包括教师和学生,Name num sex job category(部属) 姓名 编号 性别 工作 职务(班级) 李 1101 女 学生(s) 11班 王 99021 男 教师 (t) 教授,struct char name20; int num; char sex; char job; union int class; char position10; category; p2;,struct char name20; int num; char sex; char job; union int class; char position10; category; p2;,n。

18、ame num sex job category.class 李 1101 女 学生(s) 11班,name num sex job category.position 王 99021 男 教师 (t) 教授,P0,P1,main( ) int n,i; /*输入2个人的情况*/ for (i=0; i2;i+) scanf(%d %s %c %c, .,枚举类型,枚举(enumerate)类型为ansi c新标准增加的类型 定义: enum 枚举类型名 枚举元素; 如: enum weekday sun, mon, tue, wed, thu, fri, sat 定义一个枚举类型weekda。

19、y,它的取值范围:sunsat;,C中对枚举元素做常量处理。 如:enum weekday work_day,week_end; work_day=mon; 合法 week_end=sat; 合法 sun=0; 非法 枚举元素作为常量是有值的。0. 如:week_end=sat; printf(%d,week_end); 结果为:6 枚举值可用来做判断比较,如: if (week_day= =mon).; if (satfri) . 一个整数不能直接赋给一个枚举变量: work_day=2; 非法 work_day=(enum week_day)2; 合法 .,用typedef定义类型,C的数据类型 标准类型:int, char, float, double, long等 用户定义的类型:结构体,共用体,枚举类,数组等 用typedef定义新类型名代替已有的类型名。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值