加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

《C语言程序设计》核心试题(12)

(2011-09-13 23:29:23)
标签:

c语言

分类: 教学文件
第十四部分:结构体与共用体及用户定义类型


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

2)有以下程序
 # include   <string.h>
 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);
 }
程序运行后的输出结果是
 A20045 537  
 B20044 550  
 C20042 580  
 D20041 703

3)有以下程序
 # include    <string.h>
 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);
 }
程序运行后的输出结果是
 ASunDan  20042    
 BSunDan  20044
 CLiSiGuo  20042     
 DYangSan  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);
 }
程序运行后的输出结果是
 ASunDan  20044  550    
 BPenghua  20045  537
 CLiSiGuo  20042  580    
 DSunDan  20041 703

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

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

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

(8)以下对结构体类型变量td的定义中,错误的是             
 Atypedef   struct  aa
  {
      int   n;
      float  m;
   }AA;
   AA  td;
 Bstruct  aa
  
 {
     int   n;
     float  m;
   td;
   struct  aa td;
 Cstruct
   {
       int  n;
       float  m;
   }aa;
   struct  aa td;
 Dstruct
  
 {
       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 <stdlib.h>
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定义结构体变量
 CSstruct类型的变量    DTstruct  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);
}
执行后的输出结果是
 A2041 2044  
 B2041 2043  
 C2042  2044   
 D2042  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 <stdlib.h>
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    *p=data;
printf("%d\n",++(p->x));
}
程序运行后的输出结果是
 A) 10           
 B) 11             
 C) 20               
 D)21

(19)
有以下结构体说明和变量定义,如图所示,指针pqr分别指向一个链表中的三个连续结点。
struct   node
{ int  data
struct   node   *next ;
} *p,  *q,   *r;
 
现要将qr所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是
 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 <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

(27)
若有以下说明和定义
typedef int *INTEGER;
INTEGER p,*q;
以下叙述正确的是
 A) Pint型变量        
 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;
且变量ab之间已有如下图所示的链表结构:
                   b
data  next           data   next
┌──┬──┐       ┌──┬──┐
│ 5  │    ┼──→ │ 9  │ \0 │
└──┴──┘       └──┴──┘
↑p
c
data   next
┌──┬──┐
│ 7  │    │ 
└──┴──┘
↑q
指针p指向变量a,q指向变量c。则能够把c插入到ab 之间并形成新的链表的语句组是:
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)
假定建立了以下链表结构,指针pq分别指向如图所示的结点,则以下可以将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

 data next

 

 


在该链表结构中,指针ps分别指向图中所示结点,则不能将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<stdio.h>
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)
已知字符0ASCII码为十六进制的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)
若已建立下面的链表结构,指针ps分别指向图中所示的结点,则不能将s所指的结点插入到链表末尾的语句组是
 
http://s4/middle/8abf4784gacd38cd01283&690


 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<stdio.h>
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
 Ap + + ->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 <string.h>
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;
且已建立如下图所示链表结构:
 
http://s1/middle/8abf4784gacd392c5f080&690

请写出删除点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是指向结点的指针域。请填空完成此结构的类型定义和说明。

http://s4/middle/8abf4784gacd3963e6073&690

struct link
{
20 ; 21;} *head;

(17)
以下函数creat用来建立一个带头结点的单向链表,新产生的结点总是插在链表的末尾。单向链表的头指针作为函数值返回.请填空:
#include<stdio.h>
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个相邻结点数据域中值的和,返回其中最小的值。请填空。

http://s3/middle/8abf4784gacd39c73ef02&690

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<stdio.h>
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();}


答案:
一、选择题:
01) 02) 03) 04) 05) 

06) 07) 08) 09) 10) C

11) 12) 13) 14) 15) 

16) 17) 18) 19) 20) B

21) 22) 23) 24) 25) 

26) 27) 28) 29) 30) B

31) 32) 33) 34) 35) 

36) 37) 38) 39) 40) B

41) 42) 43) 44) 45) 

46) 47) 48) 49) 50) D

51) 52) 53) 54) 55) 

56) 57) 58) 59) 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<=m3m3>=m

(27) 34

(28) struct link *next

(29) struct  list *

(30) q



0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有