结构体与共用体及用户定义类型 下载本文

unsigned int i[4]; } z; z.i[0]=0x39; z.i[1]=0x36; printf(\

(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(\

(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(\ ); printf(\printf(\}

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(\ } 程序的输出结果是(注意: 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(\ }

(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(\ printf(\}

(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(a.name,b.name)>0) d=b; if(strcmp(c.name,d.name)>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; 且已建立如下图所示链表结构:

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;