阅读下列程序段#include "stdio.h"typedef struct aa{ int a;struct aa *next; } M;void set(M *k,int i,int *b){ int j,d=0;for(j=1;j <i;j++){ k[j-1].next=&k[j];k[j-1].a=b[d++]; }k[j].a=b[d]; }main(){ M k[5],*p;int d[5]={23,34,45,56,67};set(k,5,d);p=k+1;printf("%d\n",t

题目

阅读下列程序段

#include "stdio.h"

typedef struct aa

{ int a;

struct aa *next; } M;

void set(M *k,int i,int *b)

{ int j,d=0;

for(j=1;j <i;j++)

{ k[j-1].next=&k[j];

k[j-1].a=b[d++]; }

k[j].a=b[d]; }

main()

{ M k[5],*p;

int d[5]={23,34,45,56,67};

set(k,5,d);

p=k+1;

printf("%d\n",table); }

则下面的表达式在table处,能使程序执行后,打印输出数据45的是

A.p->next->a

B.++p->a

C.(*p).a++

D.p++->a


相似考题
更多“阅读下列程序段 #include"stdio.h" typedefstructaa {inta; structaa*next;}M; voidset ”相关问题
  • 第1题:

    有如下程序段#include "stdio.h"typedef union{ long x[2]; int y[4]; char z[8];}atx;typedef struct aa { long x[2]; int y[4]; char z[8];} stx;main(){ printf("union=%d,struct aa=%d\n",sizeof(atx),sizeof(stx));}则程序执行后输出的结果是A.union=8,struct aa=8 B.union=8,struct aa=24C.union=24,struct aa=8 D.union=24,struct aa=24


    正确答案:B
    本题主要考查结构体和联合体所占的存储空间。
    在本题程序中,首先定义了一个联合体,联合体中具有三个成员,它们的类型分别为长整型、整型和字符型。按照C语言的规定,这三种类型的变量所占的存储空间分别为4个字节、2个字节和1个字节。但由于定义的成员都是数组,长整型数组的大小为2,那么需要的总空间为8个字节;整型数组的大小为4,那么需要的总空间为8个字节;字符数组的大小为8,需要的总空间也为8个字节,因此,可以看出三个成员需要的存储空间一样,都为8。根据联合体变量中的所有成员共享存储空间,联合变量的长度等于各成员中最长的长度的特点,我们可知,系统只需为该联合体变量准备8个字节存储空间即可。
    然后,定义了一个结构体,结构体中的成员类型及数组大小与联合体完全一致,即三个成员所需的空间都为8个字节。但是结构体与联合体不一样的是,结构体不能共享空间,一个结构体变量的总长度是各成员长度之和。因此,该结构体所需的存储空间为24个字节。
    综上所述,我们可以知道程序中的联合体和结构体所需要的存储空间分别为8个字节和24个字节。因此,用sizeof运算符计算这两者的存储空间,输出的结果应该为union=8,struct aa=24,本题正确答案选B。

  • 第2题:

    阅读下面语句,则程序的执行结果是______。include"stdio.h"main(){ inta=-1,b=1,k;if((++a<0)&

    阅读下面语句,则程序的执行结果是______。

    include"stdio.h"

    main()

    { inta=-1,b=1,k;

    if((++a<0)&&! (b--<=0))

    printf("%d,%d\n",a,b);

    else printf("%d,%d\n",b,a);}


    正确答案:
    与运算两边的语句必须同时为真时,结果才为真。当执行完if(++a0)&&!(b--=0))时,a,b的值已经发生了变化。

  • 第3题:

    阅读以下程序,并给出程序的输出结果。 #include <stdio.h> int main() { int a=43; int b = 148; printf("%d",a%b); return 0; }


    abstract;getName();extends;getInfo()

  • 第4题:

    阅读下列程序段,则程序的输出结果为 #include"stdio.h" #define M(X,Y)(X)*(Y) #define N(X,Y)(X)/(Y) main() { int a=5,b=6,c=8,k; k=N(M(a,b),c); printf("%d\n",k);}

    A.3

    B.5

    C.6

    D.8


    正确答案:A
    解析:带参数的宏定义命令行形式如下:#define宏名(形参表)替换文本。首先进行M的宏替换,之后再进行N的宏替换,替换后的表达式为(a)*(b)/(c)。

  • 第5题:

    阅读以下程序,并给出程序的输出结果。 #include <stdio.h> int main() { int a=43; int b = 148; printf("%d",a&b); return 0; }


    abstract;getName();extends;getInfo()