结构体共用体

发布时间:2014-07-24 16:45:29   来源:文档文库   
字号:

习题十一 结构体和共用体

选择题

1. 设有以下语句

typedef struct TT {char c; int a[4];}CIN;

则下面叙述中正确的是______

A、可以用TT定义结构体变量 BTTstruct类型的变量

C、可以用CIN定义结构体变量 DCINstruct TT类型的变量

2. 有以下结构体说明、变量定义和赋值语句

struct STD

{ char name[10];int age;char sex;

}s[5],*ps; ps=&s[0];

则以下scanf函数调用语句中错误引用结构体变量成员的是______

Ascanf("%s",s[0].name); Bscanf("%d",&s[0].age);

Cscanf("%c",&(ps->sex)); Dscanf("%d",ps->age);

3. 有以下程序

typedef struct{int b,p;}A;

void f(A c) /* 注意c是结构变量名 */

{ int j;

c.b+=1; c.p+=2;}

main()

{ int i;

A a={1,2};

f(a);

printf("%d,%d\n",a.b,a.p);}

程序运行后的输出结果是______

A2,3 B2,4 C1,4 D1,2

4. 若有以下定义和语句

union date

{ int i; char c; float f;} x; int y;

则以下语句正确的是______

Ax=10.5; Bx.c=101; Cy=x; Dprintf("%d\n", x);

5. 有以下程序段

typedef struct NODE

{int num; struct NODE *next; }OLD;

以下叙述中正确的是______

A、以上的说明形式非法 BNODE是一个结构体类型

COLD是一个结构体类型 DOLD是一个结构体变量

6. 以下对结构体类型变量td的定义中,错误的是______

Atypedef struct aa Bstruct aa

{ int n; { int n;

float m; float m;

}AA; }td;

AA td; struct aa td;

Cstruct Dstruct

{ int n; { int n;

float m; float m;

}aa; }td;

struct aa td;

7.有以下程序:

struct STU{char name[10]; int num;};

void f1(struct STU c)

{struct STU b={"LiSiGuo",2042};c=b;}

void f2(struct STU *c)

{struct STU b={"SunDan",2044};*c=b;}

main()

{struct STU a={"YangSan",2041},b={"WangYin",2043};

f1(a);

f2(&b);

printf(%d %d,a.num,b.num)

}

执行后输出结果是______

A2041 2044 B2041 2043 C2042 2044 D2042 2043

8. 有以下程序:

#include

union pw { int i; char ch[2];}a;

main()

{ a.ch[0]=13;a.ch[1]=0;

printf("%d\n",a.i);}

程序的输出结果是(注意:ch[0]在低字节,ch[1]在高字节)______

A13 B14 C208 D209

10.有以下程序:

struct s

{ int x,y; } data[2]={10,100,20,200};

main()

{ struct s *p=data;

printf("%d\n",++(p->x));}

程序运行后的输出结果是______

A10 B11 C20 D21

11. 有以下程序段

typedef struct node{int data; struct node *next; } *NODE;

NODE p;

以下叙述中正确的是______

Ap是指向struct node结构变量的指针的指针 BNODE p;语句出错

Cp是指向struct node结构变量的指针 Dpstruct node结构变量

12.有以下程序段

struct st

{int x;int *y;}*pt;

int a[]={1,2},b[]={3,4};

struct st c[2]={10,a,20,b};pt=c;

以下选项中表达式的值为11的是______

A*pt->y Bpt->x C++pt->x D(pt++)->x

13.有以下说明和定义语句

struct student

{ int age; char num[8];};

struct student stu[3]={{20,"200401"},{21,"200402"},{19,"200403"}};

struct student *p=stu;

以下选项中引用结构体变量成员的表达式错误的是______

A(p++)->num Bp->num C(*p).num Dstu[3].age

14.已知字符0ASCII码为十六进制的30,下面程序

main()

{ union{ unsigned char c;

unsigned int i[4]; }z;

z.i[0]=0x39; z.i[1]=0x36;

printf("%c\n",z.c); }

A6 B9 C0 D3

15. 有以下程序

#include

#include

typedef struct{ char name[9]; char sex; float score[2]; } STU;

void f(STU a)

{ STU b={"Zhao",'m',85.0,90.0}; int i;

strcpy(a.name,b.name);

a.sex=b.sex;

for(i=0;i<2;i++) a.score[i]=b.score[i];

}

main()

{ STU c={"Qian",'f',95.0,92.0};

f(c); printf("%s,%c,%2.0f,%2.0f\n",c.name,c.sex,c.score[0],c.score[1]);

}

程序的运行结果是______

AQian,f,95,92 BQian,m,85,90 CZhao,f,95,92 DZhao,m,85,90

16. 以下关于typedef的叙述错误的是______

A、用typedef可以增加新类型

Btypedef只是将已存在的类型用一个新的名字来代表

C、用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名

D、用typedef为类型说明一个新名,通常可以增加程序的可读性

17. 以下结构体类型说明和变量定义中正确的是______

Atypedef struct

{int n; char c;} REC;

REC t1,t2;

Bstruct REC;

{int n; char c;};

REC t1,t2;

Ctypedef struct REC;

{int n=0; char c= 'A';}t1,t2;

Dstruct

{int n; char c;} REC;

REC t1,t2;

18. 设有以下定义

union data

{ int d1; float d2; } demo;

则下面叙述中错误的是______

A、变量demo与成员d2所占的内存字节数相同 B、变量demo中各成员的地址相同

C、变量demo和各成员的地址相同 D、若给demo.d199demo.d2中的值是99.0

19. 若程序中有以下的说明和定义:

struct abc

{ int x;char y; }//因为这里缺少分号

struct abc s1,s2;

则会发生的情况是______

A、编译时错 B、程序将顺序编译、连接、执行

C、能顺序通过编译、连接、但不能执行 D、能顺序通过编译、但连接出错

21. 有以下程序

#include

struct st

{ int x,y;} data[2]={1,10,2,20};

main()

{ struct st *p=data;

printf("%d,",p->y); printf("%d\n",(++p)->x);

}

程序的运行结果是______

A10,1 B20,1 C10,2 D20,2

22. 以下程序的输出结果是______

main( )

{ union { char i[2];

int k;

} r;

r.i[0]=2; r.i[1]=0;

printf("%d\n",r.k);

}

A2 B1 C0 D、不确定

24. 设有以下说明语句

struct ex

{ int x; float y;char z; } example;

则下面的叙述中不正确的是______

Astruct是结构体类型的关键字 Bexample是结构体类型名

Cxyz都是结构体成员名 Dstruct ex是结构体类型

25. 以下各选项企图说明一种新的类型名,其中正确的是______

Atypedef v1 int; Btypedef v2=int; Ctypedef int v3; Dtypedef v4: int

26. 以下程序的输出结果是______

union myun

{ struct

{ int x,y,z;}u;

int k;

}a;

main()

{ a.u.x=4;a.u.y=5;a.u.z=6;

a.k=0;

printf("%d\n",a.u.x);

}

A4 B5 C6 D0

27. 以下程序的输出结果是______

struct HAR

{ int x,y;struct HAR *p;} h[2];

main()

{ h[0].x=1;h[0].y=2;

h[1].x=3;h[1].y=4;

h[0].p=&h[1];h[1].p=h;

printf("%d%d\n",(h[0].p)->x,(h[1].p)->y);

}

A12 B23 C14 D32

28. 设有以下说明语句

typedef struct

{ int n;

char ch[8];

}PER;

则下面叙述中正确的是______

APER是结构体变量名 BPER是结构体类型名

Ctypedef struct是结构体类型 Dstruct是结构体类型名

29. 设有如下说明

typedef struct

{int n;char c;double x;}STD;

则以下选项中 ,能正确定义结构体数组并赋初值的语句是______

ASTD tt[2]={{1,'A',62},{2,'B',75}}; BSTD tt[2]={1,"A",62,2,"",75};

Cstruct tt[2]={{1,'A'},{2,'B'}} ;Dstruct tt[2]={{1,"A",62.5},{2,"B",75.0}};

30. 设有如下定义:

struct ss

{ char name[10];

int age;

char sex;

} std[3],*p=std;

下面各输入语句中错误的是______

Ascanf("%d",&(*p).age); Bscanf("%s",&std.name);

Cscanf("%c",&std[0].sex); Dscanf("%c",&(p->sex));

1. 若有定义“struct AA {int a; char b; double c;}x;,x占用空间大小为____1113____字节。

2. 当定义一个结构体变量时,系统分配给该变量的内存大小等于各成员所需内存大小的_______

3. C提供的预处理命令有宏定义命令,条件编译命令和___文件包含命令_________

4.共用体变量所占用的内存空间是其各个成员所占内存空间_____的最大值_______

5.调用系统函数时,要先使用#include命令包含该系统函数的原型语句所在的___头文件_______

6. #include命令中所包含的头文件,可以是系统定义的头文件,也可以是__用户______定义的头文件。

7. 使用#include命令可以包含一个头文件,也可以包含一个__程序____文件。

8. C程序中包含一个头文件或程序文件的预编译命令为____#include ______

9. 程序中的预处理命令是指以__#____字符开头的命令。

10. 设有如下宏定义

#define MYSWAP(z,x,y) {z=x; x=y; y=z;}

以下程序段通过宏调用实现变量ab内容的交换,请填空。

float a=5,b=16,c;

MYSWAP(__c____,a,b); 标准答案为c

11. 共用体变量(能/不能)__不能___用做函数的参数,函数(能/不能)__不能____返回共用体变量。

12. 以下程序的的输出结果是______

#include

#define M 5

#define N M+M

main()

{ int k ;

k=N*N*5; printf("%d\n ",k);

}

标准答案为55

13. 有以下定义和语句,则sizeof(a)的值是__10_16___,而sizeof(a.share)的值是__4____

struct date

{ int day;

int mouth;

int year;

union { int share1;

float share2;

}share;

} a;

14. 下面程序的运行结果是:__80____

typedef union student

{char name[10];

long sno;

char sex;

float score[4];

}STU;

main()

{STU a[5];

printf("%d\n",sizeof(a));

}

15.引用结构体变量中成员的一般形式是____ 结构体变量名.成员名 __

指针、结构体

1 人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中,且编号唯一。函数fun的功能是:找出指定编号人员的数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数据中的编号为空串。

#include

#include

#define N 8

typedef struct

{ char num[10];

int year,month,day ;

}STU;

__ STU ____ fun(STU *std, char *num)

{ int i; STU a={"",9999,99,99};

for (i=0; i

if( strcmp(___std[i].num___,num)==0 )

return (___std[i]___);

return a;

}

main()

{ STU std[N]={ {"111111",1984,2,15},{"222222",1983,9,21},{"333333",1984,9,1},

{"444444",1983,7,15},{"555555",1984,9,28},{"666666",1983,11,15},

{"777777",1983,6,22},{"888888",1984,8,19}};

STU p; char n[10]="666666";

p=fun(std,n);

if(p.num[0]==0)

printf("\nNot found !\n");

else

{ printf("\nSucceed !\n ");

printf("%s %d-%d-%d\n",p.num,p.year,p.month,p.day);

}

}

1 处内容为[STU fun(STU *std, char *num)]

2 处内容为[if( strcmp(std[i].num,num)==0 )]

3 处内容为[return (std[i]);]

2. 人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中。函数fun的功能是:找出指定出生年份的人员,将其数据放在形参k所指的数组中,由主函数输出,同时由函数值返回满足指定条件的人数。

#include

#define N 8

typedef struct

{ int num;

int year,month,day ;

}STU;

int fun(STU *std, STU *k, int year)

{ int i,n=0;

for (i=0; i

if( ___std[i].year___==year)

k[n++]= ___std[i]___;

return (___n___);

}

main()

{ STU std[N]={ {1,1984,2,15},{2,1983,9,21},{3,1984,9,1},{4,1983,7,15},

{5,1985,9,28},{6,1982,11,15},{7,1982,6,22},{8,1984,8,19}};

STU k[N]; int i,n,year;

printf("Enter a year : "); scanf("%d",&year);

n=fun(std,k,year);

if(n==0)

printf("\nNo person was born in %d \n",year);

else

{ printf("\nThese persons were born in %d \n",year);

for(i=0; i

printf("%d %d-%d-%d\n",k[i].num,k[i].year,k[i].month,k[i].day);

}

}

1 处内容为[if( std[i].year==year)]

2 处内容为[k[n++]= std[i];]

3 处内容为[return (n);]

3. 给定程序通过定义并赋初值的方式利用结构体变量存储了一名学生的学号、姓名和3门课的成绩。函数fun的功能是将该学生的各科成绩都乘以一个系数a

#include

typedef struct

{ int num;

char name[9];

float score[3];

}STU;

void show(STU tt)

{ int i;

printf("%d %s : ",tt.num,tt.name);

for(i=0; i<3; i++)

printf("%5.1f",tt.score[i]);

printf("\n");

}

void modify(___STU___ *ss,float a)

{ int i;

for(i=0; i<3; i++)

ss->__score[i]__ *=a;

}

main( )

{ STU std={ 1,"Zhanghua",76.5,78.0,82.0 };

float a;

printf("\nThe original number and name and scores :\n");

show(std);

printf("\nInput a number : "); scanf("%f",&a);

modify(__&std__,a);

printf("\nA result of modifying :\n");

show(std);

}

1 处内容为[void modify(STU *ss,float a)]

2 处内容为[ss->score[i] *=a;]

3 处内容为[modify(&std,a);]

4. 给定程序中函数fun的功能是将形参指针所指结构体数组中的三个元素按num成员进行升序排列。

#include

typedef struct

{ int num;

char name[10];

}PERSON;

void fun(PERSON ___1___) std[]*std

{

___2___ temp; PERSON

if(std[0].num>std[1].num)

{ temp=std[0]; std[0]=std[1]; std[1]=temp; }

if(std[0].num>std[2].num)

{ temp=std[0]; std[0]=std[2]; std[2]=temp; }

if(std[1].num>std[2].num)

{ temp=std[1]; std[1]=std[2]; std[2]=temp; }

}

main()

{ PERSON std[ ]={ 5,"Zhanghu",2,"WangLi",6,"LinMin" };

int i;

fun(___3___); std

printf("\nThe result is :\n");

for(i=0; i<3; i++)

printf("%d,%s\n",std[i].num,std[i].name);

}

4.给定程序中,函数fun的功能是:将形参std所指结构体数组中年龄最大者的数据作为函数值返回,并在main函数中输出。

#include

typedef struct

{ char name[10];

int age;

}STD;

STD fun(STD std[], int n)

{ STD max; int i;

max= ___1___;*stdstd[0]

for(i=1; i

if(max.age<___2___) max=std[i];

return max;

}

main( )

{ STD std[5]={"aaa",17,"bbb",16,"ccc",18,"ddd",17,"eee",15 };

STD max;

max=fun(std,5);

printf("\nThe result: \n");

printf("\nName : %s, Age : %d\n", ___3___,max.age);

}

1 处内容为[max= *std;]

2 处内容为[if(max.age<std[i].age) max=std[i];]

3 处内容为[printf("\nName : %s, Age : %d\n", max.name,max.age);]

5.下面程序的功能是按学生的姓名查询其成绩排名和平均成绩。查询时可连续进行,直到输入0时才结束。

 #include

#include

#define NUM 4

 struct student

 { int rank

char *name

float score

}

___1___ stu[ ]={ 3"liming"89.3

 4"zhanghua"78.2

 1"anli"95.1

 2"wangqi"90.6

}

main()

{ char str[10]

 int i

 do

{ printf("Enter a name")

 scanf("%s"str)

 for( i=0ii++ )

 if(___2___ )

 { printf("Name :%8s\n"stu[i].name)

 printf("Rank :%3d\n"stu[i].rank)

 printf("Average :%5.1f\n"stu[i].score)

___3___

 }

 if( i>=NUM ) printf("Not found\n")

 }while( strcmp(str"0")!=0 )

}

答案:① struct student strcmp(stu[i].namestr)==0 break

6.下面程序的功能是从终端上输入5个人的年龄、性别和姓名,然后输出。

#include "stdio.h"

struct man

{ char name[20]

unsigned age

char sex[7]

}

main ( )

{ struct man person[5]

data_in(person,5)

data_out(person,5)

}

data_in(struct man *p, int n )

{ struct man *q =___1___

for( pp++ )

{ printf( "age:sex:name" )

scanf("%u%s", &p->age, p->sex)

__2___

}

}

data_out( struct man *p, int n )

{ struct man *q = ___3___

for( pp++ )

printf("%s%u%s\n", p->name, p->age, p->sex)

}

答案:① p+n gets(p->name) p+n

11. 已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体中,给定程序的功能是找出成绩最低的学生记录,通过形参返回主函数。

#include

#include

#define N 10

typedef struct ss

{ char num[10]; int s; } STU;

fun(STU a[], STU *s)

{

___1___ h; int i ; STU

h = a[0];

for ( i = 1; i < N; i++ )

if ( a[i].s < h.s ) ___2___ = a[i]; h

*s = ___3___ ; h

}

main()

{ STU a[N]={ {"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},

{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71} }, m;

int i;

printf("***** The original data *****\n");

for ( i=0; i< N; i++ )printf("No = %s Mark = %d\n", a[i].num,a[i].s);

fun ( a, &m );

printf ("***** THE RESULT *****\n");

printf ("The lowest : %s , %d\n",m.num, m.s);}

12. 给定程序中,函数fun的功能是:将形参指针所指结构体数组中的三个元素按num成员进行升序排列。

#include

typedef struct

{ int num;

char name[10];

}PERSON;

void fun(PERSON ___1___)std

{

___2___ temp; PERSON

if(std[0].num>std[1].num)

{ temp=std[0]; std[0]=std[1]; std[1]=temp; }

if(std[0].num>std[2].num)

{ temp=std[0]; std[0]=std[2]; std[2]=temp; }

if(std[1].num>std[2].num)

{ temp=std[1]; std[1]=std[2]; std[2]=temp; }

}

main()

{ PERSON std[ ]={ 5,"Zhanghu",2,"WangLi",6,"LinMin" };

int i;

fun(___3___);std

printf("\nThe result is :\n");

for(i=0; i<3; i++)

printf("%d,%s\n",std[i].num,std[i].name);}

本文来源:https://www.2haoxitong.net/k/doc/bcfb18c4daef5ef7ba0d3c5a.html

《结构体共用体.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式