一、 选择题
14.1 根据以下定义,能输出字母M的语句是
A) printf("%c\\n",class[3].name);
B) printf("%c\\n",class[3].name[1]);
C) printf("%c\\n",class[2].name[1]);
D) printf("%c\\n",class[2].name[0]);
struct person { char name[9]; int age; };
struct person class[10]={ "John", 17,
"Paul", 19,
"Mary", 18,
"Adam", 16, };
答案: D
14.2 以下程序的输出结果是
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); }
答案:D
14.3 若有以下说明和语句,则值为6的表达式是
A) p++->n
B) p->n++
C) (*p).n++
D) ++p->n
struct st
{ int n;
struct st *next;
};
struct st a[3],*p;
a[0].n=5; a[0].next=&a[1];
a[1].n=7; a[1].next=&a[2];
a[2].n=9; a[2].next=\'\\0\';
p=&a[0];
答案:D
14.4 已知字符0的ASCII代码值的十进制数为48,且数组的第0个元素元素在低位,以下程序的输出结果是
A) 39
B) 9
C) 38
D) 8
main()
{ union { int i[2];
long k;
char c[4];
} r,*s=&r;
s->i[0]=0x39; s->i[1]=0x38;
printf("%x\\n",s->c[0]);
}
答案:A
14.5 以下程序的输出结果是
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)); }
答案:C
14.6 以下程序的输出结果是
A) 10
B) 50
C) 51
D) 60
20 60 60 70
20 21 11 31
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);
printf("%d\\n",(++p)->x);
printf("%d\\n",++(*p->y));
}
答案:C
14.7 若已建立下面的链表结构,指针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;
答案:C
14.8 以下程序的输出结果是
A) 25
B) 30
C) 18
D) 8
typedef union
{ long i;
int k[5];
char c;
} DATE;
struct date
{ int cat;
DATE cow;
double dog;
} too;
DATE max;
main()
{ printf("%d\\n",sizeof(struct date)+sizeof(max)); }
答案:B
二、填空题
14.9 为了建立如图所示的存储结构(即每个结点含两个域,date是数据域,next是指向结点的指针域),请填空。
struct link
{ char data;
_________;
} node;
答案:struct link *next
14.10 以下MIN函数的功能是:查找带有头结点的单向链表中,结点数据域的最小值作为函数值返回。
请填空。
struct node { int data;
struct node *next;
};
int MIN(struct node *first)
{ struct node *p;
int m;
p=first->next;
m=p->data;
for(p=p->next; p!=\'\\0\'; p=_____)
if(______) m=p->data;
return m;
}
答案:p->next p->data