问题 填空题

以下程序运行后的输出结果是 【16】
struct NODE

int num;
stmct 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);

答案

参考答案:E

解析: 主函数首先声明了一个结点数组s[3],并分别初始化其成员num为1、2、3,而成员next全部被初始化为’\0’也就是0。下面又用三条语句s[0].next=s+1;s[1].next=s+2;s[2].next=s;分别将三个结点指向其后面一个结点,而最后一个结点指向第1个结点,构造出一条单向循环链表。接下来用结点指针p=s即让其指向s[0],然后让q=p->next,即指向了s[1],r=q->next即让r指向s[2],然后让一个累计变量sum累加q->next->num和r->next->next->nm,因为q指向s[1]所以它的next指针指向的是s[2],故第1次累加的是s[2].num=3,而r指向的是s[2]所以它的next是s[0],s[0]的next指向s[1],故第2次累加的是s[1].num=2。所以程序最终输出结果为5。

单项选择题
单项选择题