第9章 用户自己建立数据类型pptConvertorWord文档下载推荐.docx
- 文档编号:16552498
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:60
- 大小:29.07KB
第9章 用户自己建立数据类型pptConvertorWord文档下载推荐.docx
《第9章 用户自己建立数据类型pptConvertorWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第9章 用户自己建立数据类型pptConvertorWord文档下载推荐.docx(60页珍藏版)》请在冰豆网上搜索。
(2)成员可以属于另一个结构体类型。
structDate
{intmonth;
intday;
intyear;
};
structStu
{intnum;
charname[20];
intage;
structDatebirthday;
};
num
name
sex
age
birthday
addr
month
day
year
前面只是建立了一个结构体类型,它相当于一个模型,并没有定义变量,其中并无具体数据,系统对之也不分配存储单元。
相当于设计好了图纸,但并未建成具体的房屋。
为了能在程序中使用结构体类型的数据,应当定义结构体类型的变量,并在其中存放具体的数据。
1.先声明结构体类型,再定义该类型变量
声明结构体类型structStudent,可以用它来定义变量
structStudentstudent1,student2;
结构体类型名
结构体变量名
10001
ZhangXin
M
19
90.5
Shanghai
student1
10002
WangLi
F
20
98
Beijing
student2
2.在声明类型的同时定义变量
}student1,student2;
3.不指定类型名而直接定义结构体类型变量
其一般形式为:
struct
{成员表列}变量名表列;
指定了一个无名的结构体类型。
(1)结构体类型与结构体变量是不同的概念,不要混同。
只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。
在编译时,对类型是不分配空间的,只对变量分配空间。
(2)结构体类型中的成员名可以与程序中的变量名相同,但二者不代表同一对象。
(3)对结构体变量中的成员(即“域”),可以单独使用,它的作用与地位相当于普通变量。
例9.1把一个学生的信息(包括学号、姓名、性别、住址)放在一个结构体变量中,然后输出这个学生的信息。
解题思路:
自己建立一个结构体类型,包括有关学生信息的各成员
用它定义结构体变量,同时赋以初值
输出该结构体变量的各成员
#include<
stdio.h>
intmain()
{structStudent
{longintnum;
charaddr[20];
}a={10101,“LiLin”,‘M’,
“123BeijingRoad”};
printf("
NO.:
%ld\nname:
%s\n
sex:
%c\naddress:
%s\n"
a.num,a.name,a.sex,a.addr);
return0;
}
{
}
……
a.num=10010;
对
printf(“%s\n”,a);
不对
b=a;
structStudentb;
b.num++;
scanf(″%ld″,&
a.num);
printf(″%o″,&
a);
scanf(“%ld,%s,%c,%s\n”,&
错
{structDate
structStu
{intnum;
}a,b;
a.birthday.month=12;
a.age=10;
b.age=9;
sum=a.age+b.age;
例9.2输入两个学生的学号、姓名和成绩,输出成绩较高学生的学号、姓名和成绩
(1)定义两个结构相同的结构体变量student1和student2;
(2)分别输入两个学生的学号、姓名和成绩;
(3)比较两个学生的成绩,如果学生1的成绩高于学生2,就输出学生1的全部信息,如果学生2的成绩高于学生1,就输出学生2的全部信息。
如果二者相等,输出2个学生的全部信息
{structStudent
{intnum;
}student1,student2;
scanf("
%d%s%f"
&
student1.num,
student1.name,&
student1.score);
scanf(“%d%s%f”,&
student2.num,
student2.name,&
student2.score);
不能加&
printf("
Thehigherscoreis:
\n"
);
if(student1.score>
student2.score)
%d%s%6.2f\n"
student1.num,
student1.name,student1.score);
elseif(student1.score<
student2.num,
student2.name,student2.score);
else
{printf("
}
9.2.1定义结构体数组
9.2.2结构体数组的应用举例
例9.3有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。
设一个结构体数组,数组中包含3个元素
每个元素中的信息应包括候选人的姓名(字符型)和得票数(整型)
输入被选人的姓名,然后与数组元素中的“姓名”成员比较,如果相同,就给这个元素中的“得票数”成员的值加1
输出所有元素的信息
string.h>
structPerson
{charname[20];
intcount;
}leader[3]={“Li”,0,“Zhang”,0,“Sun”,0};
全局的结构体数组
count
leader[0]
Li
Zhang
Sun
{inti,j;
charleader_name[20];
for(i=1;
i<
=10;
i++)
{scanf(“%s”,leader_name);
for(j=0;
j<
3;
j++)
if(strcmp(leader_name,
leader[j].name)==0)
leader[j].count++;
for(i=0;
%5s:
%d\n“,leader[i].name,
leader[i].count);
leader[j].count=leader[j].count+1;
(1)定义结构体数组一般形式是
①struct结构体名
{成员表列}数组名[数组长度];
②先声明一个结构体类型,然后再用此类型定义结构体数组:
结构体类型数组名[数组长度];
如:
structPersonleader[3];
(2)对结构体数组初始化的形式是在定义数组的后面加上:
={初值表列};
structPersonleader[3]={"
Li"
0,"
Zhang"
Fun"
0};
例9.4有n个学生的信息(包括学号、姓名、成绩),要求按照成绩的高低顺序输出各学生的信息。
用结构体数组存放n个学生信息,采用选择法对各元素进行排序(进行比较的是各元素中的成绩)。
{structStudentstu[5]={{10101,"
78},
{10103,"
Wang"
98.5},
{10106,"
86},
{10108,“Ling”,73.5},
{10110,“Fun”,100}};
structStudenttemp;
constintn=5;
inti,j,k;
常变量
若人数变为30
30
#defineN5
注意temp的类型
Theorderis:
n-1;
{k=i;
for(j=i+1;
n;
if(stu[j].score>
stu[k].score)k=j;
temp=stu[k];
stu[k]=stu[i];
stu[i]=temp;
%6d%8s%6.2f\n"
stu[i].num,stu[i].name,stu[i].score);
写法上与普通变量一致
9.3.1指向结构体变量的指针
9.3.2指向结构体数组的指针
9.3.3用结构体变量和结构体变量的指针作函数参数
指向结构体对象的指针变量既可以指向结构体变量,也可以用来指向结构体数组中的元素。
指针变量的基类型必须与结构体变量的类型相同。
例如:
structStudent*pt;
例9.5通过指向结构体变量的指针变量输出结构体变量中成员的信息。
在已有的基础上,本题要解决两个问题:
怎样对结构体变量成员赋值;
怎样通过指向结构体变量的指针访问结构体变量中成员。
{structStudent
{longnum;
……
structStudentstu_1;
structStudent*p;
p=&
stu_1;
stu_1.num=10101;
strcpy(stu_1.name,“LiLin”);
stu_1.sex='
M‘;
stu_1.score=89.5;
No.:
%ld\n”,stu_1.num);
name:
stu_1.name);
sex:
%c\n”,stu_1.sex);
printf(”score:
%5.1f\n”,stu_1.score);
stu_1
10101
LiLin
89.5
p
为了使用方便和直观,C语言允许把(*p).num用p->
num来代替
(*p).name等价于p->
如果p指向一个结构体变量stu,以下等价:
①stu.成员名(如stu.num)
②(*p).成员名(如(*p).num)
p->
成员名(如p->
num)
例9.6有3个学生的信息,放在结构体数组中,要求输出全部学生的信息。
用指向结构体变量的指针处理
(1)声明structStudent,并定义结构体数组、初始化
(2)定义指向structStudent类型指针p
(3)使p指向数组首元素,输出元素中各信息
(4)使p指向下一个元素,输出元素中各信息
(5)再使p指向结构体数组的下一个元素,输出它指向的元素中的有关信息
structStudent
structStudentstu[3]={
{10101,"
LiLin"
'
M'
18},
{10102,"
ZhangFun"
19},
{10104,"
WangMin"
F'
20}};
{structStudent*p;
No.Namesexage\n"
for(p=stu;
p<
stu+3;
p++)
printf(“%5d%-20s%2c%4d\n”,
num,p->
name,
sex,p->
age);
18
10102
ZhangFang
10104
WangMin
stu[0]
stu[1]
stu[2]
将一个结构体变量的值传递给另一个函数,有3个方法。
(1)用结构体变量的成员作参数。
例如,用stu[1].num或stu[2].name作函数实参,将实参值传给形参。
用法和用普通变量作实参是一样的,属于“值传递”方式。
应当注意实参与形参的类型保持一致。
(2)用结构体变量作实参。
用结构体变量作实参时,将结构体变量所占的内存单元的内容全部按顺序传递给形参,形参也必须是同类型的结构体变量
在函数调用期间形参也要占用内存单元。
这种传递方式在空间和时间上开销较大
在被调用函数期间改变形参(也是结构体变量)的值,不能返回主调函数
一般较少用这种方法
(3)用指向结构体变
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第9章 用户自己建立数据类型pptConvertor 用户 自己 建立 数据类型 pptConvertor