使用结构体类型处理组合数据用户自定义数据类型理论课
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
只对结构体变量分配空间 赋值、存取、运算只能针对结构体变量
• 结构体成员名与程序中的变量名
6/28
结构体变量的初始化和引用
/*例9.1把一个学生信息放在一个结构体变量中,然后输出其信息*/
#include <stdio.h>
void main()
{
struct student
/*声明结构体类型struct student*/
如 student
• 成员(member):类型名 成员名; • 成员表列(域表):用{ }包括 • 结构体的结束:分号
• 结构体的成员可以是另一个结构体变量 5/28
定义结构体变量
• 先声明类型,再定义变量,分开进行 • 声明的同时定义变量 • 不指定类型名,直接定义变量
• 注意:
• 区分结构体类型和结构体变量
printf("NO.:%d\nName:%s\nSex:%c\n Address:%s\n", student1.num, student1.name,student1.sex,student1.addr);
}
7/28
结构体变量的初始化和引用
/*例9.2输入两个学生的学号、姓名和成绩,输出成绩较高的学生的学号、姓名和成绩*/
/*输入候选人姓名*/
for(j=0;j<3;j++)
if(strcmp(leader_name,leader[jቤተ መጻሕፍቲ ባይዱ.name)==0) leader[j].count++;
printf("The higher score is:\n");
if(student1.score>student2.score)
printf("%d %s
%6.2f\n",student1.num,student1.name,student1.score);
else if(student1.score<student2.score)
• 相互独立,无内在联系
• 数组
• 同类型的数据集中存放
• 结构体(structure)
• 由不同类型的数据组成的组合型数据结构 • 数据具有内在联系,成组出现,方便描述现实事物
4/28
声明结构体类型
• 声明
struct 结构体名 {
成员表列; };
• 关键字:struct • 结构体名(结构体标记):任意合法的标识符,
#include <stdio.h>
void main()
{
struct student
/*声明结构体类型struct student*/
{ int num;
引用成员的地址
char name[20];
float score;
}student1,student2; /*定义两个结构体变量student1、student2*/
void main() {
结构体数组有3个元素,每一个元素都是结构体类型
int i,j;
char leader_name[20];
/*字符数组*/
printf("Please input Li or Zhang or Fun:");
for(i=1;i<=10;i++)
/*假设有10个选民*/
{
scanf("%s",leader_name);
• 数组中的每个元素都是一个结构体类型的数据
• 例9.3有3个候选人,每个选民只能投票选
一人,编写一个统计选票的程序,先后输入 被选人的名字,最后输出各人得票结果
11/28
/*例9.3有3个候选人,每个选民只能投票选一人,编写一个统计选票的程序,先后输入被选人的名字,最
后输出各人得票结果*/
#include <string.h>
,month为结构体变量birthday的成员
• 同普通变量一样可以运算 • 同类结构体变量可相互赋值
student1=student2
• 可以引用结构体变量的地址、结构体变量成员的地址
& 9/28
• 定义和使用结构体变量 • 结构体数组 • 结构体指针
内容进度
10/28
结构体数组
• 结构体数组
printf("%d %s
%6.2f\n",student2.num,student2.name,student2.score);
else {
引用成员的值
printf("%d %s
%6.2f\n",student1.num,student1.name,student1.score);
printf("%d %s
{
int num;
/*学号,整型*/
char name[20]; /*姓名,数组,存储字符串*/
char sex;
/*性别,字符型*/
char addr[20]; /*住址,字符串*/
} student1={10101,"Li Lin",'M',"123 Beijing Road"};
/*初始化变量student1*/
printf("Please input two students' NO.,name,score:\n");
scanf("%d%s%f",&student1.num,student1.name,&student1.score); /*输入学生1的数据*/
scanf("%d%s%f",&student2.num,student2.name,&student2.score); /*输入学生2的数据*/
#include <stdio.h>
struct person
/*声明结构体类型struct person*/
{
char name[20];
/*候选人姓名*/
int count;
/*得票数*/
}leader[3]={"Li",0,"Zhang",0,"Fun",0};
/*定义结构体数组,并初始化*/
%6.2f\n",student2.num,student2.name,student2.score);
}
}
8/28
结构体变量的初始化和引用
• 引用
• 引用成员的值
结构体变量名.成员名
• 多级成员的访问
如 student1.birthday.month student1为结构体变量,birthday为student1的成员
❖ 指针与指针变量 ❖ 指针变量作为函数参数 ❖ 指针与数组
上一章内容回顾
1/28
• 理解结构体变量的概念 • 掌握结构体变量的定义和引用 • 理解结构体数组 • 理解结构体指针
本章学习目标
2/28
• 定义和使用结构体变量 • 结构体数组 • 结构体指针
内容进度
3/28
定义和使用结构体变量
• 普通变量
• 结构体成员名与程序中的变量名
6/28
结构体变量的初始化和引用
/*例9.1把一个学生信息放在一个结构体变量中,然后输出其信息*/
#include <stdio.h>
void main()
{
struct student
/*声明结构体类型struct student*/
如 student
• 成员(member):类型名 成员名; • 成员表列(域表):用{ }包括 • 结构体的结束:分号
• 结构体的成员可以是另一个结构体变量 5/28
定义结构体变量
• 先声明类型,再定义变量,分开进行 • 声明的同时定义变量 • 不指定类型名,直接定义变量
• 注意:
• 区分结构体类型和结构体变量
printf("NO.:%d\nName:%s\nSex:%c\n Address:%s\n", student1.num, student1.name,student1.sex,student1.addr);
}
7/28
结构体变量的初始化和引用
/*例9.2输入两个学生的学号、姓名和成绩,输出成绩较高的学生的学号、姓名和成绩*/
/*输入候选人姓名*/
for(j=0;j<3;j++)
if(strcmp(leader_name,leader[jቤተ መጻሕፍቲ ባይዱ.name)==0) leader[j].count++;
printf("The higher score is:\n");
if(student1.score>student2.score)
printf("%d %s
%6.2f\n",student1.num,student1.name,student1.score);
else if(student1.score<student2.score)
• 相互独立,无内在联系
• 数组
• 同类型的数据集中存放
• 结构体(structure)
• 由不同类型的数据组成的组合型数据结构 • 数据具有内在联系,成组出现,方便描述现实事物
4/28
声明结构体类型
• 声明
struct 结构体名 {
成员表列; };
• 关键字:struct • 结构体名(结构体标记):任意合法的标识符,
#include <stdio.h>
void main()
{
struct student
/*声明结构体类型struct student*/
{ int num;
引用成员的地址
char name[20];
float score;
}student1,student2; /*定义两个结构体变量student1、student2*/
void main() {
结构体数组有3个元素,每一个元素都是结构体类型
int i,j;
char leader_name[20];
/*字符数组*/
printf("Please input Li or Zhang or Fun:");
for(i=1;i<=10;i++)
/*假设有10个选民*/
{
scanf("%s",leader_name);
• 数组中的每个元素都是一个结构体类型的数据
• 例9.3有3个候选人,每个选民只能投票选
一人,编写一个统计选票的程序,先后输入 被选人的名字,最后输出各人得票结果
11/28
/*例9.3有3个候选人,每个选民只能投票选一人,编写一个统计选票的程序,先后输入被选人的名字,最
后输出各人得票结果*/
#include <string.h>
,month为结构体变量birthday的成员
• 同普通变量一样可以运算 • 同类结构体变量可相互赋值
student1=student2
• 可以引用结构体变量的地址、结构体变量成员的地址
& 9/28
• 定义和使用结构体变量 • 结构体数组 • 结构体指针
内容进度
10/28
结构体数组
• 结构体数组
printf("%d %s
%6.2f\n",student2.num,student2.name,student2.score);
else {
引用成员的值
printf("%d %s
%6.2f\n",student1.num,student1.name,student1.score);
printf("%d %s
{
int num;
/*学号,整型*/
char name[20]; /*姓名,数组,存储字符串*/
char sex;
/*性别,字符型*/
char addr[20]; /*住址,字符串*/
} student1={10101,"Li Lin",'M',"123 Beijing Road"};
/*初始化变量student1*/
printf("Please input two students' NO.,name,score:\n");
scanf("%d%s%f",&student1.num,student1.name,&student1.score); /*输入学生1的数据*/
scanf("%d%s%f",&student2.num,student2.name,&student2.score); /*输入学生2的数据*/
#include <stdio.h>
struct person
/*声明结构体类型struct person*/
{
char name[20];
/*候选人姓名*/
int count;
/*得票数*/
}leader[3]={"Li",0,"Zhang",0,"Fun",0};
/*定义结构体数组,并初始化*/
%6.2f\n",student2.num,student2.name,student2.score);
}
}
8/28
结构体变量的初始化和引用
• 引用
• 引用成员的值
结构体变量名.成员名
• 多级成员的访问
如 student1.birthday.month student1为结构体变量,birthday为student1的成员
❖ 指针与指针变量 ❖ 指针变量作为函数参数 ❖ 指针与数组
上一章内容回顾
1/28
• 理解结构体变量的概念 • 掌握结构体变量的定义和引用 • 理解结构体数组 • 理解结构体指针
本章学习目标
2/28
• 定义和使用结构体变量 • 结构体数组 • 结构体指针
内容进度
3/28
定义和使用结构体变量
• 普通变量