您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> C语言 >> 模拟题 >> 正文    
  二级C语言教程章节测试14.结构体与共用体及用户定义类型 【注册男护士专用博客】          

二级C语言教程章节测试14.结构体与共用体及用户定义类型

www.nanhushi.com     佚名   不详 

  一、选择题:
    (1)有以下程序段
     typedef struct NODE
     { int  num;     struct NODE  *next;
     } OLD;
    以下叙述中正确的是
     A)以上的说明形式非法   B)NODE是一个结构体类型
     C)OLD是一个结构体类型   D)OLD是一个结构体变量

    (2)有以下程序
     # include  
     struct STU
     { int  num; 
     float  TotalScore;  };
     void f(struct STU  p)
     { struct STU  s[2]={{20044,550},{20045,537}};
       p.num = s[1].num;    p.TotalScore = s[1].TotalScore;
     }
     main()
     { struct STU  s[2]={{20041,703},{20042,580}};
       f(s[0]);
       printf("%d  %3.0f\n", s[0].num, s[0].TotalScore);
     }
    程序运行后的输出结果是
     A)20045 537  B)20044 550  C)20042 580  D)20041 703

(3)有以下程序
     # include   
     struct STU
     { char  name[10]; 
      int  num; };
     void f(char  *name,  int  num)
     { struct STU  s[2]={{"SunDan",20044},{"Penghua",20045}};
       num = s[0].num;
       strcpy(name, s[0].name);
     }
     main()
     { struct STU  s[2]={{"YangSan",20041},{"LiSiGuo",20042}},*p;
       p=&s[1];   f(p->name, p->num);
       printf("%s  %d\n", p->name, p->num);
     }
    程序运行后的输出结果是
     A)SunDan  20042    B)SunDan  20044
     C)LiSiGuo  20042     D)YangSan  20041

(4)有以下程序
     struct STU
     { char  name[10];    int  num;    float  TotalScore;  };
     void f(struct STU  *p)
     { struct STU  s[2]={{"SunDan",20044,550},{"Penghua",20045,537}}, *q=s;
       ++p ;  ++q;  *p=*q;
     }
     main()
     { struct STU  s[3]={{"YangSan",20041,703},{"LiSiGuo",20042,580}};
       f(s);
       printf("%s  %d  %3.0f\n", s[1].name, s[1].num, s[1].TotalScore);
     }
    程序运行后的输出结果是
     A)SunDan  20044  550    B)Penghua  20045  537
     C)LiSiGuo  20042  580    D)SunDan  20041 703

    (5)若有以下说明和定义
    union  dt
    {
        int  a;   char  b;  double  c;
    }data;
    以下叙述中错误的是                         
    A)data的每个成员起始地址都相同
    B)变量data所占内存字节数与成员c所占字节数相等
    C)程序段:data.a=5;printf("%f\n",data.c);输出结果为5.000000
    D)data可以作为函数的实参

    (6)设有如下说明
    typedef  struct  ST
    {
       long a;
       int  b;
       char  c[2];
    } NEW;
    则下面叙述中正确的是            
    A)以上的说明形式非法
    B)ST是一个结构体类型
    C)NEW是一个结构体类型
    D)NEW是一个结构体变量

    (7)有以下结构体说明和变量定义,如图所示,指针pqr分别指向此链表中三个连续结点。
    struct  node
    {
         int data;  
         struct node  *next;
    } *p,*q,*r;
    现要将q所指结点从链表中删除,同时保持链表的连续,以下不能完成指定操作的语句是         
    A)p->next=q->next;
    B)p->next=p->next->next;
    C)p->next=r;
    D)p=q->next;

(8)以下对结构体类型变量td的定义中,错误的是             
    A)typedef   struct  aa
       {
          int   n;
          float  m;
       }AA;
       AA  td;
    B)struct  aa
       {
         int   n;
         float  m;
       }  td;
       struct  aa td;
    C)struct
       {
           int  n;
           float  m;
       }aa;
       struct  aa td;
    D)struct
       {
           int  n;
           float  m;
       }td;

    (9) 有以下说明和定义语句
    struct student
    { int age; char num[8];};
    struct student stu[3]={{20,"200401"},{21,"200402"},{10\9,"200403"}};
    struct student *p=stu;
    以下选项中引用结构体变量成员的表达式错误的是
    A) (p++)->num  B) p->num   C) (*p).num  D) stu[3].age
    10~12.以下程序的功能是:建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中,请从与下划线处号码对应的一组选若中选择出正确的选项。
    #include
    stuct node
    { char data; struct node *next;};
     (10)  CreatList(char *s)
    { struct node *h,*p,*q);
      h=(struct node *) malloc(sizeof(struct node));
      p=q=h;
      while(*s!='\0')
      {  p=(struct node *) malloc(sizeof(struct node));
         p->data=  (11)  ;
         q->next=p;
         q=  (12)  ;
         s++;
      }
      p->next='\0';
      return h;
    }
    main()
    { char str[]="link list";
      struct node *head;
      head=CreatList(str);
      ...
    }



    (10) A) char *  B) struct node   C) struct node*  D) char
    (11) A) *s  B) s   C) *s++   D)(*s)++

    (12) A) p->next  B) p   C) s D) s->next

    (13) 设有以下语句
    typedef struct  S
    {  int g;  char  h;}   T;
    则下面叙述中正确的是
    A) 可用S定义结构体变量    B)可以用T定义结构体变量
    C)S是struct类型的变量    D)T是struct  S类型的变量

    (14) 有以下程序
    struc STU
    {   char name[10];
        int num;
    };
    void f1(struct STU C)
    {  struct STU  b={“LiSiGuo”,2042};
       c=b;
    }
    void f2(struct STU *C)
    {  struct STU  b={“SunDan”,2044};
       *c=b;
    }
    main()
    {  struct  STU   a={“YangSan”,2041},b={“WangYin”,2043};
       f1(A) ;f2(&B) ;
       printf(“%d %d\n”,a.num,b.num);
    }
    执行后的输出结果是
    A)2041 2044  B)2041 2043  C)2042  2044   D)2042  2043

    (15) 有以下程序
    struct STU
    {  char name[10];
       int num;
         int Score;
    };
    main()
    {  struct STU   s[5]={{“YangSan”,20041,703},{“LiSiGuo”,20042,580},
                         {“wangYin”,20043,680},{“SunDan”,20044,550},
                         {“Penghua”,20045,537}},*p[5],*t;
       int i,j;
          for(i=0;i<5;i++)   p[i]=&s[i];
          for(i=0;i<4;i++)
            for(j=i+1;j<5;j++)
               if(p[i]->Score>p[j]->Score)
                 { t=p[i];p[i]=p[j];p[j]=t;}
          printf(“5d  %d\n”,s[1].Score,p[1]->Score);
    }
    执行后输出结果是
    A) 550  550   B) 680  680   C) 580  550   D) 580  680

    (16) 有以下程序
    #include
    struct NODE{
    int num;
    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("%d\n",++(p->x));
    }
    程序运行后的输出结果是
    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,"A",62},2, "B",75};
    C) struct tt[2]={{1,'A'},{2, 'B'}};
    D)structtt[2]={{1,"A",62.5},{2, "B",75.0}};

    (21) 有以下程序
    main()
    { union  { unsigned int n;
       unsigned char c;
         }u1;
     ul.c=`A`;
     printf("%c\n",u1.n);
    }
     执行后输出结果是
    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("%d",&(*p).age);   B) scanf("%s",&std.name);
    C) scanf("%c",&std[0].sex)   D) scanf("%c",&(p->sex));

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

    (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 


    ↑p
    c
    data   next 
    
    ↑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             D) 60
    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));
    }

    (36) 假定建立了以下链表结构,指针p、q分别指向如图所示的结点,则以下可以将q所指结点从链表中删除并释放该结点的语句组是
    A) free(q);  p->next=q->next;
    B)(*p).next=(*q).next;  free(q);
    C) q=(*q).next;  (*p).next=q;  free(q);
    D) q=q->next;  p->next=q;  p=p->next; free(p)

    (37) 有如下定义
    struct person{char  name[9]; int age;};
    strict person   class[10]={“Johu”,  17,
    “Paul”,  19
    “Mary”,  18,
    “Adam    16,};
    根据上述定义,能输出字母M的语句是
    A) prinft(“%c\n”,class[3].mane);
    B) pfintf(“%c\n”,class[3].name[1]);
    C) prinft(“%c\n”,class[2].name[1]);
    D) printf(“%^c\n”,class[2].name[0]);

    (38) 以下对结构体类型变量的定义中,不正确的是
    A) typedef struct aa                    B) #define AA    struct aa
    {     int   n;                          AA {int n;
    float m;                             float m;
    }AA;                                 }td1;
    AA td1;
    C) struct                                  D) struct
    {   int n;                                 {    int n;
    float m;                                    float m;
    }aa;                                        }td1;
    stuct aa td1;

    (39) 若已建立如下图所示的单向链表结构,
   
    在该链表结构中,指针p、s分别指向图中所示结点,则不能将s所指的结点插入到链表末尾仍构成单向链表的语句组是
    A) p =p->next; s->next=p; p->next=s;
    B) p =p->next; s->next=p->next; p->next=s;
    C) s->next=NULL; p=p->next; p->next=s;
    D) p=(*p).next; (*s).next=(*p).next; (*p).next=s;

    (40) 下列程序的输出结果是
         A) 5            B) 6              C) 7             D) 8
           struct abc
           { int a, b, c; };
           main()
           { struct abc  s[2]={{1,2,3},{4,5,6}}; int t;
                t=s[0],a+s[1],b;
                printf("%d \n",t);
           }



    (41) 有以下结构体说明和变量的定义,且如下图所示指针p指向变量a,指针q指向变量b。则不能把结点b连接到结点a之后的语句是
         A) a.next=q;                      B) p.next=&b;
         C) p->next=&b;                    D) (*p).next=q;
            struct node
            {  char  data;
               struct node  *next;
            {  a,b,*p=&a,*q=&b;
                        data  next                    data  next

    (42) 变量a所占内存字节数是
         A) 4            B) 5              C) 6             D) 8
         union U
         {  char st[4];
            int  i;
            long l;
         };
         struct A
         {  int  c;
            union U u;
         }a;

    (43) 以下选项中,能定义s为合法的结构体变量的是
        A) typedef  struct   abc         B) struct
        {     double   a;                {   double   a;
              char    b[10];                  char    b[10];
        }    s;                          }   s;
        C) struct    ABC                 D) typedef     ABC
        {     double   a;                {   double   a;
              char   b[10];                   char   b[10];
        }                                }
        ABC     s;                        ABC        s;

    (44) 以下程序的输出结果是
    A) 2      B) 1     C)0      D)不确定
    main()
    { union { char i[2];
            int  k;
           }r;
    r.i[0]=2;   r.i[1]=0;
    printf{“%d\n”,r.k};
    }

    (45) 设有以下定义或语句,则输出的结果是(指针变量占两个字节)
    A) 20       B) 16      C) 14      D)12
    struct date
    { long *cat;
     struct date *next;
     double dog;
    }too;
    printf(“%d\n”,sizeof(too));

    (46) 有以下程序
        #include    
        struct     stu
        { int      num;
          char     name[10];
          int      age;
        };
        void fun(struct stu    *p)
        { printf("%s\n",(*p).name); }
        main()
        {
          struct  stu   students[3]={ {9801,"Zhang",20},
                                      {9802,"Wang",19},
                                      {9803,"Zhao",18} };
          fun(students+2);
        }
    输出结果是
    A) Zhang          B)Zhao          C) Wang           D) 18

    (47) 设有以下说明和定义:
        typedef union
                    { long   i;  int  k[5];  char  c;  }DATE;
         struct date
        { int cat;  DATE cow;  double   dog; } too;
        DATE   max;
        则下列语句的执行结果是
        printf ("%d",sizeof (struct date ) +sizeof(max));
    A) 26            B) 30             C) 18       D) 8

    (48) 设有如下定义:
    struct sk
    {int a;float b;}data,*p;
    若有p=&data;,则对data中的a域的正确引用是
    A)(*p).data.a    B)(*p).a        C)p->data.a        D)p.data.a

    (49) 若程序中有下面的说明和定义
            struct abc
            {int x;char y;}
            struct abc s1,s2;
    则会发生的情况是
    A) 编译进错                          B) 程序将顺利编译`连接`执行
    C) 能顺利通过编译`连接`但不能执行    D) 能顺利通过编译`但连接出错

    (50) 若有下面的说明和定义,则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


    (51) 字符'0'的ASCII码的十进制数为48,且数组的第0个元素在低位,则以下程序的输出结果是
    #include
    main()
    { union { int  i[2];    long k;    char c[4];    }r,*s=&r;
    s->i[0]=0x39;
    s->i[1]=0x38;
    printf("%c\n",s->c[0])     }
    A) 39         B) 9             C) 38          D) 8

    (52) 设有以下定义:
    typedef union   {   long i;int k[5];char c;}DATE;
    struct date     {   int cat;DATE cow;double dog;}too;
    DATE max;
    则下列语句的执行结果是
    printf("%d",sizeof(struct date)+sizeof(max));
    A) 25         B) 30            C) 18          D) 8

    (53) 根据下面的定义,能打印出字母M的语句是
    A) printf("%c\n",class[3].name);
    D) printf("%c\n",class[2].name[0]);
    B) printf("%c\n",class[3].name[1]);
    C) printf("%c\n",class[2].name[1]);
    struct person { char name[9]; int age;};
    struct person class[10]={"John",17,
     "Paul",19,
    "Mary",18,
    "Adam",16};

    (54) 下面程序的输出是
    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);}

    (55) 已知字符0的ASCII码为十六进制的30,下面程序的输出是
    A) 6             B) 9              C) 0              D) 3
    main()
    { union { unsigned char c;
    unsigned int i[4];
    } z;
    z.i[0]=0x39;
    z.i[1]=0x36;
    printf("%c\n",z.c);}

    (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("%d\n", sizeof(them));}

    (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("%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

    (59) 有以下程序:
    #include
    union  pw
    {  int i;   char  ch[2];  } a;
    main()
    {  a.ch[0]=13;   a.ch[1]=0;   printf("%d\n",a.i);  }
    程序的输出结果是(注意: 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("%d\n", sum);
     }

    (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("%d",m[i].k);
      printf("\n");
    }

    (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;
    且已建立如下图所示链表结构:请写出删除点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;

    (17) 以下函数creat用来建立一个带头结点的单向链表,新产生的结点总是插在链表的末尾。单向链表的头指针作为函数值返回.请填空:
    #include
    struct list   { char data;   struct list * next;    };
    struct list * creat()
    {   struct list * h,* p,* q;
    char ch;
    h=【22】 malloc(sizeof(struct list));   
    p=q=h;
    ch=getchar();
    while(ch!='?')
    {   p=【23】 malloc(sizeof(struct list));   
    p->data=ch;
    p->next=p;
    q=p;
    ch=getchar();
    }
    p->next='\0';
    【24】    

    (18) 下面min3函数的功能是:计算单向循环链表first中每3个相邻结点数据域中值的和,返回其中最小的值。请填空。
    struct node {int data; struct node * link;};
    int min3(struct node * first)
    { struct node *p=first;
    int m,m3=p->data+p->link->data+p->link->link->data;
    for(p=p->link; p! =first; p=  【25】  )  
    int m,m3=p->data+p->link->data+p->link->link->data;
    { m=p->data+p->link->data+p->link->link->data;
    if(  【26】  ) m3=m;}   
    return(m3);}

    (19) 若有以下说明和定义语句,则变量w在内存中所占的字节数是 【27】 。
    union aa
    { float x, y;
    char c[6];
    };
    struct st { union aa v; float w[5]; double ave; } w;

    (20) 为了建立如图所示的存储结构(即每个结点含两个域,data是数据域,next是向结点的指针域),请填空。                       
    data next
     
    struct link { char data; 【28】 } node; 

    (21) 以下程序建立了一个带有头结点的单向链表,链表结点中的数据通过键盘输入,当输入数据为-1时,表示输入结束(链表头结点的data 域不放数据,表空的条件是ph->next = = NULL).
    #include
    struct list { int data;struct list *next;};
     【29】 creatlist()  
    { struct list *p,*q,*ph;  int a;
      ph=(struct list *) malloc(sizeof(struct list));
      p=q=ph; printf("Input an integer number,enter –1 to end:\n");
      scanf("%d",&a):
      while(a!=-1)
    { p=(struct list *)malloc(sizeof(struct list));
      p->data=a; q->next=p;   【30】 =p; scanf("%d",&a); }
    p->next='\0'; return(ph); }
    main()
    { struct list *head; head=creatlist();}


    答案:
    一、选择题:
    1) C 2) D 3) A 4) B 5) C 6)  C 7) D 8) C 9) D 10) C
    11) A 12) B 13) B 14) A 15) C 16) B 17) B 18) B 19) A 20) B
    21) A 22) D 23) B 24) B 25) C 26) D 27) B 28) A 29) D 30) B
    31) C 32) D 33) D 34) B 35) C 36) B 37) D 38) C 39) A 40) B
    41) B 42) C 43) B 44) A 45) D 46) B 47) B 48) B 49) A 50) D
    51) B 52) B 53) D 54) D 55) B 56) C 57) C 58) C 59) A 60) D
     二、填空题:
    (1) 5
    (2) 13431
    (3) 2002Shangxian
    (4) sizeof(struct node )
    (5) x,link=&z或x.link=y.ink
    (6) 80
    (7) struct node *
    (8) Struct STRU*
    (9) Struct STRU
    (10) struct st 或ex
    (11) 22
    (12) 10
    (13) 4
    (14) 5
    (15) 2
    (16) struct list *next
    (17) int data
    (18) (*b).day
    (19) b->day
    (20) char *data
    (21) struct link *next
    (22) (struct list *)
    (23) (struct list *)
    (24) return(h);  或 return h;
    (25) p->link
    (26) mm或m<=m3或m3>=m
    (27) 34
    (28) struct link *next
    (29) struct  list *
    (30) q

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目