c语言基础结构实用教案

上传人:莉**** 文档编号:78579206 上传时间:2022-04-22 格式:PPT 页数:38 大小:2.25MB
收藏 版权申诉 举报 下载
c语言基础结构实用教案_第1页
第1页 / 共38页
c语言基础结构实用教案_第2页
第2页 / 共38页
c语言基础结构实用教案_第3页
第3页 / 共38页
资源描述:

《c语言基础结构实用教案》由会员分享,可在线阅读,更多相关《c语言基础结构实用教案(38页珍藏版)》请在装配图网上搜索。

1、目标(mbio) 理解为什么使用结构 定义(dngy)结构 声明结构变量 访问结构成员 掌握结构作为函数参数的用法第1页/共37页第一页,共38页。本章(bn zhn)结构结构(jigu)简介结构(jigu)体结构数组使用结构结构作为函数参数实现堆栈第2页/共37页第二页,共38页。结构(jigu)简介存储一个班级(bnj)中 5 名学员的信息(学号、姓名、性别和成绩)问题(wnt):I. 使用数组MaryJohnPeterRoseKateFMFMF01020304058978.56797.564解决方案:scorenumsexname不能建立数组间的关系II. 使用多维数组MaryJohnP

2、eterRoseKateFMFMF01020304058978.56797.564C 语言不允许一个数组包含多种数据类型III. 使用结构numnamesexscoreC 语言引入了称为结构的数据存储方式“结构” 是一种构造数据类型,它是由若干数据项组合而成的复杂数据对象,这些数据项称为结构的成员。第3页/共37页第三页,共38页。 定义(dngy)结构2-1struct structurenamedatatype variable1;datatype variable2;.;结构(jigu)成员;结构(jigu)名structstudentint num;char name20;char s

3、ex;定义结构float score;C 语言中的有效数据类型第4页/共37页第四页,共38页。定义(dngy)结构2-2struct student int num; char name20; char sex; float score;numnamesexstudent 结构定义(dngy)并不预留内存 结构定义放置在程序的开始部分(b fen),位于头文件声明之后 score 结构定义仅描述了一个结构的形式。如果要在程序里使用结构,需要声明结构变量。第5页/共37页第五页,共38页。声明结构(jigu)变量声明结构(jigu)变量struct student int num; char

4、name20; char sex; float score;struct student student1,student2;I.先定义结构(jigu),再声明结构(jigu)变量struct student int num; char name20; char sex; float score;student1,student2;II.在定义结构类型的同时声明结构变量struct int num; char name20; char sex; float score;student1,student2;III. 直接声明结构变量声明一个类型为 student 结构的变量,将会为该变量分配内存

5、,大小是大于或等于其所有成员变量的大小之和。 第6页/共37页第六页,共38页。struct date int month; int day; int year;嵌套结构(jigu)struct int num; char name20; char sex; struct date birthday; float score;student1,student2;表示结构变量成员的一般形式(xngsh)是:结构变量名.成员名例如:student1.num、student2.sex、student1.birthday.month第7页/共37页第七页,共38页。内存student3struct s

6、tudent student3=3,Yao Ming ,M,90.5; 结构(jigu)变量初始化3Yao MingM赋值的顺序应与成员声明时的顺序一样;允许初始化语句(yj)中的值的数目比结构成员数目少。student3.numstudent3.namestudent3.sex90.5student3.score第8页/共37页第八页,共38页。student1student1.num=1;student1.name=Zhang Zi Liang;student1.sex=M;printf(请输入(shr)成绩:n);scanf(%f,&student1.score);结构(jigu)变量赋

7、值1Zhang Zi LiangMq 用输入(shr)语句或赋值语句来给结构变量的各个成员赋值7878student2 = student1; student21Zhang Zi LiangM78第9页/共37页第九页,共38页。说明结构体类型与结构体变量(binling)概念不同类型:不分配内存; 变量(binling):分配内存类型:不能赋值、存取、运算; 变量(binling):可以结构体可嵌套结构体成员名与程序中变量(binling)名可相同,不会混淆例 struct date int month; int day; int year; ; struct student int num

8、; char name20; struct date birthday; stu;numnamebirthdaymonthdayyear例 struct student int num; char name20; struct date int month; int day; int year; birthday; stu;numnamebirthdaymonthdayyear第10页/共37页第十页,共38页。 引用规则 结构体变量不能整体(zhngt)引用,只能引用变量成员可以(ky)将一个结构体变量赋值给另一个结构体变量结构体嵌套时逐级引用成员(chngyun)(分量)运算符优先级: 1

9、结合性:从左向右引用方式: 结构体变量名.成员名例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score; stu1.age+;例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; printf(“%d,%s,%c,%d,%f,%

10、sn”,stu1); ()stu1=101,“Wan Lin”,M,19,87.5,“DaLian”; ()例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; stu2=stu1; ( )例 struct student int num; char name20; struct date int month; int day; int year; birthday; stu1,stu2;numnamebirthdaymonthdayyearstu1.birt

11、hday.month=12;例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; if(stu1=stu2). ()结构体变量的引用 第11页/共37页第十一页,共38页。 形式(xngsh)一:struct 结构体名 类型(lixng)标识符 成员名; 类型(lixng)标识符 成员名; .;struct 结构体名 结构体变量=初始数据;例 struct student int num; char name20; char sex; int age; cha

12、r addr30; ; struct student stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;结构(jigu)体变量的初始化 第12页/共37页第十二页,共38页。形式(xngsh)二:struct 结构体名 类型标识符 成员名; 类型标识符 成员名; .结构体变量=初始(ch sh)数据;例 struct student int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”; 第13页/共37页第十三

13、页,共38页。形式(xngsh)三:struct 类型标识符 成员(chngyun)名; 类型标识符 成员(chngyun)名; .结构体变量=初始数据;例 struct int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”; 第14页/共37页第十四页,共38页。问题描述(mio sh):根据学员的成绩,输出不及格学员的详细信息。 使用(shyng)结构示例#includestruct studentint num;/学号char *name;/姓名

14、char sex;/性别float score;/成绩;void main() static struct student stu1=1,李亚鹏,M,61; static struct student stu2=2,周晶晶,F,92.5; static struct student stu3=3,姚光明,M,59; printf(不及格学员(xuyun)的名单如下:n); if(stu1.score60) printf(%dt%st%ct%5.2fn,stu1.num,stu1.name,stu1.sex,stu1.score); if(stu2.score60) printf(%dt%st%

15、ct%5.2fn,stu2.num,stu2.name,stu2.sex,stu2.score); if(stu3.score=60 & stu2.score=60 & stu3.score=60) printf(没有不及格的学员(xuyun)。n);不及格学员的名单如下:3 姚光明 M 59.00stu11李亚鹏M78stu22周晶晶F92stu33姚光明M59第15页/共37页第十五页,共38页。struct stu *pstu;(*pstu).num 或者(huzh): pstu-num结构指针(zhzhn)变量q 一个指针当用来指向一个结构时, 称之为结构指针变量。q 结构指针变量中的

16、值是所指向的结构变量的首地址。q 结构指针变量声明的一般形式为:q struct 结构名 *结构指针变量名q 通过结构指针可以(ky)访问该结构变量的成员,一般形式为:q (*结构指针变量).成员名 或者q 结构指针变量-成员名 #includestruct studentint num;char *name;char sex;float score;stu=1,张宾,F,55,*pstu;void main() pstu=&stu; printf(学号:%d 姓名:%sn,stu.num,stu.name); printf(性别:%c 成绩:%5.2fnn,stu.sex,stu.score

17、); printf(学号:%d 姓名:%sn,(*pstu).num,(*pstu).name); printf(性别:%c 成绩:%5.2fnn,(*pstu).sex,(*pstu).score); printf(学号:%d 姓名:%sn,pstu-num,pstu-name); printf(“性别:%c 成绩:%5.2fnn,pstu-sex,pstu-score);学号:1 姓名:张宾性别:F 成绩:55.00学号:1 姓名:张宾性别:F 成绩:55.00学号:1 姓名:张宾性别:F 成绩:55.00Press any key to continue第16页/共37页第十六页,共38

18、页。 指向结构( jigu)体变量的指针 定义形式:struct 结构( jigu)体名 *结构( jigu)体指针名; 例 struct student *p;使用结构(jigu)体指针变量引用成员形式存放结构(jigu)体变量在内存的起始地址numnamesexagestupstruct student int num; char name20; char sex; int age; stu;struct student *p=&stu;(*结构体指针名).成员名结构体指针名-成员名结构体变量名.成员名指向运算符优先级: 1结合方向:从左向右例 指向结构体的指针变量main() struc

19、t student long int num; char name20; char sex; float score; stu_1,*p; p=&stu_1; stu_1.num=89757; strcpy(stu_1.name,Li Lin); p-sex=M; p-score=89.5; printf(nNo:%ldnname:%snsex:%cnscore:%fn, (*p).num,p-name,stu_1.sex,p-score);例 int n; int *p=&n; *p=10; n=10struct student stu1;struct student *p=&stu1;st

20、u1.num=101; (*p).num=101结构体和指针第17页/共37页第十七页,共38页。 指向结构( jigu)体数组的指针struct student int num; char name20; char sex; int age;stu3=10101,Li Lin,M,18, 10102,Zhang Fun,M,19, 10104,Wang Min,F,20;main() struct student *p; for(p=stu;pnum,p-name,p-sex,p-age);numnamesexagestu0pstu1stu2p+1第18页/共37页第十八页,共38页。str

21、uct student int num; char* name; char sex; float score;stu30;结构(jigu)数组q 元素为结构类型的数组称为结构数组。q 在实际应用中,经常用结构数组来表示具有(jyu)相同数据结构的一个群体。例如一个班的学员档案,一个公司的职工档案等。定义(dngy)了一个结构数组stu1,共有30个元素,stu0stu29。每个数组元素都具有struct student的结构形式。第19页/共37页第十九页,共38页。结构( jigu)体数组的定义三种形式:形式(xngsh)一: struct student int num; char nam

22、e20; char sex; int age; ;struct student stu2;形式(xngsh)二: struct student int num; char name20; char sex; int age; stu2;形式三: struct int num; char name20; char sex; int age; stu2;结构体数组 第20页/共37页第二十页,共38页。例 struct int num; char name20; char sex; int age; stu =,;顺序(shnx)初始化: struct student int num; char

23、name20; char sex; int age; ;struct student stu =100,“Wang Lin”,M,20, 101,“Li Gang”,M,19, 110,“Liu Yan”,F,19; 例 struct student int num; char name20; char sex; int age; stu =,;分行初始化: struct student int num; char name20; char sex; int age; ;struct student stu =100,“Wang Lin”,M,20, 101,“Li Gang”,M,19, 1

24、10,“Liu Yan”,F,19; 全部初始化时维数可省结构(jigu)体数组引用引用(ynyng)方式: 结构体数组名下标.成员名 struct student int num; char name20; char sex; int age; str3;stu1.age+;strcpy(stu0.name,”ZhaoDa”);结构体数组初始化 第21页/共37页第二十一页,共38页。例 统计(tngj)候选人选票struct person char name20; int count;leader3=“Li”,0,“Zhang”,0,”Wang“,0; main() int i,j; ch

25、ar leader_name20; for(i=1;i=10;i+) scanf(%s,leader_name); for(j=0;j3;j+)if(strcmp(leader_name,leaderj.name)=0) leaderj.count+; for(i=0;i3;i+) printf(%5s:%dn,leaderi.name,leaderi.count);namecountLiZhangWang000第22页/共37页第二十二页,共38页。问题描述:求学员的总成绩和平均成绩,并统计(tngj)不及格人数。 结构(jigu)指针变量struct studentint num;char

26、 *name;char sex;float score;stuN= 1,李芳,F,45,2,于红,F,62.5,3,何万山,M,92.5,4,程亚丽,M,87,5,王明(wng mng),M,58;void main()int i,count=0; float ave,sum=0;for(i=0;iN;i+)sum+=stui.score;if(stui.score60)count+;printf(总分:%7.2fn,sum);ave=sum/5;printf(平均分:%5.2fn,ave);printf(不及格人数为:%dn,count);总分: 345.00平均分:69.00不及格人数为:

27、2Press any key to continue第23页/共37页第二十三页,共38页。结构(jigu)作为函数参数q可以将结构作为参数传递(chund)给函数,也可以定义返回结构值的函数。q结构作为函数参数有三种不同方法:q将结构成员的值传递(chund)给函数处理。q将整个结构作为参数值传递(chund)给函数。q将结构指针变量做函数的参数。把结构作为整体来处理,但作用方 式 和 效 果(xiogu)不同。第24页/共37页第二十四页,共38页。结构(jigu)成员作为函数参数struct film char name25; /电影名 char director25; /导演 int

28、duration; /片长;void display (char *, char *, int *);void main() struct film f1; printf(nt 请输入电影的详细信息); printf(nn 请输入影片(yngpin)名:); gets(f1.name); fflush(stdin); printf(n 请输入导演姓名: ); gets(f1.director); fflush(stdin); printf(n 请输入电影片(yngpin)长(分钟): ); scanf(%d,&f1.duration); display(f1.name,f1.director,

29、&f1.duration);演示(ynsh):示例4void display(char *n, char *d, int *m)printf(nt 电影的详细信息n);printf(n 片名: %s,n);printf(n 导演: %s,d);printf(n 片长: %dn,*m);前两个参数为字符串,所以不使用“&”第25页/共37页第二十五页,共38页。问题描述: 求已知两个复数(fsh)的和。分析: 两个复数(fsh)a+ib和c+id的和为: x+iy 其中:x=a+c y=b+d#includestruct complex double re;/实部 double im;/虚部;s

30、truct complex add(struct complex,struct complex);void main() struct complex x=6.5,8.9,y=7.1,9.4; struct complex z; z=add(x,y); printf(和为:%5.2lf+i%5.2lfn,z.re,z.im);整个结构(jigu)作为参数 演示(ynsh):示例5struct complex add(struct complex a,struct complex b)struct complex c;c.re=a.re+b.re;c.im=a.im+b.im;return c;

31、传递结构时不使用 “&”,所以实际上是传值调用,即,将结构变量的每个成员值逐个传送。第26页/共37页第二十六页,共38页。结构指针(zhzhn)做为参数 问题描述(mio sh): 求已知两个复数的和。分析: 两个复数a+ib和c+id的和为: x+iy 其中:x=a+c y=b+dstruct student int num; char *name; char sex; float score;stuN=1,李芳,F,45,2,于红,F,62.5,3,何万山,M,92.5,4,程亚丽,M,87,5,王明(wng mng),M,58;void ave(struct student *ps);

32、void main() struct student *ps; ps=stu; ave(ps);演示:示例6void ave(struct student *ps) int i,count=0; float ave,sum=0; for(i=0;iscore; if(ps-scoreelements-top=x; s-top+;入栈操作void pop(struct Mystack *s)/*将栈顶元素删除*/ s-top-;出栈操作int IsEmpty(struct Mystack *s)if(s-top=0)return 1;elsereturn 0;判断栈是否为空第30页/共37页第三

33、十页,共38页。实现(shxin)堆栈 5-4void Clearstack(struct Mystack *ss-top=0;清空(qn kn)栈void Displaystack(struct Mystack *s)int i;for(i=0;itop;i+) printf(%c,s-elementi);显示(xinsh)从栈底到栈顶所有的元素第31页/共37页第三十一页,共38页。实现(shxin)堆栈 5-5void main() struct Mystack st; char ch; int i; for(i=0;i成员名。 数组元素的类型为结构的数组称为结构数组。 结构作为函数参数

34、有三种不同的方式:结构成员的值传递(chund)给函数参数、整个结构作为参数传递(chund)、结构指针变量做函数的参数。 第36页/共37页第三十六页,共38页。感谢您的欣赏(xnshng)!第37页/共37页第三十七页,共38页。NoImage内容(nirng)总结目标。第2页/共37页。第5页/共37页。student1.sex=M。类型:不能赋值、存取、运算。strcpy(stu0.name,”ZhaoDa”)。sum=sum+ps-score。输出缓冲区(堆栈)中的所有字符(z f),即有效字符(z f):while(*s)。输出缓冲区(堆栈)中的所有字符(z f),即有效字符(z f):putchar(*s+)。实现堆栈 5-5。第36页/共37页。感谢您的欣赏第三十八页,共38页。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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