欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    结构体和共用体.doc

    • 资源ID:78974711       资源大小:439.50KB        全文页数:13页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    结构体和共用体.doc

    第十一章 结构体和共用体111 本章基本知识结构112 知识难点解析1结构体与共用体变量在计算机中占用多少内存?解答 结构体变量所占的内存长度等于所有各成员的长度之和,每个成员分别占有自己的内存单元;共用体变量所占的内存长度等于最长的成员的长度。2结构体和共用 体的有几种不同的引用方法?解答 结构体和共用体一样,有两种引用办法,一种是采用成员(分量)运算符“.”;还有一种是采用指针的办法。下面以结构体为例说明这两种不同的引用的方法。struct stuint num;char name10;int age; zhangsan, *lisi;要访问学生zhangsan年龄的办法有两种:zhangsan.age 或者(&zhangsan)>age;要访问学生lisi年龄的办法也有两种:(*lisi).age 或者lisi>age。113 习题1 选择题(1) 以下程序运行的输出结果是( )。main()union char i2;int m;r;r.i0=2;r.i1=0;printf("%dn",r.m);A.2 B.1 C.0 D.不确定分析、解答 答案为A。本题涉及共用体的概念。字符数组i2与整型变量m使用同一内存单元。M占用2个字节,高字节对应i1,低字节对应i0,所以答案为A。(2) 有以下程序输出结果是( )。#include<stdio.h>struct stuint num;char name10;int age;void fun(struct stu *p)printf("%sn",(*p).name);main()struct stu students3=9801,"zhang",20,9802,"Wang",19,9803,"zhao",18;fun(students+2);A.Zhang B.Zhao C.Wang D.18分析、解答 答案为B。在main函数中,定义结构体类型数组student3,并赋初值。即student0=9801,zhang,20,student1=9802, wang,19,student2=9803, zhao,18,调用子函数fun,实参“student+2”为student2的首地址,则p指向student2的首地址,(*p).name即“zhao”。(3) 有下列程序输出结果是( )。#include <stdio.h>main()unionint k; char i2; *a,b; a=&b; a->i0=0x39; a->i1=0x38; printf("%xn",a->k); A.3839 B.3938 C. D.分析、解答 答案为A。题中a是指向共用体类型变量b的指针变量,整型变量k与字符数组i2共用。一个存储单元,k的高位字节对应i1,k的低位字节对应i0.“0x39”表示十六进制数的39。“%x”表示十六进制的格式输出。(4) 设有如下定义:struct num int a;float b; data,*p;若有p=&data;则对data中的a 域的正确引用是( )。A.(*p).data.a B.(*p).a C.p->data.a D.p.data.a分析、解答 答案为B。p指向结构体类型变量data的首地址,*p即代表data,因此答案为B。(5) 若有下面的说明和定义,则sizeof(struct aaa)的值是( )。struct aaa int r1;double r2;float r3;union uuu char u15;long u22;ua;mya;A.30 B.29 C.24 D.22分析、解答 答案为D。这是结构体套用共用体的形式,共用体的长度为8。sizeof 为长度运算符。sizeof(struct aaa)等价于sizeof(mya)=2+8+4+8=22。(6) 设有以下定义typedef union long m;int k5;char ch; DATE;struct date int cat;DATE cow;double dog; too;DATE max;则语句printf(%d,sizeof(struct date)+sizeof(max)的执行结果是( )。A.25 B.30 C.18 D.8分析、解答 答案为B。本题用typedef声明新的类型名“DATE”来代替已有的类型名union。sizeof是长度运算符。max,cow都是共用体类型,长度为“int k5”的长度,即10。所以:sizeof (struct date)+sizeof(max)=(2+10+8)+10=30。(7) 字符0的ASCII码的十进制数为48,且数组的第0个元素在低位,则以下程序的输出结果是( )。#include <stdio.h>main() union int i2;long m;char c4; r,*s=&r;s->i0=0x39;s->i1=0x38;printf(%cn,s->c0);A.39 B.9 C.38 D.8分析、解答:答案为B。“0x39”代表十六进制的39,即十进制的57,c0 对应i0的低字节,由于十进制的57在内存中不超过8个二进制位(大于255不可),所以对应c0的就是57。而字符0的ASCII码的十进制数为48,57就对应字符9。因此答案为B。(8) 若已建立下面的链表结构,指针p,s分别指向图中所示的结点,则不能将所指的结点插入到链表末尾的语句组是( )。EF NULLhead spdata next A. s->next=null;p=p->next;p->next=s;B. p=p->next;s->next=p->next;p->next=s;C. p=p->next;s->next=p;p->next=s;D. p=(*p).next;(*s).next=(*p).next;(*p).next=s;分析、解答:答案为C。s->next=p;p->next=s使得p,s所指的节点构成了环路而不是链表。(9)根据下面的定义,能打出字母M的语句是( )。struct student char name9;int age;struct student class10= John,17, Paul,19, Mary,18, Adam,16;A.printf(%cn,class3.name);B.printf(%cn,class3.name1);C.printf(%cn,class2.name1);D.printf(%cn,class2.name0;分析、解答:答案为 D。本题的要点是结构体成员的表示。class10是结构体类型的数组,每个元素的长度是11,前9 个字符型的放名字,后两个整型的放年龄。A是指“Adam”。B是指d。C 是指a。D指M。(10). 下列程序的执行结果为( )。struct str char *s;int i;struct str *sip;main() static struct str a="abcd",1,a+1,"efgh",2,a+2,"ijkl",3,a;struct str *p=a;int i=0;printf("%s%s%s",a0.s,p->s,a2.sip->s);printf("%d%d",i+2,-ai.i);printf("%cn",+ai.s3);A.abcd abcd abcd 2 0 e B.abcd efgh ijkl 2 0 eC.abcd abcd ijkl 2 0 e D.abcd abcd abcd 2 1 e分析、解答:答案为 A。(11). 下面程序的输出结果为( )。struct st int x;int *y; *p;int data4=10,20,30,40;struct st aa4=50,&data0,60,&data1,70,&data2,80,&data3;main() p=aa;printf("%dn",+p->x);printf("%dn",(+p)->x);printf("%dn",+(*p->y);A.10 B.50 C. 51 D.6020 60 60 7020 21 21 31分析、解答 答案为C。本题的说明中定义了一个名为st的结构体。它由两个成员组成:一个是整型变量x;一个是指针变量。在定义的同时说明了一个指向这一结构类型的指针变量p.数组每个元素是一个含有两个成员的struct st型的结构,并赋有初值。在main函数中执行p=aa;语句后,p指向了数值的首地址,它们之间的关系如图所示:.p10aa0.x50dt0aa0.y. 20aa1.x609dt1aa1.y.30aa2.x70dt2aa2.y.dt340aa3.yaa3.x.80这里需要注意运算符的优先级,对于题目中涉及的运算符()、>、+、*,其中括号最优先,其次是指向结构体成员运算符>,下来是自增运算符+和指针运算符*,它们属于同级运算,其结合方向是“自右至左”。参照上图可知,第一条printf语句的输出项+pàx是先找出pà(其值为50),再将其值自增1,取增值后的值,故输出51。第二条printf语句的输出项为(+p)àx,它表示先将指针p自增1,指向aa数组的第二个元素aa1,然后取其第一个成员aa1.x的值。故输出为60。第三次的输出项为+(*pày)。此时p已指向aa1,因此输出项等价于+(data1),先取出data1的值(20),再将其增1,故输出21。由此可见,答案C正确。(12). 设有以下语句:struct studentint n;struct student *next;static struct student a3=5,&a1,7,&a2,9,'0',*p;p=&a0;则表达式( )的值是6。A.p+->n B.p->n+ C.(*p).n+ D.+p->n分析、解答:答案为 D。(13). 下面程序的输出是( )。main() enum teama,b=4,c,d=c+10;printf("%d %d %d %dn",a,b,c,d);A.0 1 2 3 B.0 4 0 10 C.0 4 5 15 D.1 4 5 15分析、解答 答案为C。根据C语言的语法规定,一旦定义了一个枚举类型,编译系统将按顺序为每个枚举元素分配一个对应的序号,序号值从0开始,后续元素的序号顺序加1。此外,C语言也允许在定义枚举类型的同时人为地指定枚举元素的序号值,凡没有指定序号值的元素则在前一元素序号的基础上顺序加1。由此可知,题中第一个枚举元素a的序号值为0;第二个元素b的序号值为4;第三个元素c的序号值为5;第四个元素d的序号值为15。故本程序的输出结果应当是答案C。(14). 下面程序的输出是( )。main() struct cmplxint x;int y;num2=1,3,2,7;printf("%dn",num0.y/num0.x*num1.x);A.0 B.1 C.3 D.6分析、解答 答案为D。题中定义了结构体类型数组num,程序中已给出:num0.x的值是1,num0.y的值是3,num1.x的值是2.由于C语言中的运算符“/”和“*”优先级相同,且运算顺序从左至右,因此该程序应输出结果是6。(15). 下面程序的输出是( )。typedef union long x2;int y4;char z8; MYTYPE;MYTYPE them;main() printf("%dn",sizeof(them);A.32 B.16 C.8 D.24分析、解答 答案为C。此题参考知识难点解析1。2 填空题(1) 有以下定义和语句,则sizeof(a)的值是【1】,而sizeof(a.share)的值是【2】。struct date int day;int month;int year;union int share1;float share2;share; a;分析、解答 答案为【1】10 【2】4本题的知识点是考察结构体、共用体变量占内存大小。具体参考知识难点解析1(2)若有以下说明和定义语句,则变量w在内存中所占字节数_。union aa float x,y;char c6;struct st union aa v;float w5;double ave; w;分析、解答 答案为34。W的占内存大小sizeof(v)+sizeof(w5)+sizeof(ave)=6+4×5+8=34。(3)有以下说明定义语句,可用a.day引用结构体成员day,请写出引用结构体成员a.day的其它两种形式【 1 】 【 2 】。 int day;char mouth;int year; a,*b;b=&a;分析、解答 答案为【1】(*b).day 【2】b->day具体参考知识难点解析2。(4)为了建立如图所示的存储结构(即每个结点含两个域,data是数据域,next是指向该结构的指针域,data用以存放整型数)请填空。 datanext struct link char data;( 【 1 】 )node;分析、解答 答案为【1】struct link *next本题的知识点是链表。(5)变量root有如图所示的存储结构,其中sp是指向字符串的指针的指针域,nextp是指向该结构的指针域,data用以存放整型数。请填空,完成此结构的类型说明和变量root的定义。Sp data nextp rootstruct list char *sp;(【1】 )(【2】)root;分析、解答 答案为【1】struct list *nextp 【2】int data本题的知识点是链表。(6)下列程序的执行结果为_。main() union bt int k;char c2;a;a.k=-7;printf("%o,%on",a.c0,a.c1);分析、解答 答案为,本题的知识点是共用体的各成员共用一段内存。(7).若有以下的说明、定义和语句,则输出结果为_(已知字母A的十进制数为65)。main() union un int a;char c2; w;w.c0='A'w.c1='a'printf("%on",w.a);分析、解答 答案为60501。本题考察知识点还是共用体的各成员共用一段内存。W占2个字节的空间,第一个字节w.c0='A',即65,第二个字节w.c1='a',即97,整个2个字节的空间里分布的两进制数值是00001 ,八进制即60501。(8). 程序运行的结果是_。main() union exam struct int x;int y; in;int a;int b;em;em.a=1;em.b=2;em.in.x=em.a*em.b;em.in.y=em.a+em.b;printf("%d,%dn",em.in.x,em.in.y);分析、解答 答案为4,8。(9).下面程序的输出结果是_。struct em int a;int *b;main() struct em s4,*p;int n=1,i;for(i=0;i<4;i+) si.a=n;si.b=&si.a;n=n+2;p=&s0;printf("%d,%dn",+(*p->b),*(s+2)->b);分析、解答 答案为2 5(10).下面程序的输出结果是_。#include<stdio.h>union un int i;char ch2; a;main() a.ch0=13;a.ch1=0;printf("%dn",a.i);分析、解答 答案为13(11). 若有以下的说明和语句,已知int类型占两个字节,则以下的输出结果为_。main() struct st char a10;int b;double c;printf("%dn",sizeof(struct st);分析、解答 答案为20。本题的知识点是考察结构体、共用体变量占内存大小。具体参考知识难点解析1(12). 若有以下的说明和语句,已知int类型占两个字节,则以下的输出结果为_。main() union un int i;double y;struct st char a10;union un b;printf("%dn",sizeof(struct st);分析、解答 答案为18本题的知识点是考察结构体、共用体变量占内存大小。具体参考知识难点解析1。(13). 下面程序的输出是_。main() enum emem1=3,em2=1,em3;char *aa="AA","BB","CC","DD"printf("%s%s%sn",aaem1,aaem2,aaem3);分析、解答 答案为DDBBCC。题目所给枚举表中的枚举符em1和em2已通过赋值改变其值为3和1,而枚举符em3没有赋值,则其值为前面一个枚举符的值加1,即em3取值为2。这样在printf语句中输出的将是以aa3、aa1和aa2为起始地址的字符串”DD”、”BB”和”CC”,考虑到输出格式控制中各字符串之间没有换行符,所以程序运行后其输出结果是DDBBCC.74 实验指导1 实验目的(1)掌握结构类型变量与数组的定义和使用;(2)掌握使用结构指针和结构变量名使用结构成员的方法;(3)掌握链表的基本概念和操作;(4)掌握联合的概念与使用。2 实验内容编写程序并上机调试运行,做到充分理解程序的内涵。(1)输入并运行下面程序,观察结果,分析联合变量的存储特点。(2)有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩。(3)下面的程序,构造一个如下图所示的三个结点的链表,并顺序输出链表中结点的数据。102030nullhabc3 编程环境及程序代码(1) 编程环境:Turbo C 2.0。(2) 程序代码第一题:#include <stdio.h>void main( )union int i2;long k;char c4; t, *s=&t;s->i0=0x39; /* 按照整型成员的类型赋值*/s->i1=0x38;printf("%lxn ",s->k); /* 按照长整型成员的类型使用储存内容*/printf("%cn ",s->c0); /* 按照字符型成员的类型使用储存内容*/第二题:#include "stdio.h"struct student char num6; char name8; int score3; float avr; stu5;main() int i,j,sum; /*input*/ for(i=0;i<5;i+) printf("n please input No. %d score:n",i); printf("stuNo:"); scanf("%s",stui.num); printf("name:"); scanf("%s",stui.name); sum=0; for(j=0;j<3;j+) printf("score %d.",j+1); scanf("%d",&stui.scorej); sum+=stui.scorej; stui.avr=sum/3.0; 第三题:#include <stdio.h>struct node int data;struct node *next; /* 指向本结点类型的指针是实现链*/;void main( ) struct node a,b,c,*h,*p; /* 定义三个结点h 是头指a.data=10; b.data=20; c.data=30; /* 结点的数据赋值*/h=&a; /* 头指针指向a 结a.next=&b; /* a 结点的指针指向b 结点b.next=&c; /* b 结点的指针指向c 结点c.next=NULL; /* c 结点的指针值为空,表示最后一p=h; /* 遍历每一个结点,打印数据*/while (p) printf("%d ",p->data);p=p->next; /* 指针移到下一个结点*/

    注意事项

    本文(结构体和共用体.doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开