加黑字体是选择的错误答案,黄色字体是正确答案。
结构体习题纠错
判断题
(1)int (*p)[4]它表示p是一个指针数组,它包含4个指针变量元素。 (1分)
()T ()F
答案:F
分析:int (*p)[4],定义一个数组指针,该指针指向含4个元素的一维数组(数组中每个元素是int型)。
(2)结构体类型本身不占用内存空间,结构体变量占用内存空间。 (1分)
()T ()F
答案:T
分析:结构体类型类似int类型,它们本身不占用内存空间,结构体变量相当于一个int类型的变量a,它们都会占用内存空间。
(3)在定义嵌套的结构类型时,必须先定义成员的结构类型,再定义主结构类型。 (1分)
()T ()F
答案:T
分析:类比其他常用的数据类型,只不过结构类型需要我们定义类型名和成员类型。
选择题
(5)若变量已正确定义并且指针p已经指向某个变量x,则(* p)++相当于___。(2分)
A、p++
B、x++
C、*(p++)
D、&x++
答案:B
分析:(*p)++,考虑运算符等级,先取 *p,然后把 *p的值+1。
(6)对于以下结构定义,++p->str中的++加在___。 (2分)
struct {
int len;
char *str;
} *p;
A、指针str上
B、指针p上
C、str指的内容上
D、以上均不是
答案:A
分析:->的等级大于++的等级,所以先p->str,然后+1。
结构体链表纠错
判断题
(1)单向链表中的每个结点都需要动态分配内存空间。 (1分)
()T ()F
答案:T
分析:因为使用动态分配内存空间可以及时分配储存空间,不象数组等静态内存分配方法那样需要预先分配存储空间
(2)通常使用结构的嵌套来定义单向链表结点的数据类型。 (1分)
()T ()F
答案:T
分析:可以快速查找下个结构体变量。
选择题
(3)在一个以 h 为头的单向链表中,p 指针指向链尾的条件是()。 (2分)
A、p->next=h
B、p->next=NULL
C、p->next->next=h
D、p->.data=-1
答案:D
分析:p指针指向链尾时是NULL,NULL=-1。
(4)对于一个头指针为head的带头结点的单链表,判定该表为空表的条件()。 (2分)
A、head == NULL
B、head→next == NULL
C、head→next == head
D、head!=NULL
答案:B
分析:head→next == NULL,next不指向任何结点,所以该表为空表。
(5)下列算法创建n个元素的带头单链表
typedef struct lnode
{ int data;
struct lnode next;
}lnode,linklist
void create(linklist &head, int n)
{
linklist p; int i;
head=(linklist)malloc(sizeof(lnode));
/此处选项( )/
for(i=n;i>0;i–)
{
p =(linklist)malloc(sizeof(lnode));
scanf(“%d”,&p->data);
/此处选项( )/
/此处选项( )/
}
}。 (2分)
A、head->next=null
B、p->next=head->next
C、head->next=p
D、替换为错误项
答案:C
(6)在一个单链表head中,若要删除指针p所指结点的后继结点,则执行()。 (2分)
A、p=p->next;free( p );
B、p->next=p->next->next; free§;
C、q= p->next q->next=p->next; free(q);
D、q=p->next; p->next=q->next; free(q);
答案:D
(7)完成下列打印带头单链表的各元素的算法(