C语言程序设计模块六构造数据类型应用训练_第1页
C语言程序设计模块六构造数据类型应用训练_第2页
C语言程序设计模块六构造数据类型应用训练_第3页
C语言程序设计模块六构造数据类型应用训练_第4页
C语言程序设计模块六构造数据类型应用训练_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、模块六模块六 构造数据类型应用训练构造数据类型应用训练能力目标掌握结构体类型定义、变量的声明及其引用;理解共用体类型的定义、变量的声明及其引用;了解枚举类型及其变量的定义和引用。知识准备知识准备 任务引例-输入一条学生成绩,并显示。输入一条学生成绩,并显示。include #define N 5float aver(int b,int n);void main() int i,a5; float ave; printf(请输入5个整型数据:n); for(i=0;iN;i+) scanf(%d,&ai); ave=aver(a,N); printf(n平均值为:%4.2fn,ave);

2、float aver(int b,int n) int i; float s=0; for(i=0;in;i+) s+=bi; return s/n; 程程序序清清单单程序运行程序运行 请输入学生姓名及三门课的成绩:请输入学生姓名及三门课的成绩:杨甜杨甜 80 90 70 80 90 70学生:杨甜的三门课成绩分别为:学生:杨甜的三门课成绩分别为:80.00,90.00,70.0080.00,90.00,70.00程程序序清清单单#include struct birthday int year; int month; int day; ;struct exam char name30; ch

3、ar sex; int age; char addr40; int number; float score3; struct birthday birth; ;做中学做中学6-1 6-1 结构体变量的定义、引用和初始化。结构体变量的定义、引用和初始化。6.1 结构体类型及其变量程程序序清清单单void main( ) struct exam exame1=张申,M,23,山丹街1号,301,98,67,87,1982,9,3; struct exam exame2=李淼,F,24,小北街2号,304,82,89,97,1981,5,14; printf(%s %c %d ,exame1.nam

4、e,exame1.sex,exame1.age); printf(%4d.%2d.%2d ,exame1.birth.year,exame1.birth.month,exame1.birth.day); printf(%s %d ,exame1.addr,exame1.number); printf(%3.0f %3.0f %3.0fn,exame1.score0,exame1.score1,exame1.score2); printf(%s %c %d ,,exame2.sex,exame2.age); printf(%4d.%2d.%2d ,exame2.birth.

5、year,exame2.birth.month,exame2.birth.day); printf(%s %d ,exame2.addr,exame2.number); printf(%3.0f %3.0f %3.0fn,exame2.score0,exame2.score1,exame2.score2);输出结果输出结果 张申 M 23 1982. 9. 3 山丹街1号 301 98 6 87李淼 F 24 1981. 5.14 小北街2号 304 82 89 97 张申 M 23 山丹街 1 号 301 98 67 87 1982 9 3 图 6-1 exam1 的初始化 知识点结构体类型

6、的定义 结构体类型的一般语法格式: struct 结构体类型名 类型名1 成员变量名1; 类型名2 成员变量名2; 类型名n 成员变量名n; ; 结构体变量的定义、引用和初始化v 结构体变量的定义 结构体变量的定义方法有3种:l 用已定义的结构体类型来定义结构体变量。如: struct exam exam1,exam2; 在这种结构体变量语法格式中,struct关键字和结构体名(如本例的exam)都不能省略。l 定义结构体类型的同时定义结构体变量。如: struct exam char name30; char sex; int age; char addr40; exam1,exam2; l

7、 直接定义结构体变量。例如: struct char name30; char sex; int age; char addr40; exam1,exam2; v 结构体变量的引用 引用结构体变量的一般格式为: 结构体变量.成员 exam1.age=18; strcpy(, 王帆); “.”是成员运算符,也称为分量运算符,它的优先级在所有的运算符中最高,因此将作为一个整体等同于一个变量名来参与各种运算,其运算规则与同类型的变量相同。注 意 当使用上例中的birth成员时,需要用成员运算符逐级地找到最低一级的成员,如: exam1.birth.year=1

8、983; 写成下面的格式是不对的: exam1.birth=1980,04,20;v 结构体变量的初始化 同其它类型的变量一样,结构体变量的初始化可以在定义时完成。如果需要在程序中进行初始化,则需要逐个成员逐级对最低一级的成员赋初值。做中学做中学6-2 6-2 输入输入5 5个考生的姓名及考试成绩,并统计各科的平均个考生的姓名及考试成绩,并统计各科的平均 成绩。成绩。算法设计算法设计 每个考生的信息包括姓名以及多门课程考试成绩,定义一个结构体类型stu包括字符数组name30和实型数组score3成员,N个考生的信息通过已定义的结构体类型stu数组stu1N来实现。将每个考生的对应成绩相加后求

9、平均成绩,即为各科的平均成绩。6.2 结构体数组 将若干个相同结构体类型的数据组合在一起构成的集合,就成为结构体数组。结构体数组与一般数组不同的是,每个数组元素都是结构体类型的数据。程程序序清清单单#include #define N 5struct stu char name30; float score3;stu1N;void main( ) int i,j; float aver3=0; printf(请输入考生姓名及三门课的成绩:n); for (i=0;iN;i+) printf(第%d名学生:,i+1); scanf(%s %f,,&stu1i.scor

10、e0); scanf( %f %f,&stu1i.score1,&stu1i.score2); 程程序序清清单单for (i=0;i3;i+) /*计算每科的总成绩*/ for (j=0;jN;j+) averi=averi+stu1j.scorei; printf(平均成绩:n第一科:%3.1f ,aver0/N); printf(第二科:%3.1f 第三科:%3.1fn,aver1/N,aver2/N);程序运行程序运行 请输入考生姓名及三门课的成绩:请输入考生姓名及三门课的成绩:第第1 1名学生:名学生:mark 60 70 80 mark 60 70 80 第第2 2名

11、学生:名学生:sumnsumn 75 85 95 75 85 95第第3 3名学生:名学生:yang 85 95 65yang 85 95 65第第4 4名学生:名学生:ningning 45 78 96 45 78 96第第5 5名学生:名学生:chenchen 87 67 92 87 67 92平均成绩:平均成绩:第一科:第一科:70.4 70.4 第二科:第二科:79.0 79.0 第三科:第三科:85.685.6知识点结构体数组的定义和初始化 定义结构体数组与定义结构体变量一样,可以在定义结构体类型的同时定义,也可以在定义结构体类型之后定义,也可以直接定义。如:struct stu c

12、har name30; char sex2; int age; char addr40; int number; float score;stu12=“张文”,“男”,21,“上海路2#”,301,80,“贾丽”,“女”,18,“建设路123#”,302,92; 知识点结构体数组的成员变量v 同一般数组一样,结构体数组的引用也是通过数组名和下标来引用的。v 其引用格式为: 数组名下标.成员变量名做中学做中学6-3 6-3 共用体类型变量的定义及使用。共用体类型变量的定义及使用。6.3 共用体类型变量#include #include union un /*定义共用体类型*/ int b23;

13、char c21; double d;void main( ) union un u; /*定义共用体变量*/ int i,j,k; strcpy(u.c,欢迎使用共用体变量!); /*共用体变量成员赋值*/ printf(%sn,u.c); k=0; for (i=0;i2;i+)程程序序清清单单 k=0; for (i=0;i2;i+) for (j=0;j3;j+) k+; u.bij=k; /*共用体变量成员赋值*/ for (i=0;i2;i+) for (j=0;j3;j+) printf(%2d ,u.bij); printf(n); u.d=9.1256; /*共用体变量成员赋

14、值*/ printf(%6.3fn,u.d);程程序序清清单单输出结果输出结果 欢迎使用共用体变量1 2 34 5 69.126知识点共用体类型及共用体变量的定义v 共用体类型的语法格式与结构体定义相同,如下: union共用体名 类型名1 成员名1; 类型名2 成员名2; 类型名n 成员名n; ;v union为定义共用体的关键字,共用体名的命名应该符合C语言中标识符的命名规则。如: union stu char name8; float spend; int class; ; 定义了一个stu类型的共用体,它包含有name、spend和class 3个成员。这3个成员在内存中的存储如上图所

15、示(若为VC+环境,整型为4B)。 stu类型的变量共占8B,共用体变量所占存储空间字节数为占用空间最多的那个成员占用空间的字节数,所有成员共享空间。共用体变量的引用v 同定义结构体类型的变量一样,不能整体引用共用体变量来进行输入和输出,只能引用共用体变量的成员。v 如果共用体的成员为构造类型,那么就需要逐级引用,直至最低一级的成员为止。注 意 共用体变量的各个成员共同使用同一段内存空间。边学边练边学边练设计一个程序,对某个学校或某系的学生信息进行输入、显示和修改处理。拓展提升拓展提升6.4 枚举类型 6.4.1 枚举类型的定义v 定义枚举类型的一般格式为: enum 枚举类型名 枚举元素1,

16、枚举元素2,枚举元素n;v C语言将枚举元素作为整型常量处理 如:enum weekSun=7,Mon=1,Tue,Wed,Thu,Fri,Sat; C语言将第一个枚举元素的值指定为7,第二个元素的值指定为1,对于后面没有指定值的枚举元素,自动按照前一个元素的值加1的原则定义它的值,即Tue=2,Wed=3,Thu=4,Fri=5,Sat=6。各个枚举元素为常量,程序中不能对枚举元素赋值。如语句Sat=4;是不对的。 6.4.2 枚举类型变量v 枚举变量的定义l 定义枚举类型之后定义枚举变量: enum weekSun=7,Mon=1,Tue,Wed,Thu,Fri,Sat; enum wee

17、k day1,day231;l 在定义枚举类型的同时定义枚举变量: enum weekSun=7,Mon=1,Tue,Wed,Thu,Fri,Satday1,day231;l 直接定义枚举变量; enum Sun=7,Mon=1,Tue,Wed,Thu,Fri,Satday1,day231;枚举类型变量的定义和引用v 枚举类型变量的引用 枚举变量的引用方法同普通类型的变量一样。但是枚举变量的取值只能在该枚举类型定义的取值范围内。做中学做中学6-4 6-4 输出一个星期的英文名称。输出一个星期的英文名称。#include enum weekSun=7,Mon=1,Tue,Wed,Thu,Fri,

18、Sat; /*定义枚举类型*/void main( )enum week day; /*定义枚举类型变量*/int i=2;char* name=Monday,Tuesday,Wednesday,Thursday,Friday,Satday,Sunday;for (day=Mon;day=Sun;day=(enum week)i+) /*用枚举类型变量控制循环输出*/printf(%2d: %sn,day,nameday-1); 程程序序清清单单输出结果输出结果 1: Monday 2: Tuesday 3: Wednesday 4: Thursday 5: Friday 6: Satday 7: Sunday6.5 自定义数据类型 简单的名字替换v 例如:typedef int INTEGER;v 功能:是将int型定义为INTEGER,这二者等价,在程序中就可以用INTEGER作为类

温馨提示

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

评论

0/150

提交评论