搜档网
当前位置:搜档网 › c语言结构体单元练习

c语言结构体单元练习

c语言结构体单元练习
c语言结构体单元练习

1.有以下定义和语句:

struct student

{ int age;

int num; };

struct student stu[3]={{1001,20},{1002,19},{1003,21}};

main()

{ struct student *p;

p=stu;

…… }

则以下不正确的引用是。

A) (p++)->num B) p++ C) (*p).num D) p=&stu.age

2.有以下结构体定义:

struct example

{ int x;

int y; }v1;

则正确的引用或定义是。

A) example.x=10 B) example v2; v2.x=10;

C) struct v2; v2.x=10; D) struct example v2={10};

3.对于如下结构体定义,若对变量person的出生年份进行赋值,正确的赋值是。

struct date

{ int year,month,day;

};

struct worklist

{ char name[20];

char sex;

struct date birth;

}person;

A) year=1976 B) birth.year=1976

C) person.birth.year=1976 D) person.year=1976

4.根据下述定义,可以输出字符'A'的语句是。

struct person

{ char name[11];

struct

{ char name[11];

int age;

}other[10];

};

struct person man[10]={ {"Jone",{"Paul",20}},{"Paul",{"Mary",18}},

{"Mary",{"Adam",23}},{"Adam",{"Jone",22}}

};

A) printf("%c",man[2].other[0].name[0]); B) printf("%c",other[0].name[0]);

C) printf("%c",man[2].(* other[0])); D) printf("%c",man[3].name);

5.若有以下程序段:

struct st

{ int n;

struct st *next; };

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

则值为6的表达式为。

A) p++->n B) p->n++ C) (*p).n++ D) ++p->n

6.对于以下定义,不正确的叙述是。

union data

{ int i;

char c;

float f;}a,b;

A) 变量a所占的内存长度等于成员f的长度

B) 变量a的地址和它的各成员地址都是相同的

C) 不能对变量a赋初值

D) 可以在定义的时候对a初始化

7.下述程序运行结果为。

#include

struct st

{ int n;

int *m;

}*p;

void main()

{ int d[5]={10,20,30,40,50};

struct st arr[5]={100,d,200,d+1,300,d+2,400,d+3,500,d+4};

p=arr;

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

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

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

}

A) 101 200 21 B) 101 20 30

C) 200 101 21 D) 101 101 10

8、以下程序的运行结构是。

#include

main( )

{ union

{ long a;

int b;

char c;}m;

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

A) 2 B) 4 C) 6 D) 7

9.若要利用下面的程序段使指针变量p指向一个存储整型变量的存储单元,则在空格中应填入的内容是。

int *p;

p= malloc(sizeof(int));

A) int B) int * C) (* int) D) (int *)

10、执行下述语句后的结果是。

enum weekday {sun,mon=3,tue,wed, thu};

enum weekday day;

day=wed;

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

A) 5 B) 3 C) 4 D) 编译时出错

11、下面程序的输出结果是。

main()

{ enum abc{ green=3,red };

char *clr[ ]={"red","blue","yellow","black","white","green"};

printf("%s and ",clr[green]);

printf("%s",clr[red]);

}

12、已知指针变量head指向单链表表头,下面程序用来统计链表中各个结点的数据项之和,请填空。

struct link

{ int data;

struct link *next;

};

main()

{ int k;

struct link *head;

k=sum(head);

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

}

sum( 【1】 )

{ struct link *p;

int s;

s=head->data;

p=head->next;

while(p)

{ s+= 【2】 ;

p=p->next;

}

return(s);

}

13、以下程序完成链表的输出,请填空。

void print(head)

struct stu *head;

{ struct stu *p;

p=head;

if( 【1】 )

do

{ printf("%d,%f\n",p->num,p->score);

p=p->next;

}while( 【2】 );

}

14、下面程序的运行结果为。

typedef union student

{ char name[10];

long sno;

char sex;

float score[4];

}stu;

main( )

{ stu a[5];

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

}

15、以下对枚举类型名的定义中正确的是。

A) enum a={one,two,three};

B) enum a {one=9,two=-1,three};

C) enum a={"one","two","three"};

D) enum a {"one","two","three"};

16、下面程序的输出是。

main()

{ enum team { my,your=4,his,her=his+10};

printf("%d%d%d%d\n",my,your,his,her); }

A) 0 1 2 3 B) 0 4 0 10 C) 0 4 5 15 D) 1 4 5 15

17、下述程序的执行结果是。

#include

union un

{ int i;

char c[2];

};

void main( )

{ union un x;

x.c[0]=10;

x.c[1]=1;

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

}

A) 266 B) 11 C) 265 D) 138

17、有以下程序

#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+p->next->num);

}

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

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

18、设有以下说明语句:

typedef struct

{ int n;

char ch[8];

}per;

则下面叙述正确的是。

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

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

19、若有以下定义:

struct link

{ int data;

struct link *next;

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

且变量a和b之间已经有如右图所示的链表结构:指针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;

相关主题