C_结构体八A

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
运行情况如下:
输入: Li Li Huang Zhang Zhang Huang Li Huang Zhang Li
name Li Zhang Huang
count 0 0 0
显示:
Li : 4 Zhang : 3 Huang : 3
对候选人得票的统计程序,设有三个候选人,每次输入一个候选人的名 字,最后统计出每个候选人的得票的结果. struct person { char name[20];int count; }leader[3]={“Li”,0,”Zhang”,0,”Fun”,0}; main() {int i,j; char leader_name[20]; for(i=1;i<=10;i++) {scanf(“%s”,leader_name);
定义形式 struct {成员表列} 变量名表列;
不出现结构体类型名
如:struct { int num char name[20]; char sex; int age; char addr[30]; } x1, x2;
几点说明:
1. 类型名与变量名是不同的概念 2. 允许成员名又为另一个已定义的结构型变量 3. 每一个成员的作用如同该类型的变量 4. 成员名与程序中的变量名可相同但意义不同
结构体成员定义;
}数组名[元素个数];
三、结构体数组的使用方法
1、通过数组的下标(或指向数组的指针)来访问结构体变量。
2、再通过结构体变量的成员实现结构体数据的访问。
形式为:数组名[下标].成员名
如:stu[2].name=“Wang Ying”;
struct student { long number;
char name[20]; char sex; int age; float score; char addr[30]; }stu[3];
struct student { long number; char name[20]; char sex; int age; float score; char addr[30];};
p name sex
则 p为x1的首地址.
age score
addr
访问结构成员: pname 表示x1的姓名;
page 表示x1的年令;
pname 等价于 (*p).name page 等价于 (*p).age
小结: 引用结构变量中的成员有三种方法:
(1) 结构体变量名.成员名 x1.num (2) 用指针变量 (p).成员名 (p).num (3) 用指向运算符成员名 p num 注意:指针变量p必须是结构指针型,
C 程序可将上述数据的集合定义为一种结构体类型:
struct student { unsigned num; char name[20]; char sex; int age; float score; char addr[30]; };
结构的定义
一、结构体定义的一般形式:
struct 结构体名 { 成员表列 };
struct student x1={8906, "Li Ming ", 'M', 85.5};
若 x1 的起始地 址为2000,则 x1 在 内存中占有的存储 单元为:
共用27个字节 的连续单元
2000 2002
2021 2022 2023
8906
L i
M i n g \0 :
M 85.5
2026
struct student stu[3];
结构体数组的物理含义:
表示实体(或记录)的个数。
结构体数组的初始化
1、含义:在定义结构体数组时完成数组元素的赋值 2、方法:与一般数组元素赋初值的方法相同。 struct student { long number;
char name[20]; char sex; int age; float score; char addr[30]; }a[3]={{99641,”Li Ping”,’M’,18,56,” Tianjin Street”},
1. 先定义结构体类型再定义结构体变量 例: struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; };
结构体变量定义:
struct student x1, x2;
类型标识符
则 x1, x2为student 结构型变量,x1, x2可存 放student类型数据。
{scanf ("%s", leader_name); for (j=0; j<3; j++)
if (strcmp (leader_name, leader[j].name)= =0) leader[j].count++;
} printf ("\n"); for (i=0; i<3; i++) printf("%5s : %d\n", leader[i].name, leader[i].count);
{99341,”Zhang Fan”,’F’,17,78,” Beijing Road”}, {99441,”Ren Zhong”,’M’,16,34,” Shenyang Road”}};
例2:编写一个统计得票数的程序,假定有三个侯 选人,每一侯选人的数据包括其姓名和得票 数。
可定义结构类型person和结构数组leader
例:结构体的嵌套定义
struct date { int month; int day; int year; }; struct student {int num;
char name[20]; char sex; int age; struct date birthday; char addr[30]; } x1, x2;
二、箭头运算符:
例:struct student { char name [10]; char sex; int age; float score; char addr[20]; }x1;
struct student p;
则p为结构指针变量,它可用来存放student型变量
的地址 x1
令 p=&x1;
且有p=&x1;
三、关于结构变量的几点说明:
1. 结构变量不是一个简单变量,它的值是由许 多个基本数据组成。
2. 可以把一个结构变量赋给另一个同类型的结 构变量。
如:struct temp
{ int a;
char ch;
} x1, x2;
:
main ( )
{ x1.a=10;
x1.ch='a';
{ int *p;
错误的原因:p不是结构指
p=&x1;
针变量
printf ("%s\n%d\n", (*p).name, (*p).count)
}
可改为:struct person *p;
结构体数组的定义
一、含义:若干个相同的结构体类型变量组成的数据集合。
二、定义方法:
struct 结构体名
{
例如:
No
name[20] sex score
三、结构定义与变量定义及ቤተ መጻሕፍቲ ባይዱ始化合二为一:
struct exp { int a;
float b; char yn[8]; } x={1234, 56. 7, "test"};
但不能这样写: struct exp { int a=1234; float b=56.7; char yn[8]="test"; } x;
... student1.addr[9] student2.number student2.name[0]
... student2.name[4]
student2.sex ...
结构的初始化
结构的初始化就是指结构变 量的初始化。
一、先定义结构,在定义结构变量时对每个 成员赋初值
如:struct student { unsigned No; char name[20]; char sex; float score; };
printf("size=%d\n", size);
}
6. 结构变量的输入/输出
只能对结构变量的成员进行输入/输出
若有 struct student h;
则:scanf("%s", &h); printf("%s", h);
错误
原因:结构体变量中包含有多个不同类型的数 据项。
正确方法:对结构体变量各成员的值进行输入/ 输出。
访问结构成员
访问结构变量实质上是引用其成员 有两种运算符可访问结构成员
一、圆点运算符
如:x1为struct student型变量,则 x1.No: 表示x1的学号 x1.name: 表示x1的名字
注意:
1. 只能用变量的成员,不可用结构变量名 直接运算。
2. 每一个成员的作用与其同类型的简单变 量的引用相同。
如:scanf("%d%s", &h.num, h.name); printf("%d%s", h.num, h.name);
四、程序实例
例1:请指出下列程序的错误所在:
struct person
{ char name[20];
int count;
} x1={"ZhongHua", 10};
main( )
x1 或x2
num name sex
age
birthday
month day
year addr
结构体变量的存储特点
如: struct student { int number;
char name[5]; char sex; int age; float score; char addr[10]; }student1,student2;
struct person { char name[20];
int count; } leader[3]={"Li", 0,"Zhang" , 0, " Huang ", 0};
程序如下:
struct person { char name[20];
int count; } leader[3]={"Li", 0,"Zhang" , 0, " Huang ", 0}; main ( ) {int i, j; char leader_name[20]; for (i=1; i<=10; i++)
结构变量占用的内存单元为14个字节。
4. 不可以将两个结构变量进行关系比较
struct temp { int a;
char ch; } x1, x2; main( ) {x1.a=10;
x2.ch='a'; if(x1= =x2)
非法语句
: }
5.可通过sizeof ( )运算符获得结构变量占用的内存 大小 struct exp { int num; char ch; char name[20]; float sal; } x1; main( ) { int size; size=sizeof(x1);
引言
已了解的数据类型:
整型
浮点型 简单数据类型
字符型
数组
用户定义的数据类型
特点:所有的元素都是同一种类型
存在的问题:难以处理较复杂的数据
如:建立一份学生档案,对每一个学生至少需要 以下一些信息。
学号(unsigned no) 姓名(char name[20]) 性别(char sex) 年龄(int age) 成绩(float score) 地址(char addr[30])
2. 在定义结构体类型的同时定义变量:
定义形式 struct 结构体名 { 成员表列 } 变量名表列;
例:struct student { int num; char name[20]; char sex; int age; char addr[30]; } x1, x2;
3. 直接定义结构类型变量
成员表列的写法:类型标识符 成员名
注意:
1.这只是定义一种类型的方法,尚未定义变 量。
2.struct –––关键词(保留字),表示定义一 种结构体类型。
如:struct exp
{ int times; char flag; float meter ;
};
结构体名 成员表列
二、结构变量的定义
有三种方法可用来定义结构体变量:
student1
student2 struct student所占存储空间的 大小为:
各成员变量所占存储单元字节数 之和。sizeof(student)
student1.number student1.name[0]
... student1.name[4]
student1.sex student1.age student1.score student1.addr[0]
x2=x1;
把结构变量x1的值赋给结构变量x2.
printf("%d, %c", x2. a, x2.ch);
}
3.占有的存储单元大小取决于成员的数据类型
如:struct exp { int a; float b; char yn[8]; };
struct exp x={1234,56.7, "text"}
相关文档
最新文档