版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验九结构体
【实验目的】
1.结构体类型变量的定义和引用
2.结构体类型数组的概念和引用
3.指向结构体类型的指针的引用
4.共用体的定义及引用
5.链表的概念,会实现链表的创建
【实验内容】
【例8.1】结构体变量的定义及使用
定义一个结构变量student,用于存储和显示一个学生的基本情况。程序如下:
include,,stdio.h,,
structstu/*学生信息结构类型:由学号、姓名、数学成绩和英语成绩共4项组成*/
(
charnum[5];
charname[10];
intmath;
intenglish;
);
main()
(
structstustu仁{“0001”J张三185,93};
printf(KNum:%s\n'\stul.num);
printH^Name:%s\n",stu1.name);
printf(MMathscoreis%dandEnglishis%d\n',,stu1.math,stu1.english);
)
【例8.2]结构体数组的定义及使用
利用例8・1中的结构体,输入5个学生的学号、姓名、数学成绩和英语成绩,编程将每
个人的学号、姓名、数学、英语及平均成绩分行输出。
#include*'stdio.h"
structstudent
charnum[5];
charname[10];
intmath;
intenglish;
}stu[5];
main()
(
inti;
floataver[5];
for(i=0;i<5;i++)
(
printf(**\ninputthescoreofstudent%d:\n*\i+l);
printf("Number:");
>>
scanf("%s9stu[i].num);
printf(,,Name:n);
scanf("%s"^tu[i].name);
printf("Mathematics:");
K
scanf("%d9&stu[i].math);
printf(HEnglishH);
scanf(”%d”,&stu[i].english);
aver[i]=(stu[i].math+stu[i].english)/2.0;
}
printf("NumberNamcMathEnglishAverage'll");
for(i=0;i<5;i++)
(
printf(**%5s%10sn,stu[i].num,stu[i].name);
printf(n%6d%9d'*,stu[i].math,stu|i].english);
printf(H%12.2f\n,,,aver[i]);
)
}
运行结果:
inputthescoreofstudent1:
Number:001
Name:al
Mathematics:50
English:70
inputthescoreofstudent2:
Number:002
Name:a2
Mathematics:89
Engilsh:80
inputthescoreofstudent3:
Nuinber:()03
Name:a3
Mathematics:94
English:95
inputthescoreofstudent4:
Number:004
Namc:a4
Mathematics:99
English:76
NumberNameMathEnglishAverage
001al507060.00
002a2898084.50
003a3949594.50
004a4997687.50
005a5969188.50
【例8.3】运行程序,分析运行结果
includeMstdio.hH
structnode
(
intnumber;
inta[10];
voidf(s(ruclnode*p,intn)
intij,t;
for(i=0;i<n-l;i++)
for(j=i+l;j<n;j++)
if(p->a[i]>p->a[j])
{t=p->a[i];p->a[i]=p->a[j];P->a[j]=t;}
)
main()
(
inti;structnodes={10,{2,3J,6,8,7,5,4,10,9}};
f(&s,s.number);
for(i=0;i<s.number;i++)
printf(H%3dH,s.a[i]);
)
【例8.4]简单链表的创建
将三个student型的变量连接成一个简单的链表,并在while循环中输出链表结点数据域
中的数据。
include"stdio.h”
#include,,string.hH
structstudent
(
charnum[5];
charname[10];
intmath;
intenglish;
structstudent*next;
);
main()
(
structstudentsl,s2,s3,*h,*p;
strcpy(sl.nuiii,,,0()r,);strcpy(,"wangfang,,);sl.niath=80;sl.english=75;
slrcpy(s2.num,"002");strcpy(,,,linan,,);s2.niath=90;s2.eiiglish=85;
strcpy(s3.num,"004H);strcpy(s3.naine,,,zhanghuiH);s3.math=87;s3.engIish=78;
h=&sl;
sl.next=&s2;s2.next=&s3;s3.next=*\0,;
p=h;〃①
while(p)
(
printf(,,%s,%8s,%d,%d,,,p->num,p->name,p->math,p->english);
p=p->next;〃②
printf(H\nH);
)
)
注:创建链表是指,从无到有地建立起一个链表,即往空链表中依次插入若干结点,并
保持结点之间的前驱和后继关系。
运行程序并回答①,②两处语句的作用
【实验习题】
1.分析下列程序,并验证程序的运行结果
#include"stdio.h**
structst
{intx;
int*y;
)*P;
intdt[4]={10,20,30,40};
structstaa[4]={50,&dt[0],70,&dt[l],809&dt[2],909&dt[3]};
main()
{p=aa;
printf(n%d\nH,++p->x);
printf(H%d\nH,(++p)->x);
printf(n%d\nH,++(*p->y));
)
2.建立一个通讯录结构体,其成员变量主要有:序号,姓名,电话。根据建好的结构体设计有
5个人员的通讯录,对其赋值,并将5人的通讯录按行输出。
3.改写8.1程序,定义一个指向结构体变量student的指针变量,利用指针变量完成对学生
情况的数据输入及数据显示。
4.改写例8.2程序,定义一个指向结构体数组的指针变量,完成对5个学生的学号、姓名、数
学成绩和英语成绩的成绩进行输入,并编程将每个人的学号、姓名、数学、英语及平均成绩
分行输出。
5.改写程序,将例8.4中链表的建立用函数完成。(提示:定义头结点head,定义新节点指针
pl,定义当前结点指针p2,使用malloc函数动态创建新结点)。
【实验相关内容简介】
结构体是个能够包含不同数据类型的一个结构,是一种能够自己定义的数据类型,通常可用
来定义表示整体信息的一条记录。
1.结构体类型定义
struct结构类型名
{数据类型数据项1;
数据类型数据项2;
数据类型数据项n;
);〃注意此处定义时分号不能少
其中的结构类型名表明了一种新的构造数据类型,其中的数据项称为结构体的数据成员。
2.结构体变量定义
结构体变量定义的形式通常有如下三种方法:
(1)先定义结构体类型,再定义结构体类型变量:
structdate
{intday;
intmonth;
intyear;
structdaleIimel4inie2;
(2)定义结构体类型同时定义结构体类型变量:
structstu
{longintnum;
charname[20];
charsex;
floatscore;
structdatetimel;〃此处结构的成员也是个结构体
}stul,stu2;
(3)直接定义结构体类型变量:
struct
{charname[20];/*通讯录姓名*/
charsex;/*性别*/
longtelephone;/*电话*/
charaddress;/*住址*/
)personl,person2;/*定义该结构体类型变量率/
该定义方法由于无法记录该结构体类型,所以除直接定义外,不能再定义该结构体类型变量。
3.结构体变量成员的引用
结构体变量的成员引用形式为:结构体变量名.成员名
如timel.year=1980;是给结构体变量timel中的year变量赋上年份值;stul.timel.year=1985;
则是给student中timel成员中的year成员赋值,
4.结构体数组的定义
struct结构体类型名结构体变量名[数组长度];
如:structstustd[3];则std是一个包含3个结构体的结构体数组。
5.结构体类型的指针
(1)指向结构体变量的指针
structstustul,*p;
P=&stul;此处将结构体stul的地址赋给了p,p成为了指向结构体stul的指针变量。
(2)指向结构体类型的指针引用
引用形式:指针变量->成员名
如p->num=10〃此表达式的效果相当于stul.num=10;
(3)指向结构体数组的指针
structstustul[3],*p;
p=stul;〃此处变量名前不需加取址符号,因stul本身就代表一个地址
(4)指向结构体数组的指针引用
引用方式较为灵活:①指针变量I下标].成员名如:p|i].num
②(指针变量+i)->成员名
#include,,stdio.hM
structstu
{longintnum;
charname[20J;
charsex;
floatscore;
}stul[3],*p;
main()
{inti;
p=stul;
i=2;
p[2].num=15;〃利用数组下标方法给结构体成员赋值
(p+3)->num=20;〃利用结构体指针为结构体成员赋值
printf("%d%d'*,stul[2].nuin,stul[3].num);
)
6.共用体类型
union共用体类型名
{数据类型数据项
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年安徽宣城市中考历史试题(附答案)
- 2022酒店前台工作总结资料15篇
- 人美版(北京)五年级下册11. 垃圾桶设计教学设计及反思
- 科学二年级下册1.磁铁能吸引什么公开课教案及反思
- 2026年信用钱包个人合同(1篇)
- 第四课 告别懒惰教学设计小学心理健康南大版四年级-南大版
- 人教版 (PEP)四年级下册Unit 2 What time is it Part B第4课时教学设计及反思
- 非遗黄梅戏:历史价值与当代保护【课件文档】
- 内蒙古呼和浩特市新城区第十九中学2025-2026学年第二学期七年级生物第一次学情自测试卷(含答案)
- 吉林省吉林地区普通中学2025-2026学年度高中毕业年级第三次调研测试地理试题(含答案)
- 2024年全国教书育人楷模先进事迹(12篇)
- DL∕T 707-2014 HS系列环锤式破碎机
- 管道应力分析报告
- 光伏居间费协议书
- 湘教版高中数学必修二知识点清单
- 纺织行业的纺织品生产技术培训资料
- 医院整形科室管理制度
- 涉氨制冷企业安全管理培训
- 大众标准目录(中文)
- 连续性血液净化设备技术要求
- 行政法与行政诉讼法培训教案
评论
0/150
提交评论