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(\}
程序运行后的输出结果是
A) 10 B) 11 C) 20 D)21
(19) 有以下结构体说明和变量定义,如图所示,指针p、q、r分别指向一个链表中的三个连续结点。 struct node
{ int data
struct node *next ; } *p, *q, *r;
现要将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;
(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,\ C) struct tt[2]={{1,'A'},{2, 'B'}}; D)structtt[2]={{1,\
(21) 有以下程序 main()
{ union { unsigned int n; unsigned char c; }u1; ul.c=`A`;
printf(\}
执行后输出结果是 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(\
B) scanf(\ C) scanf(\ D) scanf(\
(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
{ 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 ┌──┬──┐ ┌──┬──┐ │ 5 │ ┼──→ │ 9 │ \\0 │ └──┴──┘ └──┴──┘ ↑p c
data next ┌──┬──┐ │ 7 │ │ └──┴──┘ ↑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;
(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 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;
D) 60