C语言结构体完整版资料_第1页
C语言结构体完整版资料_第2页
C语言结构体完整版资料_第3页
C语言结构体完整版资料_第4页
C语言结构体完整版资料_第5页
已阅读5页,还剩28页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

第十一章结构体11.1概述

在实际应用中,有不少应用问题如果只采用已学的变量和数组作为数据结构显得很不方便。

例:输入100个学生的学号、姓名和考试成绩,编写程序找出高分者和低分者。用变量和数组作数据结构可编写程序如下:main(){inti,num,maxnum,minnum;charname[20],maxname[20],minname[20];intscore,maxscore,minscore;maxscore=0;minscore=100;

for(i=1;i<=100;i++){scanf(%d%s%d”,&num,name,&score);if(score>maxscore){maxscore=score;maxnum=num;strcpy(maxname,name);}if(score<minscore){minscore=score;minnum=num;strcpy(minname,name);}}

输出}明显缺点:①变量过多,同一学生的各个数据无联系,没有整体概念,不便管理。②操作不便(如更新过程)。显然,选用一种能把一个学生的数据构造成一个整体的构造型数据结构更合适,但不能是数组。对于这种情况,可以将一个学生的数据定义为一个结构体类型:

11.2定义结构体类型变量的方法前面定义的结构体类型只是一种“模型”,还必须定义结构体变量后才能存放数据。

定义结构体变量有三种方法:

2、在定义结构体类型的同时定义结构体变量structstudent{intnum;charname[20];intscore;}st,stmax,stmin;

3、直接定义结构体类型变量struct不出现类型名{intnum;charname[20];intscore;}st,stmax,stmin;

常用第一种方法说明:①类型与变量不同,只对变量分配空间与操作。

②对成员可以单独使用,相当于普通变量。③成员也可以是一个结构体变量。

structdatestructstudent{intmonth;{intnum;intday;charname[20];intyear;structdatebirthday;};

}st1,st2;④成员名可以与程序中的变量名相同,两者代表不同的对象。11.3结构体变量的引用

■成员引用

可以对成员单独引用,形式为:结构体变量名.成员名

成员运算符st.num=1001;st.score=90;strcpy(,”Li”);printf(“%d%s%d”,st.num,,st.score);scanf(“%d%s%d”,&st.num,,&st.score);可以引用成员的地址如果成员本身又属一个结构体类型,则要用若干个成员运算符,一级一级地找到最低一级的成员,只能对最低级的成员进行存取与运算。st1.birthday.year=1960;st1.birthday.month=5;st1.birthday.day=15;■整体引用可以对结构体变量进行整体赋值:

stmax=st;

将st中的所有内容赋值给stmax。

对结构体变量的整体操作只限于赋值操作和参数传递,而且要求类型一致。不能对结构体变量进行整体输入输出。

结构体应用举例:

编写程序输入100个学生的学号、姓名和考试成绩,找出高分者和低分者。structstudent{intnum;charname[20];intscore;};11.4结构体变量的初始化

对结构体变量可以在定义时指定初始值

structstudent{intnum;charname[20];intscore;}st={1001,”wang”,95};11.5结构体数组

可以定义结构体数组来存放批量数据。

■结构体数组的定义

structstudent{intnum;charname[20];intscore;};structstudenta[100];定义a数组,可以存放100个学生的数据。a数组的每个元素又是一个结构体变量。■结构体数组的初始化

在定义结构体数组的同时指定初值。structstudent{intnum;charname[20];intscore;};

structstudenta[2]={{1001,”LiLi”,85},{1002,”wang”,90}};或:structstudent{intnum;charname[20];intscore;}a[2]={{1001,”LiLi”,85},{1002,”wang”,90}};■结构体数组元素的引用

成员引用:a[0].num=1001;strcpy(a[0].name,”wang”);a[0].score=85;

整体引用:a[1]=a[0];与普通数组元素的引用相同

■结构体数组的应用

输入100个学生的学号、姓名和考试成绩,然后按从高分到低分的顺序排列后输出。structstudent{intnum;charname[20];intscore;};main(){inti,j;structstudenta[100],t;for(i=0;i<100;i++)scanf(“%d%s%d”,&a[i].num,a[i].name,&a[i].score);用指向结构体的指针作函数参数时,对应的实参应该是同类型的结构体变量的地址(或数组的地址),参数传递是“地址传递”。if(strcmp(leader_name,leader[j].if(score>maxscore)intscore;num=1001;或p->num=1001;用指向结构体的指针作函数参数时,对应的实参应该是同类型的结构体变量的地址(或数组的地址),参数传递是“地址传递”。②操作不便(如更新过程)。intscore;printf(“\n%5d%10s%5d”,a->num,a->name,a>score);num=1001;或(p+i)->num=1001;f(structstudenta)name,”wang”);num=1001;或(p+i)->num=1001;structstudenta[2]=intscore;stmax=st;将st中的所有内容赋值给stmax。intscore;{scanf(%d%s%d”,&num,name,&score);成员运算符a数组的每个元素又是一个结构体变量。if(score>maxscore)intday;charname[20];{scanf(“%s”,leader_name);charname[20];intscore;intnum;f(structstudenta)name,”wang”);num=1001;或p->num=1001;{maxscore=score;maxnum=num;strcpy(maxname,name);}{inti,j;main(){inti,j;charleader_name[20];for(i=1;i<=100;i++){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(“\n%15s%5d”,leader[i].name,leader[i].count);}11.6指向结构体类型数据的指针

■指向结构体类型变量的指针structstudentst,st1;structstudent*p;

p=&st;

定义指向结构体类型数据的指针变量p通过指针变量引用结构体变量:

①成员引用(*p).num=1001;

p->num=1001;(*p).score=85;

p->score=85;strcpy((*p).name,”wang”);

strcpy(p->name,”wang”);

②整体引用st1=*p;

等效于

st1=st;■指向结构体数组的指针structstudenta[100];structstudent*p;

p=a;

通过指针变量引用结构体数组元素:①成员引用(*p).num=1001;

p->num=1001;(*p).score=85;

p->score=85;strcpy((*p).name,”wang”);

或strcpy(p->name,”wang”);

一般地:(*(p+i)).num=1001;

(p+i)->num=1001;(*(p+i)).score=85;

(p+i)->score=85;strcpy((*(p+i)).name,”wang”);或strcpy((p+i)->name,”wang”);也可以用下标法:p[i].num=1001;②整体引用*(p+1)=*(p+0);

或p[1]=p[0];■用结构体变量和指向结构体的指针作函数参数

用结构体变量作函数参数时,对应的实参应该是同类型的结构体变量(或数组元素),参数传递是“值传递”。用指向结构体的指针作函数参数时,对应的实参应该是同类型的结构体变量的地址(或数组的地址),参数传递是“地址传递”。main(){structstudentst={1001,”LiLi”,70};f(st);printf(“\n%5d%10s%5d”,st.num,,st.score);}f(structstudenta){a.score=90;printf(“\n%5d%10s%5d”,a.num,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论