(精品)c语言电子教案10.ppt

上传人:hyn****60 文档编号:70946155 上传时间:2023-01-29 格式:PPT 页数:34 大小:266KB
返回 下载 相关 举报
(精品)c语言电子教案10.ppt_第1页
第1页 / 共34页
(精品)c语言电子教案10.ppt_第2页
第2页 / 共34页
点击查看更多>>
资源描述

《(精品)c语言电子教案10.ppt》由会员分享,可在线阅读,更多相关《(精品)c语言电子教案10.ppt(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、UNIX C编程编程yyyy-M-1age *第第10章章 结构体与共用体结构体与共用体知识点:知识点:结构体、共用体、枚举类型的定义、引用结构体、共用体、枚举类型的定义、引用用用typedef定义类型定义类型 结构体变量、数组的使用结构体变量、数组的使用位段位段重点:重点:结构体、共用体的定义、引用结构体、共用体的定义、引用结构体变量、数组的使用结构体变量、数组的使用难点:难点:位段的使用位段的使用UNIX C编程编程yyyy-M-2age *q 结构体(结构体(struct)是一种构造数据类型(由基本数据类型派)是一种构造数据类型(由基本数据类型派生的)生的)q 可以将一些不同的数据类型组

2、合在一起使用可以将一些不同的数据类型组合在一起使用q 是一种自定义的数据类型是一种自定义的数据类型10.1 结构体结构体UNIX C编程编程yyyy-M-3age *q 结构体类型定义结构体类型定义struct 结构体名结构体名 数据类型数据类型 成员名成员名1;数据类型数据类型 成员名成员名2;数据类型数据类型 成员名成员名n;10.1 结构体结构体struct是是关键字关键字,不能省略不能省略合法标识符可省合法标识符可省成员类型可以是基本型或构造型成员类型可以是基本型或构造型注意不能忽略注意不能忽略;UNIX C编程编程yyyy-M-4age *v 例:例:structstudentint

3、 num;charname20;charsex;intage;floatscore;charaddr30;10.1 结构体结构体结构体类型定义描述结构结构体类型定义描述结构的组织形式的组织形式,不分配内存不分配内存UNIX C编程编程yyyy-M-5age *q 结构体变量的定义结构体变量的定义v 声明结构体类型后,定义变量声明结构体类型后,定义变量 struct 结构体名结构体名 类型标识符类型标识符 成员名成员名;类型类型标识符标识符 成员名成员名;.;struct 结构体名结构体名 变量名表列变量名表列;10.1 结构体结构体struct student int num;char nam

4、e20;char sex;int age;float score;char addr30;struct student stu1,stu2;UNIX C编程编程yyyy-M-6age *v 声明类型的同时定义变量声明类型的同时定义变量 struct 结构体名结构体名 类型类型标识符标识符 成员名成员名;类型类型标识符标识符 成员名成员名;.变量名表列变量名表列;10.1 结构体结构体struct student int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;UNIX C编程编程yyyy-M-7age

5、 *v 直接定义结构体类型变量直接定义结构体类型变量 struct 类型标识符类型标识符 成员名成员名;类型标识符类型标识符 成员名成员名;.变量名表列变量名表列;10.1 结构体结构体struct int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;这种方式没有定义结构类型,这种方式没有定义结构类型,以后无法利用这一结构类型来定义以后无法利用这一结构类型来定义其他的变量。实际应用不采用其他的变量。实际应用不采用UNIX C编程编程yyyy-M-8age *10.1 结构体结构体2Byte20Byte1B

6、yte2Byte4Byte30Bytenumname20sexagescoreaddr30每个结构变量均占每个结构变量均占连续的连续的59ByteUNIX C编程编程yyyy-M-9age *v 结构体的嵌套结构体的嵌套结构体的成员也可以是结构体结构体的成员也可以是结构体10.1 结构体结构体例例struct date int month;int day;int year;struct studentint num;char name20;struct date birth;stu;numname20birthmonthdayyear也可也可struct studentint num;char

7、 name20;struct date int month;int day;int year;birth;stu;UNIX C编程编程yyyy-M-10age *q 结构体变量的引用结构体变量的引用v 一个结构体变量由若干个成员组成。一个结构体变量由若干个成员组成。v 结构体变量的引用是通过引用其成员的形式来实现的结构体变量的引用是通过引用其成员的形式来实现的 结构变量名结构变量名.结构成员名结构成员名 stu1.score,stu2.namev 每个结构体成员都可当做一个变量来使用每个结构体成员都可当做一个变量来使用v 结构体变量的成员使用方法与普通内存变量一样。可以对结构体变量的成员使用方

8、法与普通内存变量一样。可以对其赋值、参与运算或作为函数的参数。其赋值、参与运算或作为函数的参数。stu1.score=60;scanf(%f,&stu1.score);stu2=stu1;printf(“stu2.name=%sn”,stu2.name);stu.birth.day=20;10.1 结构体结构体UNIX C编程编程yyyy-M-11age *q 结构体变量的初始化结构体变量的初始化v 在定义结构体类型的同时定义结构体变量,并初始化在定义结构体类型的同时定义结构体变量,并初始化10.1 结构体结构体例例 struct student int num;char name20;cha

9、r sex;int age;float score;char addr30;stu1=1,Mike,M,20,89,52 Xuefu Road;UNIX C编程编程yyyy-M-12age *v 先定义结构体类型,再定义结构体变量并初始化先定义结构体类型,再定义结构体变量并初始化10.1 结构体结构体例例 struct student int num;char name20;char sex;int age;float score;char addr30;;struct student stu1=1,Mike,M,20,89,52 Xuefu Road;struct student stru2

10、=2,Ros,F,19,90,52 Xuefu Road;UNIX C编程编程yyyy-M-13age *q 结构体数组结构体数组v 数组的每个元素都是结构体类型的数据数组的每个元素都是结构体类型的数据v 定义结构体数组(与定义结构体变量一样,有三种形式)定义结构体数组(与定义结构体变量一样,有三种形式)10.1 结构体结构体例例 struct student int num;char name20;char sex;int age;float score;char addr30;struct student stu3;numname20sexagescoreaddr30stu0stu1stu

11、2 177Byte UNIX C编程编程yyyy-M-14age *v 结构体数组的初始化结构体数组的初始化10.1 结构体结构体例例 struct student int num;char name20;char sex;int age;float score;char addr30;struct student stu3=1,Mike,M,18,87.5,103 Beijing Road,2,John,M,19,99,130 Shanghai Road,3,Rose,F,20,78.5,10 Zhongshan Road;UNIX C编程编程yyyy-M-15age *例例:对候选人得票的

12、统计程序。设有对候选人得票的统计程序。设有3个候选人,每次输入一个个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。得票的候选人的名字,要求最后输出各人得票结果。#include struct person char name20;int count;/*获得的选票数*/leader3=Li,0,Zhang,0,Fun,0;main()inti,j;charleader_name20;/*候选人姓名*/for(i=1;i=10;i+)scanf(%s,leader_name);for(j=0;j3;j+)if(strcmp(leader_name,leaderj.name)=

13、0)leaderj.count+;printf(n);for(i=0;i3;i+)printf(%5s:%dn,leaderi.name,leaderi.count);UNIX C编程编程yyyy-M-16age *q 用结构体变量作函数参数用结构体变量作函数参数v 用结构体变量的成员作参数用结构体变量的成员作参数 与基本类型变量作为函数实参用法相同,与基本类型变量作为函数实参用法相同,传值方式传值方式v 用结构体变量作参数用结构体变量作参数 形参与实参都定义为同类型结构体变量形参与实参都定义为同类型结构体变量 实参把结构体变量的成员传递给形参对应的成员,是实参把结构体变量的成员传递给形参对应

14、的成员,是传传值方式,值方式,多值传递多值传递 例:有一个结构体变量例:有一个结构体变量stu,内含学生学号、姓名和,内含学生学号、姓名和3门课门课的成绩。要求在的成绩。要求在main函数中赋以值,在另一函数函数中赋以值,在另一函数print中将中将它们打印输出。今用结构体变量作函数参数。它们打印输出。今用结构体变量作函数参数。10.1 结构体结构体UNIX C编程编程yyyy-M-17age *例:例:#include#define FORMAT“n%dn%sn%fn%fn%fn”struct student int num;char name20;float score3;main()vo

15、id print(struct student);struct student stu1;stu1.num=12345;strcpy(stu1.name,Li Li);/*给字符数组赋值给字符数组赋值*/stu1.score0=67.5;stu1.score1=89;stu1.score2=78.6;print(stu1);void print(struct student stu2)printf(FORMAT,stu2.num,stu2.name,stu2.score0,stu2.score1,stu2.score2);printf(n);UNIX C编程编程yyyy-M-18age *q

16、与结构体类似,共用体也是一种构造数据类型与结构体类似,共用体也是一种构造数据类型q 共用体中有多个成员共用体中有多个成员q 共用体中的多个成员共用一个存储空间共用体中的多个成员共用一个存储空间10.2共用体(联合)共用体(联合)q 共用体的定义共用体的定义 union 共用体名共用体名 类型标识符类型标识符 成员名成员名;类型标识符类型标识符 成员名成员名;.;UNIX C编程编程yyyy-M-19age *10.2共用体共用体q共用体变量的定义共用体变量的定义(与结构体变量的定义一致与结构体变量的定义一致)v 可在定义共用体类型时直接定义共用体变量可在定义共用体类型时直接定义共用体变量v 不

17、定义共用体类型直接定义共用体变量不定义共用体类型直接定义共用体变量v union 共用体名共用体名 共用体变量名共用体变量名;v 例:例:union data int i;char ch;float f;a;fchia共用体变量任何时刻共用体变量任何时刻只有只有一个成员一个成员存在存在UNIX C编程编程yyyy-M-20age *q 共用体变量的引用共用体变量的引用union data int i;char ch;float f;union data a,b,c,d3;10.2共用体共用体v a.i a.ch a.fvd0.i d0.ch d0.fv 不能引用共用体变量,只能不能引用共用体变

18、量,只能引用其成员引用其成员v 共用体变量中起作用的成员是共用体变量中起作用的成员是最后一次存放的成员最后一次存放的成员UNIX C编程编程yyyy-M-21age *10.2共用体共用体union data int i;char ch;float f;main()union data a=A;printf(a.i=%dn,a.i);printf(a.ch=%cn,a.ch);printf(a.f=%fn,a.f);a.f=10.3;printf(a.i=%dn,a.i);printf(a.ch=%cn,a.ch);printf(a.f=%fn,a.f);getch();a.i=65a.ch=

19、Aa.f=0.000000a.i=-13107a.ch=a.f=10.300000UNIX C编程编程yyyy-M-22age *例:例:设有若干个人员的数据,输入数据并输出。其中有学生设有若干个人员的数据,输入数据并输出。其中有学生和教师。和教师。学生的数据中包括:姓名、号码、性别、职业、学生的数据中包括:姓名、号码、性别、职业、班级班级。教师的数据包括:教师的数据包括:姓名、号码、性别、职业、姓名、号码、性别、职业、职务职务。10.2共用体共用体UNIX C编程编程yyyy-M-23age *10.2共用体共用体structint num;char name10;char sex;char

20、 job;union int class;char position10;type;person2;UNIX C编程编程yyyy-M-24age *10.2共用体共用体main()int n,i;for(i=0;i2;i+)scanf(%d%s%c%c,&personi.num,personi.name,&personi.sex,&personi.job);if(personi.job=s)scanf(%d,&personi.type.class);else if(personi.job=t)scanf(%s,personi.type.position);else printf(input e

21、rror!);printf(n);printf(No.Name sex job class/positionn);for(i=0;isun)枚举值的比较规则是按其在定义时的顺序号比较。枚举值的比较规则是按其在定义时的顺序号比较。v 一个整数不能直接赋给一个枚举变量一个整数不能直接赋给一个枚举变量如:如:workday=2;是不对的。它们属于不同的类型。应先进行是不对的。它们属于不同的类型。应先进行强制类型转换才能赋值。强制类型转换才能赋值。如:如:workday=(enum weekday)2;10.3枚举类型枚举类型UNIX C编程编程yyyy-M-28age *10.3枚举类型枚举类型ma

22、in()enum weekdaysun=7,mon=1,tue,wed,thu,fri,sat weekend,today;int i;weekend=sat;today=(enum weekday)1;i=weekend-today;switch(today)case 1:printf(Today is Mon.);break;case 2:printf(Today is Tue.);break;case 3:printf(Today is Wen.);break;case 4:printf(Today is Thu.);break;case 5:printf(Today is Fri.);

23、break;case 6:printf(Today is Sat.);break;case 7:printf(Today is Sun.);break;printf(nWe must study%d days.,i);Today is Mon.We must study 5 days.UNIX C编程编程yyyy-M-29age *例例 口袋中有红、黄、蓝、白、黑口袋中有红、黄、蓝、白、黑5种颜色的球若干个。每次种颜色的球若干个。每次从口袋中先后取出从口袋中先后取出3个球,问得到个球,问得到3种不同色的球的可能取法,种不同色的球的可能取法,打印出每种排列的情况。打印出每种排列的情况。10.3枚

24、举类型枚举类型UNIX C编程编程yyyy-M-30age *10.3枚举类型枚举类型main()enum color red,yellow,blue,white,black;enum color i,j,k,pri;int n,loop;n=0;for(i=red;i=black;i+)for(j=red;j=black;j+)if(i!=j)for(k=red;k=black;k+)if(k!=i)&(k!=j)n=n+1;printf(%-3d,n);for(loop=1;loop=3;loop+)switch(loop)case 1:pri=i;break;case 2:pri=j;b

25、reak;case 3:pri=k;break;default:break;switch(pri)case red:printf(%-7s,red);break;case yellow:printf(%-7s,yellow);break;case blue:printf(%-7s,blue);break;case white:printf(%-7s,white);break;case black:printf(%-7s,black);break;default:break;if(n%2=0)printf(n);if(n%20=0)gets();printf(ntotal:%5dn,n);UNI

26、X C编程编程yyyy-M-31age *q typedef可以用来声明新的类型名来代替已有的类型名可以用来声明新的类型名来代替已有的类型名v 将系统已有的类型定义为新名将系统已有的类型定义为新名typedef int INTEGER;INTEGER i,j,k;/*相当于相当于int i,j,k;*/v 可以声明可以声明;数组类型、定符串类型数组类型、定符串类型typedef int ARRAY10ARRAY a,b,c,d;/*相当于相当于int a10,b10,c10,d10;*/10.4用用typedef定义类型定义类型UNIX C编程编程yyyy-M-32age *将用户定义的类型定

27、义一个新名将用户定义的类型定义一个新名typedef struct int month;int day;int year;DATE;DATE birthday;/*birthday为为结构类型变量结构类型变量*/10.4用用typedef定义类型定义类型v 说明说明:typedef 没有创造没有创造新数据类型新数据类型 typedef 是定义类型是定义类型,不能定义变量不能定义变量 typedef 与与 define 不同不同typedef编译时处理编译时处理,为已有类型命名为已有类型命名 UNIX C编程编程yyyy-M-33age *q C语言允许在一个结构体中以位为单位来指定其成员所占语

28、言允许在一个结构体中以位为单位来指定其成员所占内存的长度,称为位域内存的长度,称为位域(bit field)例:例:structpacked_data unsigneda:2;unsignedb:6;unsignedc:4;unsignedd:4;inti;data;其中其中a、b、c、d分别占分别占2位、位、6位、位、4位、位、4位。位。i为整型。为整型。共占共占4个字节。个字节。10.5位域位域UNIX C编程编程yyyy-M-34age *q 说明说明v 位域成员的类型只能为位域成员的类型只能为unsigned 或或intv 位域可当做整型变量使用,但要注意位域表示数值的范围,位域可当做整型变量使用,但要注意位域表示数值的范围,如两位二进制的范围为如两位二进制的范围为03,三位二进制的范围为,三位二进制的范围为07v 不能定义位域数组不能定义位域数组v 位域可按整型量的形式加参运算或赋值、输出位域可按整型量的形式加参运算或赋值、输出10.5位域位域

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁