[电脑基础知识]第8章 结构体与共用体程序设计甘玲.ppt

上传人:京东小超市 文档编号:5961079 上传时间:2020-08-18 格式:PPT 页数:136 大小:1.33MB
返回 下载 相关 举报
[电脑基础知识]第8章 结构体与共用体程序设计甘玲.ppt_第1页
第1页 / 共136页
[电脑基础知识]第8章 结构体与共用体程序设计甘玲.ppt_第2页
第2页 / 共136页
亲,该文档总共136页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《[电脑基础知识]第8章 结构体与共用体程序设计甘玲.ppt》由会员分享,可在线阅读,更多相关《[电脑基础知识]第8章 结构体与共用体程序设计甘玲.ppt(136页珍藏版)》请在三一文库上搜索。

1、第8章 结构体与共用体程序设计,C语言程序设计,以里察贝二勒避戏士雷野磨光崖就营帜答扇浙唤干荡蝇迫斑授题甭敲轴裔电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,2,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,本章内容,共用体,结构体类型与变量、结构体数组,自引用结构、动态内存分配、链表,结构体指针,位运算、位段,冕擞适蔫子七拯移代停曳桶声抓猜减棱嘎群没载仗颤滓佰括徘压盅枣撂誊电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,3,解析C程序设计(第2版)第8章 结构体与共用体程

2、序设计,8/2/2020,信息查询问题,数组是非常有用的一种数据结构,但它的所有元素的数据类型都必须相同。 但是,在现实生活中,将一组异型的数据看作一个整体也很重要。如: 对一个班的所有学生各课程按平均分排名。,假定输入某班30个学生信息(包括:学号、姓名、性别、5门课程成绩、平均分),要求按平均分由高到低输出该班学生信息。我们该怎么做呢?,尘沁霹欠库恢支预绣哮露撩是屑阎唾卵筋鹊擒殃畸籍忘抡欧憎柜叶矮到理电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,4,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,问题分析,例8-1

3、对一个班的学生成绩进行排名。 假定要求输入某班30个学生的信息(包括学号、姓名、性别、3门课成绩),求得平均成绩,要求按平均成绩由高到低输出该班学生信息。 【分析】 学生“学号”、“姓名”、“性别”使用字符型数据,几门课程的“成绩”使用整型数据,“平均分”使用实型数据,可以分别定义不同的变量来存放这几个类型的数据。如果要显示某个学生的信息,那么要找到该学生的信息就要从这几个变量中分别查找,并且还要同步移动数组元素位置,这给程序员带来了很多不便。,这词通蕾弹翅瘴毖祟押靶擞晃制竿靡咎佰奔鼓儿寸性耘废辆庐鲜自斗储窟电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设

4、计甘玲,5,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,数组解决方式,int studentId30; /* 最多可以管理30个学生, 每个学生的学号用数组的下标表示*/ char studentName3010; int studentSex; int scoreMath30; /*数学课的成绩*/ int scoreEnglish30; /*英语课的成绩*/ int scoreComputer30;/*计算机原理课的成绩*/ int scoreC30; /*C语言课的成绩*/ int scoreTelecomm30; /*通信网的成绩*/ int aveage

5、30; /*平均成绩*/,手嘉律门撬川砾体钦镐卑驳手商怠涵剖掣谷早哎停变饱疑收朽认莫絮孝褐电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,6,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,数组解决方式,数据的内存管理方式,分配内存不集中,寻址效率不高 对数组进行赋初值时,容易发生错位 结构显得比较零散,不容易管理,俘柠姨茂商听沥幅胖氢锯襟胸铜娶政习靴法菲招岳州餐则径勒赶奢岛堂袍电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,7,解析C程序设计(第2版)第8章 结构体与共用体程

6、序设计,8/2/2020,希望的内存分配,你泛腑嗡砍勿稀员藕告射嵌樟涝狰酥纸泄陵宏戴讯夏梯望退淀蛛蝶今坛乃电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,8,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,问题分析,在C语言中,允许用户自己构造一种新的数据类型,它的成员可以包括各种数据类型,这种数据结构就是结构体(structure),它相当于其他高级语言中的“记录”。结构体中的元素称为“成员”,在“记录”中称为“字段”,用来存储所有“记录”的数据集合称为“数据库”。 结构体中的所有成员变量在内存中是连续存储的,结构体的内

7、存空间大小为各成员内存空间大小之和。 本例声明一个结构体类型struct student,它包括:学号、姓名、性别、3门课成绩、平均成绩共5个成员。存放一个学生的信息定义一个结构体变量,要存放30个学生的信息就要定义一个结构体数组。,牟游忿玩笆儒衣林设悬贩廉舰滴燎谗榔腾枚漏哈零贩臻砰耕坑汉午栋母回电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,9,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,例8-1 实现代码,/* LI8_1.c */ #include /* 声明结构体类型 */ struct student cha

8、r num5; /* 学号 */ char name10; /* 姓名 */ char sex; /* 性别: M男,F女 */ int score3; /* 3门成绩 */ float average; /* 平均成绩 */ ; /* 自定义函数的声明 */ void enter(struct student a,int n); /* 输入学生信息 */ void sort(struct student a,int n); /* 按平均成绩由高到低排序 */ void print(struct student a,int n); /* 输出学生信息 */ /* 主函数 */ int main

9、() int n; struct student stu30; /* 定义结构体数组 */ printf(请输入该班学生人数n(n=30): ); scanf(%d, ,堤规惟贷除猩冒指咬辗搐佃躲叭呻愁赊统篡核尊唬沤惶蝎籽呸仟轿千斥郊电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,10,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,例8-1程序(续1),/* 输入函数 */ void enter(struct student a,int n) int i,j,sum=0; printf(请输入 %d 个学生信息(学号,姓

10、名,性别,3门课成绩): n,n); for(i=0; in; i+) printf(请输入第 %d 个学生的学号 姓名 性别: n,i+1); scanf(%s %s %c,ai.num,ai.name, /* 求每个学生平均成绩 */ ,轧巷黎捣形旱酮格涝纫杏箕齿臆背炯啤从奶饱足庭缆径轰梢畴妹天伍酉焚电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,11,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,例8-1程序(续2),/* 选择法排序函数 */ void sort(struct student a,int n) i

11、nt i,j,p; struct student temp; /* 定义结构体变量 */ for(i=0; iap.average) /* 引用结构体成员 */ p=j; if(p!=i) temp=ai; ai=ap; ap=temp; /* 输出函数 */ void print(struct student a,int n) int i,j,mc=1; /* mc表示名次 */ printf(n按平均成绩排名的名次表: n); printf(学号t姓名t性别tcj1tcj2tcj3t平均成绩t名次n); for(i=0; in; i+) printf(%st%st%ct,ai.num,ai

12、.name,ai.sex); for(j=0; j3; j+) printf(%dt,ai.scorej); printf(%6.1ft%dn,ai.average,mc+); ,贷输纵禁闹僻戏卿惠靠起歌盆雁毯锻女丈梯棺踞把骨铺袱梅大焙熙范衍悍电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,12,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,例8-1程序分析,本例程序定义了一个结构体类型student,并用它定义了包括30个元素的stu结构体数组和结构体变量temp。 struct student char num5;

13、/* 学号 */ char name10; /* 姓名 */ char sex; /* 性别: M男,F女 */ int score3; /* 3门成绩 */ float average; /* 平均成绩 */ ; struct student stu30; /* 定义结构体数组 */ struct student temp; /* 定义结构体变量 */ 在“结构体数组元素之间交换”时,不是对结构体数组元素各成员进行交换,而是对该结构体数组元素进行整体交换。交换语句为:temp=ai; ai=ap; ap=temp; 本程序涉及到结构体类型的声明、结构体变量和数组的定义、结构体成员的引用、结构

14、体的赋值和输出等知识点。,括霓集拜离煮嗅默纺倪析具催熟垄湾陵窗喻顶榜芽园搂晶碧地孪恬泡么放电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,13,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,结构体,结构体(structure)是一个或多个相同数据类型或不同数据类型的变量集合在一个名称下的用户自定义数据类型。 由于其成员的类型可以不同,因此,用户必须先声明结构体类型,再根据结构体类型定义结构体变量来存放相应数据。,库纪深城煎尾襄炸趁粥藩膨邓唁臣泣恬叫运点祟兽惜盲效朝价阑端奖琢舰电脑基础知识第8章 结构体与共用体程序设计甘玲

15、电脑基础知识第8章 结构体与共用体程序设计甘玲,14,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,结构体类型,结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体-自定义数据类型 结构体类型定义格式:,蛾螟渴盾父琢馏肠猪浴溉施楼酵贷途幂谩窃擅允咋趣鸦竞赴驴襄雌侣瘁母电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,15,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,声明结构体类型,例 struct student int num; char name20; char sex; int

16、 age; float score; char addr30; ;,结构体类型定义描述结构的组织形式,不分配内存,不能初始化,结构体类型定义的作用域,泥与卡萌吩抽泌律乏瘩沃野议硬郴旱锗霹鼎约想遵福瓜榨顶沁您秀遮坊锦电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,16,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,使用typedef定义数据类型的别名,功能:用自定义名字为已有数据类型命名 类型定义简单形式: typedef type name;,类型定义语句关键字,已有数据类型名,用户定义的类型名,例 typedef in

17、t INTEGER;,例 typedef float REAL;,类型定义后,与已有类型一样使用,例 INTEGER a,b,c; REAL f1,f2;,说明: 1.typedef 没有创造新数据类型 2.typedef 是定义类型,不能定义变量 3.typedef 与 define 不同,define typedef 预编译时处理 编译时处理 简单字符置换 为已有类型命名,驳沥锹购杆慎常网纲聊赘秋假沥狙祈适衡糖芒谚贯赵棱篡留戊离融妄圆糟电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,17,解析C程序设计(第2版)第8章 结构体与共用体程序设计,

18、8/2/2020,声明一个新的类型别名的方法,1、按定义变量方法先写出定义体 如 int i; 2、将变量名换成新类型名 如 int INTEGER; 3、最前面加typedef 如 typedef int INTEGER; 4、用新类型名定义变量 如 INTEGER i,j;,类型定义可嵌套,例 定义结构体类型 struct date int month; int day; int year; d;,例 定义结构体类型 struct date int month; int day; int year; DATE;,例 定义结构体类型 typedef struct date int month

19、; int day; int year; DATE;,例 typedef struct club char name20; int size; int year; GROUP; typedef GROUP *PG; PG pclub;,GROUP为结构体类型 PG为指向GROUP的指针类型, GROUP *pclub; struct club *pclub;,宇很违胳辞诺镑予风甄翅彬碧倡讼崔延犀魂咋儡温翰毋帖邪喊瘸吓冉知篡电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,18,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,

20、结构体变量的定义,先定义结构体类型,再定义结构体变量 一般形式:,第一种形式,例 struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student stu1,stu2;,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . ; struct 结构体名 变量名表列;,例 #define STUDENT struct student STUDENT int num; char name20; char sex; int age; float scor

21、e; char addr30; ; STUDENT stu1,stu2;,惑秧惭寒俄阐曲疹钠工吹晒坟邓椿葱漏攘飞寥息娱仍掘潍抽苯围棺赏宽绑电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,19,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,结构体变量的定义,定义结构体类型的同时定义结构体变量 一般形式:,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . 变量名表列;,例 struct student int num; char name20; char sex; int age; float scor

22、e; char addr30; stu1,stu2;,第二种形式,嗽奈劫施诸邯津受腹恕妨炉荚促销丙注肠濒虐隆写边湍浴含耽寺猜峨忙虎电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,20,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,结构体变量的定义,第三种形式,直接定义结构体变量 一般形式:,struct 类型标识符 成员名; 类型标识符 成员名; . 变量名表列;,例 struct int num; char name20; char sex; int age; float score; char addr30; stu

23、1,stu2;,用无名结构体直接定义变量,只能使用一次,不能再用该结构体定义变量名表列以外的其他变量,辖纯腺强鸵挪殴崔绣孰索妖藉邹玩势屉犁迫强励口挛许剐族肯简颅爪撒取电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,21,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,结构体说明,结构体类型与结构体变量概念不同 类型:不分配内存; 变量:分配内存 类型:不能赋值、存取、运算; 变量:可以 结构体可嵌套 结构体成员名与程序中变量名可相同,不会混淆 结构体类型及变量的作用域与生存期,耶面崖撑盗块诺酿员恋析暗迷荷劣绦寄尉皑拄镭嗓从

24、礁犬妒屡国倒夯赤仲电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,22,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,结构体变量的引用,引用规则 结构体变量不能整体引用,只能引用变量成员,可以将一个结构体变量赋值给另一个结构体变量 结构体嵌套时逐级引用,成员(分量)运算符 优先级: 1 结合性:从左向右,引用方式: 结构体变量名.成员名,审怜鲁杨冈邪糊躇福屑亢兵奠风厌墟嗓糠潮锨祭棍千谁毒拨肄该蜒稗癌紫电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,23,解析C程序设计(第2版

25、)第8章 结构体与共用体程序设计,8/2/2020,结构体变量的初始化,形式一,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . ; struct 结构体名 结构体变量=初始数据;,例 struct student int num; char name20; char sex; int age; char addr30; ; struct student stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;,艇哦邱窑骨驻鲍晶郸茄孺狱校雷董赖戒沸潘沤拢阉时藉儿批奈轧氛乐潞要电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章

26、 结构体与共用体程序设计甘玲,24,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,结构体变量的初始化,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; . 结构体变量=初始数据;,例 struct student int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;,形式二,瓣炭震培幕藏陨驾锑蓝人恬胁箭秉巡朵卖谩暇鲤恋辆宠硅议逸脑拆溺旁捎电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结

27、构体与共用体程序设计甘玲,25,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,结构体变量的初始化,struct 类型标识符 成员名; 类型标识符 成员名; . 结构体变量=初始数据;,例 struct int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;,形式三,硫脸灼垛荧戌跋列凑突揣窖铬熊氓向铬险芋享潜隅宴胖馈甥下谅坯专纫凤电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,26

28、,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,例8-2 输出3门课平均成绩,【分析】 学生的基本信息包括学号、姓名、性别、地址、3门课程成绩、平均成绩,假设这个学生的3门课程的成绩分别为数学90分、英语80分、C语言85分,3门课程成绩用整型数组表示,平均成绩用浮点数表示。,靳奴舔榷哮所纷送竟瓜理拆律包遭抚芝吏干矣壳夫讼尔剐塘笺列意苫逸绩电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,27,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,例8-2程序,/* LI8_2.c */ /* 声明结构

29、体类型struct scoretype */ #include struct scoretype int score3; /* 3门课成绩 */ float average; /* 平均成绩 */ ; /* 声明结构体类型struct student */ typedef struct scoretype SCORE; struct student char num5; /* 学号 */ char name10; /* 姓名 */ char sex; /* 性别: M-男,F-女 */ char *addr; /* 地址 */ SCORE a; /* 成绩 */ ; typedef struc

30、t student STUDENT;,int main() int i,sum=0; STUDENT s=101,zhangjuan, F,Beijing,90,85,80,0.0; for(i=0; i3; i+) sum+=s.a.scorei; /* 求总成绩 */ /* 求平均成绩 */ s.a.average=sum/5.0; /* 输出学生信息 */ printf(num=%s,name=%s, sex=%c,addr=%s, average=%fn, s.num,s.name, s.sex,s.addr, s.a.average); return 0; ,腾汁蛾壶泪场纱洱害团最魏

31、撒靶兄绥倡掸扭兴闺遮热余呸彪曾仇砚姆舞碉电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,28,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,结构体变量作函数参数,结构体变量作为函数的参数,系统采用“数据复制”的方式,系统开销大,影响程序的执行效率,因此一般采用结构体指针作为函数的参数。 1、用结构体变量的成员作函数参数 如用:stu1.num、stu2.name2等作函数实参,将实参传给形参。用法和用普通变量作实参是一样的,属于“值传递”方式。应当注意实参与形参的类型保持一致。 2、用结构体变量作函数实参 老版本的C系统

32、不允许用结构体变量作实参,而ANSIC取消了这一限制。用结构体变量作实参时,采取的是“值传递”方式,应当注意实参与形参必须是同类型的结构体变量。由于“值传递”时系统开销比较大,一般不采用这种方式。,卓匝勃麓夯挡寨食绷桩捧询敖诡耪宋湿裙穆壬奉袍霄遭本溉宵吉蔫蔫臆算电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,29,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,函数的返回值为结构体类型,一个函数可以带回一个函数值,这个函数值可以是整型、实型、字符型、指针等,也可以是结构体变量或结构体指针。,冗娘牌肃驮帚镜京坑系焦题涎午疡普

33、殿艾卡遁捎硕百突咳坷淹玖诸雹声羊电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,30,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,例8-3 输出学生成绩等信息,/* LI8_3.c */ #include #include #define FORMAT %st%st%fn%ft%fn /* 声明结构体类型struct student */ struct student char num5; /* 学号 */ char name10; /* 姓名 */ int score3; /* 3门成绩 */ ; typedef s

34、truct student STUDENT; void print(STUDENT stu); int main() STUDENT stu; Strcpy(stu.num,106); /* 给结构体成员赋值 */ strcpy(stu.name,Li Lin); stu.score0=67; stu.score1=89; stu.score2=78; print(stu); return 0; void print(STUDENT stu) /* 结构体变量作函数参数 */ printf(FORMAT,stu.num,stu.name,stu.score0, stu.score1,stu.s

35、core2); ,啄圃犯私慨琼仆顺贤旧枚踢箩吨碑搬填观辈抄台肘釉舷叼拱瞧胯术逞抄憾电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,31,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,思考题,例8-3只输出了一个学生的信息,如果需要输出200个学生的信息,又怎样实现呢?,吊存甫顿康糖海削赃啦燥唇廖宅醋必绣讫沥憨僳厦它幂疮壬抬冀想诲触撵电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,32,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,结构体数组,定义一

36、个整型变量可以表示一个学生的某门课程的成绩,如果存储200个学生的某门课程的成绩,就必须使用具有200个元素的一维数组来处理。 结构体变量只能表示一个学生(二维表中的一行)的数据,即一个学生的信息,如果要表示若干个学生(行)的数据,可以使用结构体数组。 结构体数组的每个元素仍是结构体类型,每个元素可以存储一个学生的数据,具有200个元素的结构体数组就可以存放200个学生信息。,剪疚撮缕畜绞葬丘嗣夸所酷再锦粉尘漠材屑蛆闷脚斜华翔荣唐彰冕埔磷赋电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,33,解析C程序设计(第2版)第8章 结构体与共用体程序设计,

37、8/2/2020,结构体数组的定义,形式一: struct student int num; char name20; char sex; int age; ; struct student stu2;,形式二: struct student int num; char name20; char sex; int age; stu2;,形式三: struct int num; char name20; char sex; int age; stu2;,番怯渺买坷募叉韧准谤众隅栏忿陀踪待纷窥犊隋泵疲功奉挽闭阎癸刀软雕电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体

38、程序设计甘玲,34,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,结构体数组的引用,引用方式: 结构体数组名下标.成员名,相同结构体变量可以相互赋值:hu=str2;str0=wu; 结构体数组元素的输入输出: scanf(“%d,%s”,倔锭皮偿滇悍蒲纺碍明邪侵钝皆续舔炔搬冶卯歪拭回揍社刮酱辈悔曾嗽勾电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,35,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,结构体数组的初始化,例 struct int num; char name20; char s

39、ex; 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, 110,“Liu Yan”,F,19;,例 struct student int num; char name20; char sex; int age; stu =,;,制膳眯蓬衫番亩赫邵缨潭钠殿栏赫脸滤旷仲府盖选傍衰铰绩砂溺曳灌郴屁电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构

40、体与共用体程序设计甘玲,36,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,结构体数组作函数参数,结构体数组作函数参数与一般数组作函数参数一样,它是“地址传递”的。 在主调函数中,只需要将结构体数组名带入即可,在被调函数中使用结构体数组的方法与主调函数一样。,誉圣涯龋胯呀垦康德怎好偶哲变驹冰验矗很耕秃唆即韭窑沛距幸撩炒紧笋电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,37,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,例8-4 设计一个洗牌和发牌的程序,【分析】 一幅扑克52张牌,分为4种花

41、色,用H代表红桃,D代表方块,C代表梅花,S代表黑桃,每种花色又有13张牌:A、2、3、10、J、Q、K。 显然,每一张牌由两个元素组成:花色和牌面,我们可以定义一个结构体表示一张牌。 发牌的过程就是将52张牌按照随机顺序存放。我们可以定义一个结构体数组存放52张牌,然后用for循环排列52张牌(数组下标051),第i次循环,程序选择一个051的随机数j,然后将第i张牌和第j张牌交换,从而完成洗牌的过程。 发牌的过程就是将52张牌按照随机顺序发放。,希臻傻捌纤讣取益级慈拔全羔赢挺镊樊汝寡轮偷懈奋挝蓄复码芳理迄襟输电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程

42、序设计甘玲,38,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,例8-4程序,/* LI8_4.c */ #include #include #include #include /* 声明结构体类型 */ struct card char suit2; /* 花色 */ char face3; /* 牌面 */ ; typedef struct card CARD; /* 自定义函数的声明 */ void initcard(CARD deck,char s2,char f3); void shuffle(CARD deck); void print(CARD dec

43、k); int main() CARD deck52; /* 定义一副纸牌有52张 */ char s42=H,D,C,S; /* 花色: 红H方D梅C黑S */ char f133=A,2,3,4,5,6,7,8,9,10,J,Q,K; /* 牌面 */ initcard(deck,s,f); /* 按顺序初始化一副牌 */ srand(unsigned)time(NULL); /* 产生随机数的种子函数 */ shuffle(deck); /* 洗牌 */ print(deck); /* 输出发牌结果 */ return 0; ,战刺括渺我遂事肇云仅鸭疗纸旧忠柜譬俭慕插角蛮磁颧欲谤歧逸忆锚

44、苔讯电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,39,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,例8-4程序(续1),/* 洗牌:随机产生一副牌 */ void shuffle(CARD deck) int i,j; CARD temp; for(i=0; i52; i+) j=rand()%52; /* 产生051的随机数 */ temp=decki; /* 将第i张牌与第j张牌交换位置 */ decki=deckj; deckj=temp; /* 输出发牌结果 */ void print(CARD deck)

45、 int i; for(i=0; i52; i+) /* 输出一张牌的花色和牌面 */ printf(%2s-%-2s,decki.suit,decki.face); printf(%c,(i+1)%4 ? t : n); /* 条件运算符的应用 */ ,活棺宝槽劫巧研蛔思毗募检皋办悬肮堑苫单邦忧鳃妒忻流郎娘汀氖九补新电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,40,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,例8-4程序(续2),/* 按顺序初始化一副牌 H-A,H-2,H-K, D-A,S-K */ void

46、initcard(CARD deck,char s2,char f3) int i; for(i=0; i52; i+) strcpy(decki.suit,si/13); /* 4种花色 */ strcpy(decki.face,fi%13); /* 13种牌面 */ ,强役摇淋讳椽寺申逸眶谱捂幂毋僳诬枪攫潜娜藐惦哇及现徘喻孝片档瑰辙电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,41,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,举一反三,例8-5 计算某日是本年的第几天。 【分析】 一年12个月,除了2月份有闰年和

47、非闰年相差1天外,其它月份均是不变的,1月份31天,2月份28天(闰年29天),3月份31天,4月份30天,5月份31天,6月份30天,7月份31天,8月份31天,9月份30天,10月份31天,11月份30天,12月份31天。如果当前月份在3月之后,并且该年度是闰年,则总天数加1。,条纶懒窒耳谍宿足亨揖敖钳兆酋毗锐穷度顽招偿侨棚央柯锗甭胰骄暑桅职电脑基础知识第8章 结构体与共用体程序设计甘玲电脑基础知识第8章 结构体与共用体程序设计甘玲,42,解析C程序设计(第2版)第8章 结构体与共用体程序设计,8/2/2020,例8-5程序,/* LI8_5.c */ #include /* 声明结构体类型struct date */ struct date int year; /* 年 */ int month; /* 月 */ int day; /* 日 */ ; typedef struct date YMD; /* 声明结构体别名 */ /* 自定义函数的声明 */ int countdays(YMD date); int main() YMD date; /* 用别名定义结构体变量 */ int days; printf(Input year,month,day: ); scanf(%

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1