1.有以下定义和语句:
struct student
{ int age;
int num; };
struct student stu[3]={{1001,20},{1002,19},{1003,21}};
main()
{ struct student *p;
p=stu;
…… }
则以下不正确的引用是。
A) (p++)->num B) p++ C) (*p).num D) p=&stu.age
2.有以下结构体定义:
struct example
{ int x;
int y; }v1;
则正确的引用或定义是。
A) example.x=10 B) example v2; v2.x=10;
C) struct v2; v2.x=10; D) struct example v2={10};
3.对于如下结构体定义,若对变量person的出生年份进行赋值,正确的赋值是。
struct date
{ int year,month,day;
};
struct worklist
{ char name[20];
char sex;
struct date birth;
}person;
A) year=1976 B) birth.year=1976
C) person.birth.year=1976 D) person.year=1976
4.根据下述定义,可以输出字符'A'的语句是。
struct person
{ char name[11];
struct
{ char name[11];
int age;
}other[10];
};
struct person man[10]={ {"Jone",{"Paul",20}},{"Paul",{"Mary",18}},
{"Mary",{"Adam",23}},{"Adam",{"Jone",22}}
};
A) printf("%c",man[2].other[0].name[0]); B) printf("%c",other[0].name[0]);
C) printf("%c",man[2].(* other[0])); D) printf("%c",man[3].name);
5.若有以下程序段:
struct st
{ int n;
struct st *next; };
struct st a[3]={5,&a[1],7,&a[2],9, '\0'} ,*p=a;
则值为6的表达式为。
A) p++->n B) p->n++ C) (*p).n++ D) ++p->n
6.对于以下定义,不正确的叙述是。
union data
{ int i;
char c;
float f;}a,b;
A) 变量a所占的内存长度等于成员f的长度
B) 变量a的地址和它的各成员地址都是相同的
C) 不能对变量a赋初值
D) 可以在定义的时候对a初始化
7.下述程序运行结果为。
#include
struct st
{ int n;
int *m;
}*p;
void main()
{ int d[5]={10,20,30,40,50};
struct st arr[5]={100,d,200,d+1,300,d+2,400,d+3,500,d+4};
p=arr;
printf("%d\t",++p->n);
printf("%d\t",(++p)->n);
printf("%d\n",++(*p->m));
}
A) 101 200 21 B) 101 20 30
C) 200 101 21 D) 101 101 10
8、以下程序的运行结构是。
#include
main( )
{ union
{ long a;
int b;
char c;}m;
printf("%d\n",sizeof(m));}
A) 2 B) 4 C) 6 D) 7
9.若要利用下面的程序段使指针变量p指向一个存储整型变量的存储单元,则在空格中应填入的内容是。
int *p;
p= malloc(sizeof(int));
A) int B) int * C) (* int) D) (int *)
10、执行下述语句后的结果是。
enum weekday {sun,mon=3,tue,wed, thu};
enum weekday day;
day=wed;
printf("%d\n",day);
A) 5 B) 3 C) 4 D) 编译时出错
11、下面程序的输出结果是。
main()
{ enum abc{ green=3,red };
char *clr[ ]={"red","blue","yellow","black","white","green"};
printf("%s and ",clr[green]);
printf("%s",clr[red]);
}
12、已知指针变量head指向单链表表头,下面程序用来统计链表中各个结点的数据项之和,请填空。
struct link
{ int data;
struct link *next;
};
main()
{ int k;
struct link *head;
k=sum(head);
printf("%d\n",k);
}
sum( 【1】 )
{ struct link *p;
int s;
s=head->data;
p=head->next;
while(p)
{ s+= 【2】 ;
p=p->next;
}
return(s);
}
13、以下程序完成链表的输出,请填空。
void print(head)
struct stu *head;
{ struct stu *p;
p=head;
if( 【1】 )
do
{ printf("%d,%f\n",p->num,p->score);
p=p->next;
}while( 【2】 );
}
14、下面程序的运行结果为。
typedef union student
{ char name[10];
long sno;
char sex;
float score[4];
}stu;
main( )
{ stu a[5];
printf("%d\n",sizeof(a));
}
15、以下对枚举类型名的定义中正确的是。
A) enum a={one,two,three};
B) enum a {one=9,two=-1,three};
C) enum a={"one","two","three"};
D) enum a {"one","two","three"};
16、下面程序的输出是。
main()
{ enum team { my,your=4,his,her=his+10};
printf("%d%d%d%d\n",my,your,his,her); }
A) 0 1 2 3 B) 0 4 0 10 C) 0 4 5 15 D) 1 4 5 15
17、下述程序的执行结果是。
#include
union un
{ int i;
char c[2];
};
void main( )
{ union un x;
x.c[0]=10;
x.c[1]=1;
printf("\n%d",x.i);
}
A) 266 B) 11 C) 265 D) 138
17、有以下程序
#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+p->next->num);
}
程序运行后的输出结果是。
A) 10 B) 20 C) 30 D) 40
18、设有以下说明语句:
typedef struct
{ int n;
char ch[8];
}per;
则下面叙述正确的是。
A) per是结构体变量名 B) per是结构体类型名
C) typedef是结构体类型 D) struct是结构体类型名
19、若有以下定义:
struct link
{ int data;
struct link *next;
}a,b,c,*p,*q;
且变量a和b之间已经有如右图所示的链表结构:指针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;