文档库 最新最全的文档下载
当前位置:文档库 › 结构体测试

结构体测试

结构体测试
结构体测试

一、选择题:

(1)有以下程序段

typedef struct NODE

{ int num; struct NODE *next;

} OLD;

以下叙述中正确的是c

A)以上的说明形式非法 B)NODE是一个结构体类型

C)OLD是一个结构体类型 D)OLD是一个结构体变量

(2)有以下程序

# include

struct STU

{ int num;

float TotalScore; };

void f(struct STU p)

{ struct STU s[2]={{20044,550},{20045,537}};

p.num = s[1].num; p.TotalScore = s[1].TotalScore;

}

main()

{ struct STU s[2]={{20041,703},{20042,580}};

f(s[0]);

printf("%d %3.0f\n", s[0].num, s[0].TotalScore);

}

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

A)20045 537 B)20044 550 C)20042 580 D)20041 703

(3)有以下程序

# include

struct STU

{ char name[10];

int num; };

void f(char *name, int num)

{ struct STU s[2]={{"SunDan",20044},{"Penghua",20045}};

num = s[0].num;

strcpy(name, s[0].name);

}

main()

{ struct STU s[2]={{"YangSan",20041},{"LiSiGuo",20042}},*p;

p=&s[1]; f(p->name, p->num);

printf("%s %d\n", p->name, p->num);

}

程序运行后的输出结果是

A)SunDan 20042 B)SunDan 20044

C)LiSiGuo 20042 D)YangSan 20041

(4)有以下程序

struct STU

{ char name[10]; int num; float TotalScore; };

void f(struct STU *p)

{ struct STU s[2]={{"SunDan",20044,550},{"Penghua",20045,537}}, *q=s;

++p ; ++q; *p=*q;

}

main()

{ struct STU s[3]={{"YangSan",20041,703},{"LiSiGuo",20042,580}};

f(s);

printf("%s %d %3.0f\n", s[1].name, s[1].num, s[1].TotalScore);

}

程序运行后的输出结果是

A)SunDan 20044 550 B)Penghua 20045 537

C)LiSiGuo 20042 580 D)SunDan 20041 703

(5)若有以下说明和定义

union dt

{

int a; char b; double c;

}data;

以下叙述中错误的是

A)data的每个成员起始地址都相同

B)变量data所占内存字节数与成员c所占字节数相等

C)程序段:data.a=5;printf("%f\n",data.c);输出结果为5.000000

D)data可以作为函数的实参

(6)设有如下说明

typedef struct ST

{

long a;

int b;

char c[2];

} NEW;

则下面叙述中正确的是

A)以上的说明形式非法

B)ST是一个结构体类型

C)NEW是一个结构体类型

D)NEW是一个结构体变量

(7)有以下结构体说明和变量定义,如图所示,指针pqr分别指向此链表中三个连续结点。

struct node

{

int data;

struct node *next;

} *p,*q,*r;

现要将q所指结点从链表中删除,同时保持链表的连续,以下不能完成指定操作的语句是

A)p->next=q->next;

B)p->next=p->next->next;

C)p->next=r;

D)p=q->next;

(8)以下对结构体类型变量td的定义中,错误的是

A)typedef struct aa

{

int n;

float m;

}AA;

AA td;

B)struct aa

{

int n;

float m;

} td;

struct aa td;

C)struct

{

int n;

float m;

}aa;

struct aa td;

D)struct

{

int n;

float m;

}td;

(9)有以下说明和定义语句

struct student

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

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

struct student *p=stu;

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

A)(p++)->num B)p->num C)(*p).num D)stu[3].age

10~12.以下程序的功能是:建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中,请从与下划线处号码对应的一组选若中选择出正确的选项。 #include

stuct node

{ char data; struct node *next;};

(10)CreatList(char *s)

{ struct node *h,*p,*q);

h=(struct node *)malloc(sizeof(struct node));

p=q=h;

while(*s!='\0')

{ p=(struct node *)malloc(sizeof(struct node));

p->data= (11);

q->next=p;

q= (12);

s++;

}

p->next='\0';

return h;

}

main()

{ char str[]="link list";

struct node *head;

head=CreatList(str);

...

}

**********************************************************(10)A)char * B)struct node C)struct node* D)char

(11)A)*s B)s C)*s++ D)(*s)++

(12)A)p->next B)p C)s D)s->next

(13)设有以下语句

typedef struct S

{ int g; char h;} T;

则下面叙述中正确的是

A)可用S定义结构体变量 B)可以用T定义结构体变量

C)S是struct类型的变量 D)T是struct S类型的变量

(14)有以下程序

struc 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\n”,a.num,b.num);

}

执行后的输出结果是

A)2041 2044 B)2041 2043 C)2042 2044 D)2042 2043

(15)有以下程序

struct STU

{ char name[10];

int num;

int Score;

};

main()

{ struct STU s[5]={{“YangSan”,20041,703},{“LiSiGuo”,20042,580}, {“wangYin”,20043,680},{“SunDan”,20044,550},

{“Penghua”,20045,537}},*p[5],*t;

int i,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);

}

执行后输出结果是

A)550 550 B)680 680 C)580 550 D)580 680

(16)有以下程序

#include

struct NODE{

int num;

struct NODE *next;

};

main()

{ struct NODE *p,*q,*r;

int sum=0;

p=(struct NODE *)malloc(sizeof(struct NODE));

q=(struct NODE *)malloc(sizeof(struct NODE));

r=(struct NODE *)malloc(sizeof(struct NODE));

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);

}

执行后的输出结果是

A) 3 B) 4 C)5 D)6

(17)以下选项中不能正确把c1定义成结构体变量的是

A)typedef struct B)struct color cl

{ int red; { int red;

int green; int green;

int blue; int blue;

} COLOR; };

COLOR cl;

C)struct color D)struct

{ int red; { int red;

int green; int green;

int blue; int blue;

} c l; } c l ;

(18)有以下程序

struct s

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

main ()

{ struct s *p=data;

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

}

程序运行后的输出结果是

A)10 B)11 C)20 D)21

(19)有以下结构体说明和变量定义,如图所示,指针p、q、r分别指向一个链表中的三个连续结点。

struct node

{ int data

struct node *next ;

} *p, *q, *r;

(20)设有如下说明

typedef struct

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

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

A)STD tt[2]={{1,'A',62},{2, 'B',75}};

B)STD tt[2]={1,"A",62},2, "B",75};

C)struct tt[2]={{1,'A'},{2, 'B'}};

D)structtt[2]={{1,"A",62.5},{2, "B",75.0}};

(21)有以下程序

main()

{ union { unsigned int n;

unsigned char c;

}u1;

ul.c=`A`;

printf("%c\n",u1.n);

}

执行后输出结果是

A)产生语法错 B)随机值 C)A D)65

(22)若要说明一个类型名STP,使得定义语句STP s等价于char *s,以下选项中正确的是

A)typedef STP char *s; B)typedef *char STP;

C)typedef stp *char; D)typedef char* STP;

(23)设有如下定义

struct ss

{ char name[10];

int age;

char sex;

}std[3],*p=std;

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

A)scanf("%d",&(*p).age); B)scanf("%s",&https://www.wendangku.net/doc/fc14672205.html,); C)scanf("%c",&std[0].sex) D)scanf("%c",&(p->sex));

(24)有以下程序

struct STU

{ char num[10]; float score[3]; };

main()

{ struct stu s[3]={{“20021”,90,95,85},

{“20022”,95,80,75},

{“20023”,100,95,90}},*p=s;

int i; float sum=0;

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

sum=sum+p->score[i];

printf(“%6.2f\n”,sum);

}

程序运行后的输出结果是

A)260.00 B)270.00 C)280.00 D)285.00

(25)设有如下定义:

struck sk

{ int a;

float b;

}data;

int *p;

若要使P指向data中的a域,正确的赋值语句是

A)p=&a; B)p=data.a; C)p=&data.a; D)*p=data.a;

(26)有以下程序

#include

struct NODE

{ int num; struct NODE *next; };

main()

{ struct NODE *p,*Q,*R;

p=(struct NODE*)malloc(sizeof(struct NODE));

q=(struct NODE*)malloc(sizeof(struct NODE));

r=(struct NODE*)malloc(sizeof(struct NODE));

p->num=10; q->num=20; r->num=30;

p->next=q;q->next=r;

printf(“%d\n”,p->num+q->next->num);

}

程序运行后的输出结果是

A)10 B)20 C)30 D)40

(27)若有以下说明和定义

typedef int *INTEGER;

INTEGER p,*q;

以下叙述正确的是

A)P是int型变量 B)p是基类型为int的指针变量

C)q是基类型为int的指针变量 D)程序中可用INTEGER代替int类型名

(28)若有下面的说明和定义:

struct test

{ int ml; char m2; float m3;

union uu {char ul[5]; int u2[2];} ua;

} myaa;

则sizeof(struct test )的值是

A)12 B)16 C)14 D)9

(29)若以下定义:

struct link

{ int data;

struck link *next;

}a,b,c,*p,*q;

且变量a和b之间已有如下图所示的链表结构:

a b

data next data next

↑p

c

data next

↑q

指针p指向变量a,q指向变量c。则能够把c插入到a和b 之间并形成新的链表的语句组是:

A) a.next=c; c.next=b; B)p.next=q; q.next=p.next;

C)p->next=&c; q->next=p->next; D)(*p).next=q; (*q).next=&b;

现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是 A)r->next=q; q->next=r->next; p->next=r;

B)q->next=r->next; p->next=r; r->next=q;

C)p->next=r; q->next=r->next; r->next=q;

D)q->next=r->next; r->next=q; p->next=r;

(30)设有以下说明语句

typedef struct

{ int n;

char ch[8];

}PER;

则下面叙述中正确的是

A)PER 是结构体变量名 B)PER是结构体类型名

C)typedef struct 是结构体类型 D)struct 是结构体类型名

(31)以下各选项企图说明一种新的类型名,其中正确的是

A)typedef v1 int; B)typedef v2=int;

C)typedefv1 int v3; D)typedef v4: int;

(32)以下程序的输出结果是

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],p=h;

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

}

A)12 B)23 C)14 D)32

(33)以下程序的输出结果是

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);

}

A) 4 B) 5 C)6 D)0

(34)设有以下说明语句

struct ex

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

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

A)struct结构体类型的关键字 B)example是结构体类型名

C)x,y,z都是结构体成员名 D)struct ex是结构体类型

(35)以下程序的输出是

A)10 B)11 C)51 D)60

struct st

{ int x; int *y;} *p;

int dt[4]={ 10,20,30,40 };

struct st aa[4]={ 50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0],};

main()

{ p=aa;

printf(“%d\n”,++(p->x));

}

(36)假定建立了以下链表结构,指针p、q分别指向如图所示的结点,则以下可以将q 所指结点从链表中删除并释放该结点的语句组是

A)free(q); p->next=q->next;

B)(*p).next=(*q).next; free(q);

C)q=(*q).next; (*p).next=q; free(q);

D)q=q->next; p->next=q; p=p->next; free(p)

(37)有如下定义

struct person{char name[9]; int age;};

strict person class[10]={“Johu”,17,

“Paul”,19

“Mary”,18,

“Adam16,};

根据上述定义,能输出字母M的语句是

A)prinft(“%c\n”,class[3].mane);

B)pfintf(“%c\n”,class[3].name[1]);

C)prinft(“%c\n”,class[2].name[1]);

D)printf(“%^c\n”,class[2].name[0]);

(38)以下对结构体类型变量的定义中,不正确的是

A)typedef struct aa B)#define AA struct aa

{ int n; AA {int n;

float m; float m;

}AA; }td1;

AA td1;

C)struct D)struct

{ int n; { int n;

float m; float m;

}aa; }td1;

stuct aa td1;

(39)若已建立如下图所示的单向链表结构,

在该链表结构中,指针p、s分别指向图中所示结点,则不能将s所指的结点插入到链表末尾仍构成单向链表的语句组是

A)p =p->next; s->next=p; p->next=s;

B)p =p->next; s->next=p->next; p->next=s;

C)s->next=NULL; p=p->next; p->next=s;

D)p=(*p).next; (*s).next=(*p).next; (*p).next=s;

(40)下列程序的输出结果是

A) 5 B) 6 C)7 D)8

struct abc

{ int a, b, c; };

main()

{ struct abc s[2]={{1,2,3},{4,5,6}}; int t;

t=s[0],a+s[1],b;

printf("%d \n",t);

}

(41)有以下结构体说明和变量的定义,且如下图所示指针p指向变量a,指针q指向变量b。则不能把结点b连接到结点a之后的语句是

A) a.next=q; B)p.next=&b;

C)p->next=&b; D)(*p).next=q;

struct node

{ char data;

struct node *next;

{ a,b,*p=&a,*q=&b;

data next data next

(42)变量a所占内存字节数是

A) 4 B) 5 C)6 D)8

union U

{ char st[4];

int i;

long l;

};

struct A

{ int c;

union U u;

}a;

(43)以下选项中,能定义s为合法的结构体变量的是A)typedef struct abc B)struct

{ double a;{ double a;

char b[10];char b[10];

} s;} s;

C)struct ABC D)typedef ABC

{ double a;{ double a;

char b[10];char b[10];

} }

ABC s;ABC s;

(44)以下程序的输出结果是

A) 2 B) 1 C)0 D)不确定

main()

{ union { char i[2];

int k;

}r;

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

printf{“%d\n”,r.k};

}

(45)设有以下定义或语句,则输出的结果是(指针变量占两个字节) A)20 B)16 C)14 D)12

struct date

{ long *cat;

struct date *next;

double dog;

}too;

printf(“%d\n”,sizeof(too));

(46)有以下程序

#include

struct stu

{ int num;

char name[10];

int age;

};

void fun(struct stu *p)

{ printf("%s\n",(*p).name); }

main()

{

struct stu students[3]={ {9801,"Zhang",20},

{9802,"Wang",19},

{9803,"Zhao",18} };

fun(students+2);

}

输出结果是

A)Zhang B)Zhao C)Wang D)18

(47)设有以下说明和定义:

typedef union

{ long i; int k[5]; char c; }DA TE;

struct date

{ int cat; DA TE cow; double dog; } too;

DA TE max;

则下列语句的执行结果是

printf ("%d",sizeof (struct date )+sizeof(max));

A)26 B)30 C)18 D)8

(48)设有如下定义:

struct sk

{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

(49)若程序中有下面的说明和定义

struct abc

{int x;char y;}

struct abc s1,s2;

则会发生的情况是

A)编译进错 B)程序将顺利编译`连接`执行

C)能顺利通过编译`连接`但不能执行 D)能顺利通过编译`但连接出错

(50)若有下面的说明和定义,则sizeof(struct aa)的值是

struct aa

{ int r1;double r2; float r3;

union uu{char u1[5]; long u2[2]; } ua;

} mya;

A)30 B)29 C)24 D)22

(51)字符'0'的ASCII码的十进制数为48,且数组的第0个元素在低位,则以下程序的输出结果是

#include

main()

{ union { int i[2]; long k; char c[4]; }r,*s=&r;

s->i[0]=0x39;

s->i[1]=0x38;

printf("%c\n",s->c[0])}

A)39 B)9 C)38 D)8

(52)设有以下定义:

typedef union { long i;int k[5];char c;}DA TE;

struct date { int cat;DA TE cow;double dog;}too;

DA TE max;

则下列语句的执行结果是

printf("%d",sizeof(struct date)+sizeof(max));

A)25 B)30 C)18 D)8

(53)根据下面的定义,能打印出字母M的语句是

A)printf("%c\n",class[3].name);

D)printf("%c\n",class[2].name[0]);

B)printf("%c\n",class[3].name[1]);

C)printf("%c\n",class[2].name[1]);

struct person { char name[9]; int age;};

struct person class[10]={"John",17,

"Paul",19,

"Mary",18,

"Adam",16};

(54)下面程序的输出是

A)0 B) 1 C) 3 D)6

main()

{ struct cmplx { int x; int y; } cnum[2]={1,3,

2,7};

printf("%d\n",cnum[0].y /cnum[0].x * cnum[1].x);}

(55)已知字符0的ASCII码为十六进制的30,下面程序的输出是

A) 6 B)9 C)0 D)3

main()

{ union { unsigned char c;

unsigned int i[4];

} z;

z.i[0]=0x39;

z.i[1]=0x36;

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

(56)下面程序的输出是

A)32 B)16 C)8 D)24

typedef union { long x[2];

int y[4];

char z[8];

} MYTYPE;

MYTYPE them;

main()

{ printf("%d\n", sizeof(them));}

(57)若已建立下面的链表结构,指针p、s分别指向图中所示的结点,则不能将s所指的结点插入到链表末尾的语句组是

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;

(58)下面程序的输出结果为

struct st

{ int x;

int *y;

} *p;

int dt[4]={10,20,30,40};

struct st aa[4]={ 50,&dt[0],60,&dt[1],

70,&dt[2],80,&dt[3] };

main()

{ p=aa;

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

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

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

}

A)10 B)50 C)51 D)60

20 60 60 70

20 21 21 31

(59)有以下程序:

#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]在高字节。)

A)13 B)14 C)208 D)209

(60)设有以下语句:

struct st {int n; struct st *next;};

static struct st a[3]={5,&a[1],7,&a[2],9,'\0'},*p;

p=&a[0];

则表达式【60】的值是6。

A)p + + ->n B)p->n + + C)(*p).n + + D)+ + p->n 二、填空题:

(1)以下程序运行后的输出结果是【1】。

struct NODE

{ int num; struct NODE *next;

} ;

main()

{ struct NODE s[3]={{1, '\0'},{2, '\0'},{3, '\0'}}, *p, *q, *r;

int sum=0;

s[0].next=s+1; s[1].next=s+2; s[2].next=s;

p=s; q=p->next; r=q->next;

sum+=q->next->num; sum+=r->next->next->num;

printf("%d\n", sum);

}

(2)以下程序运行后的输出结果是【2】。

struct NODE

{ int k;

struct NODE *link;

};

main()

{

struct NODE m[5],*p=m,*q=m+4;

int i=0;

while(p!=q)

{ p->k=++i; p++;

q->k=i++; q--;

}

q->k=i;

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

printf("%d",m[i].k);

printf("\n");

}

(3)以下程序的运行结果是【3】

# include

typedef struct student{

char name[10];

long sno;

float score;

}STU;

main()

{ STU

a={“zhangsan”,2001,95},b={“Shangxian”,2002,90},c={“Anhua”,2003,95},d,*p=&d;

d=a;

if(strcmp(https://www.wendangku.net/doc/fc14672205.html,,https://www.wendangku.net/doc/fc14672205.html,)>0)d=b;

if(strcmp(https://www.wendangku.net/doc/fc14672205.html,,https://www.wendangku.net/doc/fc14672205.html,)>0)d=c;

printf(“%ld%s\n”,d.sno,p->name);

}

(4)已有定义如下:

struct node

{ int data;

struct node *next;|

} *p;

以下语句调用malloc函数,使指针p指向一个具有struct node类型的动态存储空间。请填空。

p=(struct node *)malloc(【4】);

(5)设有以下定义

struct ss

{ int info;struct ss *link;}x,y,z;

且已建立如下图所示链表结构:请写出删除点y的赋值语句【5】。

(6)下面程序的运行结果是:[6] 。

typedef union student

{ char name[10];

long sno;

char sex;

float score[4];

}STU;

main()

{ STU a[5];

printf(“%d\n”,sizeof(a));

}

(7)以下定义的结构体类型拟包含两个成员,其中成员变量info用来存入整形数据;成员变量link是指向自身结构体的指针.请将定义补充完整。

struct node

{int info;

【7】link;

}

(8)以下程序段用于构成一个简单的单向链表,请填空。

struct STRU

{ int x, y ;

float rate;

【8】p;

} a, b;

a.x=0; a.y=0; a.rate=0; a.p=&b;

b.x=0; b.y=0; b.rate=0; b.p=NULL;

(9)若有如下结构体说明:

struct STRU

{ int a, b ; char c; double d:

struct STRU p1,p2;

};

请填空,以完成对t数组的定义,t数组的每个元素为该结构体类型

【9】t[20];

(10)以下程序用来输出结构体变量ex所占存储单元的字节数,请填空。

struct st

{ char name[20]; double score; };

main()

{ struct st ex;

printf(“ex size: %d\n”,sizeof(【10】));

}

(11)设有以下结构类型说明和变量定义,则变量a在内存所占字节数是[11] 。

Struct stud

{ char num[6];

int s[4];

double ave;

} a,*p;

(12)有以下定义和语句,则sizeof(a)的值是【12】,而sizeof(a.share)的值是【13】 struct date{ int day;

int month;

int year;

union{int share1

float share2;

}share;

}a;

(13)若以下定义和语句,则sizeof(a)的值是【14】,而sizeof(b)的值是【15】struct { int day; char mouth; int year;} a, *b;

b=&a;

(14)变量root有如图所示有存储结构,其中sp是指向字符串的指针域,next 是指向该结构的指针域,data用以存放整型数. 请填空, 完成此结构的类型说明和变量root的定义

sp next data

┌─┬─┬─┐

root││││

└─┴─┴─┘

struct list

{ char *sp;

【16】;

【17】;

}root;

(15)有以下说明定义和语句,可用a.day引用结构体成员day, 请写出引用结构体成员a.day的其它两种形式【18】、【19】。

struct{int day;char mouth;int year;}a,*b; b=&a;

(16)现有如图所示的存储结构,每个结点含两个域,data是指向字符串的指针域,next 是指向结点的指针域。请填空完成此结构的类型定义和说明。

struct link

{【20】; 【21】;} *head;

(17)以下函数creat用来建立一个带头结点的单向链表,新产生的结点总是插在链表的末尾。单向链表的头指针作为函数值返回.请填空:

相关文档