




已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第12章 结构体与共用体,C语言程序设计,内容提要,结构体类型与结构体变量 结构体数组 结构体数组做函数参数 结构体指针 结构体指针做函数参数 共用体,问题的提出,对数据类型的回顾: int a; float b; char c; 以上三种类型是系统已经定义好的数据类型,其特性不能被用户改变。,问题: 在程序中如何表示以下表格中的信息?,例如 1: struct student int num; char name20; char sex; int age; float score; char addr30; ;, 结构体类型的声明 struct 结构体名 成员表列 ; 成员的声明: 类型名 成员名;, 结构体类型的引入,例如 2: struct birthday int month; int day; int year; ;, 结构体类型的声明 struct 结构体名 成员表列 ; 成员的声明: 类型名 成员名;,定义结构体类型变量的方法, 先声明结构体类型再定义变量名 例如: struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student student1;,变量定义方法的回顾: int a; a=3; float b; b=3.5; char c; c=a;,student1:, 在声明类型的同时定义变量 一般形式: struct 结构体名 成员表列 变量名表列; 例如: struct birthday int month; int day; int year; tom;, 直接定义结构体类型变量 一般形式: struct 成员表列 变量名表列; 例如: struct int month; int day; int year; tom ,peter;,4. 结构体类型的成员也可以是一个结构体变量。 例如: struct date int month; int day; int year; ;,struct student int num; char name20; char sex; int age; struct date birthday; char addr30; ; struct student student1;,结构体变量的初始化,#include struct date int month; int day; int year; ; int main(void) struct student char name20; char sex; struct date birthday; a = “Mary”, F, 10, 23, 1985; printf(“name: %snsex: %cnbirthday:%d %d %dn“, , a.sex, a.birthday.month, a.birthday.day, a.birthday.year); return 0; ,回顾:对整型变量的初始化 int a=3;,Mary,F,birthday,10,23,1985,从键盘输入给结构体变量赋值,#include struct date int month; int day; int year; ; int main(void) struct student char name20; char sex; struct date birthday; a; printf(“input: “); scanf(“%s%c%d%d%d“, , ,结构体变量的引用,引用结构体变量需遵守的规则: 不能将一个结构体变量作为一个整体输入输出,只能对结 构体变量中的各个成员分别进行输入和输出。引用结构体 变量中成员的方式: 结构体变量名 . 成员名 例如: printf(“name: %snsex: %cnbirthday:%d %d %dn”, a); 错! a.sex=m; 正确! a.birthday.year=1988;, 如果成员本身又属于一个结构体类型,则要用若干个成员 运算符,一级一级地找到最低一级的成员。只能对最低级 的成员进行赋值或存取以及运算。 例如: a.birthday.year=1980 a.birthday.day=23 a.birthday.month=10 对结构体变量的成员可以像普通变量一样进行各种运算。,例如: student2.score=student1.score; sum=student1.score+student2.score; student1.age+; +student2.age;,课堂练习: 1设有以下说明语句: struct ex int x; float y; char z; example; 则下面的叙述中不正确的是( )。 A) struct是结构体类型的关键字 B) example是结构体类型名 C) x, y, z都是结构体成员名 D) struct ex是结构体类型名,结构体数组, 结构体数组的定义 一组结构体变量,用法与其他类型的数组相同,也是通过元素下标访问元素。 定义结构体数组,struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student stu2;,方 法 1, 方法2 struct student int num; char name20; char sex; int age; float score; char addr30; stu2;, 方法3 struct int num; char name20; char sex; int age; float score; char addr30; stu2;, 结构体数组的初始化 方法(1): struct student int num; char name20; char sex; int age; float score; char addr30; stu2=10101, “Li Lin”, M,18,87.5, “Beijing Road” , 10102, “Zhang Fun”, M,19,99, “130 Shanghai Road” ;,方法(2): struct student int num; char name20; char sex; int age; float score; char addr30; stu =10101, “Li Lin”, M,18,87.5, “Beijing Road” , 10102, “Zhang Fun”, M,19,99, “130 Shanghai Road” ;,方法(3): struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student stu=10101, “Li Lin”, M,18,87.5, “Beijing Road” , 10102, “Zhang Fun”, M,19,99, “130 Shanghai Road” ;,4. 结构体数组应用举例,编写一程序P415.C实现以下功能: 设有10名歌手(编号为1-10)参加歌咏比赛,另有6名评委打分,每位歌手的得分从键盘输入:先提示“Please input singers score: ”,再依次输入第1个歌手的6位评委打分(10分制,分数为整型,分数之间使用空格分隔),第2个歌手的6位评委打分.以此类推。计算出每位歌手的最终得分(扣除一个最高分和一个最低分后的平均分,最终得分保留2位小数),最后按最终得分由高到低的顺序输出每位歌手的编号及最终得分。 注意:变量数据类型的选择应适当,在保证满足设计要求精度的情况下,养成不浪费内存空间和计算时间的好习惯。,#include #define N 10 struct person int number; int score6; float finalScore; ; int main(void) int i, j, sum, max, min; struct person tmp, singerN; printf(“Please input:“); for (i = 0; i N; i+) singeri.number = i + 1; for (j = 0; j 6; j+) scanf(“%d“, ,设有10名歌手(编号为1-10)参加歌咏比赛,另有6名评委打分,每位歌手的得分从键盘输入:先提示“Please input:”,再依次输入第1个歌手的6位评委打分(10分制,分数为整型,分数之间使用空格分隔),第2个歌手的6位评委打分.以此类推。,for (i = 0; i max) max = singeri.scorej; else if (singeri.scorej min) min = singeri.scorej; sum = sum + singeri.scorej; sum = sum - min - max; singeri.finalScore = (float)sum / 4; ,计算出每位歌手的最终得分(扣除一个最高分和一个最低分后的平均分,最终得分保留2位小数),for (j = 1; j = N - 1; j+) for (i = 1; i =N-j; i+) if (singeri-1.finalScore singeri.finalScore) tmp = singeri-1; singeri-1 = singeri; singeri = tmp; printf(“scores:n“); for (i = 0; i N; i+) printf(“NO.%d:%.2fn“, singeri.number, singeri.finalScore); return 0; ,最后按最终得分由高到低的顺序输出每位歌手的编号及最终得分。,5. 结构体数组做函数参数 结构体数组做函数参数,与其它类型的数组做函数参数类似,传递的是数组的首地址,实参数组与形参数组共享一段内存。,结构体数组做函数参数应用举例,根据要求编写程序P763.C的指定部分: 程序P763.C已编写部分代码,请根据程序中的要求完善程序注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。 程序的功能是:有五个学生,每个学生的数据包括学号、姓名(最长19字节)、三门课的成绩,从键盘输入五个学生的数据,并计算每个学生的平均成绩,最后显示最高平均分的学生的信息(包括学号,姓名,三门课的成绩,平均分数)。要求用结构体编程,变量数据类型的选择应适当,在保证满足设计要求精度的情况下,养成不浪费内存空间和计算时间的好习惯。,#include struct student int num; char name20; float score1; float score2; float score3; float aver; ; void average(struct student stuScore , int n); int maxAver(struct student stuScore , int n);,有五个学生,每个学生的数据包括学号、姓名(最长19字节)、三门课的成绩,从键盘输入五个学生的数据,int main(void) int high; struct student myClass5; int i; printf(“Please input students info:Num Name score1 score2 score3n“); for (i=0; i5; i+) printf(“%d:“, i + 1); scanf(“%d %s %f %f %f“, ,有五个学生,每个学生的数据包括学号、姓名(最长19字节)、三门课的成绩,从键盘输入五个学生的数据,average(myClass, 5); high = maxAver(myClass, 5); printf(“nThe Highest is %s(%d)nscore1=%.2f score2=%.2f score3=%.2f aver=%.2fn“, myC, myClasshigh.num, myClasshigh.score1, myClasshigh.score2, myClasshigh.score3, myClasshigh.aver); return 0; ,计算每个学生的平均成绩,最后显示最高平均分的学生的信息(包括学号,姓名,三门课的成绩,平均分数),void average(struct student stuScore , int n) int i; float sum; for (i=0; in; i+) sum = stuScorei.score1 + stuScorei.score2 + stuScorei.score3; stuScorei.aver = sum / 3; ,函数的功能:求每位同学的平均分,返回,int maxAver(struct student stuScore , int n) int i, maxi; float max; max = stuScore0.aver; maxi = 0; for (i=1; i max) max = stuScorei.aver; maxi = i; return maxi; ,函数average的功能:求最高平均分的同学所在元素的下标,返回,#include struct student long num; char name20; char sex; float score; ; int main(void) struct student stu_1; struct student *p; p = ,指向结构体类型数据的指针,例 指向结构体变量的指针的应用,说明: 在C中,引用一个结构体变量的成员,有三种等价的形式: 结构体变量名 . 成员名 (*p).成员名 p - 成员名,结构体指针做函数参数,根据要求编写程序P765.C的指定部分: 程序的功能是:有五个学生,每个学生的数据包括学号、姓名(最长19字节)、三门课的成绩,从键盘输入五个学生的数据,计算每个学生的平均成绩并按平均成绩由高到低排序,并将排序结果显示。要求用结构体编程,变量数据类型的选择应适当,在保证满足设计要求精度的情况下,养成不浪费内存空间和计算时间的好习惯。,#include #include typedef struct student int num; char name20; int math; int english; int computer; float average; STUDENT; void average(STUDENT *stuScore, int n); void sort(STUDENT *stuScore, int n);,程序的功能是:有五个学生,每个学生的数据包括学号、姓名(最长19字节)、三门课的成绩,从键盘输入五个学生的数据,int main(void) STUDENT myclass5, *pStu = myclass; int i; const int N = 5; printf(“Please input info of students:No Name Math English Computern“); for (i=0; iN; i+) printf(“%d:“, i + 1); scanf(“%d %s %d %d %d“, ,有五个学生,每个学生的数据包括学号、姓名(最长19字节)、三门课的成绩,从键盘输入五个学生的数据,average(pStu, N); sort(pStu, N); printf(“nResult of sort:n“); printf(“Num Name Math English Computer Averagen“); for (i=0; iN; i+) printf(“%-5d %-20s %-8d %-8d %-8d %-.2fn“, pStui.num, pStui. name, pStui. math, pStui. english, pStui. computer, pStui. average); return 0; ,计算每个学生的平均成绩并按平均成绩由高到低排序,并将排序结果显示。,void average(STUDENT *stuScore, int n) int i; float sum; for (i=0; in; i+) sum = (float)(stuScore i.math + stuScore i.e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 数字化技术在就业与创业教育中的应用与发展趋势
- 实验数据管理与质量控制的精细化实践
- 小学阶段的科技创新教育
- 2024年重庆市长寿区事业单位遴选真题
- 2024年天水市秦州区招聘城镇公益性岗位真题
- 宜宾学院招聘笔试真题2024
- 2024年青岛城运控股集团招聘真题
- 2024年成都大学专职辅导员校内选聘真题
- 高校智能化教学评价的技术创新路径
- 能源价格波动对低收入家庭的影响
- 玻璃门安装合同协议
- 调度绞车的安全操作知识培训及相关规定
- DB61 1226-2018 锅炉大气污染物排放标准
- 2025内蒙古荣信化工有限公司社会招聘11人笔试参考题库附带答案详解
- 电动车消防安全
- 2025-2030中国电子特气行业市场发展现状及竞争格局与投资前景研究报告
- 委托他人签租房合同协议
- 2025年山东省聊城市东昌府区中考一模数学试卷
- 计量设备管理制度规范
- 专题5 应用题-2023-2024学年小升初数学备考真题分类汇编(福建地区专版)
- 统编版2024-2025学年语文五年级下册期末试卷(有答案)
评论
0/150
提交评论