niusouti.com

有以下程序:includestxucttt{ intx;structtt *y;}*p;struct tta[4]={20,a+1,15,a+2,30有以下程序: #include <stdio.h> stxuct tt { int x;struct tt *y;}*p; struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a}; main() { int i; p=a; for(i=1;i<=2;i++) {printf("%d,",p->x ); p=p->y;} } 程序

题目
有以下程序:includestxucttt{ intx;structtt *y;}*p;struct tta[4]={20,a+1,15,a+2,30

有以下程序: #include <stdio.h> stxuct tt { int x;struct tt *y;}*p; struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a}; main() { int i; p=a; for(i=1;i<=2;i++) {printf("%d,",p->x ); p=p->y;} } 程序的运行结果是( )。

A.20,30,

B.30,17

C.15,30,

D.20,15,


相似考题
参考答案和解析
正确答案:D
解析:题目中定义了一个全局结构体数组a,结构体中包含两个成员;一个int型变量x和一个自身类型指针y。所以,结构体数组a的初始化列表中每两个初始化一个结构体元素。主函数通过一个for循环,连续调用了两次输出函数printf(),每次输出p所指元素的x成员值。p初始化时指向数组a的首地址,即a[0]的位置,所以第1次输出的值为20。然后又将a[0]的成员y的值赋给p,y在初始化时是a+1,所以p在第2次输出时指向的元素是a[1],故第2次输出的值为15。所以本题最终输出结果是“20,15,”,应该选择D。
更多“有以下程序:#include<stdio.h>stxucttt{ intx;structtt *y;}*p;struct tta[4]={20,a+1,15,a+2,30 ”相关问题
  • 第1题:

    有以下程序:include main() {int a[] = {2,4,6,8,10} ,y =0,x, * p;p =&a[1];for(

    有以下程序: #include <stdio.h> main() { int a[] = {2,4,6,8,10} ,y =0,x, * p; p =&a[1]; for(x=1;x<3;x++)y+ =p[x]; printf( "% d \n" , y); }程序运行后的输出结果是( )。

    A.10

    B.11

    C.14

    D.15


    正确答案:C
    解析:本程序通过语句p=&a[1];将指针变量p指向存储单元a[1],使得p[0]的值为4,通过for循环,使y的值丸P[1]与p[2]之和,即y=6+8,所以输出的y值为14。

  • 第2题:

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

    有以下程序:

    #include <stdio.h>

    #include <stdlib.h>

    struct NODE

    { int num;

    struct NODE *next;

    };

    main()

    { struet NODE *p,*q,*r;

    int sum=0;

    p=(struct NODE *) malloc(sizeof(struct NODE));

    q=(struct NODE *) malloc(sizeof(struet 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
    解析:程序中q->next=r,所以q->next->num即为r->num,值为3,而p->num=1,所以sum=3+1=4。

  • 第3题:

    有以下程序includestruct ord{ int x,y;} dt[2]={1,2,3,4};mare(){struct ord*p=dt; p

    有以下程序 #include<stdio.h> struct ord { int x,y;} dt[2]={1,2,3,4}; mare() { struct ord*p=dt; printf("%d,",++p->x); printf("%d\n",++p->y); } 程序的运行结果是______。

    A.1,2

    B.2,3

    C.3,4

    D.4,1


    正确答案:B
    解析:本题主要考查了结构体变量成员的引用,有三种形式来引用结构体变量中的成员:(1)结构体变量名.成员名:(2)指针变量名->成员名;(3)(*指针变量名).成员名。其中点号“.”称为成员运算符;箭头“->”称为结构指向运算符。由于p->x指向了结构体的的成员x,而结构体中x的值为1,因此自增后变为2,p->y指向了结构体的成员y,而结构体中y的值为2,因此自增后变为3,因此,选项B是正确的。

  • 第4题:

    以下程序的输出结果是【】。 include main() {struct stru {int a; float b; char d[4]; }

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

    include<stdio.h>

    main()

    { struct stru

    { int a;

    float b;

    char d[4];

    };

    printf("%d\n",sizeof(struct stru));

    }


    正确答案:10
    10 解析:结构体变量占用内存空间的字节数是结构体各分量占用内存空间的字节数的总和。int型变量占用2字节,float型变量占用4字节,char型占用1字节,char d[4]是含有4个元素的char型数组,占用4字节。sizeof(struct stru)是计算结构体变量占用内存空间的字节数,2+4+4=10。

  • 第5题:

    有以下程序 include struct st { int x,y;} data[2]={1,10,2,20}; main(

    有以下程序 #include <stdio.h> struct st { int x,y;} data[2]={1,10,2,20}; main() { struct st *p=data; printf("%d,",p->y); printf("%d\n",(++p)->x); } 程序的运行结果是______。

    A.10,1

    B.20,1

    C.10,2

    D.20,2


    正确答案:C
    解析:本题定义了一个包含两个元素(data[0]、data[1])的结构体数组data,其中data[0].x=1;data[0].y=10;data[1].x=2; data[1].y=20。在主函数中,定义了一个指向结构体数组的结构体指针变量p,使得p指向结构体数组的首地址,所以p->y访问的是第一个鲒构体数组元素的第二个值,即data[0].y;(++p)->x访问的是第二个结构体数组元素的第一个值,即 data[1].x,所以程序输出结果为10,2。

  • 第6题:

    有以下程序

    #include<stdio.h>

    struct tt

    (int x;struct tt*y;)*P;

    struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a};

    main

    { int i;

    p=a;

    for(i=l;i<=2;i++){printf("%d,",p->x);P =p->y;}

    }

    程序的运行结果是( )。

    A.20,30,

    B.30,17,

    C.15,30,

    D.20,15,


    正确答案:D
    程序的结构体数组a的元素形成了一个单向的循环链表,每个元素的指针成员都指向下一个元素的地址。

  • 第7题:

    下列程序的输出结果是______。 include main() {intx=10,y=10,i; for(i=0;x>8;y=++) pri

    下列程序的输出结果是______。

    include<stdio.h>

    main()

    { intx=10,y=10,i;

    for(i=0;x>8;y=++)

    printf("%d%d",X--,y);

    }


    正确答案:101091
    101091 解析:for(表达式1;表达式2;表达式3) 语句的功能是:首先计算表达式1的值,然后检测表达式2的值,若其值为真,则执行循环体语句,执行完毕后,再计算表达式3的值。然后再检测表达式2的值是否为真,若为真,继续执行循环体语句,若为假,则退出循环;第 1次循环x>8成立,输出x=10,y=10后,x的值减1,i=1,执行y=++i操作,y的值变为1;判断条件还成立,输出x=9,y=1,然后x的值减1,循环条件不成立,则退出循环。

  • 第8题:

    有以下程序:includemain(){int a[]={1,2,3,4},y,*p=&a[3];--p;y=*p;printf("y=%d\n",y

    有以下程序: #include<stdio.h> main() { int a[]={1,2,3,4},y,*p=&a[3]; --p;y=*p;printf("y=%d\n",y); } 程序的运行结果是( )。

    A.y=0

    B.y=1

    C.y=2

    D.y=3


    正确答案:D
    解析:本题主要考查一维数组及数组元素的地址。程序中定义数组a后知,a[0]=1,a[1]=2,a[2]=3,a[3]=4;在定义指针p时给其赋值为a[3]的地址。执行--p;语句后,p指向数组元素a[2];然后执行y=*p;语句,y的值为指针p所指向的变量的值为3。

  • 第9题:

    有以下程序: 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
    解析:本题主要考查利用结构体变量构成链表,链表关系如下:

  • 第10题:

    有以下程序 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

  • 第11题:

    有以下程序

    #include<stdio.h>

    struct tt

    {

    int x; struct tt *y;

    }*p;

    struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a};

    main()

    {

    int I;

    p=a;

    for(i=1;i<=2;i++) printf(“%d”,p->x); p=p->y;

    }

    程序的运行结果是( )。

    A.20,30

    B.30,17

    C.15,30

    D.20,15


    正确答案:D

  • 第12题:

    单选题
    有以下程序:#include struct st{ int x,y;} data[2]={1,10,2,20};main(){ struct st *p=data; printf(%d,,p->y); printf(%d,(++p)->x);}程序运行的结果是(  )。
    A

    10,1

    B

    20,1

    C

    10,2

    D

    20,2


    正确答案: C
    解析:
    题目在定义结构体st的同时便定义了结构体数组data。可知data[0]={1,10},data[1]={2,20}。结构体指针p指向数组的首地址,指向data[0],++p则指向data[1],所以输出p->y,(++p)->x即输出data[0].y和data[1].x。从初始化列表中可以看出,这两个值分别是10和2。答案选择C选项。

  • 第13题:

    有以下程序 include struct tt { int x; struct tt *y; } *p; s

    有以下程序 #include <stdio.h> struct tt { int x; struct tt *y; } *p; struct tt a[4]= {20,a+ 1,15,a+2,30,a+3,17,a}; main() { int i; p=a; for(i=1; i<-2; i++) { printf("%d,", p->x ); p=p->y; }

    A.20,30,

    B.30,17

    C.15,30,

    D.20,15,


    正确答案:D
    解析:题目中定义了一个全局结构体数组a,结构体中包含两个成员:一个int型变量x和一个自身类型指针y。所以,结构体数组a的初始化列表中每两个初始化一个结构体元素。主函数通过一个for循环,连续调用了两次输出函数printf(),每次输出p所指元素的x成员值。p初始化时指向数组 a的首地址,即a[0]的位置,所以第1次输出的值为20。然后又将a[0]的成员y的值赋给p,y在初始化时是a+1,所以p在第2次输出时指向的元素是a[1],故第2次输出的值为15。所以本题最终输出结果是“20,15,”,应该选择D。

  • 第14题:

    有以下程序:includestruct tt{int x;struct tt*y;}*p;struct tt a[4]={20,a+1,15,a+2,

    有以下程序: #include<stdio.h> struct tt {int x;struct tt*y;}*p; struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a} main() { int i; p=a; for(i=1;i<=2;i++){printf("%d",p->x);p=P->y;} } 程序的运行结果是( )。

    A.20,30,

    B.30,17

    C.15,30

    D.20,15


    正确答案:D
    解析:本题考查的重点是对结构体的运用与理解。在a[4]的初始化中,相当于将其生成为一个链表,故打印两次相当于将前两个整数值打印出来.因此选项D是正确的。

  • 第15题:

    有以下程序: #include <stdio.h> main( ) { struct node{int n; struct node*next;} *P; struct node x[3]={{2,x+1),{4,x+2},{6,NULL}}; P= X; printf("%d,",p->n); printf("%d\n",p->next->n); } 程序运行后的输出结果是( )。

    A.2,3

    B.2,4

    C.3,4

    D.4, 6


    正确答案:B
    略。

  • 第16题:

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

    有以下程序

    #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
    解析:主函数中首先定义了三个结构体指针变量p,q,r。然后调用内存分配函数分别为其分配地址空间,程序中变量q->num的值为20,指针变量q->next指向指针变量r,r->num的值为30,所以变量q->next->num的值为30,因此,表达式q-> num+q->next->num的值为20+30=50。

  • 第17题:

    有以下程序 #include<stdio.h> struct tt (int x;struct tt*y;)*P; struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a}; main { int i; p=a; for(i=l;i<=2;i++){printf("%d,",p->x);P =p->y;} } 程序的运行结果是( )。

    A.20,30,

    B.30,17,

    C.15,30,

    D.20,15,


    正确答案:D
    程序的结构体数组a的元素形成了一个单向的循环链表,每个元素的指针成员都指向下一个元素的地址。

  • 第18题:

    有以下程序:includestruct tt{ int x;struct tt *y;} *p;struct tt a[4]={20,a+1,15,a

    有以下程序: #include<stdio.h> struct tt { int x;struct tt *y;} *p; struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a}; main() {int i; p=a; for(i=1;i<=2;i++) {printf("%d,",p->x);p=p->y;} } 程序的运行结果是( )。

    A.20,30,

    B.30,17

    C.15,30,

    D.20,15,


    正确答案:D
    解析:本题考查的是指针和结构的应用。首先定义的数组tt中有两个成员,一个整型变量,一个结构指针。当i=1时,P指针指向结构数组的第一个元素,并输出此元素的第一个成员x,即20;当i=2时,P指针指向结构数组的第二个元素的第一个成员,所以输出15。

  • 第19题:

    有以下程序: 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正确。

  • 第20题:

    以下程序的输出结果是includestruct st{ int x;int *y;}*p;int dt[4]={10,20,30,40};s

    以下程序的输出结果是 #include<stdio.h> 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));}

    A.10

    B.11

    C.51

    D.60


    正确答案:C
    解析:通过指针来引用结构体成员的方法是(指针变量)->结构体成员名。注意:结构体变量中的数据引用。

  • 第21题:

    以下程序的输出结果是()。includestruct st{int x;int*y;}*p; int dt[4] ={ 10,20,30,4

    以下程序的输出结果是( )。 #include<stdio.h> 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)); }

    A.10

    B.11

    C.51

    D.60


    正确答案:C
    解析:由于数组名保存了数组的首地址,即数组中第一个元素的地址,执行p=aa;后,p指向aa[0],p->x相当于aa[0].x,也就是50,经过自增运算后,显示结果为51。

  • 第22题:

    有以下程序:include define F(X,Y)(X)*(Y)main(){int a=3,b=4;printf("%d\n",F(a++,b

    有以下程序: #include <stdio.h> #define F(X,Y)(X)*(Y) main() { int a=3,b=4; printf("%d\n",F(a++,b++)); } 程序运行后的输出结果是( )。

    A.12

    B.15

    C.16

    D.20


    正确答案:A
    解析:在程序中先将表达式中的宏替换掉,则输出语句中的表达式为(a++)*(b++),而a++的值为3,b++的值为4。因此最后的值为3*4=12。所以,4个选项中选项A符合题意。

  • 第23题:

    单选题
    有以下程序#include struct tt{ int x; struct tt *y;} *p;struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a};main(){ int i; p=a; for(i=1;i<=2;i++) {  printf(%d,,p->x);  p=p->y; }}程序的运行结果是(  )。
    A

    20,15,

    B

    30,17,

    C

    15,30,

    D

    20,30,


    正确答案: B
    解析:
    本题中结构体struct tt的成员包括它本身的指针struct tt*,定义了结构体数组a,并完成初始化,a[0].x=20,a[0].7=a+1,……,a[3].x=17,a[3].y=a。在主函数中,第一次for循环,i=1时:指针p指向数组a的首地址,即&a[0],因此p->x=a[0].x=20,p->y=a[0].y=a+1,则p=p->y就是将指针p后移一位指向a[1];i=2时,输出p->x等价于输出a[1].x,即15,之后再将p后移;当i=3时跳出循环。答案选择A选项。