为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

难忘的元旦晚会优秀作文600字

2020-06-04 1页 doc 11KB 71阅读

用户头像

is_954223

暂无简介

举报
难忘的元旦晚会优秀作文600字第7章构造数据类型本章内容7.2结构体与结构体类型变量的定义7.3结构体变量的使用及初始化7.4结构体数组7.1构造数据类型概述7.5结构体指针第7章构造数据类型本章内容7.7共用体7.8枚举类型7.9用typedef定义类型7.6结构体作函数参数7.1构造数据类型概述构造数据类型是C语言的一个特色,它是由一些简单数据类型构造而来的。前面所学的数组就是其中最基本的的一种。数组是由若干类型相同的元素构成,在内存中占用一块连续的区域并且按顺序存放,例如学生成绩单、字符串、矩阵、数据表格等都可以用数组来表示,它们的元素具有同样的数据...
难忘的元旦晚会优秀作文600字
第7章构造数据类型本章内容7.2结构体与结构体类型变量的定义7.3结构体变量的使用及初始化7.4结构体数组7.1构造数据类型概述7.5结构体指针第7章构造数据类型本章内容7.7共用体7.8枚举类型7.9用typedef定义类型7.6结构体作函数参数7.1构造数据类型概述构造数据类型是C语言的一个特色,它是由一些简单数据类型构造而来的。前面所学的数组就是其中最基本的的一种。数组是由若干类型相同的元素构成,在内存中占用一块连续的区域并且按顺序存放,例如学生成绩单、字符串、矩阵、数据格等都可以用数组来表示,它们的元素具有同样的数据类型。但在实际程序设计中,我们经常要把一些类型不同却又紧密联系的数据项组织在一起加以处理。7.2结构体与结构体类型变量的定义本节内容7.2.2结构体变量的定义7.2.1结构体的定义7.2.1结构体的定义就本质而言,结构体是一种较为复杂的构造类型数据。它是由若干不同类型的数据项组成,构成结构体的各个数据项称为结构体成员也叫成员变量。在使用结构体类型前我们首先要对结构体内所包含信息作一说明,即定义结构体。struct结构体名{数据类型1成员名1;数据类型2成员名2;……数据类型n成员名n;};7.2.1结构体的定义struct为关键字,它表示一个结构体定义的开始,它与其后的结构体名一起代表某一特定的结构体类型。结构体名是由用户自己定义的合法标识符。成员表列由一对花括号括起来,其中每个成员都是该结构体的一个组成部分,并且必须列出其类型和变量的名称。结构体中各成员之间用分号隔开。并且结构体定义也是用分号作为结束标志的,此处的分号不能省略,因为结构体定义在程序中就是一条说明语句。7.2.1结构体的定义在定义结构体时,有以下几点说明:①定义结构体类型只是说明该类结构体数据的组织形式,在程序编译时系统不会给结构体类型分配空间,只有定义了结构体变量,系统为该结构体变量分配空间。structdate{intyear;intmonth;intday;};structdateda1,da2;7.2.1结构体的定义②结构体成员可以是任何基本数据类型的变量,如int、char、float、double等,也可以是数组、指针类型的变量。这些成员变量可以是同一类型也可以是不同类型。structstudent{intnum;charname[20];int*age;charsex;floatscore[4];};7.2.1结构体的定义③结构体类型可以嵌套定义,即结构体成员也可以是结构体类型的变量。structstudent{intnum;carname[20];intage;charsex;structdate{intyear;intmonth;intday;}birthday;};structdate { intyear; intmonth; intday; };structstudent{ intnum; charname[20]; intage; charsex; structdatebirthday;};7.2.2结构体变量的定义为了能够在程序中使用结构体类型,必须定义结构体类型的变量,定义结构体变量的方法主要有以下四种:⑴先定义结构体类型,再定义结构体变量。structstudent{ intnum; charname[20]; charsex; floatscore[5];};structstudentstu1,stu2;7.2.2结构体变量的定义⑵在定义结构类型的同时定义结构体变量。⑶直接说明结构体变量。structstudent{ intnum; charname[20]; charsex; floatscore[5];}stu1,stu2;struct{ intnum; charname[20]; charsex; floatscore[5];}stu1,stu2;7.2.2结构体变量的定义⑷先使用typedef定义结构体类型,给结构体类型起别名,再用别名定义结构体变量。这样在定义结构体变量的时候就可以既使用新的类型studentinfo来定义变量,又可以用structstudent来定义变量,typedefstructstudent{ intnum; charname[20]; charsex; floatscore[5];}studentinfo;studentinfostu1,stu2;typedefstruct{ intnum; charname[20]; charsex; floatscore[5];}studentinfo;7.2.2结构体变量的定义按照结构体类型的组成,系统为定义的结构体变量分配内存单元。结构体变量的各个成员在内存中占用连续存储区域,结构体变量所占内存大小为结构体中每个成员所占用内存的长度之和。以上定义的结构体变量各成员所占内存单元如表所示(以VC环境为例):num4Bname20Bsex1Bscore20B7.3结构体变量的使用及初始化本节内容7.3.2结构体变量的初始化7.3.1结构体变量的使用7.3.1结构体变量的使用结构体作为一种新的数据类型,在定义结构体变量之后,可以像基本类型变量一样赋值、运算,不同的是结构体变量不能整体引用,只能引用它的成员变量。7.3.1.1结构体成员变量使用的一般方式结构体变量名.成员名birthday.year、birthday.month、birthday.daybirthday.year=1988;birthday.month=2;birthday.day=147.3.1结构体变量的使用可以将一个结构体变量赋值给另一个结构体变量。进行赋值的结构体变量必须是同一类型的结构体变量。如果stu1已经赋值,则可以通过语句stu2=stu1将stu1的值赋给同类型的结构体变量stu2。structstudent{ intnum; charname[20]; charsex; floatscore[5];};structstudentstu1,stu2;7.3.1结构体变量的使用#include<stdio.h>typedefstruct{charname[10];intage;}STD;STDfun(STDstd[],intn){STDmax;inti;max=std[1];for(i=0;i<n;i++)if(max.age<std[i].age)max=std[i];returnmax;}main(){STDstd[5]={"A01",18,"A02",17,"A03,",16,"A04",17,"A05",19};STDmax;max=fun(std,5);printf("Theresult:");printf("\nName:%s,Age:%d\n",max.name,max.age);}7.3.1结构体变量的使用7.3.1.2嵌套结构体中成员变量的使用对于嵌套的结构体,如果要使用内部嵌套的结构体的成员变量,则需要连续的使用“.”运算符。使用内部结构体的成员变量month用“stu1.date.month”的形式。structstudent{intnum;charname[20];structdate{intmonth;intday;intyear;}birthday;}stu1,stu2;7.3.1结构体变量的使用#include<stdio.h>typedefstruct{intnum;charname[10];charsex;struct{intyear,month,day;}birthday;floatscore[3];}STU;voidshow(STUtt) //定义函数show{inti;printf("%d%s%c%d-%d-%d",tt.num,tt.name,tt.sex,tt.birthday.year,tt.birthday.month,tt.birthday.day);for(i=0;i<3;i++)printf("%5.1f",tt.score[i]);printf("\n");}main(){STUstd={1,"LiuYang",'M',1980,5,18,82.5,69.0,85.0};printf("Astudentdata:\n");show(std);}7.3.2结构体变量的初始化对应结构体变量的定义形式,结构体变量初始化也有四种方法:方法一:struct结构体名{类型名成员名;类型名成员名;…………….};struct结构体名结构体变量={初值表};方法二:struct结构体名{类型名成员名;类型名成员名;…………….}结构体变量={初值表};方法三:struct{类型名成员名;类型名成员名;…………….}结构体变量={初值表};方法四:typedefstruct结构体名{类型名成员名;类型名成员名;…………….}结构体名1;结构体名1结构体变量={初值表};初始表中数据的个数应和成员项一致,各初值间用逗号隔开。按成员的先后顺序对应赋值,如果初值个数少,则将无初值对应的成员赋以0值。如果初值个数多,则编译出错。有嵌套结构的结构体类型,赋初值也一一对应。structdate{intyear,month,day;};structstudent{charnum[8],name[20],sex;structdatebirthday;floatscore;}a={“0506011","LiuQing",'M',{1980,12,9},83},b={“0508015","ZhaoYing",'F',{1981,3,20},86},c;#include<stdio.h>structstudent{intnum;char*name;charsex;floatscore;}stu2,stu1={1002,"LiuQing",'M',82.5};//定义全局结构变量main(){stu2=stu1;printf("Number=%d\nName=%s\n",stu2.num,stu2.name);printf("Sex=%c\nScore=%f\n",stu2.sex,stu2.score);}#include<stdio.h>main(){structstudent //定义结构{intnum;char*name;charsex;floatscore;}stu2,stu1={1002,"LiuQing",'M',82.5};//定义局部结构变量stu2=stu1;printf("Number=%d\nName=%s\n",stu2.num,stu2.name);printf("Sex=%c\nScore=%f\n",stu2.sex,stu2.score);}7.4结构体数组本节内容7.4.2结构体数组的初始化7.4.3结构体数组的使用7.4.1结构体数组的定义7.4.1结构体数组的定义⑴先定义结构体类型,再定义结构体数组。⑵在定义结构类型的同时说明结构体数组。structstudent{intnum;charname[20];charsex;intage;};structstudentstu[2];structstudent{intnum;charname[20];charsex;floatscore;}stu[5];7.4.1结构体数组的定义⑶直接说明结构体数组。⑷使用typedef定义结构体类型,再定义数组。struct{intnum;charname[20];charsex;intage;}stu[2];typedefstructstudent{intnum;charname[20];charsex;intage;}studentinfo;studentinfostu[2];7.4.2结构体数组的初始化⑴定义结构体类型时初始化结构体数组。struct结构体名{成员表;}数组名[大小]={初值表};structstudent{intnum;·char*name;charsex;floatscore;}stu[5]={{101,"Liping","M",45},{102,"Zhangping","M",62.5},{103,"Hefang","F",92.5},{104,"Chengling","F",87},{105,"Wangming","M",58};}⑵先定义结构体类型,然后定义结构体数组并初始化。struct结构名{成员表;};struct结构名数组名[大小]={初值表};structstudent{intnum;char*name;charsex;floatscore;};structstudentstu[5]={{101,"Liping","M",45},{102,"Zhangping","M",62.5},{103,"Hefang","F",92.5},{104,"Chengling","F",87},{105,"Wangming","M",58};}7.4.3结构体数组的使用⑴可以把一个数组元素赋予另一个数组元素,从而实现结构变量之间的整体赋值。students[3]=students[2];⑵可以单独地把一个结构体数组元素中的一个成员的值赋予另一数组元素中的一个同类型的成员。students[3].num=students[2].num一旦定义了一个结构体数组,编译时就为它分配一片连续的内存空间。和其他类型的数组一样,各数组元素是连续存放的,只是结构体数组的元素是定义过的结构体类型数据。#include<stdio.h>structstudent{intnum;char*name;charsex;floatscore;}stu[5]={{101,"Liping",'M',45},{102,"Zhangping",'M',62.5},{103,"Hefang",'F',92.5},{104,"Chengling",'F',87},{105,"Wangming",'M',58}};7.4.3结构体数组的使用main(){inti,c=0;floatave,sum=0;for(i=0;i<5;i++){sum+=stu[i].score;if(stu[i].score<60)c+=1;}printf("sum=%f\n",sum);ave=sum/5;printf("average=%f\ncount=%d\n",ave,c);}#include"stdio.h"#defineNUM3structmem{charname[20];charphone[10];};main(){structmempeop[NUM];inti;for(i=0;i<NUM;i++){printf("inputname:\n");gets(man[i].name);printf("inputphone:\n");gets(peop[i].phone);}printf("name\t\tphone\n");for(i=0;i<NUM;i++)printf("%s\t\t%s\n",peop[i].name,peop[i].phone);}7.5结构体指针本节内容7.5.2指向结构体数组的指针7.5.1结构体指针的定义及使用7.5结构体指针结构体变量被定义后,系统为其在内存中分配一片连续的存储单元。该片内存单元的起始地址称为该结构体变量的指针。如果我们定义一个指针变量,用来存放这个地址,就称该指针变量为指向结构体的指针变量,简称结构体指针。7.5.1结构体指针的定义及使用⑴先定义结构体类型,再定义结构体指针。⑵在定义结构类型的同时说明结构体指针。structstudent{intnum;charname[20];charsex;intage;};structstudentstu1,*pstu;structstudent{intnum;charname[20];charsex;floatscore;}stu1,*pstu;7.5.1结构体指针的定义及使用⑶直接说明结构体指针。⑷用typedef定义结构体类型,再定义结构体指针。struct{intnum;charname[20];charsex;intage;}stu1,*pstu;typedefstructstudent{intnum;charname[20];charsex;intage;}studentinfo;studentinfostu1,*pstu;经过上面定义之后,此时pstu尚未指向任何具体的对象,是所谓的野指针。要使pstu指向stu1,则须:pstu=&stu1。如图所示,pstu为指向结构体变量stu1的指针变量。结构体指针变量pstu中的值是所指向的结构体变量stu1的首地址。通过结构体指针变量,可以方便地访问结构体变量的各个成员。常用的方式有两种:①利用间接成员运算符“->”来存取结构体成员,其一般引用形式是:指针变量名->结构体成员名pstu已经指向结构体变量stu1,把1121赋予stu1中的成员num,可用以下形式:pstu->num=1121;把字符串“LiuQing”的首地址赋予stu1中的name:pstu->name="LiuQing";②利用间接访问运算符“*”来存取所指向结构体变量的成员,其一般引用形式是:(*指针变量名).成员名(*pstu).name="LiuQing";执行后,就使pstu所指向的结构体变量(即stu1)中成员name指向字符串"LiuQing"。(*指针变量名)的圆括号是必须有。如果去掉圆括号,则成为*p.name的形式,由于结构体成员运算符“.”的优先级高于间接访问运算符“*”,该表达式实际上就等价于*(p.name),这与原来表达式的含义是完全不同的。#include"stdio.h"structstudent{intnum;char*name;charsex;floatscore;}stu1={102,"LiuQing",'M',78.5},*pstu;main(){pstu=&stu1;printf("Number=%d\nName=%s\n",stu1.num,stu1.name);printf("Sex=%c\nScore=%f\n\n",stu1.sex,stu1.score);printf("Number=%d\nName=%s\n",(*pstu).num,(*pstu).name);printf("Sex=%c\nScore=%f\n\n",(*pstu).sex,(*pstu).score);printf("Number=%d\nName=%s\n",pstu->num,pstu->name);printf("Sex=%c\nScore=%f\n\n",pstu->sex,pstu->score);}存取结构体成员的方式有三种等价形式:①直接利用结构体变量名,其一般形式是: 结构变量名.成员名②利用指向结构体变量的指针变量和间接成员运算符,其一般形式是: 指针变量名->成员名③利用指向结构体变量的指针变量和间接访问运算符,其一般形式是: (*指针变量名).成员名7.5.2指向结构体数组的指针结构体指针也可以指向一个结构体数组,这时结构体指针变量的值是整个结构体数组的首地址。结构体指针变量也可指向结构体数组中的某一个元素,这时结构体指针变量的值是该结构体数组元素的首地址。设pstu为指向结构体数组的指针变量,则pstu也指向该结构体数组的0号元素,pstu+1指向1号元素,pstu+i则指向i号元素。在程序中既可以利用数组下标形式访问一个数组元素,也可以通过指针变量的操作来存取结构数组元素。structstudent{intnum;charname[20];charsex;intage;};structstudentstu[5];structstudent*pstu;pstu=&stu[0];(或者pstu=stu;)利用下面语句可以输出stu数组第一个元素的内容:printf("%d\t%s\t%c\t%d\n",pstu->num,pstu->name,pstu-sex,pstu->age);通过pstu++,pstu+i,pstu-i等,就可以遍历整个数组。pstu++是表示结构体指针变量pstu向后移动一个“位置”,增加所指对象的字节数。#include"stdio.h"structstudent{intnum;charname[20];charsex;floatscore;}stu[5]={{1101,"LiuQing",'M',76},{1102,"ZhaoHui",'M',85.5},{1103,"YangJing",'F',69.5},{1104,"WuFang",'F',91},{1105,"DengChao",'M',64.5}};main(){structstudent*pstu;printf("No\tName\t\t\tSex\tScore\t\n");for(pstu=stu;pstu<stu+5;pstu++)printf("%d\t%s\t\t%c\t%f\t\n",pstu->num,pstu->name,pstu->sex,pstu->score);}#include"stdio.h"structlist{inti;charname[4];floatw;}tab[4]={{1,"H",1.008},{2,"He",4.0026},{3,"Li",6.941},{4,"Be",9.01218}};main(){structlist*p;printf("No\tName\tAtomicWeight\n");for(p=tab;p<tab+4;p++)printf("%d\t%s\t%f\n",p->i,p->name,p->w);}7.6结构体作函数参数本节内容7.6.2结构体指针作函数参数7.6.1结构体成员变量作函数参数7.6.1结构体成员变量作函数参数#include<stdio.h>structdata{inta,b,c;};voidfunc(structdataparm);main(){structdataarg;arg.a=27;arg.b=3;arg.c=arg.a+arg.b;printf("arg.a=%darg.b=%darg.c=%d\n",arg.a,arg.b,arg.c);printf("CallFunc()....\n");func(arg);printf("arg.a=%darg.b=%darg.c=%d\n",arg.a,arg.b,arg.c);}结构体变量作函数参数实现调用函数与被调用函数之间的“数值”传递。7.6.1结构体成员变量作函数参数voidfunc(structdataparm){printf("parm.a=%dparm.b=%dparm.c=%d\n",parm.a,parm.b,parm.c);printf("Process….\n");parm.a=18;parm.b=5;parm.c=parm.a*parm.b;printf("parm.a=%dparm.b=%dparm.c=%d\n",parm.a,parm.b,parm.c);printf("Return....\n");}7.6.2结构体指针作函数参数#include<stdio.h>structdata{inta,b,c;};voidfunc(structdata*parm);main(){structdataarg;arg.a=27;arg.b=3;arg.c=arg.a+arg.b;printf("arg.a=%darg.b=%darg.c=%d\n",arg.a,arg.b,arg.c);printf("CallFunc()....\n");func(&arg);printf("arg.a=%darg.b=%darg.c=%d\n",arg.a,arg.b,arg.c);}将上例改用结构体指针变量作参数,分析程序运行结果。7.6.2结构体指针作函数参数voidfunc(structdata*parm){printf("parm->a=%dparm->b=%dparm->c=%d\n",parm->a,parm->b,parm->c);printf("Process...\n");parm->a=18;parm->b=5;parm->c=parm->a*parm->b;printf("parm->a=%dparm->b=%dparm->c=%d\n",parm->a,parm->b,parm->c);printf("Return...\n");}7.7共用体本节内容7.7.2共用体变量的赋值和引用7.7.1共用体及共用体变量的定义7.7共用体共用体的特点是将不同类型的变量,例如整型、字符型、实型等放在同一地址开始的内存单元中,虽然各变量在内存中占的字节数不同,但都从同一地址开始。例如学校对教师和学生所作的信息统计表,对“单位”一项学生应填入班级编号可用整型量表示,教师应填入某系某教研室只能用字符类型。要求把这两种类型不同的数据都填入“单位”这个变量中,就必须把“单位”定义为既可存放整型数据又可存放字符型数组这两种类型的“共用体”。7.7.1共用体及共用体变量的定义定义共用体类型的一般形式为:union共用体名{成员表};uniondata{ intclas;charoffice[10];};7.7.1共用体及共用体变量的定义⑴先定义共用体类型,再定义共用体变量。⑵定义共用体类型的同时定义共用体变量。uniondata{intclas;charoffice[10];};uniondataa,b; uniondata{intclas;charoffice[10];}a,b;7.7.1共用体及共用体变量的定义⑶直接定义共用体变量。⑷使用typedef定义共用体类型再定义共用体变量。union{intclas;charoffice[10];}a,b;typedefunionata1{intclas;charoffice[10];}data;data1a,b; 经定义后的a、b变量均为data类型。它们的内存分配如图所示。a、b变量的长度应等于data的成员中最长的长度,即等于office数组的长度,共10个字节。a,b变量如赋予整型值时,只使用了4个字节,而赋予字符数组时,可用10个字节。一个共用体变量的长度等于各成员中最长的长度,在共用体中各成员变量的值并不是同时存在的,在同一时刻只能有一个变量值存在,如果给其它变量赋值,则原先变量的值被覆盖。7.7.2共用体变量的赋值和引用对共用体变量的赋值、使用都只能通过对变量的成员进行,而不能直接对共用体变量赋值,也不能直接引用共用体变量。通常使用运算符“.”引用共用体的成员变量,例如:a.clas=3;注意在这种情况下,共用体变量a的当前成员变量为clas,其值为3,此时a的另一成员变量office的值是无意义的。7.7.2共用体变量的赋值和引用还可以通过指向共用体变量的指针引用共用体变量的成员。不能对共用体变量的所有成员变量进行初始化,只能对成员列表中的第一个变量进行初始化。uniondata{intclas;charoffice[10];}a,*p;p=&a;p->clas=3;uniondata{intclas;charoffice[10];}a={3};等价于a.clas=37.7.2共用体变量的赋值和引用在程序中依次为共用体成员赋值,则最后赋值的成员值有效。#include<stdio.h>#include<string.h>uniondata{intclasses;charoffice[10];}a;main(){ strcpy(a.office,"CS"); a.classes=3; printf("%d\n",a.classes);printf("%s\n",a.office);}7.7.2共用体变量的赋值和引用#include<stdio.h>main(){struct{charname[10];intage;charjob;union{intclas;charoffice[10];}dept;}info[2];intn,i;7.7.2共用体变量的赋值和引用for(i=0;i<2;i++){printf("inputname,age,jobanddepartment\n");scanf("%s%d%c",info[i].name,&info[i].age,&info[i].job);if(info[i].job=='s')scanf("%d",&info[i].dept.clas);elsescanf("%s",info[i].dept.office);}printf("name\tage\tjob\tclass/office\n");7.7.2共用体变量的赋值和引用for(i=0;i<2;i++){if(info[i].job=='s')printf("%s\t%3d\t%3c\t%d\n",info[i].name,info[i].age,info[i].job,info[i].dept.clas);elseprintf("%s\t%3d\t%3c\t%s\n",info[i].name,info[i].age,info[i].job,info[i].dept.office);}}7.8枚举类型本节内容7.8.2枚举类型变量的赋值和引用7.8.1枚举类型枚举变量的定义7.8枚举类型在实际处理问中,经常会有取值被限定在一个有限的范围内的类型出现。例如,一个星期内只有七天,一年只有十二个月等等。为了便于对这些类型数据的处理,C语言提供了一种称为“枚举”的类型。利用枚举类型,可以直观的体现枚举变量的含义和取值限制,在定义枚举类型时,列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围。7.8.1枚举类型枚举变量的定义7.8.1.1枚举类型的定义枚举类型定义的一般形式为:enum枚举名{枚举值表};在枚举值表中罗列出所有可用值,称为枚举元素。enumweekday{sun,mon,tue,wed,thu,fri,sat};7.8.1.2枚举变量的定义同结构体和共用体一样,枚举变量也可用不同的方式定义:enumweekday{…};enumweekdaya,b,c;enumweekday{…}a,b,c;enum{…}a,b,c;typedefenumweekday{…}week;weeka,b,c;7.8.2枚举类型变量的赋值和引用在C语言中对枚举类型数据有如下:⑴枚举值是常量,不是变量。所以不能在程序中用赋值语句再对它赋值。例如对枚举weekday的元素再作以下赋值:“sun=5;mon=2;sun=mon;”都是错误的。⑵枚举元素本身由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2…。如在weekday中,sun值为0,mon值为1,…,sat值为6。7.8.2枚举类型变量的赋值和引用#include<stdio.h>main(){enumweekday{sun,mon,tue,wed,thu,fri,sat}a,b,c;a=sun;b=mon;c=tue;printf("%d,%d,%d",a,b,c);}7.8.2枚举类型变量的赋值和引用可以把某个枚举元素规定为指定的整常数:enumweekday{sun,mon,tue,wed=10,thu,fri,sat};编译程序对wed之前的枚举元素照常从0开始,递增赋予整常数,即sun的值为0,mon的值为1,tue的值为2,并对wed赋予指定值10,然后对wed之后的值在wed的基础上递增赋值,即thu的值为11,fri为12,sat为13。7.8.2枚举类型变量的赋值和引用⑶只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。如:“a=sum;b=mon;”是正确的。而:“a=0;b=1;”是错误的。如一定要把数值赋予枚举变量,则必须用强制类型转换,如:“a=(enumweekday)2;”其意义是将顺序号为2的枚举元素赋予枚举变量a,相当于:“a=tue;”另外枚举元素不是字符常量也不是字符串常量,使用时不要加单、双引号。7.8.2枚举类型变量的赋值和引用#include<stdio.h>main(){enumbody{a,b,c,d}month[31],j;inti;j=a;for(i=1;i<=30;i++){month[i]=j;j=(enumbody)((int)j+1);if(j>d)j=a;}7.8.2枚举类型变量的赋值和引用for(i=1;i<=30;i++){switch(month[i]){casea:printf("%2d%c\t",i,'a');break;caseb:printf("%2d%c\t",i,'b');break;casec:printf("%2d%c\t",i,'c');break;cased:printf("%2d%c\t",i,'d');break;default:break;}}printf("\n");}7.9用typedef定义类型本节内容7.9.2类型定义的使用7.9.1typedef定义类型的一般7.9用typedef定义类型为了提高程序的可读性及可移植性,C语言在已有各种数据类型的基础上,还允许用户自己定义类型说明符,也就是说允许由用户为数据类型取“别名”。这个功能是由类型定义符typedef来完成的。7.9.1typedef定义类型的一般格式typedef定义类型的一般形式为:typedef原类型名新类型名其中原类型名可以是C语言提供的任一数据类型,新类型名代表这个类型的别名,一般用大写表示,以便于区别。例如:typedefintINTEGERtypedef只是给已有数据类型起了一个“别名”,并不是重新定义一种新的数据类型。用typedef定义数组、指针、结构等复杂类型将带来很大的方便。例如:“typedefcharNAME[20];”表示NAME是字符数组类型,数组长度为20。然后可用NAME说明变量,即:“NAMEa1,a2,s1,s2;”完全等效于:“chara1[20],a2[20],s1[20],s2[20];”。typedefstruct{ intnum; charname[20]; charsex;floatscore[5];}STU;STU是定义的新类型名,它代表上述的一个结构体类型。可以用STU定义变量:“STUstu[50];”表示定义了此结构体类型的结构体数组;而STU*p表示p是指向该结构体类型数据的指针。7.9.2类型定义的使用使用类型定义时,有以下问题需要注意:①typedef只是为C语言的原有数据类型定义了一个别名,并没有产生一个新的数据类型,原数据类型仍然可以使用。建议在程序中完全使用定义的类型名,而不使用原类型名。②使用typedef定义的别名,不能作为变量使用。③有时也可用宏定义来代替typedef的功能,但是宏定义是由预处理完成的,而typedef则是在编译时完成的,后者更为灵活方便。用typedef定义的数据类型通常单独放在一个文件中,然后在需要的时候,用“#inlucde”将它们包含进去。引入类型定义的目的不仅仅是为了提高程序的可读性,更是为了提高程序的安全性和可移植性。7.9.2类型定义的使用#include<stdio.h>#include<string.h>#defineN10typedefstructss{charnum[10];ints;}STU;fun(STUa[],STU*s) //定义函数fun{ inti,max,p; max=-1000;p=0; for(i=0;i<N;i++) if(a[i].s>max) { p=i; max=a[i].s; } *s=a[p];}7.9.2类型定义的使用main(){STUa[N]={{"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71}},m;inti;printf("*****Theoriginaldata*****\n");for(i=0;i<N;i++)printf("No=%sMark=%d\n",a[i].num,a[i].s);fun(a,&m);printf("*****THERESULT*****\n");printf("Thetop:%s,%d\n",m.num,m.s);}7.9.2类型定义的使用
/
本文档为【难忘的元旦晚会优秀作文600字】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索