大学c语言程序设计第五版课件 实验九 结构体_第1页
大学c语言程序设计第五版课件 实验九 结构体_第2页
大学c语言程序设计第五版课件 实验九 结构体_第3页
大学c语言程序设计第五版课件 实验九 结构体_第4页
大学c语言程序设计第五版课件 实验九 结构体_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验九结构体

【实验目的】

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论