以下程序运行后的输出结果是【 】。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)

题目

以下程序运行后的输出结果是【 】。

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);

}


相似考题
参考答案和解析
正确答案:5
5 解析:程序通过语句“s[0].next=s+1;s[1].next=s+2;s[2].next=s;”将结构体变量s中各结点链接成了一个循环链表,即最后一个结点的指针域指向了头结点(s[2].next=s;),整个链表形成一个环,并通过语句“p=s;q=p->next;r=q->next;”将结构体指针变量p、q、r指向了各结点,具体结构如下图:

故本题输出的sum=3+2=5。
更多“以下程序运行后的输出结果是【 】。structNODE {int num;struct NODE *next; }; main() {struct NOD ”相关问题
  • 第1题:

    有以下程序: include struct NODE { int num; struct NODE*next; }; main() { struct

    有以下程序:

    #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*)mallloc(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


    正确答案:D
    解析:本题在主函数中首先定义了3个结构体指针变量p,q,r。然后调用内存分配函数分别为其分配地址空间,程序中变量p->num的值为10,指针变量q->next指向指针变量r,r->num的值为30,所以变量q->next->num的值为30,因此,表达式p->num+q->next->num的值为10+30=40。所以4个选项中D正确。

  • 第2题:

    有以下程序 include struct NODE { int num;struct NODE*next;}; main() { struct NO

    有以下程序

    #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


    正确答案:D
    解析:该题中考查的是简单的单链表,下图就是赋完值后的示意图:容易看到p->num=10,而q->next就是r,所以q->next->num=30,故答案为40。

  • 第3题:

    有以下程序 include struct NODE {int num;struct NODE*next;} main() {struct NODE

    有以下程序

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


    正确答案:D

  • 第4题:

    有以下程序 include gtruet NODE {intnum;struct NODE *next;}; main() {struct NODE

    有以下程序

    #include <stdlib.h>

    gtruet 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(sizeef (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.50


    正确答案:D
    解析:本题考查的知识点是对结构体指针变量的正确引用与计算。主函数中首先定义了三个结构体指针变量p,q,r。然后调用内存分配函数分别为其分配地址空间,程序中变量q->num的值为20,指针变量q->next指向指针变量r,r->nnm的值为30,所以变量q->next->nm的值为30,因此,表达式q->num+q->next->num的值为20+30=50.所以4个选项中D正确。

  • 第5题:

    有以下程序: include struct NODE {int num;stmct NODE *next;}; main( ) { str

    有以下程序:

    #include<stdlib.h>

    struct NODE

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


    正确答案:D
    解析:本题主要考查利用结构体变量构成链表,链表关系如下:

  • 第6题:

    有以下程序: include struct NODE{int nurn;struct NODE *next; }; main() { struct

    有以下程序:

    #include <stdlib.h>

    struct NODE{

    int nurn;

    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


    正确答案:B
    解析:本题中定义了一个结点structNODE,在主函数中定义了三个结点变量指针p、q和r,接着通过malloc函数分配了三个结点并让p、q和r分别指向他们,再接着给p、q和r所指向的结点的num域赋值为1、2、3,然后让结点p指向小让q指向r,r指向NULL。显然q->next->num的值为指针r所指向结点的num域的值为3,p->num的值为指针p所指向结点的num域的值为1,故最后输出s的值为3+1=4。所以,4个选项中选项B符合题意。