结构体共用体和用户定义类型_第1页
结构体共用体和用户定义类型_第2页
结构体共用体和用户定义类型_第3页
结构体共用体和用户定义类型_第4页
结构体共用体和用户定义类型_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、结构体共用体和用户定义类型第1页,共28页,2022年,5月20日,18点55分,星期二结构体类型结构体类型的定义形式: struct 结构体标识名 类型名1 结构体成员名表1; 类型名2 结构体成员名表2; ; struct date int year,month,day; struct student char name12; char sex; struct date birthday; float sc4;结构体类型占用字节数是成员项所占字节数的总和。第2页,共28页,2022年,5月20日,18点55分,星期二结构体类型变量的定义、赋值、使用结构体类型的变量的定义(3种形式) 1.紧

2、跟在结构体类型说明之后进行定义。 struct student char name12; char sex; struct date birthday; float sc4; s1,s2; 2. 结构体类型名可以省略。 3.先说明一个结构体类型,再单独进行变量定义。 struct student char name12; char sex; struct date birthday; float sc4; ; struct student s1,s2;第3页,共28页,2022年,5月20日,18点55分,星期二结构体变量的赋值和使用 struct student char name12; c

3、har sex; struct date birthday; float sc4; s1=“Li Ming”,M,1962,5,10,88,76,85.5,90; 赋值时,依次给变量中的各个成员均赋值。printf(“%s,%c,%d,%d,%d,%f,%f,%f,%f”,,s1.sx,s1.birthday.year,s1.birthday.month,s1.birthday.day, s1.sc0, s1.sc1, s1.sc2, s1.sc3);结构体变量的引用:结构体变量名.成员名例1.struct person int ID;char name12; p;请将scanf

4、(%d, );语句补充完整,使其能够为结构体变量p的成员ID正确读入数据。 (2009年9月二级C真题) &p.ID第4页,共28页,2022年,5月20日,18点55分,星期二例2.下面结构体的定义语句中,错误的是( )。 (2009年9月二级C真题) A)struct ord int x;int y;int z; struct ord a; B)struct ord int x;int y;int z; struct ord a; C)struct ord int x;int y;int z; a; D)struct int x;int y;int z; a;例3有以下程序#include

5、 main() struct STU char name9; char sex; double score2; ;struct STU a=Zhao,m,85.0,90.0, b=Qian,f,95.0,92.0);b=a;printf(%s,%c,%2.0f,%2.0fn,,b.sex,b.score0,b.score1);程序的运行结果是( )。 (2008年9月二级C真题)A)Qian,f,95,92 B)Qian,m,85,90 C)Zhao,f,95,92 D)Zhao,m,85,90 BD第5页,共28页,2022年,5月20日,18点55分,星期二例4. 以下程序的运

6、行结果是( ) main() struct EXAMPLE struct int x; int y; in; int a; int b; e; e.a=1;e.b=2; e.in.x=e.a*e.b; e.in.y=e.a+e.b; printf(“%d,%d”,e.in.x,e.in.y);2,3第6页,共28页,2022年,5月20日,18点55分,星期二结构体指针结构体指针的定义 struct student *p,s; p=&s; p-name,p-sex;例1.若有以下说明语句: struct student int age; int num;std,*p;p=&std;则以下对结构

7、体变量std中成员age的引用方式不正确的是( )A. std.age B.p-age C.(*p).age D. *p.ageD第7页,共28页,2022年,5月20日,18点55分,星期二例2.设有如下定义: struct sk int n; float x;data,*p;若要使p指向data中的n域,则正确的赋值语句是( )A. p=&data.n B. *p=data.nC. p=(struct sk *)&data.n D. p=(struct sk *)data.nC第8页,共28页,2022年,5月20日,18点55分,星期二结构体数组的定义、赋值、使用结构体数组的定义(3种形

8、式) 1.紧跟在结构体类型说明之后进行定义。 struct student char name12; char sex; struct date birthday; float sc4; s3; 2. 结构体类型名可以省略。第9页,共28页,2022年,5月20日,18点55分,星期二3.先说明一个结构体类型,再单独进行变量定义。 struct student char name12; char sex; struct date birthday; float sc4; ; struct student s12=“LiMing”,M,1962,5,10,88,76,85.5,90,“WangM

9、ei”,F,1980,5,3,42,51,23,56;结构体数组的引用 ,s0.sex,s0.birthday.month ,s1.sex,s1.birthday.month第10页,共28页,2022年,5月20日,18点55分,星期二例1.根据下面的定义,能打印出字幕M的语句是( )struct person char name9; int age;struct person class10= “John”,17,”Paul”,19,”Mary”,18,”adam”,16;A. printf(“%cn”,);B. printf(“%cn”,

10、1);C. printf(“%cn”,1);D. printf(“%cn”,0);D第11页,共28页,2022年,5月20日,18点55分,星期二例1.已定义且初始化好结构体数组如上,计算平均成绩,并输出不及格学生的姓名。void main( ) int i;float ave,sum=0;printf(不及格学生有:n); for(i=0;i5;i+) sum+=si.score; if(si.scorenum B. p+ C. (*p).num D. p=&stu.ageD第13页,共28页,2022年,5月20日,18点

11、55分,星期二例2.设有以下定义和语句,以下引用形式不合法的是( )struct s int i1; struct s *i2,*i0;static struct a3=2,&a1,0,4,&a2,&a0,6,0,&a1,*ptr;ptr=a;ptr-i1+ B. *ptr-i2 C. +ptr-i0 D. *ptr-i1例3.设有如下定义: struct REC int num; char flag;char adr20;rec10,*pr=rec; 下面各输入语句中错误的是( ) A. scanf(“%s”,&rec.adr); B.scanf(“%d”,&(*pr).num); C. s

12、canf(“%c”,&(pr-flag); D. scanf(“%c”,&rec1.flag); DA第14页,共28页,2022年,5月20日,18点55分,星期二例4.以下程序的输出结果是( )struct stu int x; int *y;*p; int dt4=10,20,30,40; struct stu a4=50,&da0,60,&dt1,70,&dat2,80,&dt3;main() p=a; printf(“%d,”,+p-x); printf(“%d,”(+p)-x); printf(“%dn”,+(*p-y);A. 10,20,20 B.50,60,21 C.51,60

13、,21 D.60,70,31C第15页,共28页,2022年,5月20日,18点55分,星期二例5.以下程序用来按学生姓名查询其排名和平均成绩。查询可连续进行,直到输入0时结束。请填空。#define NUM 4struct studentint rank; char *name; float score;_ stu=3,”Tom”,89.3,4,”Mary”,78.2,1,”Jack”,95.1, 2,”Jim”,90.6;main() char str10; int i; doscanf(“%s”,str); for(i=0;i=NUM) printf(“Not founen”);whil

14、e(strcmp(str,”0”)!=0);struct studentstrcmp(str,)=0break;第16页,共28页,2022年,5月20日,18点55分,星期二例6.设有3人的姓名和年龄存在结构数组中,以下程序输出3人中年龄居中者的姓名和年龄。请填空。static struct man char name20; int age;person=“li-ming”,18,”wang-hua”,19,”zhang-ping”,20;main()int i,j,max,min;max=min=person0.age; for(i=1;imax) _; else if(

15、personi.agemin) _; for(i=0;i3;i+) if(personi.age!=max _ if(personi.age!=min) printf(“%s %sn”,,personi.age); break; max=personi.agemin=personi.age&第17页,共28页,2022年,5月20日,18点55分,星期二结构体普通变量做函数参数结构体普通变量做实参时,形参也应是一个结构体变量,传递时将实参的值传递给形参,实参和形参占用不同的内存空间。例.以下程序的运行结果是( )struct n int x; char c;void f

16、unc(struct n);main() struct n a=10,x; func(a); printf(“%d,%c”,a.x,a.c);func(struct n b) b.x=20; b.c=y;10,x第18页,共28页,2022年,5月20日,18点55分,星期二结构体指针变量做实参例1.以下程序的输出结果是( ) struct abcchar c; float v;void fun1(struct abc b)b.c=A; b.v=80.7;void fun2(struct abc *b)(*b).c=C; (*b).v=92.5;void main() struct abc a

17、=B,98.5; fun1(a); printf(“%c,%4.1fn”,a.c,a.v); fun2(&a); printf(“%c,%4.1fn”,a.c,a.v);B,98.5C,92.5第19页,共28页,2022年,5月20日,18点55分,星期二例2.有下列程序:struct Sint n;int a20;void f (struct S *p) int i,j,t;for(i=0;in-1;i+ +)for(j=i+1;jn;j+ +)if(p-aip-aj)t=p-ai;p-ai=p-aj;p-aj=t;main( ) int i; struct S s=10,2,3,l,6,

18、8,7,5,4,10,9;f(&s);for(i=0;is.n;i+ +) printf(%d,s.ai);程序运行后的输出结果是( )。 (2007年4月二级C真题)A)1,2,3,4,5,6,7,8,9,10, B)10,9,8,7,6,5,4,3,2,1,C)2,3,1,6,8,7,5,4,10,9, D)10,9,8,7,6,1,2,3,4,5, A第20页,共28页,2022年,5月20日,18点55分,星期二结构体数组做参数结构体数组做实参,形参可以是结构体数组或者结构体指针变量。例1.函数stdave的功能是:计算N个学生M门课的平均分,请填空。#define M 5#defin

19、e N 30struct student int num; char name10; float scoreM; float ave;void stdave(struct student s,int n)int i,j; float sum; for(i=0;in;i+) sum=_; for(j=0;jM;j+) sum=sum+_; _=sum/M; void main() struct student persN; stdave(pers,N);0persi.scorejpersi.ave第21页,共28页,2022年,5月20日,18点55分,星期二例2:有以下程序的输出结果是: st

20、ruct STU char name10;int num;float TotalScore; void f(struct STU *p) struct STU s2=“SunDan”,20044,550, “Penghua”,20045,537,*q=s; +p;+q;*p=*q; main() struct STU s3=“YangSan”,20041,703, “LiSiGuo”,20042,580; f(s); printf(“%s %d %3.0fn”,,s1.num,s1.TotalScore);第22页,共28页,2022年,5月20日,18点55分,星期二用type

21、def定义类型typedef int INTEGER;typedef float REAL;声明一个新的类型名的方法是: (1)先按定义变量的方法写出定义体(如 int i;) (2)将变量名换成新类型名。(3)在最前面加typedef。(4)用新类型名去定义变量。例如: struct abc char c; float v;st;等价于: typedef struct abcchar c; float v;S;等价于: typedef structchar c; float v;S; struct abc s1; 等价于 S s1;第23页,共28页,2022年,5月20日,18点55分,星

22、期二例2.以下对结构体变量st的定义中,不正确的是( ) A. struct char c; int a;st; B.struct char c; int a;TT; struct TT st; C. typedef structchar c;int a;TT; TT st; D.#define TT struct TTchar c;int a;st;例3.设有以下说明语句:Typedef struct int n; char ch8;PER;则下面叙述中正确的是( )A.PER是结构体变量名 B.PER是结构体类型名C.Typedef struct 是结构体类型 D. struct是结构体类型名BB第24页,共28页,2022年,5月20日,18点55分,星期二例3.某学生的记录由学号、8门课程成绩和平均分组成,学号和8门 课程的成绩已在主函数中给出,请编写函数fun,其功能是:求出该学生的平均分,并放入记录的ave成员中。#define N 8typedef structchar num10;double sN;double ave;STREC;void fun(STREC *a) void main() STREC s=“GA005”,85.5,76,69.5,85,91,72,64.5,87.5; int i; fun(&s); printf(“%s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论