结构体.docx
- 文档编号:30262357
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:29
- 大小:38.51KB
结构体.docx
《结构体.docx》由会员分享,可在线阅读,更多相关《结构体.docx(29页珍藏版)》请在冰豆网上搜索。
结构体
7.1知识要点
1.1. 掌握结构的概念和结构类型的定义;
2.2. 掌握结构变量的定义和初始化;
3.3. 掌握结构体指针变量的定义和运算;
4.4. 掌握结构成员的访问、结构赋值的含义以及结构与指针、函数的关系;
5.5. 掌握函数的参数为结构体类型时,参数之间的正确传递;
6.6. 了解共用体定义、变量定义和对共用体变量进行的操作;
7.7. 了解枚举类型定义,变量定义主和对枚举型变量进行的操作;
8.8. 掌握用typedef定义数据类型。
7.2典型例题分析与解答
例题1:
下列结构体定义,正确的是()。
A.B.
record{structrecord{
intno;intno;
charnum[16];charnum[16];
floatscore;floatscore;
};}
C.D.
structrecord{structrecord{
intno;intno
charnum[16];charnum[16]
floatscore;};floatscore}
答案:
C
分析:
结构体类型定义必须以关键字struct开头,即A不正确,不能选择。
D中结构体中定义成员语名没有用分号结束,故不正确,不能选择D。
根据结构体类型说明形式要求必须用分号结束,所以B和C中,只能选择C。
例题2:
下列声明结构体变量错误的是()。
A.structstudentB.structstudent
{{
intno;intno;
charname[16];charname[16];
}st1,st2;};
structstudentst1,st2;
C.D.
structstudent{structstudent{
intno;intno;
charname[16];charname[16];
};};
studentst1,st2;structst1,st2;
答案:
D
分析:
结构体变量定义有两种方式,一是在定义结构体类型时说明结构体变量,如A,即A是正确的。
二是用结构体类型说明结构体变量。
如B和C,即B和C也是正确。
不能只用结构体关键字去说明结构体变量,即D不正确,只能选择D。
例题3:
设有以下说明,则正确的赋值表达式为( )。
structx
{intno;charname[20];floatscore;}y;
A.y.no=10;B.y->no=10;C.x.no=10;D.x->n0=10;
答案:
A
分析:
引用结构体成员是普通变量是:
变量.成员,引用结构体指针变量是:
变量->成员。
例题4:
若已建立如下链表结构,指针p,q分别指向如下图所示的结点,用以将p所指向结点从链表中删除并释放该结点的正确程序段是( )。
结点结构
A.q->next=p->next B.deletep;q->next=p->next;
C.q->next=p->next;deletep;D.p=p->next;q->next=p;deletep;
答案:
C
分析:
A虽然在单链表中,把结点p跳过,但是结点p所占内存空间没有释放。
B是先释放结点p所占内容空间,以下操作均不正确了。
C在单链表中,把结点p跳过,也将结点p所占内存空间释放,所以正确。
D在单链表中,先把p从结点2移到下一个结点3,再将q->next连到结点3,即跳过结点2,但是删除的是结点3而不是结点2,不正确。
例题5:
在定义一个共用体变量时,系统为其分配存储空间的原则是( )。
A.A.按所有成员需要的存储空间总和分配。
B.B.按成员中占存储空间最大者分配。
C.C.按成员占存储空间最小者分配。
D.D.按第一个成员所需的存储空间分配。
答案:
B
分析:
根据共用体定义规则,系统为其分配存储空间是按其成员中占存储空间最大者分配。
例题6:
设有以下定义枚举型,则元素green值是( )。
enumcolor{red=2,yellow,blue,green};
A.5 B.4 C.3 D.以上答案均不正确
答案:
A
分析:
由枚举定义知,enum是自定义枚举类型,它有元素red、yellow、blue和green,由枚举定义知,枚举类型的每个元素,都有一个在定义时按元素位置从左到右默认值,依次是0,1,2,……。
本题中red的起始值是2,所以以后各元素值依次为3,4,5……。
故green的值是5。
例题7:
写出下列程序运行结果:
#include
structpiont
{intx; inty; } st[5]={1,2,3,4,5,6,7,8,9,10};
voidmain()
{inti;
piont*p;
p=st;
for(i=0;i<5;i++)
{cout< p++; } } 运行结果是: 1 2 34 56 78 99 10 分析: st是一个结构体数组,p是结构体指针变量,并取得结构体数组首地址,p->x和p->y分别表示结构体两个成员,所以运行结果如上所示。 例题8: 下列函数average功能是计算10名学生3门课成绩的平均分,请填空。 #include constintm=3; constintn=10; structstud{ intno; charname[16]; floatmark[m]; floatave; }; voidaverage(studst[]) {inti,j; floatsum; for(i=0;i {sum= (1);//1 for(j=0;j sum= (2);//2 (3)=sum/m;//3 } } voidmain() {studpreson[n]; . . . average(preson); . . . } 答案: (1)0.0 (2)sum+st[i].mark[j](3)st[i].ave 分析: 结构体数组定义和结构体成员的表示可得到上述结果。 例题9: 函数findbook的功能是: 在有n个元素的数组s中查找名为a的书若找到,函数返回数组下标,否则,函数返回-1,请填空。 structdata {intid; charname[20]; doubleprice; }book[100]; intfindbook(datas[],intn,chara[]) {inti; for(i=0;i if( (1))returni;//1 (2);//2 } 答案: (1)strcmp(s[i].name,a)==0 (2)return-1 分析: 根据结构体定义和字符串比较函数。 例题10: 学生姓名(name)和年龄(age)存于结构体数组person中,函数fun的功能是: 找出年龄最小的那名学生,找出程序错误,并改正。 #include structstud{ charname[20]; intage; }; fun(studperson[],intn)//1 {intmin; min=0; for(i=0;i if(person[i] return(person[min]); } voidmain() {studa[]={{"Zhao",21},{"Qian",20},{"Sun",19},{"LI",22}}; intn=4; studminpers; minpers=fun(a,n); cout<<"年龄最小者是: "< } 答案: (1)studfun(studperson[],intn) (2)for(inti=0;i (3)person[i].age 分析: (1) (1) 函数fun的返回值是结构体类型,所示的返回类型也必须是结构体类型,即studfun(studperson[],intn)。 (2) (2) 变量i在函数fun中定义,在循环语句中必须说明。 (3)(3) 因为是找年龄最小的记录,在比较时应该是比较成员年龄。 例题11: 利用第3题定义的结构体类型,编写一个小型的班级同学信息的管理系统。 要求至少设有以下实用功能: 录入学生信息,求某门或各门课程的总分、平均分,按姓名或学号寻找学生的记录并显示,浏览学生信息,按指定的若干门课程或按总分由高到低显示学生信息等。 #include #include #include charch[80]; structstud {intno; charname[20]; intmath; inteng; intc; intsum; }st[10]; intn=-1; voidinputst()//输入学生记录 {intx=1; cout<<"请输入学生学号、姓名、数学、英语、C++成绩,学号为0 结束"< while(x) {cin>>x; if(x){n++;st[n].no=x; cin>>st[n].name>>st[n].math>>st[n].eng>>st[n].c; st[n].sum=st[n].math+st[n].eng+st[n].c; } elsebreak; } } voidshow() //显示学生记录 {inti;chary; cout<<"学号"<<""<<"姓名"<<""<<"数学"<<""<<"英语"<<""; cout<<<<"C++"<<""<<"总分"< for(i=0;i<=n;i++) {cout< cout< cout<<"按任意键继续"< cin>>y; } voidlocat() //查找 {inti,yn=1,x;chary; charname[20]; cout<<"\t\t"<<"1.按姓名查找\n"; cout<<"\t\t"<<"2.按学号查找\n"; cout<<"请选择(1--2)"; cin>>yn; if(yn==1) {cout<<"\t\t输入姓名 "; cin>>name; for(i=0;i<=n;i++) if(strcmp(st[i].name,name)==0)break; if(i<=n) {cout< cout< elsecout<<"没有找到\n"; } else {cout<<"输入查询学号"; cin>>x; for(i=0;i<=n;i++) if(st[i].no==x)break; if(i<=n) {cout< cout<<< elsecout<<"没有找到\n"; } cout<<"按任意键继续"< cin>>y; } voidaverage() {inti,j=1,k; inta[3]={0,0,0}; for(k=0;k<=n;k++) {a[0]+=st[k].math;a[1]+=st[k].eng;a[2]+=st[k].c;} while(j) { cout<<"\t\t1.数学\n"; cout<<"\t\t2.英语\n"; cout<<"\t\t3.C++\n"; cout<<"\t\t4.各门课\n"; cout<<"\t\t0.退出\n"; cout<<"请选择(0--4)"; cin>>i; switch(i) {case1: cout<<"数学总分: "< "< case2: cout<<"英语总分: "< "< case3: cout<<"C++总分:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构