nullC语言电子
教案
中职数学基础模块教案 下载北师大版¥1.2次方程的根与系数的关系的教案关于坚持的教案初中数学教案下载电子教案下载
(十七)C语言电子教案(十七)第十七讲 第十一章 结构体与共用体
主要内容:
§11.1 结构体与共用体概述
§11.2 结构体类型变量的定义
§11.3 结构体类型变量的引用
§11.4 结构体类型变量的初始化
§11.5 结构体数组
§11.6 指向结构体类型数据的指针§11.1 结构体和共用体概述§11.1 结构体和共用体概述使用数组,可以存放一组相关的同类型数据,通过对数组中的不同元素进行访问,就可以使大量数据的处理变得简单而又方便。但是我们不能将不同类型的数据放入同一数组中。
如果我们需要把一个学生的学号、姓名、性别、年令、各门功课的考试成绩等不同类型的数据放在一个构造型数据类型中,就需要另外一种新的数据类型:结构体类型或者共用体类型数据。
一个结构体类型的变量中可以独立存放多种类型的数据,一个共用体类型的变量中可以共用同一段存储单元来存放不同类型的数据。§11.2 结构体类型和结构体变量的定义§11.2 结构体类型和结构体变量的定义结构体的类型是一种新的数据类型,系统没有确定的结构体类型,用户根据程序的需要,自定义某种特定的结构体类型,因此,结构体变更的定义与一般变量不同,需要先定义结构体类型后,再定义结构体变量。
在结构体类型的定义中,要规定结构体类型中成员数量、成员名称和成员类型。
在结构体变量的定义中,要说明结构体类型、结构体变量名称。一、结构体类型的定义一、结构体类型的定义格式:
struct 结构体名
{成员
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
列};例如:
struct student
{long num;
char name[20];
int score[4];
};二、结构体类型变量的定义1二、结构体类型变量的定义1格式1:先定义结构体类型,再定义结构体变量
struct 结构体名
{成员表列};
struct 结构体名 结构体变量名;例如:
struct student
{long num;
char name[20];
int score[4];
} ;
struct student a;系统为变量a分配4+1*20+2*4=32个字节的存储单元anum(4)name(20)score(8)二、结构体类型变量的定义2二、结构体类型变量的定义2格式2:在定义结构体类型的同时定义结构体变量
struct 结构体名
{成员表列} 结构体变量名;例如:
struct student
{long num;
char name[20];
int score[4];
} b ;bnum(4)name(20)score(8)二、结构体类型变量的定义3二、结构体类型变量的定义3格式3:不定义结构体类型,直接定义结构体变量
struct
{成员表列} 结构体变量名;例如:
struct
{long num;
char name[20];
int score[4];
} c ;cnum(4)name(20)score(8)三、对结构体类型的说明三、对结构体类型的说明结构体类型与结构体类型变量是两个概念,前者相当于在变量定义时的类型标识符,后者相当于变量定义时的变量名。
成员也可以是一个结构体变量。
成员名可以与程序中其它变量同名,二者不代表同一对象,互不干扰。§11.3 结构体类型变量的引用§11.3 结构体类型变量的引用结构体中的成员与变量(或数组)一样,可以单独使用,但要按一定的格式引用。一、成员运算符一、成员运算符运算符号: .
前置运算符,与结构体名或共用体名一起使用。
使用
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
: 结构体变量名.成员名
或:(*结构体指针变量名).成员名
功能: 访问结构体变量中指定的成员
优先等级: 最高,与括号相同
说明:
访问结构体成员运算符"."可多级使用,其左端应为变量名或等价变量名,运算结果为成员的值.例1 结构体变量成员引用举例(计算运费)例1 结构体变量成员引用举例(计算运费)main ( )
{struct ab
{int a;float b;
float c; };
struct ab fee;
float sum;
fee.a=100;
fee.b=7.5;
fee.c=0.05;
sum=fee.a*fee.b*(1-fee.c);
printf("\n%d %f %f %f\n",fee.a,fee.b,fee.c,sum); }二、结构体类型变量引用的说明二、结构体类型变量引用的说明结构体变量不能整体进行输入和输出。
如果成员本身又是一个结构体,则必须通过多级成员运算符,对最后一级成员进行访问。
可以引用成员的地址,也可以引用结构体变量的地址。如有结构体变量a,age是a 的一个成员: 则:&a 表示结构体变量a的首地址, &a.age 表示结构体变量a 的成员age 的地址。
结构体变量的存储::结构体变量所占的存储空间的大小等于结构体中所有成员所占的存储空间的总和。例2 用结构体变量来表示学生数据(学号、姓名、年龄、成绩)例2 用结构体变量来表示学生数据(学号、姓名、年龄、成绩)main ( )
{struct stu
{long num; char name[10];
int age; int score[4]; } st;
int i;
printf("请输入学生的学号、姓名和年龄\n");
scanf("%ld%s%d",&st.num,st.name,&st.age);
printf("请输入学生的四门课考试成绩\n");
for(i=0;i<4;i++)
scanf("%f",&st.score[i]);
printf("学号\t姓名\t年龄\t\t 成\t\t 绩\n");
printf(“%ld\t%s\t%d\t",st.num,st.name,st.age);
for(i=0;i<4;i++) printf("%7.1f",st.score[i]);
}运行程序§11.4 结构体变量的初始化§11.4 结构体变量的初始化格式(1): struct 结构体名 { 成员表列 }结构体变量名={数据表列};
格式(2): static struct 结构体名 { 成员表列 }结构体变量名={ 数据表列 };如: struct student {long num; char name[10]; int age; int score[4]; } a={20030001, "张三",20,70,75,80,85};§11.5 结构体数组§11.5 结构体数组如果有三个学生的成绩需要处理,就要定义三个结构体变量,这样就会使程序复杂,同时也无法实现循环控制。这时我们需要使用结构体数组。
结构体数组中可以包含多个元素,每个元素都是一个结构体类型的数据,这样一个结构体数组中就可以存放多个学生数据,一、结构体数组的定义1一、结构体数组的定义1格式1:先定义结构体类型,再定义结构体数组
struct 结构体名
{成员表列};
struct 结构体名 结构体数组名[常量表达式];例如:
struct student
{long num;
char name[20];
int score[4];
} ; struct student a[3];系统为数组a分配(4+1*20+2*4)*3=96个字节的存储单元a[0]num(4)name(20)score(8)a[1]a[2]一、结构体数组的定义2一、结构体数组的定义2格式2:在定义结构体类型的同时定义结构体数组
struct 结构体名
{成员表列} 结构体数组名[常量表达式];例如:
struct student
{long num;
char name[20];
int score[4];
} b[3] ;二、结构体数组的定义3二、结构体数组的定义3格式3:不定义结构体类型,直接定义结构体数组
struct
{成员表列} 结构体数组名[常量表达式];例如:
struct
{long num;
char name[20];
int score[4];
} c[20] ;二、结构体数组的初始化二、结构体数组的初始化main ( )
{struct student
{long num;char name[10];
int age;int score[4];}
stu[3]={{20030001,23,89,90,91,92},"zhang"},
{20030002,21,68,69,70,71,"liu"},
{20030003,21,57,58,59,60,"li"} };
int i,j;
for (j=0;j<3;j++)
{printf("%ld\t%s\t%d\t",stu[j].num,stu[j].name,stu[j].age);
for(i=0;i<4;i++)printf(“%7.1f”,stu[j].score[i]);
printf(" \n");}
}§11.6 指向结构体类型的指针§11.6 指向结构体类型的指针变量、数组、函数、指针都有自己相应的指针,同样,结构体类型的数据也有相应的指针。一、结构体变量的指针和指向运算符一、结构体变量的指针和指向运算符结构体变量指针就是结构体变量的起始地址,用 “&结构体变量名” 来表示。
指向运算符: 运算符号: -> (与指向结构体或共用体的指针一起使用) 功能: 对指针所指向的结构体的成员进行访问。 优先等级: 最高,与“.”的优先等级相同. 使用方法: 指针变量名->成员名二、指向结构体变量的指针二、指向结构体变量的指针定义: struct 结构体名 *指针变量名;
例如:如果有结构体名student,下面的定义 struct student *p; 表示p是一个指向结构体变量的指针变量,可以指向任何student 类型结的构体变量。二、指向结构体变量的指针二、指向结构体变量的指针如果已经定义结构体名student,并且有如下语句:struct student stu,*p; p=stu; 则结构体成员有以下三种表示方法: stu.成员名 p->成员名 (*p).成员名 且:p->num++与(p->num)++等价,表示成员自加。 ++p->num与++(p->num) 等价,表示指针自加
p+1:表示指向结构体的指针移动一个相对移动量,1个相对移动量是一个结构体类型中各成员所占的存储单元的总和。
例 用结构体数组存储并输出5个学生的成绩例 用结构体数组存储并输出5个学生的成绩main ( )
{struct student
{long num;char name[10];
int age;int score[4];} stu[5];
int i,j;
for (j=0;j<5;j++)
{printf(“请输入学号,姓名和年龄:”);
scanf("%ld%s%d",&stu[j].num,stu[j].name,&stu[j].age);
printf(“请成绩:”);
for(i=0;i<4;i++)scanf(“%d”,&stu[j].score[i]);}}
for (j=0;j<5;j++)
{printf("%ld%s%d",stu[j].num,stu[j].name,stu[j].age);
for(i=0;i<4;i++)scanf(“%6d”,stu[j].score[i]);}}运行程序