当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
2015年计算机等级二级C语言章节习题及答案(11)
发布时间:2010/11/8 15:46:48 来源:城市学习网 编辑:ziteng
  第11章 结构体与共用体
  一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项填涂在答题卡相应位置上。)
  11.1 C语言结构体类型变量在程序运行期间
  A)TC环境在内存中仅仅开辟一个存放结构体变量地址的单元
  B)所有的成员一直驻留在内存中
  C)只有最开始的成员驻留在内存中
  D)部分成员驻留在内存中
  正确答案: B
  11.2 下列各数据类型不属于构造类型的是
  A)枚举型
  B)共用型
  C)结构型
  D)数组型
  正确答案: A
  11.3 当说明一个结构体变量时系统分配给它的内存是
  A)各成员所需内存量的总和
  B)结构中第一个成员所需内存量
  C)成员中占内存量最大者所需的容量
  D)结构中最后一个成员所需内存量
  正确答案: A
  11.4 设有以下说明语句
  typedef struct
  { int n;
  char ch[8];
  } PER;
  则下面叙述中正确的是
  A)PER 是结构体变量名
  B)PER是结构体类型名
  C)typedef struct 是结构体类型
  D)struct 是结构体类型名
  正确答案: B
  11.5 已知有如下定义:struct a{char x; double y;}data,*t;,若有t=&data,则对data中的成员的正确引用是
  A)(*t).data.x
  B)(*t).x
  C)t->data.x
  D)t.data.x
  正确答案: B
  11.6 以下程序的运行结果是
  #include "stdio.h"
  main()
  { struct date
  { int year,month,day; } today;
  printf("%d\n",sizeof(struct date));
  }
  A)6
  B)8
  C)10
  D)12
  正确答案: A
  11.7 设有如下定义:
  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;
  正确答案: C
  11.8 以下对结构体类型变量的定义中,不正确的是
  A)typedef struct aa
  { int n;
  float m;
  } AA;
  AA tdl;
  B)#define AA struct aa
  AA { int n;
  float m;
  } tdl;
  C)struct
  { int n;
  float m;
  } aa;
  struct aa tdl;
  D)struct
  { int n;
  float m;
  } tdl;
  正确答案: C
  11.9 若有下面的说明和定义
  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
  正确答案: A
  11.10 以下程序的输出是
  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));
  }
  A)10
  B)11
  C)51
  D)60
  正确答案: C [NextPage]    11.11 有以下程序:
  #include <stdio.h>
  union pw
  { int i;
  char ch[2];
  }a;
  main()
  { a.ch[0]=13;
  a.ch[1]=0;
  printf("%d\n",a.i);
  }
  程序的输出结果是
  A)13
  B)14
  C)208
  D)209
  正确答案: A
  11.12 已知学生记录描述为:
  struct student
  { int no;
  char name[20],sex;
  struct
  { int year,month,day;
  } birth;
  };
  struct student s;
  设变量s中的“生日”是“1984年11月12日”,对“birth”正确赋值的程序段是
  A)year=1984;month=11;day=12;
  B)s.year=1984;s.month=11;s.day=12;
  C)birth.year=1984;birth.month=11;birth.day=12;
  D)s.birth.year=1984;s.birth.month=11;s.birth.day=12;
  正确答案: D
  11.13 有如下定义
  struct person{char name[9];int age;};
  struct person class[10]={"John",17,"paul",19,"Mary",18,"Adam",16,};
  根据上述定义,能输出字母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]);
  正确答案: B
  11.14 下列程序的输出结果是
  struct abc
  { int a, b, c, s; };
  main()
  { struct abc s[2]={{1,2,3},{4,5,6}}; int t;
  t=s[0].a+s[1].b;
  printf("%d\n",t);
  }
  A)5
  B)6
  C)7
  D)8
  正确答案: B
  11.15 若有下面的说明和定义,则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
  正确答案: D
  11.16 有以下结构体说明和变量的定义,且指针p指向变量a,指针q指向变量b。则不能把结点b连接到结点a之后的语句是
  struct node
  { char data;
  struct node *next;
  } a,b,*p=&a,*q=&b;
  A)a.next=q;
  B)p.next=&b;
  C)p->next=&b;
  D)(*p).next=q;
  正确答案: B
  11.17 下面程序的输出结果是
  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
  正确答案: C
  11.18 以下程序的输出结果是
  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
  正确答案: D
  11.19 有以下程序
  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
  正确答案: B
  11.20 有以下程序
  #include <stdlib.h>
  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
  正确答案: D
[NextPage]  11.21 已知函数的原形如下,其中结构体a为已经定义过的结构,且有下列变量定义
  struct a *f(int t1,int *t2,strcut a t3,struct a *t4)
  struct a p,*p1;int i;
  则正确的函数调用语句为
  A)&p=f(10,&i,p,p1);
  B)p1=f(i++,(int *)p1,p,&p);
  C)p=f(i+1,&(i+2),*p,p);
  D)f(i+1,&i,p,p);
  正确答案: B
  11.22 下面函数的功能是将指针t2所指向的线性链表,链接到t1所指向的链表的末端。假定t1所指向的链表非空
  struct node{ float x;struct node *next;};
  connect(struct node *t1, struct node *t2)
  { if(t1->next==NULL)t1->next=t2;
  else connect(______ ,t2); }
  要实现此功能则应该添入的选项是
  A)t1.next
  B)++t1.next
  C)t1->next
  D)++t1->next
  正确答案: C
  11.23 阅读如下程序段,则执行后程序的输出结果是
  #include <stdio.h>
  main()
  { structa{int x; int y; } num[2]={{20,5},{6,7}};
  printf("%d\n",num[0].x/num[0].y*num[1].y);
  }
  A)0
  B)28
  C)20
  D)5
  正确答案: B
  11.24 阅读程序段,则执行后的输出结果为
  #include "stdio.h"
  typedef union{ long x[2];
  int y[4];
  char z[8];} atx;
  typedef struct aa{ long x[2];
  int y[4];
  char z[8]; } stx;
  main()
  { printf("union=%d,struct aa=%d\n",sizeof(atx),sizeof(stx)); }
  A)union=8,struct aa=8
  B)union=8,struct aa=24
  C)union=24,struct aa=8
  D)union=24,struct aa=24
  正确答案: B
  11.25 阅读下列程序段
  #include "stdio.h"
  typedef struct aa
  { int a;
  struct aa *next;
  } M;
  void set(M *k,int i,int *
  B)
  { int j,d=0;
  for(j=1;j<i;j++)
  { k[j-1].next=&k[j];
  k[j-1].a=b[d++];
  }
  k[j].a=b[d];
  }
  main()
  { M k[5],*p;
  int d[5]={23,34,45,56,67};
  set(k,5,
  D);
  p=k+1;
  printf("%d\n",table);
  }
  则下面的表达式在table处,能使程序执行后,打印输出数据45的是
  A)p->next->a
  B)++p->a
  C)(*p).a++
  D)p++->a
  正确答案: A
  [NextPage]   二、填空题(请将每一个空的正确答案写在答题卡相应序号后。)
  11.26 以下定义的结构体类型拟包含两个成员,其中成员变量info用来存入整形数据;成员变量link是指向自身结构体的指针,请将定义补充完整。
  struct node
  { int info;
  【1】link;
  };
  正确答案: struct node *
  11.27 设有以下结构体类型:
  struct st
  { char name[8];
  int num;
  float s[4];
  }student[50];
  并且结构体数组student中的元素都已有值,若要将这些元素写到硬盘文件fp中,请将以下fwrite语句补充完整:
  fwrite(student,【2】,1,fp);
  正确答案: sizeof(struct st)*50
  11.28 使用结构体处理数据的场合是【3】 。
  正确答案: 把不同类型的数据作为整体处理。
  11.29 以下程序的功能是:处理由学号和成绩组成的学生记录,N名学生的数据已在主函数中放入结构体数组s中,它的功能是:把分数最高的学生数据放在h所指的数组中,注意:分数高的学生可能不只一个,函数返回分数最高学生的人数。请填空。
  #include <stdio.h>
  #define N 16
  typedef struct
  { char num[10];
  int s ;
  } STREC;
  int fun (STREC *a, STREC *
  B)
  { int i,j=0,max=a[0].s;
  for(i=0;i<N;i++)
  if(max<a[i].s) max=a[i].s;
  for(i=0;i<N;i++) ss
  if(【4】) b[j++]=a[i];
  return j;
  }
  main ()
  { STREC s[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},{"GA001",91},
  {"GA007",72},{"GA008",64},{"GA006",87},{"GA015",85},{"GA013",91},
  {"GA012",64},{"GA014",91},{"GA011",66},{"GA017",64},{"GA018",64},
  {"GA016",72} };
  STREC h[N];
  int i, n;FILE *out;
  n=fun(s,h);
  printf("The %d highest score :\n",n);
  for (i=0; i<n; i++)
  printf("%s %4d\n ",h[i].num,h[i].s);
  printf("\n");
  out=fopen("out15.dat", "w");
  fprintf(out, "%d\n",n);
  for(i=0; i<n; i++);
  fprintf(out, "%4d\n ",h[i].s);
  fclose(out);
  }
  正确答案: max==a[i].s
  11.30 若有以下说明和定义语句,则变量w在内存中所占的字节数是 【5】 。
  union aa {float x; float y; char c[6]; };
  struct st{ union aa v; float w[5]; double ave; } w;
  正确答案: 34
 [NextPage]   11.31 阅读下列程序,则程序的输出结果为【6】。
  #include "stdio.h"
  struct ty
  { int data;
  char c;
  };
  main()
  { struct ty a={30,′x′};
  fun(a);
  printf("%d%c",a.data,a.
  C);
  }
  fun(struct ty
  B)
  { b.data=20;
  b.c=′y′;
  }
  正确答案: 30x
  11.32 现有如下定义:struct aa{int a;float b;char c;}*p;现需用malloc函数动态的申请一个struct aa类型大小的空间(由p指向),则定义的语句为: 【7】 。
  正确答案: p=(struct aa *) malloc (sizeof(struct aa));
  11.33 阅读下列程序,则程序实现的功能是 【8】 。
  #include "stdio.h"
  struct node
  { char data;
  struct node *next;
  } *head;
  fun(struct node *q)
  { if(head == NULL)
  { q->next=NULL;
  head=q;
  }
  else
  { q->next=head;
  head=q;
  }
  }
  main()
  { char ch;
  struct node *p;
  head = NULL;
  while((ch=getchar())!=′\n′)
  { p=(struct node *)malloc(sizeof(struct node));
  p->data=ch;
  fun(p);
  }
  p=head;
  while(p!=NULL)
  { printf("%c",p->data);
  p=p->next;
  }
  }
  正确答案: 从键盘输入一行字符串,调用函数建立反序的链表,然后输出整个链表
  11.34 以下函数set用来建立一个带头结点的单向链表,新产生的结点总是插入在链表的末尾。单向链表的头指针作为函数值返回,请填空。
  struct node{char data; struct node *next; };
  struct node *set()
  { struct node *t1,*t2,*t3;
  char ch;
  t1=(struct node*)malloc(sizeof(struct node));
  t3=t2=t1;
  ch=getchar();
  while(ch!=′\n′)
  { t2= 【9】 malloc(sizeof(struct node));
  t2->data=ch;
  t3->next=t2;
  t3=t2;
  ch=getchar();
  }
  t3->next=′\0′ ;
  【10】
  }
  正确答案: (struct node *) 正确答案: return(t1)
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved