第九章 结构体.docx
- 文档编号:25652112
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:14
- 大小:20.58KB
第九章 结构体.docx
《第九章 结构体.docx》由会员分享,可在线阅读,更多相关《第九章 结构体.docx(14页珍藏版)》请在冰豆网上搜索。
第九章结构体
一、概念题
FTTTFTT
二、判断题
1.结构体中的成员不可以单独使用(F)。
2.成员名可以与程序中的变量名相同,二者不代表同一对象(T)。
3.不能将一个结构体变量作为一个整体进行输入输出(T)。
4.结构体变量所占内存长度是各成员占的内存长度之和(T)。
5.结构体中的成员不可以单独使用(F)。
9.一个结构体变量的指针就是该变量所占内存段的起始地址(T)。
10.用结构体变量作实参,形参也必须是同类型的结构体变量(T)。
三、单选题
1.设变量定义如下,则对其中的结构分量num正确的引用是()。
structstudent{
intnum;
charname[20];
floatscore;
}stud[10];
A.stud[1].num=10;B.student.stud.num=10;
C.struct.stud.num=10;D.structstudent.num=10;
2.已知职工记录描述如下,设变量w中的“生日”是“1993年10月25日”,下列对“生日”的正确赋值方式是()。
structworker
{
intno;
charname[20];
charsex;
structbirth{intday;intmonth;intyear;}a;
};
structworkerw;
Aday=25;month=10;year=1993;
Bw.birth.day=25;w.birth.month=10;w.birth.year=1993;
Cw.day=25;w.month=10;w.year=1993;
Dw.a.day=25;w.a.month=10;w.a.year=1993;
3.对于以下的变量定义,语句()在语法和语义上都是正确的。
structnode{
floatx,y;
chars[10];
}point={1,2,”abc”},*p;
A.*p=point;B.p=&point;
C.point=p;D.p->x=point.y;
4.设有以下语句
typedefstructS
{intg;
charh;}T;
则下面叙述中正确的是()。
A.用S定义结构体变量B.可以用T定义结构体变量
C.S是struct类型的变量D.T是structS类型的变量
5.设有如下说明
typedefstructna{intn;charc;doublex;}STD;
则以下选项中,能正确定义结构体数组并赋初值的语句是()。
A.STDtt[2]={{1,'A',62},{2,'B',75}};
B.STDtt[2]={{1,"A",62},2,"B",75};
C.structtt[2]={{1,'A'},{2,'B'}};
D.structtt[2]={{1,"A",62.5},{2,"B",75.0}};
6.若要说明一个类型名STP,使得定义语句STPs等价于char*s,以下选项中正确的是()。
A.typedefSTPchar*s;B.typedef*charSTP;
C.typedefstp*char;D.typedefchar*STP;
7.设有如下定义:
structss{charname[10];
intage;
charsex;
}std[3],*p=std;
下面各输入语句中错误的是()。
A.scanf("%d",&(*p).age);B.scanf("%s",&std.name);
C.scanf("%c",&std[0].sex)D.scanf("%c",&(p->sex));
8.以下程序执行后输出结果是()。
main()
{union{unsignedintn;
unsignedcharc;
}u1
ul.c=’A’;
printf("%c\n",u1.n);
}
A.产生语法错B.随机值C.AD.65
四、程序填空题
Liming:
W
Hangkai:
M
Fangke:
W
1.运行以下程序将打印出如下结果:
#defineNULL0
structperson
{char*nam;
charsex;
structperson*next;};
main()
{structpersona,b,c,d,*head,*s;
a.nam="Liming";a.sex='W';
b.nam="Hangkai";b.sex='M';
c.nam="Liufei";c.sex='M';
d.nam="Fangke";d.sex=【1】’w’;
head=&a;
a.next=【2】&b;
b.next=【3】&d;
d.next=NULL;
s=head;
do{
printf("%s:
【4】%c\n",s->nam,s->sex);
s=s->next;
}while(s!
=NULL);
}
2.以下程序中给指针p分配三个double型动态内存单元,请填空。
#include
main()
{double*p;
p=(double*)malloc(【1】sizeof(double));
p[0]=1.5;p[1]=2.5;p[2]=3.5;
printf("%f%f%f\n",p[0],p[1],p[2]);
}
3.已知结构数组person中存有N个人员的姓名和年龄,以下程序的功能为输出数组中最大者的姓名和年龄。
请填空:
#defineN3
structman
{charname[20];intage;};
structmanfind(structman*p,intn)
{structman*q;
inti;
q=p;
for(i=0;i {if(p->age>q->age【5】)q=p; p++; } returnq; } main() {structman*p,*q; structmanperson[N]={“zhang”,27,”li”,18,”wang”,73}; p=person; q=【6】 find(p,N); printf(“年龄最大者为: %s,其年龄为: %d\n”,q->name,q->age【7】) } 4.已知head指向一个带头结点的链表,链表中每个结点包含整型数据域(data)和指向链表结点的指针域(next),以下函数返回链表中所有结点数据域之和,请填空: structlist {intdata; structlist*next; }; main() {structlist*head; ints; s=sum(head); } sum(structlist*h【5】) {structlist*p; ints=0; p=h->next; while(p! =NULL) {s=p->date【6】; p= p->next【7】; } returns; } 5.下列程序读入时间数值,将其加1秒后,输出,时间格式为hh: mm: ss,即时: 分: 秒。 当小时等于24小时,置为0。 #include struct{inthour;intminute;intsecond;}time; main() {scanf(“%d: %d: %d”,&time.hour,&time.minute,&time.second【1】); time.second++; if(【2】time.second==60){ time.minute++; 【3】time.second=0; if(time.minute==60) {time.hour++; time.minute=0; if(time.hour==24)time.hour=0; } } printf(“%d: %d: %d\n”,time.hour,time.minute,time.second); } 6.下列函数用于将链表中各结点的数据依次输出。 请填空: structstudent{ intdata; structstudent*next; } voidout(structstudent*head) {【8】structstudent*p; p=head; if(head! =NULL) do{ printf(“%d\n”,p->data); 【9】P->next; }while(【10】p! =NULL); } 五、程序阅读题 1.以下程序执行后输出结果: 20412044 structSTU{charname[10]; intnum;}; voidf1(structSTUc) {structSTUb={"LiSiGuo",2042}; c=b; } voidf2(structSTU*c) {structSTUb={"SunDan",2044}; *c=b; } main() {structSTUa={"YangSan",2041},b={"WangYin",2043}; f1(a);f2(&b); printf("%d%d\n",a.num,b.num); } 2.以下程序执行后输出结果是: 580550 structSTU {charname[10]; intnum; intScore; }; main() {structSTUs[5]={{"YangSan",20041,703},{"LiSiGuo",20042,580}, {"wangYin",20043,680},{"SunDan",20044,550}, {"Penghua",20045,537}},*p[5],*t; inti,j; for(i=0;i<5;i++)p[i]=&s[i]; for(i=0;i<4;i++) for(j=i+1;j<5;j++) if(p[i]->Score>p[j]->Score) {t=p[i];p[i]=p[j];p[j]=t;} printf("5d%d\n",s[1].Score,p[1]->Score); } 3.以下程序的运行结果是: 。 2002shangxian #include typedefstructstudent{ charname[10]; longsno; floatscore; }STU; main() {STUa={"zhangsan",2001,95},b={"Shangxian",2002,90},c={"Anhua",2003,95},d,*p=&d; d=a; if(strcmp(a.name,b.name)>0)d=b; if(strcmp(c.name,d.name)>0)d=c; printf("%ld%s\n",d.sno,p->name); } 4.以下程序执行后的输出结果是: shen #include structstu {intnum;charname[10];intage;}; voidpy(structstu*p) {printf("%s\n",(*p).name);} voidmain() {structstustudent[3]={{1001,"Sun",25}, {1001,"Ling",23}, {1003,"Shen",22}}; py(student+2); } 5.以下程序执行后的输出结果是: #include voidmain() {structT1{charc[4],*s;}s1={"abc","def"}; structT2{char*cp;structT1ss1;}s2={"ghi",{"jkl","mno"}}; printf("%c,%c\n",s1.c[0],*s1.s); printf("%s,%s\n",s1.c,s1.s); printf("%s,%s\n",s2.cp,s2.ss1.s); printf("%s,%s\n",++s2.cp,++s2.ss1.s); } 6.以下程序执行后的输出结果是: 4 #include structNODE{ intnum; structNODE*next; }; main() {structNODE*p,*q,*r; intsum=0; p=(structNODE*)malloc(sizeof(structNODE)); q=(structNODE*)malloc(sizeof(structNODE)); r=(structNODE*)malloc(sizeof(structNODE)); p->num=1;q->num=2;r->num=3; p->next=q;q->next=r;r->next=NULL; sum+=q->next->num;sum+=p->num; printf("%d\n",sum); } 7.以下程序执行后输出结果: 2,4,6,8,10 #include #defineLENsizeof(structline) structline {intnum; structline*next; }; voidmain() {intk; structline*p,*head; head=NULL; for(k=10;k>0;k--){ p=(structline*)malloc(LEN); p->num=k; p->next=head; head=p; } while((p=p->next)! =NULL){ printf("%d,",p->num); p=p->next; } } 六、程序设计题 1.定义一个结构体变量,其中每个成员都从键盘接收数据,然后对结构中的浮点数求和,并显示运算结果。 提示: 结构体类型为: struct {charname[8]; intage; charsex[2]; chardepart[20]; floatw1,w2,w3,w4,w5; }a; 注意: 结构体成员的引用方法。 2.定义一个结构体变量(包括年、月、日)。 计算该日在本年中是第几天。 注意闰年问题。 提示: 计算该日是本年中的第几天,是从本年1月1日起。 3.有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入5个学生数据,要求在屏幕上显示出3门课程的平均成绩,以及最高分数的学生的数据(包括学号、姓名、3门课程成绩、平均分)。 提示: 定义结构体数组类型为: structstudent {charnum[6]; charname[8]; intscore[3]; floatavr; }stu[5]; 最高分数是指每个学生3门课程的平均分最高。 4.设有一组学生的成绩数据已经放在结构数组BOY中,计算各个学生的不及格人数。 1)要求: 使用结构指针变量作为函数参数编程。 structstu {intnum; char*name; charsex; floatscore; }boy[5]={{101,“liping”,’m’,45}, {102,“zhangping”,’m’,62.5}, {103,“hefang”,’m’,92.5}, {104,“chengling”,’f’,87}, {106,“wangming”,’m’,58},}; 2)在学生WangMing之前添加一条记录“105,mali,f,20”,并打印结果。 (1)参考书上的插入结点函数。 (2)在主函数中调用该函数。 3)学生chengling已转学,请将其记录从链表中删除,并打印结果; (1)参考书上的删除结点函数。 (2)在主函数中调用该函数。 (3)考虑如果已知被删除结点位于链表末端,程序可以如何简化。 5.编写求链表长度的函数。 提示: 从链表指针头往表尾移动计算结点的个数。 6.已有两个链表a、b,每个链表的结点包括学号、成绩。 要求把两个链表合并,按学号升序排列。 提示: 可以定义一个新的链表,先从链表a,再从链表b中取出结点,依次按学号升序插入到新的链表中。 7.如果我有若干面值为0.1元,0.5元,1元的硬币,任意取出其中三枚,如果其和大于1元就打印该排列。 (1)参考书上程序定义枚举类型数据结构。 (2)用穷举法计算所有可能的排列情况,计算其和。 (3)将和大于1的排列输出。 8.声明新的类型名,用“R”来定义实数,用“Z”来定义整数,计算表达式“x/3+y”的值,分别取x=6.3,y=5。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第九章 结构体 第九 结构