第6章-结构体与共用体_第1页
第6章-结构体与共用体_第2页
第6章-结构体与共用体_第3页
第6章-结构体与共用体_第4页
第6章-结构体与共用体_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、一、判断题1. 结构体的定义不为它分配具体的内存空间。答案:T2. C+语言结构体类型变量在程序执行期间,所有成员驻留在内存中。答案:T3. 一个共用体变量中可以同时存放其所有成员。答案:F4. 若有定义union dtint a; char b; double c;data;,变量data所占的内存字节数与成员c所占字节数相等。答案:F5. 用typedef可以增加新类型。答案:F6. 共用体类型数据中所有成员的首地址都是同一地址。答案:T7. 可以用已定义的共用体类型来定义数组或指针变量的类型。答案:T8. 共用体类型数据中的成员可以是结构体类型,但不可以是共用体类型。答案:F9. 可以对

2、共用体变量直接赋值。答案:F二、选择题1. 下面关于结构体概念的叙述中,正确的说法是( )。A. 相同类型数据的集合称为结构体B. 不同类型数据的集合称为结构体C. 数据的集合称为结构体D. 整数的集合称为结构体答案:C2. 设有以下说明语句:struct abcint m;float n;stype;则下面错误的叙述是( )。A. struct是定义结构体类型的关键字B. stype是结构体类型名C. m和n都是结构体成员名D. stype是结构体变量名答案:B3. 以下对枚举类型ee的定义中,正确的定义是( )。A. enum ee A, B, C, D;B. enum ee A, B,

3、C, D ;C. enum ee = A, B, C, D;D. enum ee = A, B, C, D ;答案:A4. 以下关于同类型结构体与同类型共用体赋值的叙述中,正确的说法是( )。A. 共用体变量之间可以直接赋值,结构体变量之间也可以直接赋值B. 共用体变量之间可以直接赋值,结构体变量之间不可以直接赋值C. 共用体变量之间不可以直接赋值,结构体变量之间可以直接赋值D. 共用体变量之间不可以直接赋值,结构体变量之间也不可以直接赋值答案:A5. 设有如下定义:struct dataint i;union testchar ch;double q;t;double f;b;若字符型变量占

4、1个字节,整型变量占4个字节,双精度变量占8个字节,则结构体变量b占用内存的字节数是( )。A. 8B. 9C. 18D. 20答案:D6. 以下关于数据类型int的别名定义中,正确的定义是( )。A. typedef int Integer;B. typedef int = Integer;C. typedef Integer int;D. typedef Integer = int;答案:A7. 设有枚举类型定义:enum color red = 3, yellow, blue = 10, white, black ;则枚举常量black的序号值是( )。A. 4B. 5C. 7D. 12

5、答案:D8. 一个结构体变量所占的内存字节数是( )。A. 结构体中第一个成员所需的内存字节数B. 结构体中最后一个成员所需的内存字节数C. 结构体中占用内存最大的成员所需的字节数D. 结构体中各成员所需的内存字节数之和答案:D9. 当定义一个共用体变量时系统分配给它的内存字节数是( )。A. 共用体中第一个成员所需的内存字节数B. 共用体中最后一个成员所需的内存字节数C. 共用体中占用内存最大的成员所需的字节数D. 共用体中各成员所需的内存字节数之和答案:C10.以下关于结构体与共用体数据成员定义的叙述中,正确的说法是( )。A. 结构体类型定义中不能出现共用体类型的成员,共用体类型定义中也

6、不能出现结构体类型的成员B. 结构体类型定义中不能出现共用体类型的成员,共用体类型定义可以出现结构体类型的成员C. 结构体类型定义中可以出现共用体类型的成员,共用体类型定义中不能出现结构体类型的成员D. 结构体类型定义中可以出现共用体类型的成员,共用体类型定义中也可以出现结构体类型的成员答案:D11.在说明一个结构体变量时系统分配给它的存储空间是( )。A. 该结构体中第一个成员所需存储空间B. 该结构体中最后一个成员所需存储空间C. 该结构体中占用最大存储空间的成员所需存储空间D. 该结构体中所有成员所需存储空间的总和答案:D12.若有以下说明和语句: struct worker int n

7、o; char name; work, p=&work; 则以下引用方式不正确的是( )。A. workNoB. (p)noC. p-noD. work-no答案:D13.有如下定义: struct date int year, month, day; ; struct worklist char name20; char sex; struct date birthday; person; 对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是( )。A. year=1958B. birthdayyear=1958 C. personbirthdayyear=1958D. per

8、sonyear=1958答案:C14.以下对结构体类型变量的定义中不正确的是( )。A. #define STUDENT struct student STUDENT int num; float age; std1; B. struct student int num; float age; std1; C. struct int num; float age; std1; D. struct int num; float age; student; struct student std1;答案:D15.设有以下说明语句struct stu int a; float b; stutype;

9、则下面的叙述不正确的是( )。A. struct是结构体类型的关键字B. struct stu是用户定义的结构体类型C. stutype是用户定义的结构体类型名D. a和b都是结构体成员名答案:C16.C+语言结构体类型变量在程序执行期间 ( )。A. 所有成员一直驻留在内存中B. 只有一个成员主留在内存中C. 部分成员驻留在内存中D. 没有成员驻留在内存中答案:A17.以下程序的运行结果是( )。# include main( ) struct date int year, month, day; today;printf(“%dn”,sizeof(struct date); A. 6B.

10、8C. 10D. 12答案:A18.有如下定义struct personchar name9; int age; struct person class10=“Johu”, 17, “Paul”, 19 “Mary”, 18, “Adam 16,; 根据上述定义,能输出字母M的语句是( )。A. prinft(“%cn”,class3.mane); B. pfintf(“%cn”,1); C. prinft(“%cn”,1);D. printf(“%cn”,0);答案:D19.设有如下定义struct ss char name1

11、0;int age;char sex; std3,* p=std;下面各输入语句中错误的是( )。A. scanf(%d,&(*p).age);B. scanf(%s,&);C. scanf(%c,&std0.sex);D. scanf(%c,&(p-sex)答案:B20.设有以下说明语句,则下面的叙述中不正确的是( )。struct ex int x ; float y; char z ; example;A. struct结构体类型的关键字B. example是结构体类型名C. x,y,z都是结构体成员名D. struct ex是结构体类型答案:B21.若程序中有下面的说明

12、和定义:struct stt int x; char b;struct stt a1,a2;则会发生的情况是( )。 A. 程序将顺利编译、连接、执行。B. 编译出错。C. 能顺利通过编译、连接,但不能执行。D. 能顺利通过编译,但连接出错。答案:B22.已知教师记录定义为:struct student int no; char name30; struct unsigned int year; unsigned int month; unsigned int day; birthday; stu;struct student *t = &stu;若要把变量t中的生日赋值为“1980年5月1日

13、”,则正确的赋值方式为( )。A. year = 1980; month = 5; day = 1; B. t.year = 1980; t.month = 5; t.day = 1;C. t.birthday.year = 1980; t.birthday.month = 5; t.birthday.day = 1; D. t- birthday.year = 1980; t- birthday.month = 5; t- birthday.day = 1;答案:D23.以下结构类型可用来构造链表的是( )。 A. struct aa int a;int * b; B. struct bb

14、int a;bb * b; C. struct cc int * a;cc b;D. struct dd int * a;aa b;答案:B24.以下程序的输出结果是( )。amovep(int *p, int a33,int n) int i, j;for( i=0;in;i+)for(j=0;jx,(h1.p)-y); A. 12B. 23 C. 14D. 32答案:D三、程序填空题1. 题目描述:结构体数组中存有3个人的姓名和年龄,输出3个人中最年长者的姓名和年龄。代码:#include struct manchar name20;int age;person=李明,18,王华,19,张

15、平,20;int main()struct man *p,*q;int old;p=person;old= (1) ;q= (2) ;for( ; (3) ; p+)if(oldage)q=p;old= (4) ;cout (5) age;return 0; 答案:(1) p-age (2) p(3) page (5) q-name2. 题目描述:输入学生的信息存入结构体数组。每个学生的信息包括姓名、学号、性别。若是男同学(字符m表示男同学,w表示女同学),则需登记视力正常与否(正常Y,不正常N);若是女同学,则要登记身高和体重(不登记视力)。代码:#include const int N=1

16、0;struct char name10;int number;char sex;unionchar eye;struct int height;int weight;f;body;perN;int main()int i;for(i=0;peri.numberperi.sex;if(peri.sex=m) cin (1) ;elsecin (2) (3) ;return 0;答案:(1) peri.body.eye (2) peri.body. f.height(3) peri.body. f.weight 3. 题目描述:以下程序的功能是计算两个复数的差。代码:#inc

17、lude struct complex float re;float im;complex *sub(complex *x, complex *y) (1) ;z=new complex;z-re=x-re-y-re;z-im=x-im-y-im;return (2) ;int main()complex *t;complex a,b;a.re=10;a.im=20;b.re=3;b.im=4;t=sub( (3) );coutre+imiendl;return 0;答案:(1) complex *z (2) z(3) &a,&b 4. 题目描述:下面的程序按学生姓名查询其排名和平均成绩,查询

18、可连续进行,指导输入0是结束。代码:#include #include const int NUM = 4;struct student int rank;char *name;double score; (1) stuNUM=3,Tom,89.3, 4,Marry,78.2, 1,Jack,95.1, 2,Jim,90.6;int main()char name10;int i;while(1)coutname;if(strcmp(name,0)=0) break;for(i=0;iNUM;i+)if( (2) )cout姓名:endl;cout名次:stui.ranken

19、dl;cout成绩:stui.score=NUM) cout未发现该学生!n;return 0; 答案:(1) student (2) strcmp(,name)=0(3) break 5. 题目描述:下面的程序可以非常完备的求标准一元二次方程“ax2+bx+c=0”的解。代码:#include #include struct double a,b,c;coe;int main()double x1,x2,delt,re,im;coutcoe.acoe.bcoe.c;if (coe.a=0)/处理一元二次方程if(coe.b=0)/处理常量方程“c=0”if( (1) )co

20、ut方程有无穷多个解n;return 0;elsecout (2) n;return 0;x1= (3) ;cout方程的解为:x1endl; (4) ;delt= (5) ;re= (6) ;im=sqrt(fabs(delt)/(2*coe.a);/计算虚部if( (7) )/处理有两个实数解的方程x1=re+im;x2= (8) ;cout方程的两个实数根为:endl;coutx1=x1endl;coutx2=x2endl;return 0;if(!delt)x1= (9) ;cout方程的两个相等的实数根为:endl;coutx1=x1endl;return 0;cout方程的两个复数

21、根为:endl;coutx1=re+imiendl;coutx2=re (10) imi0(8) re-im(9) re+im(10) 四、程序设计题1. 题目标题:求二元一次方程组的解时间限制:MS内存限制:KB题目描述:用结构体表示一个二元一次方程,求二元一次方程组的解: a1x+b1y=c1 (1) a2x+b2y=c2 (2)输入描述:输出描述:样例输入:9x+7y=63x-8y=5样例输出:方程组的解为:x=0. y=-0.参考答案:#include iostream.hstruct eyyc double a,b,c; ;void main( ) double x,y,a1,a2;

22、 char ch; eyyc equation1,equation2,equation3; coutequation1.achequation1.bchchequation1.c; coutequation2.achequation2.bchchequation2.c; a1=equation1.a; a2=equation2.a; equation1.a*=a2; / 方程1乘以a2 equation1.b*=a2; equation1.c*=a2; equation2.a*=a1; / 方程2乘以a1 equation2.b*=a1; equation2.c*=a1; equation3.

23、a=equation1.a-equation2.a; / 方程1减方程2 equation3.b=equation1.b-equation2.b; equation3.c=equation1.c-equation2.c; if (equation3.b=0) / y的系数为0时 if (equation3.c=0) cout任何实数都是方程组的解; else cout方程组无解; coutendl; return; y=equation3.c/equation3.b; x=(equation1.c-equation1.b*y)/equation1.a; / 根据方程1求x的值 cout方程组的

24、解为:n; coutx=xendl; couty=yendl; 2. 题目标题:求任意两点之间的距离时间限制:MS内存限制:KB题目描述:用结构体表示平面上的点,求任意两点之间的距离。输入描述:输出描述:样例输入:1,1 2,2样例输出:两点之间的距离为:1.41421参考答案:#include iostream.h#include math.hstruct point double x; / 横坐标 double y; / 纵坐标 ;void main( ) double distance; point p1,p2; char ch; coutp1.xchp1.y; coutp2.xchp2

25、.y; distance=sqrt(pow(p1.x-p2.x,2)+pow(p1.y-p2.y,2); cout两点之间的距离为:distanceendl; 3. 题目标题:将一个分数化成最简分数时间限制:MS内存限制:KB题目描述:定义一个分数结构体,使用引用参数将一个分数化成最简分数输入描述:输出描述:样例输入:6/10样例输出:化简结果:3/5参考答案:#include iostream.h#include stdlib.hstruct Fraction int numerator; / 分子 int denominator; / 分母 ;void Simplify(Fraction

26、&x);void main() Fraction x; char ch; while(1) coutx.numeratorchx.denominator; if (x.denominator) break; Simplify(x); cout化简结果:; coutx.numerator/x.denominatorendl; / 分数化简void Simplify(Fraction &x) int m,n,r; m=abs(x.denominator); n=abs(x.numerator); while(r=m%n) / 求m,n的最大公约数 m=n; n=r; x.denominator/=

27、n; / 化简 x.numerator/=n; if (x.denominator0) / 将分母转化为正数 x.denominator=-x.denominator; x.numerator=-x.numerator; 4. 题目标题:求一元二次方程的解时间限制:MS内存限制:KB题目描述:对于任意系数a,b,c,在复数范围内求一元二次方程ax+bx+c=0的解。用结构体描述方程。输入描述:输出描述:样例输入:1 2 3样例输出:方程的两个复数根为: x1=-1+1.41421ix2=-1-1.41421i参考答案:#include iostream.h#include math.hstru

28、ct double a,b,c; coe;void main( ) double x1,x2,delt,re,im; coutcoe.acoe.bcoe.c; if (coe.a=0) / 处理一元一次方程:bx+c=0 if (coe.b=0) / 处理常量方程:c=0 if (coe.c=0) cout方程有无穷多个解n; return; else cout方程无解n; return; x1=-coe.c/coe.b; cout方程的解为:x10) / 处理有两个实数解的方程 x1=re+im; x2=re-im; cout方程的两个实数根为:endl; coutx1=x1endl; co

29、utx2=x2endl; return; if (!delt) x1=re+im; cout方程的两个相等的实数根为:endl; coutx1=x1endl; return; cout方程的两个复数根为:endl; coutx1=re+imiendl; coutx2=re-imiendl; 5. 题目标题:求平均成绩时间限制:MS内存限制:KB题目描述:每个学生有3门课程结业考试成绩。输入每个学生的姓名和成绩,计算并输出每个学生的姓名和平均成绩。输入描述:输出描述:样例输入:张三 89 76 68李四 90 80 70n样例输出:平均成绩如下:张三:77.6667李四:80参考答案:#incl

30、ude iostream.h#include string.hstruct Student char *name; / 姓名 int score3; / 考试成绩 double average; / 平均成绩 ;void main() Student d100; int i,n,x1,x2,x3; char s41; cout请输入每个学生的姓名和3门课程考试成绩(输入姓名时若输入“n”则结束输入):n; n=0; while(n99) coutNO.n+1:s; if (strcmp(s,n)=0) break; n+; =new charstrlen(s)+1; strcpy

31、(,s); cinx1x2x3; dn.score0=x1; dn.score1=x2; dn.score2=x3; dn.average=(x1+x2+x3)/3.0; / 计算平均成绩 cout平均成绩如下:n; for(i=1;i=n;i+) :di.averageendl; for(i=1;i=n;i+) / 释放内存 delete ; 6. 题目标题:图书馆图书检索(按作者姓名)时间限制:MS内存限制:KB题目描述:图书馆的图书检索卡记载的内容包括:书名、作者姓名、出版日期、页数、定价等内容。根据上述内容定义一个结构体类型,并按照作者姓名进行查找,按照出版日期顺序从远到近打印出该作者的所有著作。输入描述:输出描述:样例输入:王五样例输出:N0.1: 书名:数据结构作者:王五出版日期:2004年8月18日页码数:200页定价:25元参考答案:#include iostream.h#include string.h#define n 6struct DATE int year; / 年份 int month; / 月份 int day; / 日期 ;struct BOOK char name41; / 书名 char autho

温馨提示

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

最新文档

评论

0/150

提交评论