更多“若有以下定义和语句 struct a{ int n,m;}; struct a st[3]={{2,3},{4,5},{6,7}}; struct a*p=st;则以下错误的引用是A.(p++)-n; B.st[0].n; C.(*p).n; D.P=st.m,”相关问题
  • 第1题:

    若有以下程序段: struct st {int n; int*m: }; int a=2,b=3,c=5; struct st s[3]=({101,&a},{102,&c},{103,&B)}; main() {struct st*p; p=s; } 则以下表达式中值为5的是( )。

    A.(*p).m

    B.*(p+1)->m

    C.*(p++)->n

    D.(p++)(*m)


    正确答案:B

  • 第2题:

    若有以下说明和语句: struct st{int n;char*ch;} struct st a[3]={5,"abc"7,"def",9",ghk"),*p=a; 则值为6的表达式是______。

    A.p++->n

    B.p->n++

    C.(*p).n++

    D.#NAME?


    正确答案:D
    解析:根据结构变量的存储特点,p+l意味着增加地址值为结构体数组a的—个元素所占的字节数,即P++使p由a[0]指向a[1]起始地址。本题++p->n得到p指向的结构体变量中成员n的值使之加1。因为p指向数组a起始地址,p->n的值为5,再执行自加l运行,结果为6。

  • 第3题:

    有以下程序: #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
    略。

  • 第4题:

    以下对结构体类型变量td的定义中,错误的是 ______。

    A.typedef struct aa

    B.struct aa {int n; {int n; float m; float m; }AA; }td; AAtd; struct aa td;

    C.struct

    D.struct {int n; {int n; float m; float m; }aa; }td; struct aa td;


    正确答案:C
    解析:选项C中的aa本身就为结构体变量名,所以不能再用它来定义结构体变量,故此种定义方法是错误的。

  • 第5题:

    设有以下程序: struct st{int n;struct st *next;}; static struct st a[3]={5,&a[1],7,&

    设有以下程序: struct st{int n;struct st *next;}; static struct st a[3]={5,&a[1],7,&a[2],9,'\0'},*p; p=&a [0]; 下面选项中,表达式值为6的是______。

    A.p++->n

    B.p->n++

    C.(*p).n++

    D.++p->n


    正确答案:D

  • 第6题:

    以下对结构体类型变量td的定义中,错误的是______。

    A.typedef struct aa { int n; float m; }AA; AA td;

    B.struct aa { int n; float m; }td; struct aa td;

    C.struct { int n; float m; }aa;

    D.struct { int n; float m; }td; struct aa td;


    正确答案:C
    解析: 本题的考点是C语言结构体的定义和自定义类型typedef。对于选项A,首先用typedef将结构体自定义为AA,再用AA定义结构体变量td是正确的。对于选项B首先定义结构体类型aa,再用struct aa定义结构体变量td也是正确的。选项D直接用无名结构体定义结构体变量td也是正确的。而选项C中,首先用无名结构体定义了结构体变量aa,再用结构体变量aa去定义结构体变量td是完全错误的。因此正确选项是C。

  • 第7题:

    以下对结构体类型变量td的定义中,错误的是

    A.typedef struct aa { int n; float m; }AA; AA td;

    B.stmct aa{ int n;float m;}td;stmct aa td;

    C.struct { int n; float m; }aa; struct aa rd;

    D.struct{ int n;float m;}td;


    正确答案:C
    解析:选项A使用typedef语句给结构体aa定义了—个新的名称AA,因此使用AA直接声明结构体变量td是正确的。选项B中,前面一句是定义结构体同时声明了结构体变量td,后一句是使用结构体名sa声明结构体变量td,都是正确的写法。选项C的第1条语句和选项D使用的是无名结构体直接声明变量的语法,是正确的,但是选项C的第2条语句使用已经声明的结构体变量aa来声明td是错误的.故应该选择C。

  • 第8题:

    设有以下程序: struct st{int n;struct st*next;}; static struct st a[3]={5,&a[1],7,&a[2],9,'\0\},*p; p=&a[0];下面其值为6的表达式为______。

    A.p++->n

    B.p->n++

    C.(*p).n++

    D.++p->n


    正确答案:D
    解析:p指向数组的第1个元素,由于运算符->优先级高于运算符++,可知选项A应先取p->n的值5,再使p++指向下一个元素;选项B,先取p->n的值5作为表达式的值,再使p->n的值加1;选项C与选项B等价:选项D,先使p->n的值增1(即值为6),再以此值作为表达式的值,本题应选择选项D。

  • 第9题:

    若有以下定义和语句 struct a { int n,m;}; struct a st[3]={{1,20},{2,19},{3,21}}; struct a*p=st; 则以下错误的引用是

    A.(p++)->n;

    B.st[0].n;

    C.(*p).n;

    D.p=&st.m;


    正确答案:D
    解析:可以用以下三种形式来引用结构体变量中的成员:结构体变量名.成员名、指针变量名->成员名和(*指针变量名).成员名。选项D)中“&st.m”取的是结构体中成员的地址而不是结构的地址。

  • 第10题:

    设有C语句:struct T{int n;double x;}d,*p;,若要使p指向结构体变量中的成员n,正确的赋值语句是()

    • A、p=&d.n
    • B、*p=d.n
    • C、p=(struct T *)&d.n
    • D、p=(struct T *)d.n

    正确答案:C

  • 第11题:

    问答题
    若已定义   struct num{    int a;    int b;   float f;  } n={1,3,5.0};  struct num *p=&n;  则表达式p->b/n.a*++p->b的值是  ①  ,表达式(*p).a+p->f的值是  ②  。

    正确答案: ①12
    ②6.0
    解析: 暂无解析

  • 第12题:

    单选题
    有以下程序:#include 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,p->next->n);}程序运行后的输出结果是(  )。
    A

    2,3

    B

    2,4

    C

    3,4

    D

    4,6


    正确答案: C
    解析:
    序中定义了一个含有三个结构体node元素的数组,数组中元素的next指针分别指向后一个元素,最后一个元素的next指针置为NULL。p指针最初指向x[0],因此p->n=x[0].n=2;即第一次输出2,p->next指向x[1],则p->next->n=x[1].n=4。答案选择B选项。

  • 第13题:

    设有以下程序段:struct st{int n;struct st *next;};static struct st a[3]={5,&a[1],7,&a[2],9,'\0'),*p;p=&a[0];下面选项中,其值为6的表达式为______。

    A.P++->n

    B.p->n++

    C.(*p).n++

    D.++p->n


    正确答案:D

  • 第14题:

    以下对结构体类型变量的定义中,不正确的是( )

    A.typedef struct aa { int n; float m; }AA; AA tdl;

    B.#define AA struct aa AA{ int n; float m; }tdl;

    C.struct { int n; float m; }aa; struct aa tdl;

    D.struct { int n; float m, }tdl;


    正确答案:C

  • 第15题:

    设有如下定义:

    struct sk

    { int n;

    float x; } data, *p;

    若要使p指向data中的n域,正确的赋值语句是

    A.p=&data.n;

    B.*p=data.n;

    C.p=(struct sk*)&data.n;

    D.p=(struct sk*)data.n;


    正确答案:C
    解析:本题主要考查了结构体变量引用成员数据的方法,主要有以下几种:结构体变量名.成员名或结构体指针->成员名的方法来引用结构体成员。

  • 第16题:

    若有以下说明和语句: struct st{int n;char * ch;}; struct st a[3]={5,"abc",7,"def",9,"ghk"},*p=a; 则值为6的表达式是 ______。

    A.p++->n

    B.p->n++

    C.(*p).n++

    D.++p->n


    正确答案:D
    解析:根据结构变量的存储特点,p+1意味着增加地址值为结构体数组a的一个元素所占的字节数,即p++使p由a[0]指向a[1]起始地址。本题++p->n得到p指向的结构体变量中成员n的值使之加1。因为p指向数组a起始地址,p->n的值为5,再执行自加1运行,结果为6。

  • 第17题:

    设有以下语句 ( ) struct st {int n;struct st * next;}; static struct st a [3]={5,&a [1],7,&a[2],9,'\0'},*p; p=&a[0] 则表达式( )的值是6。

    A.p+ + ->n

    B.p->n + +

    C.(* P). n+ +

    D.+ +p - >n


    正确答案:D

  • 第18题:

    设有以下语句: struct st{int n;struct st*next;}; static struct st a[3]={5,&a[1],7,&a[2],9,'\0'},*p; p=&a[0];则表达式的值是6的为______。

    A.p++->n

    B.p->n++

    C.(*p).n++

    D.++p->n


    正确答案:D
    解析:本题主要考查结构体变量的定义和应用,以及运算符的优先级。

  • 第19题:

    有以下程序:struct S{int n;int a[20];};void f(struct S*P){int i,j,t;for(i=0;in-1;i++)fo

    有以下程序: struct S{int n;int a[20];}; void f(struct S*P) { int i,j,t; for(i=0;i<P->n-1;i++) for(j=j+1;j<P->n-1;j++) if(p->a[i]>p->a[j]) {t=P->a[i];p->a[i]=P->a[j];p->a[j]=t} } main() {int i;struct S s{10,{2,3,1,6,8,7,5,4,10,9}}; f(&s); for(i=0;i<s.n;i++)printf("%d",s.a[i]);} 程序运行后的输出结果是( )。

    A.3

    B.4

    C.5

    D.6


    正确答案:A
    解析:在主函数main()中定义了一个整型变量i和一个结构体变量s。f()函数中,定义了一个结构体指针类型的指针p,外层循环变量i表示数组的第i个元素,内层循环j表示数组的第i+1个元素,调用f()函数,通过指针变量p来引用结构体成员,并把它们进行从小到大排序,最后输出。

  • 第20题:

    以下程序的输出结果是 ( ) 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题:

    试题37

    有以下程序

    #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
    试题37分析
    p=x;p指向{2,x+1},p?n的值就是2,p?next使p往后移一位,指向{4,x+2},p?next?n的值为4。
    试题37答案
    B

  • 第22题:

    若已定义   struct num{    int a;    int b;   float f;  } n={1,3,5.0};  struct num *p=&n;  则表达式p->b/n.a*++p->b的值是  ①  ,表达式(*p).a+p->f的值是  ②  。


    正确答案: ①12
    ②6.0

  • 第23题:

    单选题
    若有以下程序段struct st{ int n; struct st*next;};struct st a[3] = {5,&a[1],7,&a[2],9,'\0'}, *p;p = &a[0];则以下选项中值为6的表达式是(  )。
    A

    p->n++

    B

    (*p).n

    C

    ++(p->n)

    D

    p->n


    正确答案: D
    解析:
    定义长度为3的struct数组a,a中每个元素的next指向下一个元素,实际上数组a的元素构成了一条单链表,指针p指向单链表的头部,p->n等于5,p->next指向a[1]。ABD三项返回的都是p->n的值5。答案选择C选项。