【文档说明】C--程序设计教程第7章.ppt,共(31)页,615.000 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-2196.html
以下为本文档部分文字说明:
本章内容提要7.1结构体7.2共用体7.3枚举类型7.4typedef声明7.1结构体struct结构体类型名{成员类型1成员名1;成员类型2成员名2;…成员类型n成员名n;};定义结构体类型的一般形式为:在
定义结构体类型的同时定义变量7.1.1结构体变量的定义、初始化及使用1.结构体变量的定义struct结构体类型名{成员类型1成员名1;成员类型2成员名2;…成员类型n成员名n;}变量名1,变量名2,…,变量名n;先定义结构体类型再定义变量[stru
ct]结构体类型名变量名1,变量名2,…,变量名n;直接定义结构体变量struct{成员类型1成员名1;成员类型2成员名2;…成员类型n成员名n;}变量名1,变量名2,…,变量名n;2.结构体变量的初始化s
tructdate{intyear;intmonth;intday;}birthday1={1998,11,22},birthday2={2003,10,23};structdate{intyear;intmonth;intday;};structdatebirthda
y1={1998,11,22};datebirthday2={2003,10,23};struct{intyear;intmonth;intday;}birthday1={1998,11,22},birthday2={200
3,10,23};3.结构体变量的使用结构体变量的运算具有相同类型的结构体变量可以进行赋值运算,但不能直接进行输入/输出。结构体成员的使用结构体变量名.成员名例如:cout<<birthday1.year;//输出结构体变量birthday1的成员year的值birthday1.m
onth++;//结构体变量birthday1的成员month的值加1temp=birthday1.year-birthday2.year;//birthday1的成员year的值与birthday2的成员year的值相减另外,也可以定义一个
指向该结构体的指针变量指针变量名->成员名7.1.2结构体数组的定义、初始化及使用1.结构体数组的定义structdate{intyear;intmonth;intday;}birthday[3];structdate{intyear
;intmonth;intday;};datebirthday[3];struct{intyear;intmonth;intday;}birthday[3];2.结构体数组的初始化structdate{intyear;intmonth;intday;}bi
rthday[3]={{1998,11,22},{2003,10,23},{2008,1,7}};3.结构体数组的使用结构体数组中的每个元素都是一个结构体类型数据。结构体数组是通过下标变量引用结构体成员的。7.1.3指向结构体变量的指针定义一个指向结构体变量的指针
,那么该指针的值是结构体变量所占内存段的起始地址。通过指向结构体变量的指针,可以引用结构体变量中的成员:指针变量名->成员名;例如:structdate{intyear;intmonth;intday;}birthday1,birthday2;date*p;//定义指向结构体类型da
te的指针pp=&birthday1;//将结构体变量的起始地址赋值给指针pp->month=5;//通过指针引用结构体变量的成员,并为其赋值7.1.4结构体作为函数参数值传递用结构体变量名作为函数的实参,将结构体变量中的
内容全部顺序传递给形参。若在函数调用期间,形参的内容发生改变,将不会影响主调函数中相对应的实参。地址传递用指向结构体变量的指针作为函数实参,将结构体变量的地址传递给形参。引用传递用结构体变量的引用变量作为函数参数。7.2
共用体union共同体类型名{成员类型1成员名1;成员类型2成员名2;…成员类型n成员名n;};在定义结构体类型的同时定义变量7.2.1共用体变量的定义与初始化例如:uniondata{inta;floatb;charc;}x={123};先定义结构体类型再定义变量例如:uniondata{
floatb;inta;charc;}datay={12.3};直接定义结构体变量例如:union{charc;inta;floatb;}z={'c'};7.2.2共用体变量的使用相同类型的共用体变量可以进行赋值运算,对共用体变量中的成员可以进行各种运算。共同体变量名.成员名例
如:x.a//引用共同体变量x中的整型成员ay.b//引用共同体变量x中的浮点型成员b7.3枚举类型如果一个变量只有有限个可能的取值,可以将这些值一一列举出来,定义为枚举类型。枚举类型是由若干个常量组成的有限集合。enum枚举类型名{枚举常量列表};例
如:enumFruit{APPLE,ORANGE,PEAR,GRAPE,PEACH};枚举元素是常量,其本身是有值的,如果枚举常量在定义时没有指定其对应的值,系统将按定义时的顺序自动为它们赋值。例如:enumFruit{APPLE=1,
ORANGE=2,PEAR=3,GRAPE=4,PEACH=5};enumFruit{APPLE=4,ORANGE=0,PEAR,GRAPE,PEACH};7.3.1枚举类型变量的定义与初始化可以在定义枚举类型的同时定义枚举类型变量并初始化。例如:enum
Fruit{APPLE,ORANGE,PEAR,GRAPE,PEACH}f=PEACH;//定义枚举变量f也可以先定义枚举类型,再定义枚举变量并初始化。例如:enumFruit{APPLE,ORANGE,PEAR,GRAP
E,PEACH};Fruitf1=ORANGE,f2;//定义2个枚举变量f1和f2,并为f1赋初值7.3.2枚举类型变量的使用枚举类型可以看作是一个整型常量的集合,枚举变量的值为该枚举类型定义中的某个常量的值。例如:enumFruit{APPLE,
ORANGE,PEAR,GRAPE,PEACH}f1;f1=ORANGE;cout<<f1;//该语句的结果是1枚举变量可以进行算术运算、赋值运算、关系运算和逻辑运算等。例如:enumFruit{APPLE,ORANGE,PEAR
,GRAPE,PEACH}f1;f1=ORANGE;if(f1>GRAPE)//f1值为1,GRAPE值为3,故关系表达式的值为false…枚举变量可以与整型数据之间进行类型转换,但不能将一个整型数据直接赋给一个枚举型变量,应先进行强制类型转换使等号两
边的类型相同才能赋值。例如:Fruitf2;f2=Fruit(2);//将序号为2的元素赋值给f2或f2=(Fruit)2;7.4typedef声明typedef声明用于为已存在的数据类型定义一个新的类型名称。typedef类型名称类型标识符;例如:typedefintINTEGE
R;//用标识符INTEGER代替C++中的标准数据类型inttypedefstruct//用DATE表示定义的结构体类型{intyear;intmonth;intday;}DATE;DATEbirthday;//用DATE定义结构体变量birthday另外,还可
以用typedef为数组、指针等定义新的类型名称。例如:typedefintCOUNT[10];//用COUNT定义长度为10的整型数组COUNTa;//定义长度为10的整型数组atypedefchar*STRING;//定义ST
RING为字符指针STRINGp;//用STRING定义字符指针变量ptypedefint(*MAX)(inta,intb);//定义MAX为指向函数的指针MAXp;//用MAX定义指针变量p综合实例1输出教师信息//实例7-1.cpp#include<iostream.
h>unioncf//共用体类型{charclname[30];//所讲课程intnum;//论文数目};structteachers//结构体类型{intnum;//编号charname[20];//姓名charzc;//职称,教师为l,教授为punioncfx;//结构
成员变量x为共用体类型,可变字段}teach[3];//定义结构体数组teachvoidmain(){inti;for(i=0;i<3;i++){cout<<"inputnum:"<<endl;cin>>teach[i].num;//输入教师号cout<<"inputname:"<<
endl;cin>>teach[i].name;//输入教师名字cout<<"inputzc:"<<endl;cin>>teach[i].zc;//输入教师职称if(teach[i].zc=='l'){cout<<"input
clname"<<endl;//如果职称是讲师,则输入所讲课程cin>>teach[i].x.clname;}elseif(teach[i].zc=='p')//如果职称是教授,则输入论文数目。{cout<<"inputthesis_num:"<<endl;cin>>teach[
i].x.num;}elsecout<<"inputdataerror"<<endl;}cout<<"num"<<'\t'<<"name"<<'\t'<<"zc"<<'\t'<<"clname/num"<<endl;for(intj=0
;j<3;j++){cout<<teach[j].num<<'\t'<<teach[j].name<<'\t'<<teach[j].zc<<'\t';if(teach[j].zc=='l')cout<<teach[j].x.clname<<endl;elsei
f(teach[j].zc=='p')cout<<teach[j].x.num<<endl;elsecout<<"dataerror"<<endl;}}inputnum:1021↙inputname:陈杰↙inputzc:p↙inputthesis_n
um:15↙inputnum:1022↙inputname:方平↙inputzc:l↙测试数据与运行结果:inputclname:高等数学↙inputnum:1023↙inputname:贾小亮inputz
c:l↙inputclname:大学体育↙numnamezcclname/num1021陈杰p151022方平l高等数学1023贾小亮l大学体育综合实例2输出每种动物的信息//实例7-2.cpp#include<iostream.h>structBIRTHDAY//定义结构体类型BI
RTHDAY{intYEAR;intMONTH;intDAY;};enumCOLOR{WHITE,BLACK,YELLOW};//定义枚举类型COLORstructANIMAL//定义结构体类型ANIMAL{floatweight;BIRTHDAYbirthday;COLORcolor;}
cat,dog;//定义结构体变量cat和dogvoidGetColor(intc)//根据用户输入,输出颜色信息{switch(c){case0:cout<<"WHITE"<<endl;break;case1:cout<<"BLACK"<<endl;break;cas
e2:cout<<"YELLOW"<<endl;break;}}voidmain(){cat.weight=100;//为结构体变量cat赋初值cat.birthday.YEAR=2009;cat.birthd
ay.MONTH=8;cat.birthday.DAY=14;cat.color=(COLOR)2;//枚举变量与整型数据之间进行类型转换cout<<"inputweightbirthday(yearmonthday)color"<<endl<<"WHITE:0\nBLACK:1
\nYELLOW:2\n";cin>>dog.weight;//为结构体变量dog赋初值cin>>dog.birthday.YEAR;cin>>dog.birthday.MONTH;cin>>dog.birthday.DAY;in
tdcolor;cin>>dcolor;dog.color=(COLOR)dcolor;//枚举变量与整型数据之间进行类型转换cout<<"dog:"<<endl<<"weight:"<<dog.weight<<endl<<"birthday:"<<dog.birthday.YE
AR<<"."<<dog.birthday.MONTH<<"."<<dog.birthday.DAY<<endl<<"color:";GetColor(dog.color);cout<<"cat:"<<endl<<
"weight:"<<cat.weight<<endl<<"birthday:"<<cat.birthday.YEAR<<"."<<cat.birthday.MONTH<<"."<<cat.birthday.DAY<<endl<<"color:";GetColor(cat.color);}
inputweightbirthday(yearmonthday)colorWHITE:0BLACK:1YELLOW:25252003651↙dog:weight:525birthday:2003.6.
5color:BLACKcat:weight:100birthday:2009.8.14color:YELLOW测试数据与运行结果: